Для того, чтобы правильно и безопасно хранить данные на сервере, (особенно, если на этом сервере несколько пользователей), следует точно знать, где располагаются их домашние папки, до которых у пользователей есть доступ (у каждого в свою, но нет доступа в чужие папки с чужими данными). Например, для того, чтобы дать пользователю доступ по ftp только к его данным или подсказать полный путь до его www-директории. В этой статье рассмотрим то, как узнать домашнюю директорию любого пользователя Linux несколькими способами.
Где хранится системная информация о домашних каталогах пользователей в Linux
При создании нового пользователя в Unix-системах, каждому пользователю обязательно домашний каталог. О том, где и как располагается запись о домашней директории пользователя в файле /etc/passwd, подробно описано в → этой статье. Для понимания вопроса сейчас требуется знать, что это предпоследнее (шестое) поле home в строке записи пользователя в этом файле:
login:password:UID:GID:GECOS:home:shell
Поэтому, можно в цикле обходить этот файл в поиске записи нужного пользователя, разбивать строку на подстроки и брать значение 6-го поля... Но это слишком длинный способ. Есть короче и проще. ;)
Команда pwd в Unix
Команда pwd выводит текущий путь к директории, в которой находится пользователь. Выполнив команду pwd, получим этот путь:
root@server:~# pwd
/root
У пользователя root в Unix по умолчанию домашней директорией является /root.
Оператор ~ (тильда) в Debian
Другой способ того, как определить домашнюю директорию текущего пользователя. Достаточно посмотреть значение оператора ~ (тильда):
root@server:~# echo ~
/root
Результат не сильно отличается от предыдущего, но к ~ можно добавлять дополнительные пути к папкам и/или файлам пользователя, используя её как точку отсчёта в домашней директории пользователя. Что сильно облегчает работу с написанием относительных путей (относительно не только корня файловой системы, но и корня домашней папки пользователя).
Ещё одним полезным свойством ~ является то, что с помощью этого оператора можно получить путь до домашней директории любого пользователя в системе (если конечно пользователь есть в системе, то есть прописан в файле /etc/passwd, например посмотреть содержимое домашнего каталога пользователя ftp можно так, поставив перед ним тильду ~:
root@server:~# ls ~ftp
welcome.msg
А теперь посмотреть содержимое этого файла:
root@server:~# cat ~ftp/welcome.msg
Welcome, archive user %U@%R !
The local time is: %T
This is an experimental FTP server. If you have any unusual problems,
please report them via e-mail to <root@%L>.
Ну и то, к чему мы стремились: посмотреть путь к домашней директории пользователя:
root@amorale:~# echo ~ftp
/srv/ftp
Так гораздо удобнее, чем парсить и разбирать файл /etc/passwd. За нас всю эту работу делает операционная система! ;)