可以使用不同的路徑代替 /home 嗎?
是否可以將通常分配給
/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
OpenBSD
usermod
具有相同的選項。(不要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
環境變數。由 等程序設置login
,userenv
或systemd
登錄賬號切換時設置。如果沒有HOME
環境變數,那麼中止是一個有效的設計選擇,因為登錄會話環境變數需要存在才能讓您的程序執行。否則,您可以依靠獲取程序的有效/真實(視情況而定)UID 並查詢密碼數據庫。- 如果您想知道特定使用者的主目錄,請使用
getpwnam()
/getpwnam_r()
或getpwuid()
/getpwiud_r()
庫函式查詢密碼數據庫並拉出該pw_dir
欄位。(請注意,此欄位可以為 NULL 或可以指向零長度字元串。)- 如果您想以一種獨立於其實際位置的方式象徵性地表示使用者的主目錄,您可以採用類似於 shell 的波浪號擴展的約定:
~JdeBP
. 許多程序都這樣做,從vim
到mailx
。進一步閱讀
- “/export/home”和“/home”之間的區別
- 喬納森·德博因·波拉德。
userenv
. nosh 工具集手冊頁。- 喬納森·德博因·波拉德 (2016)。“關於 dæmon 環境的錯誤陳述”。 systemd doco 的勘誤表。經常給出答案。