是否可以將通常指派給(在 Debian 和 Ubuntu 等發行版中)的目錄的功能/home
(全部)賦予另一個目錄?例如,如果您可以執行此操作並將其變更為,/xyz
則所有新的人類擁有的使用者目錄將安裝在下方/xyz
(例如,Sally 的桌面路徑將取代/xyz/Sally/Desktop
且/home/Sally/Desktop
不需要/home
存在)。
我正在開發一個可保存路徑並加載它們的便攜式程式。如果它在另一台計算機上使用,其主目錄不在/home
(因此沒有/home
,而是具有其功能的另一個路徑),那麼我希望它調整路徑以在中具有正確的主目錄位置當加載路徑時,它適用於新計算機。
答案1
不需要放置主目錄/home
,如果您的程式硬連線任何此類假設,例如所有主目錄共用一個公共父目錄或該父目錄被命名,則該程式是錯誤的/home
。
/home
甚至不是一個普遍的約定。
/home
這個想法是在 Unix 發明一段時間後才產生的。在早期的 Unices 中,使用了其他目錄。如今,在 FreeBSD(及其衍生產品)等作業系統上仍然可以看到這種情況,其中/home
符號連結和使用者目錄實際上位於/usr/home
.
Solaris 同樣放置了「真正的」主目錄,/export/home
以便/home
可以充滿自動 NFS 掛載等。
/home
不是許多常見主目錄的父目錄。
有很多主目錄並不位於/home
.
- 最明顯的一個是
/root
,超級用戶的主目錄,從其舊位置移動,以便/
root 的個人文件和“點”文件不會混亂根目錄,而是保留在根卷上,以便超級用戶即使在以下情況下也可以登入安裝其他磁碟區失敗。 - 各種守護程式軟體在其他地方都有主目錄,用於這些守護程式運行的專用帳戶。
/var/qmail
例如,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
該命令有一個類似的選項pw 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)。 」關於守護程式環境的錯誤陳述」。 systemd doco 勘誤表。經常給的答案。
答案2
如果您想將使用者主目錄位置變更為其他位置,請參考此答案
https://stackoverflow.com/questions/20797819/command-to-change-the-default-home-directory-of-a-user