Der Wert, für den verwendet ~
wird, wird aus dem Wert bestimmt, den Sie aus der Verwaltungsdatenbank ( getent passwd
) (normalerweise in der /etc/passwd
Datei) für das dort definierte Basisverzeichnis jedes Benutzers erhalten.
$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash
Die sechste Spalte in dieser Datei enthält den Wert, der verwendet wird, wenn jemand etwas eingibt cd ~
.
nsswitch
Mit dem folgenden Befehl können Sie sehen, was ein System für das Basisverzeichnis des Benutzers verwenden würde getent passwd
:
$ getent passwd
root:x:0:0:root:/root:/bin/bash
sam:x:500:500:Sam Mingolelli:/home/sam:/bin/bash
tracy:x:501:501::/home/tracy:/bin/bash
Die "Datenbank", die diese bereitstellt, wird über den in definierten System-Resolver gesteuert /etc/nsswitch.conf
.
$ grep passwd /etc/nsswitch.conf
#passwd: db files nisplus nis
passwd: files
Dateien oben bedeuten /etc/passwd
, aber die "Datenbank" könnte zum Beispiel von LDAP, NIS oder anderen Standorten über das Netzwerk stammen.
Umzug / Neudefinition?
Die Durchführung dieser Operation ist nach dem Erstellen der Konten etwas kompliziert. Wenn Sie Konten von Grund auf neu erstellen, ist es trivial, den Speicherort des Basisverzeichnisses eines Benutzers neu zu definieren. Wenn Sie den useradd
Befehl ausführen, können Sie den Speicherort angeben, der für das Basisverzeichnis eines Benutzers verwendet werden soll.
Beispiel
$ useradd -d /ext1/acheong ...
Auszug aus der Manpage
-d, --home HOME_DIR
The new user will be created using HOME_DIR as the value for the user’s
login directory. The default is to append the LOGIN name to BASE_DIR and
use that as the login directory name. The directory HOME_DIR does not
have to exist but will not be created if it is missing.
Für bestehende Konten?
Dies wird eher zu einem chirurgischen Eingriff, da der Pfad des Basisverzeichnisses eines Benutzers häufig statisch in Konfigurationsdateien eingeschlossen wird, was ihn schwieriger macht.
Beispiel
$ grep home /home/sam/.*
/home/sam/.gtkrc-1.2-gnome2:include "/home/sam/.gtkrc.mine"
Diese müssen entweder repariert werden oder Sie müssen einen Link /home/sam
zum neuen Speicherort angeben /ext1/sam
.
Verschieben, wenn "Datenbank" nicht ist /etc/passwd
Wenn das System die Basisverzeichnisse von LDAP, NIS usw. erhält, müssen Sie die Verlagerung in diesen Systemen durchführen und das Verschieben der Dateien von /home/sam
nach koordinieren /ext1/sam
.
Verweise
~
auf etwas anderes als das eigentliche Basisverzeichnis erweitern ?