Домашние каталоги не нужно размещать в / home
, и ваша программа ошибочна, если она жестко фиксирует любые такие предположения, что все домашние каталоги имеют общий родительский элемент или тот, который называется / home
.
/ home
- это даже не универсальное соглашение. Идея / home
возникла довольно давно после того, как был изобретен Unix. В ранних версиях Unix использовались другие каталоги. Это все еще можно увидеть сегодня в операционных системах, таких как FreeBSD (и ее производные), где / home
является символической ссылкой, а пользовательские каталоги фактически находятся в / usr / home
.
Solaris также помещает «настоящие» домашние каталоги в / export / home
, так что / home
может быть заполнен автоматическим монтированием NFS и т.п.
/ home
не является родительским для многих общих домашних каталогов. Есть множество домашних каталогов, которых нет в / home
.
/ root
, домашний каталог для суперпользователя, перемещенный из своего более старого местоположения в /
, чтобы личные и «точечные» файлы root не загромождали корневой каталог, но хранится в корневом томе, чтобы суперпользователь мог войти в систему даже при сбое монтирования других дисковых томов. / var / qmail
или / var / qmail / alias
. Последний даже обычно называют ~ псевдоним
и предназначен как домашний каталог с файлами ~ alias / .qmail
, как и у других (реальных) пользователей. 'домашние каталоги. / var / www
или / var / www / $ VHOST
. / var / unbound
, / var / db / mysql
и ] / var / db / tor
. / sbin
, / var / adm
, / var / spool / lpd
, ] / var / spool / mail
, / var / spool / news
, / var / spool / uucp
и так далее. / operator
, а различные неличные учетные записи пользователей имеют / var / empty
в качестве своих домашних каталогов. / home
. Домашние каталоги можно переместить после создания учетной записи с помощью -d
( - home
) и -m
( - move- home
) к команде usermod
в операционных системах Linux.
Пользовательский модуль OpenBSD
имеет те же параметры. (Не делайте то же самое с командой pw usermod
во FreeBSD, TrueOS / PC-BSD и др. Комбинация -m -d
имеет несколько иное значение. )
/ home
. Можно изменить даже обычный родительский каталог, используемый при создании учетных записей, и не обязательно / home
.
В операционных системах Linux и OpenBSD параметр -b
( - base-dir
) команды useradd
указывает родительский объект, в котором создаются домашние каталоги, если не назван явно с помощью -d
( - home
). Базовый каталог по умолчанию - это переменная base_dir
в /etc/usermgmt.conf
в OpenBSD и переменная HOME
в / etc / default / useradd
во многих Linux. Системный администратор может изменить это по своему усмотрению.
На FreeBSD, TrueOS / PC-BSD и др. есть опция -b
, аналогичная команде pw useradd
, и значение по умолчанию для нее можно изменить с помощью переменной home
в /etc/pw.conf
.
Ваша программа не должна жестко закреплять какие-либо ожидания относительно расположения домашних каталогов или их родителей.
HOME
.Он настраивается такими программами, как login
, userenv
или systemd
при переключении на учетную запись для входа в систему. Если нет переменной среды HOME
, правильным решением будет просто прерывание на том основании, что переменные среды сеанса входа в систему должны присутствовать для запуска вашей программы.В противном случае вы можете вернуться к получению эффективного / реального (при необходимости) UID процесса и запроса базы данных паролей. getpwnam ()
/ getpwnam_r ()
или getpwuid ()
/ getpwiud_r ()
библиотечные функции и вытащите поле pw_dir
. (Обратите внимание, что это поле может иметь значение NULL или может указывать на строку нулевой длины .) ~ JdeBP
. Многие программы делают это, от vim
до mailx
. userenv
. nosh справочные страницы по набору инструментов.