Распечатать полный путь к домашнему каталогу

Распечатать полный путь к домашнему каталогу

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переменная отразит это.

Связанный контент