it-swarm.com.de

Bedeutung von Tilde in Linux bash (nicht Homeverzeichnis)

Zunächst einmal weiß ich, dass ~/ das Heimatverzeichnis ist. CDing zu ~ oder ~/ bringt mich in das Home-Verzeichnis.

cd ~X führt mich jedoch an einen besonderen Ort, an dem X alles zu sein scheint.

Wenn ich in "bash" "cd ~" drücke und "Tab" drücke, werden einige ~X-Optionen angezeigt, beispielsweise ~mail und ~postgres und ~ssh. Wenn Sie zu diesen Ordnern gehen und eine pwd ausführen, wird mir angezeigt, dass sich diese Ordner nicht im Basisverzeichnis befinden. Sie sind überall.

Sie sind keine Aliase. Ich habe nachgesehen. Sie sind keine env.-Variablen, oder sie benötigen einen $.

Was ist das Setzen dieser Links und wo finde ich, wo diese gesetzt werden?

95
jbu

Es ist eine Bash-Funktion mit dem Namen " Tilde Expansion ". Es ist eine Funktion der Shell, nicht des Betriebssystems. Sie werden beispielsweise mit csh ein anderes Verhalten erhalten.

Um Ihre Frage zu beantworten, woher die Informationen stammen: Ihr Heimatverzeichnis stammt von der Variablen $HOME (egal, was Sie dort ablegen), während die Häuser anderer Benutzer in Echtzeit mit getpwent() abgerufen werden. Diese Funktion wird normalerweise von NSS gesteuert. Standardmäßig werden Werte aus /etc/passwd abgerufen. Sie können jedoch so konfiguriert werden, dass die Informationen mit einer beliebigen gewünschten Quelle abgerufen werden, z. B. NIS, LDAP oder einer SQL-Datenbank.

Die Erweiterung von Tilde ist mehr als nur ein Home-Verzeichnis. Hier ist eine Zusammenfassung:

~              $HOME
~fred          (freds home dir)

~+             $PWD   (same effect as ./)
~-             $OLDPWD (your previous directory)
~1             `dirs +1`
~2             `dirs +2`
~-1            `dirs -1`

dirs und ~1, ~-1 usw. werden in Verbindung mit pushd und popd verwendet.

64
tylerl

Dies sind die Heimatverzeichnisse der Benutzer. Versuchen Sie es beispielsweise mit cd ~(your username).

33
Paul Betts

Sind sie die Heimatverzeichnisse der Benutzer in /etc/passwd? Dienste wie Postgres, Sendmail, Apache usw. erstellen Systembenutzer, die wie normale Benutzer über private Verzeichnisse verfügen.

16
Sean Bright

das sind Benutzer, überprüfen Sie Ihre/etc/passwd

cd ~ benutzername

bringt Sie zu diesem Benutzerverzeichnis nach Hause

13
Joakim Elofsson

Auf meiner Maschine, aufgrund der Art und Weise, wie ich die Dinge eingerichtet habe:

cd ~             # /work1/jleffler
cd ~jleffler     # /u/jleffler

Beim ersten wird auf den Wert der Umgebungsvariablen $HOME; Ich habe meinen $HOME absichtlich auf ein lokales Dateisystem anstelle eines NFS-Dateisystems eingestellt. Die zweite liest aus der Kennwortdatei (ungefähr; NIS macht etwas komplizierter) und stellt fest, dass die Kennwortdatei angibt, dass mein Heimatverzeichnis /u/jleffler ist, und wechselt in dieses Verzeichnis.

Das Ärgerliche ist, dass sich die meisten Software wie oben verhalten (und die POSIX-Spezifikation für die Shell erfordert dieses Verhalten). Ich verwende eine Software (und ich habe keine große Auswahl darüber), die die Informationen aus der Kennwortdatei als aktuellen Wert von $ HOME behandelt, was falsch ist.

Wendet man dies auf die Frage an - wie andere darauf hingewiesen haben - wechselt 'cd ~x' in das Home-Verzeichnis des Benutzers 'x'. Im Allgemeinen bedeutet ~x bei jeder Erweiterung der Tilde das Home-Verzeichnis des Benutzers 'x' ein Fehler, wenn der Benutzer 'x' nicht existiert).


Es kann erwähnenswert sein, dass:

cd ~-       # Change to previous directory ($OLDPWD)
cd ~+       # Change to current directory ($PWD)

Ich kann keine sofortige Verwendung für '~+' finden, es sei denn, Sie machen ein paar seltsame Sachen, indem Sie symbolische Links in dem Pfad verschieben, der zum aktuellen Verzeichnis führt.

Sie können auch tun:

cd -

Das bedeutet dasselbe wie ~-.

9
5
TheBonsai

Wenn Sie autofs verwenden, kommt die Erweiterung möglicherweise von /etc/auto.home (oder einer ähnlichen Version für Ihre Distribution). Zum Beispiel sieht mein /etc/auto.master so aus:

/home2 auto.home --timeout 60

und /etc/auto.home sieht so aus:

mgalgs -rw,noquota,intr space:/space/mgalgs
1
mgalgs

Möglicherweise sehen Sie OpenDirectory-/ActiveDirectory-/LDAP-Benutzer, die in Ihrem Ausgangsverzeichnis "automounted" sind.

In * nix wird ~ in Ihr Ausgangsverzeichnis aufgelöst. Ebenso wird ~X in 'Benutzer X' aufgelöst.

Ähnlich wie bei der automatischen Bereitstellung von Verzeichnissen wird OpenDirectory/ActiveDirectory/LDAP in größeren Umgebungen/Unternehmensumgebungen zum automatischen Bereitstellen von Benutzerverzeichnissen verwendet. Bei diesen Benutzern kann es sich um tatsächliche Personen handeln, oder es handelt sich um Computerkonten, die zur Bereitstellung verschiedener Funktionen erstellt wurden.

Wenn Sie tippen ~Tab Sie sehen eine Liste der Benutzer auf Ihrem Computer.

0
JS.