Для того, чтобы правильно и безопасно хранить данные на сервере, (особенно, если на этом сервере несколько пользователей), следует точно знать, где располагаются их домашние папки, до которых у пользователей есть доступ (у каждого в свою, но нет доступа в чужие папки с чужими данными). Например, для того, чтобы дать пользователю доступ по 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
. За нас всю эту работу делает операционная система! ;)
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)