Hallo zusammen.
Ich hoffe die Überschrift ist nicht zu verwirrend. Ich habe eine Frage zum Verhalten des xterm bei der Navigation durch SymLink-Verzeichnisse.
Ich habe eine Verzeichnisstruktur "~/Ordner1/Ordner2/Ordner3" und einen Link auf den 3. Ordner "~/Link -> ~/Ordner1/Ordner2/Ordner3".
Wenn ich mich mit "cd ~/Link" in den Ordner begebe und mit "find .." alle Dateien in ~/ ausgeben lassen möchte, bezieht sich ../ immer auf den Ordner2.
Wechsle ich aber mit cd .. in das höhere Verzeichnis, bin ich wieder in ~/.
Ich bekomme es nicht hin, mit find über den Symlink zurückzugehen. Hat jemand eine Idee, was ich falsch mache?
Parent-Ordner eines SymLinks
Parent-Ordner eines SymLinks
Zuletzt geändert von Lalle75 am 19.12.2021 15:09:45, insgesamt 3-mal geändert.
Gruß,
Der Lalle
Der Lalle
Re: Parent-Ordner eines SymLinks
Du machst meiner Meinung nach gar nichts falsch - das funktioniert so einfach nicht. Praktisch (pwd) stehst du nach "cd (-L) Link" vielleich in ~/Link, aber virtuell stehst du in Ordner3. Wenn du jetzt in find (oder auch durch ls ..) auf diesen Startpunkt Bezug nimmst, dann immer auf das virtuelle Verzeichnis Ordner3.Lalle75 hat geschrieben:17.12.2021 16:12:21Ich bekomme es nicht hin, mit find über den Symlink zurückzugehen. Hat jemand eine Idee, was ich falsch mache?
Re: Parent-Ordner eines SymLinks
Ich habe mir erlaubt den Bezug zu `find' im Titel zu entfernen, da der Effekt nichts mit irgendeinem Programm zu tun hat, sondern generell gilt. Es ist das Gleiche wenn du `ls' verwendest. `cd' scheint das einzige Programm zu sein, das sich anders verhaelt.
Eine Erklaerung: Die anderen Programme behandeln `..' nicht besonders, sondern sie schauen im Verzeichnis nach der Datei namens `..', die ein vom Betriebssystem automatisch verwalteter Hardlink auf das *physische* Parentverzeichnis ist. Diesem Link wird ganz einfach nachgegangen. Das ist fuer dich zwar ueberraschend, aber es ist technisch gesehen klar.
Das Shell-Builtin `cd' nun hat ein bisschen Magie eingebaut und macht es nicht so wie eben beschrieben. Man kann ihm allerdings sagen, dass es sich auch so verhalten soll, wenn man `cd -P' verwendet. Siehe:
Ja, das geht indem du nicht `..' verwendest, sondern von `$PWD' das letzte Element abschneidest:
Anhand der Inodes kannst du sehen wo sich `..' befindet.
Die letzten beiden Befehle sind Alternativen, je nachdem welche Form dir lieber ist.
Eine Erklaerung: Die anderen Programme behandeln `..' nicht besonders, sondern sie schauen im Verzeichnis nach der Datei namens `..', die ein vom Betriebssystem automatisch verwalteter Hardlink auf das *physische* Parentverzeichnis ist. Diesem Link wird ganz einfach nachgegangen. Das ist fuer dich zwar ueberraschend, aber es ist technisch gesehen klar.
Das Shell-Builtin `cd' nun hat ein bisschen Magie eingebaut und macht es nicht so wie eben beschrieben. Man kann ihm allerdings sagen, dass es sich auch so verhalten soll, wenn man `cd -P' verwendet. Siehe:
Die Frage -- d.h. vermutlich deine Frage -- ist nun, ob man die anderen Programme dazu bringen kann, sich auch so zu verhalten wie `cd' das macht.Manpage bash(1) hat geschrieben: cd [-L|[-P [-e]]] [dir]
Change the current directory to dir. [...]
The -P option says
to use the physical directory structure instead of
following symbolic links (see also the -P option
to the set builtin command); the -L option forces
symbolic links to be followed. [...]
[...]
pwd [-LP]
Print the absolute pathname of the current working
directory. The pathname printed contains no sym‐
bolic links if the -P option is supplied or the -o
physical option to the set builtin command is
enabled. If the -L option is used, the pathname
printed may contain symbolic links. The return
status is 0 unless an error occurs while reading
the name of the current directory or an invalid
option is supplied.
[...]
set [--abefhkmnptuvxBCEHPT] [-o option-name] [arg ...]
set [+abefhkmnptuvxBCEHPT] [+o option-name] [arg ...]
[...]
-P If set, the shell does not follow symbolic
links when executing commands such as cd
that change the current working directory.
It uses the physical directory structure
instead. By default, bash follows the
logical chain of directories when perform‐
ing commands which change the current
directory.
Ja, das geht indem du nicht `..' verwendest, sondern von `$PWD' das letzte Element abschneidest:
Code: Alles auswählen
:-Q ls -ild1 /tmp /tmp/a /tmp/a/b /tmp/a/b/c /tmp/d
131114 drwxrwxrwt 6 root root 4096 Dec 17 17:02 /tmp/
204909 drwxr-xr-x 3 meillo meillo 4096 Dec 17 16:48 /tmp/a/
204910 drwxr-xr-x 3 meillo meillo 4096 Dec 17 16:48 /tmp/a/b/
204911 drwxr-xr-x 2 meillo meillo 4096 Dec 17 16:48 /tmp/a/b/c/
156513 lrwxrwxrwx 1 meillo meillo 5 Dec 17 16:48 /tmp/d -> a/b/c/
:-Q cd /tmp/d
:-Q pwd
/tmp/d
:-Q ls -id ..
204910 ../
:-Q echo "$PWD"
/tmp/d
:-Q echo "${PWD%/*}"
/tmp
:-Q ls -id "${PWD%/*}" # Variante 1
131114 /tmp/
:-Q ls -id "$(dirname "$PWD")" # Variante 2
131114 /tmp/
Die letzten beiden Befehle sind Alternativen, je nachdem welche Form dir lieber ist.
Use ed once in a while!
Re: Parent-Ordner eines SymLinks
Ich hatte schon vermutet, daß .. auf den Hardlink zurückverweist. Dann muß ich mir wohl in Zukunft ein wenig mehr Text in die Batchdateien einbauen.
Besten Dank.
Besten Dank.
Gruß,
Der Lalle
Der Lalle
Re: Parent-Ordner eines SymLinks
Aber für .. hat Meillo doch einen schönen Trick für den Symlink gzeigt:Lalle75 hat geschrieben:17.12.2021 17:19:01Ich hatte schon vermutet, daß .. auf den Hardlink zurückverweist. Dann muß ich mir wohl in Zukunft ein wenig mehr Text in die Batchdateien einbauen.
Code: Alles auswählen
find "${PWD%/*}" ...
Re: Parent-Ordner eines SymLinks
Ich habe die Überschrift noch mal zurück gesetzt. Das Problem ist nicht gelöst.
Wenn ich mit $PWD aus einer Batchdatei heraus aufrufe, welche ich im Dateiexplorer (nautilus) starte, dann zeigt $PWD immer den HardLink des Verzeichnisses, aber nicht den Soft-Pfad, der im Dateiexplorer angezeigt wird.
Wenn ich mit $PWD aus einer Batchdatei heraus aufrufe, welche ich im Dateiexplorer (nautilus) starte, dann zeigt $PWD immer den HardLink des Verzeichnisses, aber nicht den Soft-Pfad, der im Dateiexplorer angezeigt wird.
Gruß,
Der Lalle
Der Lalle
Re: Parent-Ordner eines SymLinks
Da es thematisch passt und fuer diejenigen, die deutlich tiefer in das Thema einsteigen wollen bzw. Hintergruende erfahren wollen: In den letzten Tagen gab es einen Thread auf der TUHS-Mailingliste, der dieses Thema auch gestreift hat.
Zusammenfassend kann man sagen, dass es schoen gewesen waere, wenn Unix dieses Problem kernelseitig geloest haette. Da dies nicht der Fall ist, haben wir den vorhandenen Zustand.
Hier wird nochmal beschrieben, dass nur die Shell das manuell nachbearbeitet, um den Anschein zu erwecken: https://minnie.tuhs.org/pipermail/tuhs/ ... 24968.html
Der ganze Thread startet hier: https://minnie.tuhs.org/pipermail/tuhs/ ... 24904.html und geht hier weiter: https://minnie.tuhs.org/pipermail/tuhs/ ... 24960.html
Hier fordert Rob Pike dazu auf, in Unix/Linux dieses Problem zu loesen. Verlinkt ist ein Paper, in dem das Thema in Plan 9 beleuchtet wird. https://minnie.tuhs.org/pipermail/tuhs/ ... 24953.html Der Linux-Kernel-Entwickler Ted T'so ist auch mit von der Partie.
Es ist durchaus ein interessanter Thread ... der urspruenglich gestartet ist bei der Frage, warum man in sehr alten Unix-Versionen Verzeichnisse nicht verschieben/umbenennen kann. Auch ueber die technische Herausforderung, dies zu tun, hat von uns vermutlich kaum einer mal nachgedacht.
Zusammenfassend kann man sagen, dass es schoen gewesen waere, wenn Unix dieses Problem kernelseitig geloest haette. Da dies nicht der Fall ist, haben wir den vorhandenen Zustand.
Hier wird nochmal beschrieben, dass nur die Shell das manuell nachbearbeitet, um den Anschein zu erwecken: https://minnie.tuhs.org/pipermail/tuhs/ ... 24968.html
Der ganze Thread startet hier: https://minnie.tuhs.org/pipermail/tuhs/ ... 24904.html und geht hier weiter: https://minnie.tuhs.org/pipermail/tuhs/ ... 24960.html
Hier fordert Rob Pike dazu auf, in Unix/Linux dieses Problem zu loesen. Verlinkt ist ein Paper, in dem das Thema in Plan 9 beleuchtet wird. https://minnie.tuhs.org/pipermail/tuhs/ ... 24953.html Der Linux-Kernel-Entwickler Ted T'so ist auch mit von der Partie.
Es ist durchaus ein interessanter Thread ... der urspruenglich gestartet ist bei der Frage, warum man in sehr alten Unix-Versionen Verzeichnisse nicht verschieben/umbenennen kann. Auch ueber die technische Herausforderung, dies zu tun, hat von uns vermutlich kaum einer mal nachgedacht.
Use ed once in a while!