echo $HOME
просто напечатает /home/user
. Но в моей системе /home
не монтируется /
и не является собственным разделом.
# shared linux data partition, `/home` is here
UUID=a89334f7-59b7-4d04-b89b-a5a30c379644 /mnt/linux_data ext4 defaults 1 2
Домашний каталог монтируется с помощью монтирования bind,
# bind mount /home to directory to a directory on /linux_data
/mnt/linux_data/01_centos /home none bind 0 0
При нажатии на значок домашнего каталога в Caja, строка местоположения показывает /home/user
. Но этот каталог на самом деле должен быть /mnt/linux_data/01_centos/user
, который существует в этом месте. Я могу перейти к нему, /mnt/linux_data/01_centos/user
пройдя по /root
значку в Caja, но мне бы хотелось, чтобы какие-то средства выводили полный путь к тому, что ОС считает /home
.
решение1
$HOME
установлен на то, что находится в /etc/passwd
для пользователя. Чтобы убедиться в этом, создайте каталог с именем /opt/username
для пользователя, сделайте его владельцем, а затем используйте vipw
для изменения его домашнего каталога на /opt/username
в /etc/passwd
. Войдите как пользователь и используйте pwd
, и вы увидите, что они находятся в , /opt/username
и это $HOME
расширяется до /opt/username
.
Если вы используете команду grep username /etc/passwd
или getent passwd username
, то вы увидите, что home установлен на /home/username
, а не на /mnt/linux_data/01_centos/user
. Что касается ОС, то home действительно установлен /home/username
независимо от того, смонтирована ли там другая файловая система. Ваша система функционирует именно так, как и должна.
Для ясности относительно LDAP, если есть пользователи, которые аутентифицируются через LDAP, то их домашние каталоги будут назначены на сервере LDAP, который обычно является Active Directory. Вы все равно сможете увидеть это с помощью getent passwd
и если это там изменено, $HOME
переменная отразит это.