Home

可以使用不同的路徑代替 /home 嗎?

  • November 2, 2016

是否可以將通常分配給/home(在 Debian 和 Ubuntu 等發行版中)的目錄的功能提供給另一個目錄(完全)?例如,如果您可以執行此操作並將其更改為,/xyz那麼所有新的人工擁有的使用者目錄都將安裝在下面/xyz(例如,Sally 的桌面路徑將/xyz/Sally/Desktop代替/home/Sally/Desktop並且/home不需要存在)。

我正在開發一個可移植的程序來保存路徑並載入它們。如果它在另一台電腦上使用,其主目錄不在/home(因此沒有/home,而是另一個具有其功能的路徑),那麼我將希望它調整路徑以具有正確的主目錄位置而是在載入路徑時用於新電腦。

不需要放置主目錄,/home如果您的程序硬連線任何這樣的假設,例如所有主目錄共享一個共同的父目錄或該父目錄被命名,那麼您的程序就是錯誤的/home

/home甚至不是一個普遍的公約。

/home這個想法是在 Unix 發明後的一段時間內構思出來的。在早期的 Unices 中,使用了其他目錄。今天仍然可以在 FreeBSD(及其衍生產品)等作業系統上看到這一點,其中/home符號連結和使用者目錄實際上位於/usr/home.

Solaris 同樣將“真正的”主目錄放入其中,/export/home以便/home可以充滿自動 NFS 掛載等。

/home不是許多常見主目錄的父目錄。

有很多主目錄不存在於/home.

  • 最明顯的一點是,/root超級使用者的主目錄從其較舊的位置移至/安裝其他磁碟捲失敗。

  • 各種守護程序軟體在其他地方都有主目錄,用於這些守護程序執行的專用帳戶。

    • qmail 的各種 dæmon 帳戶使用/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.

在創建帳戶後,可以在 Linux 作業系統上使用命令 的-d( --home) 和-m( --move-home) 選項移動主目錄。usermod

OpenBSDusermod具有相同的選項。(不要pw usermod對 FreeBSD、TrueOS/PC-BSD 等上的命令做同樣的事情。-m -d那裡的組合具有微妙的不同含義。)

主目錄不必在/home.

即使是創建帳戶時使用的正常父目錄也可以更改,但不一定是/home.

在 Linux 作業系統和 OpenBSD 上,該useradd命令的-b( --base-dir) 選項指定創建主目錄的父目錄,如果沒有用-d( --home) 明確命名的話。預設的基本目錄是OpenBSD 上的base_dir變數,許多 Linux 上的變數是​​。系統管理員可以隨意更改此設置。/etc/usermgmt.conf``HOME``/etc/default/useradd

在 FreeBSD、TrueOS/PC-BSD 等。該命令有一個類似的-b選項,並且可以通過變數 inpw useradd修改該命令的預設值。home``/etc/pw.conf

應對這種情況

您的程序不應該對主目錄或其父目錄的位置產生任何期望。

  • 如果您想知道目前登錄使用者的主目錄,請使用HOME環境變數。由 等程序設置loginuserenvsystemd登錄賬號切換時設置。如果沒有HOME環境變數,那麼中止是一個有效的設計選擇,因為登錄會話環境變數需要存在才能讓您的程序執行。否則,您可以依靠獲取程序的有效/真實(視情況而定)UID 並查詢密碼數據庫。
  • 如果您想知道特定使用者的主目錄,請使用getpwnam()/getpwnam_r()getpwuid()/getpwiud_r()庫函式查詢密碼數據庫並拉出該pw_dir欄位。(請注意,此欄位可以為 NULL 或可以指向零長度字元串。)
  • 如果您想以一種獨立於其實際位置的方式象徵性地表示使用者的主目錄,您可以採用類似於 shell 的波浪號擴展的約定:~JdeBP. 許多程序都這樣做,從vimmailx

進一步閱讀

引用自:https://unix.stackexchange.com/questions/320233