/homeэто даже не всеобщая конвенция.

/homeэто даже не всеобщая конвенция.

/homeМожно ли вместо этого (полностью) передать функциональность каталога, который обычно назначается (в дистрибутивах вроде Debian и Ubuntu), другому каталогу? Например, если бы вы могли это сделать и изменили его на /xyz, то все ваши новые пользовательские каталоги, принадлежащие человеку, были бы установлены в /xyz(например, путь к рабочему столу Салли был бы /xyz/Sally/Desktopвместо /home/Sally/Desktopи /homeне нуждался бы в существовании).

Я работаю над портативной программой, которая сохраняет пути и загружает их. Если она используется на другом компьютере с домашним каталогом, который не находится в /home(и, следовательно, нет /home, а есть другой путь с его функциональностью), то я хочу, чтобы она скорректировала путь, чтобы иметь правильное расположение домашнего каталога в нем для нового компьютера, когда вместо этого загружается путь.

решение1

Домашние каталоги не обязательно размещать в , /homeи ваша программа ошибочна, если она жестко закладывает какие-либо предположения, например, что все домашние каталоги имеют общего родителя или что этот родитель называется /home.

/homeэто даже не всеобщая конвенция.

/homeбыла идея, задуманная довольно давно после изобретения Unix. В ранних Unix использовались другие каталоги. Это все еще можно увидеть сегодня в операционных системах, таких как FreeBSD (и ее производных), где /homeесть символическая ссылка, а пользовательские каталоги фактически находятся в /usr/home.

Solaris также размещает «настоящие» домашние каталоги, /export/homeчтобы /homeможно было заполнить их автоматическими монтированиями NFS и т. п.

/homeне является родительским каталогом для многих обычных домашних каталогов.

Существует множество домашних каталогов, которые не находятся в /home.

  • Наиболее очевидным из них является /rootдомашний каталог суперпользователя, перемещенный из своего старого расположения, /чтобы личные файлы и файлы «dot» пользователя root не загромождали корневой каталог, но оставались на корневом томе, чтобы суперпользователь мог войти в систему даже в случае сбоя монтирования других томов диска.
  • Различные демоны имеют домашние каталоги в других местах для специальных учетных записей, от имени которых эти демоны работают.
    • Различные учетные записи демонов qmail используют /var/qmail, например, или /var/qmail/alias. Последний даже обычно называется ~aliasи являетсяразработанныйбыть домашним каталогом с ~alias/.qmailфайлами, как в домашних каталогах других (реальных) пользователей.
    • Различные серверные программы HTTP(S) и FTP(s) имеют (официальные или неофициальные) соглашения. Например: домашние каталоги для виртуальных хостов, имеющих выделенные системные учетные записи, могут быть /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и так далее.
  • В OpenBSD учетная запись системного оператора имеет домашний каталог /operator, а различные учетные записи пользователей, не являющиеся персональными, имеют /var/emptyсвои домашние каталоги.

Домашние каталоги не обязательно должны оставаться в /home.

Домашние каталоги можно перемещать после создания учетной записи, используя параметры -d( --home) и -m( --move-home) команды usermodв операционных системах Linux.

В OpenBSD usermodесть те же самые опции. (Не делайте того же самого с pw usermodкомандой в FreeBSD, TrueOS/PC-BSD и т. д. -m -dКомбинация там имеет немного иное значение.)

Домашние каталоги не обязательно создавать в /home.

Даже обычный родительский каталог, используемый при создании учетных записей, может быть изменен, и это не обязательно /home.

В операционных системах Linux и OpenBSD параметр useraddкоманды -b( --base-dir) указывает родительский каталог, в котором создаются домашние каталоги, если он явно не указан с помощью -d( --home).по умолчаниюБазовый каталог — это base_dirпеременная в /etc/usermgmt.confOpenBSD и 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.

дальнейшее чтение

решение2

если вы хотите изменить местоположение домашнего каталога пользователя на какое-то другое место, то обратитесь к этому ответу

https://stackoverflow.com/questions/20797819/command-to-change-the-default-home-directory-of-a-user

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