Linux-Symlinks zu Verzeichnissen

534
prl77

Ich habe in meinem Home-Ordner einen Symlink zu einem anderen Verzeichnis erstellt:

$ pwd /home/user1 $ ln -s /usr/local/dir/ shortcut $ ls -l ................................... shortcut -> /usr/local/dir/ $ cd shortcut $ pwd /home/user1/shortcut 

Ich lande in diesem Verzeichnis, damit ich alle Dateien darin sehen kann, aber das pwdist verwirrend und könnte Probleme verursachen. Gibt es einen besseren Weg, damit es eine Abkürzung darstellt und tatsächlich zeigt, /usr/local/dirwenn ich gehe, cd shortcutanstatt den neuen Pfad anzuzeigen?

0
Siteübergreifendes Duplikat von [pwd ohne Symlinks] (// unix.stackexchange.com/q/6800/80216) und [merkwürdiger Unterschied zwischen pwd und /bin/pwd-)(//unix.stackexchange.com/q/145479/ 80216). G-Man vor 7 Jahren 0
Ich stimme dafür, diese Frage als Off-Topic zu schließen, da sie bereits unter [Unix & Linux Stack Exchange] (// unix.stackexchange.com) beantwortet wurde. G-Man vor 7 Jahren 1
@ G-Man, ist dies der Fall, wenn die Frage an anderer Stelle zu einer ähnlichen Frage beantwortet wird oder das OP dieselbe Frage stellt und eine Antwort auf einer anderen Website erhält? Die Links im ersten Kommentar beziehen sich auf ältere Fragen. Der Link im schließenden Kommentar bezieht sich auf die Site und nicht auf einen bestimmten Beitrag, und das OP ist dort kein Benutzer. Allein das Vorhandensein einer Antwort auf einer anderen Website würde hier nicht zum Thema werden. fixer1234 vor 7 Jahren 0

2 Antworten auf die Frage

1
wayofthepie

Beide cdund pwdhaben Fahnen die physische Verzeichnisstruktur zu verwenden.

CD

$ cd --help ... -P use the physical directory structure without following symbolic links: resolve symbolic links in DIR before processing instances of `..' ... 

z.B

$ cd /var/tmp  $ ln -s /home/user test  $ cd -P test $ pwd /home/user 

Oben verwenden wir cd -Pdie physische Verzeichnisstruktur, so dass pwdwir jetzt den physischen Pfad angeben.

pwd

$ pwd ... -P print the physical directory, without any symbolic links ... 

z.B

$ cd /var/tmp $ ln -s /home/user test  $ cd test $ pwd /var/tmp/test $ pwd -P /home/user 

Oben würden wir uns wie üblich cdin das Verzeichnis begeben, also pwdgibt es den symbolischen Pfad. Mit pwd -Pwird der physische Pfad angegeben.

Global in bash setzen

Wenn Sie verwenden bash, können Sie sagen, dass symbolische Links vollständig ignoriert werden sollen. Verwenden Sie einfach die physische Verzeichnisstruktur, indem Sie ausführen set -P(Abkürzung für set -o physical, siehe die `bash-Manpage '). Dies ist wahrscheinlich auch bei anderen Schalen möglich.

Dies wird bei jeder Abmeldung auf den Standardwert zurückgesetzt. Wenn Sie also den Befehl ausführen, erhalten Sie die gewünschten Ergebnisse. Wenn Sie sich jedoch abmelden und zurücksetzen, wird der Standardwert wiederhergestellt. Gibt es eine Möglichkeit, sich an das "set -P" zu erinnern? prl77 vor 7 Jahren 0
Ach schlechte Formulierung meinerseits, die nur pro Schale bestehen bleibt. Sie können dies in `~ / .bashrc` einstellen, dies wird für jede interaktive Shell geladen. Um sicherzustellen, dass es für ssh usw. geladen ist, können Sie es in` ~ / .bash_profile` platzieren oder `source ~ / ausführen. .bashrc` von `~ / .bash_profile` - kann je nach Distribution bereits bezogen sein. wayofthepie vor 7 Jahren 1
0
Ipor Sircer

Verwenden Sie $ CDPATH

$ CDPATH=/usr/local $ cd dir $ pwd /usr/local/dir 
ISTM, dass dies eher eine Umgehung als eine echte Antwort ist und als Kommentar möglicherweise besser ist. G-Man vor 7 Jahren 0
Genau. Die Antwort von wayofthepie oben ist genau richtig und worauf ich gehofft hatte. Einfach, global, eingebaut. Kein negativer Aspekt. prl77 vor 7 Jahren 0