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

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

是否可以將通常指派給(在 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 usermodFreeBSD、TrueOS/PC-BSD 等上的命令執行相同操作。-m -d那裡的組合具有細微不同的含義。)

主目錄不必在/home.

即使建立帳戶時使用的傳統父目錄也可以更改,但不一定/home

在 Linux 作業系統和 OpenBSD 上,如果未使用( ) 明確命名,則該useradd指令的-b( --base-dir) 選項指定在其中建立主目錄的父目錄。這-d--home預設基底目錄是OpenBSD 上base_dir的變量,也是許多 Linux 上的變數。系統管理員可以隨意更改此設定。/etc/usermgmt.confHOME/etc/default/useradd

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

應付這個

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

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

進一步閱讀

答案2

如果您想將使用者主目錄位置變更為其他位置,請參考此答案

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

相關內容