2009-06-15 5 views
86

Zunächst einmal weiß ich, dass ~/ das Home-Verzeichnis ist. CDing zu ~ oder ~/ bringt mich zum Home-Verzeichnis.Bedeutung von Tilde in Linux Bash (nicht Home-Verzeichnis)

Allerdings bringt mich cd ~X an einen besonderen Ort, wo X scheint nichts zu sein.

In bash, wenn ich "cd ~" Hit und Hit Registerkarte zeigt es eine Reihe von möglichen ~X Optionen wie ~mail und ~postgres und ~ssh. In diese Ordner gehen und eine pwd tun zeigt mir, dass diese Ordner nicht im Home-Verzeichnis sind; Sie sind überall.

Sie sind keine Aliase. Ich habe es überprüft. Sie sind nicht env. Variablen, sonst würden sie eine $ benötigen.

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

+0

~ X gibt einfach das Literal "~ X" zurück, aber ~ gibt $ HOME zurück und ~ + gibt $ PWD zurück - sie sind nicht speziell, außer dass sie Shell-Variablen abrufen. d.h. sie speichern die Werte nicht oder führen einen Befehl aus, um sie nachzuschlagen. Sie sind bereits definiert. Hast du versucht ~ -? Ich denke nicht an eine Verwendung dafür, aber wieder, es gibt eine Shell-Variable $ OLDPWD – SDsolar

Antwort

16

Sind sie die Home-Verzeichnisse der Benutzer in /etc/passwd? Dienste wie postgres, sendmail, apache usw. erstellen Systembenutzer, die wie normale Benutzer über private Verzeichnisse verfügen.

+2

In der Tat sind sie ~ Benutzername ist das Home-Verzeichnis des angegebenen Benutzers –

33

Das sind die Home-Verzeichnisse der Benutzer. Versuchen Sie zum Beispiel cd ~(your username).

+1

Sie sind nicht Symlinks, Dienstkonten haben keine Home-Verzeichnisse unter/home –

+0

Beste Antwort in meinem Fall. In meinem speziellen Fall war es auch das Root-Verzeichnis/der Ordner, nicht der Home-Ordner. – William

13

diese sind Benutzer, überprüfen Sie die Datei/etc/passwd

cd ~ username

bringt Sie zu, dass die Nutzer Hauptdir

+0

FTW. Upvote. TNX, um das zu klären. Ich frage mich, wie viele Zyklen und vielleicht sogar eine Unterschale in diesem Fall involviert sind.Stellen Sie sich vor, wenn Ihr System 3K-Benutzer hat, wie bei einem kleinen ISP. Huch. – SDsolar

9

Auf meinem Rechner, wegen der Art, wie ich die Dinge eingerichtet haben, tun:

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

die erste Aufmerksamkeit auf den Wert der Umgebungsvariablen $HOME zahlt; Ich setze meine $HOME absichtlich auf ein lokales Dateisystem statt auf ein NFS-eingehängtes Dateisystem. Die zweite liest aus der Passwort-Datei (ungefähr; NIS kompliziert die Dinge ein bisschen) und findet, dass die Passwort-Datei sagt mein Heimatverzeichnis ist /u/jleffler und ändert sich in dieses Verzeichnis.

Die nervige Sache ist, dass die meisten Software verhält sich wie oben (und die POSIX-Spezifikation für die Shell erfordert dieses Verhalten). Ich benutze eine Software (und ich habe nicht viel Wahl, um sie zu verwenden), die die Informationen aus der Passwortdatei als den aktuellen Wert von $ HOME behandelt, was falsch ist.

diese Anwendung auf die Frage - wie andere haben darauf hingewiesen, ‚cd ~x‘ auf das Home-Verzeichnis des Benutzers x 'und, allgemeiner, wann immer Tilde-Erweiterung erfolgt, ~x bedeutet das Home-Verzeichnis des Benutzers x' geht (und es ist ein Fehler, wenn der Benutzer 'x' nicht existiert).


Es könnte sein, erwähnenswert, dass:

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

ich nicht sofort eine Verwendung für ‚~+‘ finden kann, es sei denn, Sie haben einige seltsame Dinge mit symbolischen Links in dem Pfad, der zum aktuellen bewegenden Verzeichnis.

Sie können auch tun:

cd - 

Das ist die gleiche wie ~- bedeutet.

+1

Über 'cd ~ +': Sie könnten es verwenden, um zu überprüfen, ob ein Verzeichnis, in dem Sie sich gerade befinden, noch existiert - auch wenn es eine ziemlich unorthodoxe Methode ist. – professorsloth

56

Es ist ein Bash Funktion namens "tilde expansion". Es ist eine Funktion der Shell, nicht das Betriebssystem. Mit csh erhalten Sie beispielsweise ein anderes Verhalten.

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

Tilde-Erweiterung ist mehr als Home-Verzeichnis-Lookup. Hier 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.

+0

als eine Anmerkung [Tag: Fisch] unterstützt keine von ihnen außer der einfachen Tilde (~) – Chinggis6

+0

, warum sie mit "~ +" kam? scheint eher nutzlos. – cregox

+1

~ + ist ungefähr das gleiche wie. Um jedoch etwas wie ./file zu verwenden, muss es zum Dateisystem gehen und herausfinden wo. befindet sich - es dauert ein paar Zyklen. Mit ~ + speichern Sie die Arbeit, indem Sie einfach den Inhalt der Shell-Variablen $ PWD zurückgeben, die bereits beim Durchqueren des Dateisystems definiert wurde. – SDsolar

1

Wenn Sie autofs verwenden, dann könnte die Erweiterung tatsächlich von /etc/auto.home kommen (oder ähnlich für Ihre Distribution). Zum Beispiel sieht mein /etc/auto.master wie:

/home2 auto.home --timeout 60 

und /etc/auto.home wie folgt aussieht:

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

Es ist möglich, dass Sie Open/ActiveDirectory-/LDAP-Benutzer "gemountet" in Ihrem Home-Verzeichnis sind zu sehen.

In * nix, ~ wird in Ihr Home-Verzeichnis aufgelöst. Ebenso wird ~X zu 'Benutzer X' aufgelöst.

Ähnlich wie automount für Verzeichnisse wird OpenDirectory/ActiveDirectory/LDAP in größeren Umgebungen verwendet, um Benutzerverzeichnisse automatisch zu mounten. Diese Benutzer können tatsächliche Personen sein, oder sie können Computerkonten sein, die erstellt wurden, um verschiedene Funktionen bereitzustellen.

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