echo $HOME
druckt nur /home/user
. Aber in meinem System /home
ist es nicht unter gemountet /
und ist auch keine eigene Partition.
# shared linux data partition, `/home` is here
UUID=a89334f7-59b7-4d04-b89b-a5a30c379644 /mnt/linux_data ext4 defaults 1 2
Das Home-Verzeichnis wird mittels Bind-Mount eingebunden,
# bind mount /home to directory to a directory on /linux_data
/mnt/linux_data/01_centos /home none bind 0 0
Wenn ich in Caja auf das Symbol des Home-Verzeichnisses klicke, wird in der Adressleiste angezeigt, dass /home/user
. Aber dieses Verzeichnis sollte eigentlich sein, /mnt/linux_data/01_centos/user
das an diesem Ort existiert. Ich kann dorthin navigieren, /mnt/linux_data/01_centos/user
indem ich in Caja über /root
das Symbol gehe, aber ich hätte gern eine Möglichkeit, den vollständigen Pfad zu dem auszudrucken, was das Betriebssystem für hält /home
.
Antwort1
$HOME
ist auf den Inhalt /etc/passwd
des Benutzers eingestellt. Um dies selbst zu überprüfen, erstellen Sie ein Verzeichnis mit dem Namen /opt/username
für einen Benutzer, machen Sie ihn zum Eigentümer und vipw
ändern Sie dann mit dessen Heimatverzeichnis in /opt/username
in /etc/passwd
. Melden Sie sich als Benutzer an und verwenden Sie . pwd
Sie werden sehen, dass er sich in befindet /opt/username
und das $HOME
zu erweitert wird /opt/username
.
Wenn Sie den Befehl grep username /etc/passwd
oder verwenden getent passwd username
, sehen Sie, dass das Home auf /home/username
und nicht auf eingestellt ist /mnt/linux_data/01_centos/user
. Was das Betriebssystem betrifft, ist das Home tatsächlich /home/username
unabhängig davon, ob dort ein anderes Dateisystem gemountet ist. Ihr System funktioniert genau so, wie es sollte.
Zur Klarstellung für LDAP: Wenn es Benutzer gibt, die sich über LDAP authentifizieren, werden ihre Home-Verzeichnisse im LDAP-Server festgelegt, was normalerweise Active Directory ist. Sie können es weiterhin sehen getent passwd
und wenn es dort geändert wird, $HOME
wird dies in der Variable widergespiegelt.