Zunächst einmal weiß ich, dass dies ~/
das Home-Verzeichnis ist. CDing zu ~
oder ~/
bringt mich in das Home-Verzeichnis.
Allerdings cd ~X
nimmt mich zu einem besonderen Ort, wo X
alles zu sein scheint.
Wenn ich in Bash " cd ~
" drücke und die Tabulatortaste drücke, werden eine Reihe möglicher ~X
Optionen wie ~mail
und ~postgres
und angezeigt ~ssh
. Wenn ich zu diesen Ordnern gehe und a mache, pwd
sehe ich, dass sich diese Ordner nicht im Ausgangsverzeichnis befinden. Sie sind überall.
Sie sind keine Aliase. Ich habe nachgesehen. Sie sind keine env.
Variablen, sonst würden sie eine benötigen $
.
Was setzt diese Links und wo finde ich, wo diese gesetzt werden?
Antworten:
Es ist eine Bash-Funktion namens " Tilde-Erweiterung ". Es ist eine Funktion der Shell, nicht des Betriebssystems. Sie werden zum Beispiel mit csh ein anderes Verhalten bekommen.
Um Ihre Frage zu beantworten, woher die Informationen stammen: Ihr Home-Verzeichnis stammt aus der Variablen
$HOME
(unabhängig davon, was Sie dort speichern), während die Homes anderer Benutzer in Echtzeit mithilfe von abgerufen werdengetpwent()
. Diese Funktion wird normalerweise von NSS gesteuert . Daher werden standardmäßig Werte herausgezogen/etc/passwd
, obwohl sie so konfiguriert werden können, dass die Informationen unter Verwendung einer beliebigen Quelle abgerufen werden, z. B. NIS, LDAP oder eine SQL-Datenbank.Die Tilde-Erweiterung ist mehr als die Suche nach Basisverzeichnissen. Hier ist eine Zusammenfassung:
dirs
und~1
,~-1
etc., werden in Verbindung mitpushd
undpopd
.quelle
~+
? scheint eher nutzlos.Dies sind die Home-Verzeichnisse der Benutzer. Versuchen Sie es
cd ~(your username)
zum Beispiel.quelle
Sind sie die Home-Verzeichnisse der Benutzer in
/etc/passwd
? Dienste wie Postgres, Sendmail, Apache usw. erstellen Systembenutzer mit Home-Verzeichnissen wie normale Benutzer.quelle
Das sind Benutzer. Überprüfen Sie Ihre
/etc/passwd
.cd ~username
führt Sie zum Home-Verzeichnis dieses Benutzers.quelle
Auf meinem Computer habe ich aufgrund der Art und Weise, wie ich Dinge eingerichtet habe, Folgendes getan:
Der erste achtet auf den Wert der Umgebungsvariablen
$HOME
; Ich habe mein bewusst$HOME
auf ein lokales Dateisystem anstatt auf ein NFS-gemountetes Dateisystem eingestellt. Der zweite liest aus der Kennwortdatei (ungefähr; NIS macht die Sache etwas komplizierter) und stellt fest, dass in der Kennwortdatei angegeben ist, dass sich mein Ausgangsverzeichnis befindet,/u/jleffler
und wechselt in dieses Verzeichnis.Das ärgerliche ist, dass sich die meiste Software wie oben verhält (und die POSIX-Spezifikation für die Shell erfordert dieses Verhalten). Ich verwende eine Software (und ich habe keine große Auswahl), die die Informationen aus der Kennwortdatei als den aktuellen Wert von $ HOME behandelt, was falsch ist.
Dies auf die Frage anwenden - wie andere bereits betont haben,
cd ~x
geht ' ' in das Ausgangsverzeichnis des Benutzers 'x' und allgemeiner, wenn eine Tilde-Erweiterung durchgeführt wird,~x
das Ausgangsverzeichnis des Benutzers 'x' (und es ist ein Fehler) wenn Benutzer 'x' nicht existiert).Es könnte erwähnenswert sein, dass:
Ich kann nicht sofort eine Verwendung für '
~+
' finden, es sei denn, Sie machen einige seltsame Dinge mit dem Verschieben von Symlinks im Pfad, der zum aktuellen Verzeichnis führt.Sie können auch tun:
Das heißt das gleiche wie
~-
.quelle
cd ~+
: Sie können damit möglicherweise überprüfen, ob ein Verzeichnis, in dem Sie sich gerade befinden, noch vorhanden ist - auch wenn dies eine ziemlich unorthodoxe Methode ist.Tilde-Erweiterung in Bash:
http://bash-hackers.org/wiki/doku.php/syntax/expansion/tilde
quelle
Wenn Sie verwenden, stammt
autofs
die Erweiterung möglicherweise tatsächlich von/etc/auto.home
(oder ähnlich für Ihre Distribution). Zum Beispiel/etc/auto.master
sieht mein so aus:und
/etc/auto.home
sieht aus wie:quelle
Möglicherweise werden OpenDirectory / ActiveDirectory / LDAP-Benutzer in Ihrem Home-Verzeichnis "automatisch bereitgestellt".
In * nix
~
wird in Ihr Home-Verzeichnis aufgelöst. Ebenso~X
wird zu 'Benutzer X' aufgelöst.Ähnlich wie bei der automatischen Bereitstellung von Verzeichnissen wird OpenDirectory / ActiveDirectory / LDAP in größeren Unternehmensumgebungen verwendet, um Benutzerverzeichnisse automatisch bereitzustellen. Diese Benutzer können tatsächliche Personen sein oder es können Maschinenkonten sein, die erstellt wurden, um verschiedene Funktionen bereitzustellen.
Wenn Sie eingeben ~Tab, wird eine Liste der Benutzer auf Ihrem Computer angezeigt.
quelle