Ist es möglich, die Funktionalität des Verzeichnisses, das normalerweise /home
(in Distributionen wie Debian und Ubuntu) zugewiesen ist, stattdessen (vollständig) einem anderen Verzeichnis zuzuweisen? Wenn Sie dies beispielsweise tun könnten und es in ändern würden, /xyz
würden alle Ihre neuen Benutzerverzeichnisse im Besitz von Menschen unter installiert /xyz
(so dass beispielsweise Sallys Desktop-Pfad /xyz/Sally/Desktop
anstelle von wäre /home/Sally/Desktop
und /home
nicht vorhanden sein müsste).
Ich arbeite an einem portablen Programm, das Pfade speichert und lädt. Wenn es auf einem anderen Computer mit einem Home-Verzeichnis verwendet wird, das sich nicht unter befindet /home
(und es daher kein gibt /home
, sondern einen anderen Pfad mit seiner Funktionalität), dann möchte ich, dass es den Pfad so anpasst, dass er beim Laden des Pfads den richtigen Speicherort des Home-Verzeichnisses für den neuen Computer enthält.
Antwort1
Es müssen keine Home-Verzeichnisse in platziert werden /home
und Ihr Programm ist fehlerhaft, wenn es Annahmen fest verdrahtet wie, dass alle Home-Verzeichnisse ein gemeinsames übergeordnetes Verzeichnis haben oder dass dieses übergeordnete Verzeichnis den Namen hat /home
.
/home
ist nicht einmal eine universelle Konvention.
/home
war eine Idee, die ziemlich lange nach der Erfindung von Unix entstand. In frühen Unix-Versionen wurden andere Verzeichnisse verwendet. Dies ist heute noch bei Betriebssystemen wie FreeBSD (und seinen Derivaten) zu sehen, wo /home
ein symbolischer Link ist und Benutzerverzeichnisse tatsächlich unter liegen /usr/home
.
Solaris platziert ebenfalls „echte“ Home-Verzeichnisse, /export/home
sodass diese /home
mit automatischen NFS-Mounts und dergleichen gefüllt werden können.
/home
ist nicht das übergeordnete Verzeichnis vieler gängiger Home-Verzeichnisse.
Es gibt viele Home-Verzeichnisse, die nicht in liegen /home
.
- Das offensichtlichste ist
/root
, das Home-Verzeichnis für den Superuser, das von seinem alten Speicherort unter verschoben wurde,/
damit die persönlichen und „dot“-Dateien von Root das Root-Verzeichnis nicht überladen, sondern auf dem Root-Volume verbleibt, damit sich der Superuser auch dann anmelden kann, wenn das Mounten anderer Datenträger fehlschlägt. - Verschiedene Daemon-Softwares haben an anderen Orten Home-Verzeichnisse für die dedizierten Konten, unter denen diese Daemons ausgeführt werden.
- Die verschiedenen Dæmon-Konten von qmail verwenden
/var/qmail
beispielsweise oder/var/qmail/alias
. Letzteres wird sogar häufig als angesprochen~alias
und istentworfen~alias/.qmail
ein Home-Verzeichnis mit Dateien wie in den Home-Verzeichnissen anderer (echter) Benutzer sein . - Verschiedene HTTP(S)- und FTP(s)-Serversoftwares haben (offizielle oder inoffizielle) Konventionen. Beispiel: Home-Verzeichnisse für virtuelle Hosts mit dedizierten Systemkonten können
/var/www
oder sein/var/www/$VHOST
. - Auf verschiedenen Betriebssystemen finden sich weitere Softwareprogramme, die Home-Verzeichnisse für nicht-persönliche Benutzerkonten verwenden, wie beispielsweise
/var/unbound
,/var/db/mysql
, und/var/db/tor
. - Verschiedene herkömmliche nicht-persönliche Benutzerkonten haben Home-Verzeichnisse wie
/sbin
,/var/adm
,/var/spool/lpd
,/var/spool/mail
,/var/spool/news
,/var/spool/uucp
, usw.
- Die verschiedenen Dæmon-Konten von qmail verwenden
- Unter OpenBSD verfügt das Systemoperator-Konto über das Home-Verzeichnis
/operator
und verschiedene nicht-persönliche Benutzerkonten haben/var/empty
ihre Home-Verzeichnisse.
Home-Verzeichnisse müssen nicht in verbleiben /home
.
Home-Verzeichnisse können nach der Kontoerstellung mithilfe der Optionen -d
( --home
) und -m
( --move-home
) des usermod
Befehls auf Linux-Betriebssystemen verschoben werden.
OpenBSD usermod
hat die gleichen Optionen. (Machen Sie nicht dasselbe mit dem pw usermod
Befehl unter FreeBSD, TrueOS/PC-BSD usw.. Die -m -d
Kombination hat dort eine leicht andere Bedeutung.)
Home-Verzeichnisse müssen nicht in erstellt werden /home
.
Sogar das herkömmliche übergeordnete Verzeichnis, das beim Erstellen von Konten verwendet wird, kann geändert werden und muss nicht geändert werden /home
.
Unter Linux-Betriebssystemen und OpenBSD gibt die Option ( ) useradd
des Befehls das übergeordnete Verzeichnis an, in dem Home-Verzeichnisse erstellt werden, wenn sie nicht explizit mit ( ) benannt sind. Die-b
--base-dir
-d
--home
StandardDas Basisverzeichnis ist die base_dir
Variable in /etc/usermgmt.conf
bei OpenBSD und die HOME
Variable in /etc/default/useradd
bei vielen Linux-Versionen. Ein Systemadministrator kann dies nach Lust und Laune ändern.
Unter FreeBSD, TrueOS/PC-BSD usw. gibt es eine ähnliche -b
Option zum pw useradd
Befehl und einen Standardwert dafür, der über die home
Variable in geändert werden kann /etc/pw.conf
.
Damit fertig werden
Ihr Programm sollte keinerlei Erwartungen hinsichtlich der Speicherorte von Home-Verzeichnissen oder deren übergeordneten Verzeichnissen fest verdrahten.
- Wenn Sie das Home-Verzeichnis des aktuell angemeldeten Benutzers wissen möchten, verwenden Sie die
HOME
Umgebungsvariable. Sie wird von Programmen wie eingerichtet oder wenn das angemeldete Konto auf umgeschaltet wird. Wenn keine Umgebungsvariable vorhanden istlogin
, ist es eine gültige Designentscheidung, einfach abzubrechen, da die Umgebungsvariablen der Anmeldesitzung vorhanden sein müssen, damit Ihr Programm ausgeführt werden kann. Andernfalls können Sie darauf zurückgreifen, die effektive/reale (je nach Bedarf) UID des Prozesses abzurufen und die Kennwortdatenbank abzufragen.userenv
systemd
HOME
- Wenn Sie das Home-Verzeichnis eines bestimmten Benutzers wissen möchten, fragen Sie die Passwortdatenbank mit den Bibliotheksfunktionen
getpwnam()
/getpwnam_r()
odergetpwuid()
/ ab und ziehen Sie das Feld heraus. (Beachten Sie, dassgetpwiud_r()
pw_dir
Dieses Feld kann NULL sein oder auf eine Zeichenfolge mit der Länge Null zeigen..) - Wenn Sie das Home-Verzeichnis eines Benutzers symbolisch kennzeichnen möchten, und zwar unabhängig von seinem tatsächlichen Standort, können Sie die Konvention einer Shell-ähnlichen Tilde-Erweiterung übernehmen:
~JdeBP
. Viele Programme tun dies, vonvim
bismailx
.
Weiterführende Literatur
- Unterschied zwischen „/export/home“ und „/home“
- Jonathan de Boyne Pollard.
userenv
. Handbuchseiten zum Nosh-Toolset. - Jonathan de Boyne Pollard (2016). "Falsche Aussagen über Dæmon-Umgebungen". Errata für die systemd-Dokumentation. Häufig gestellte Fragen.
Antwort2
Wenn Sie den Speicherort des Benutzer-Home-Verzeichnisses an einen anderen Ort ändern möchten, lesen Sie diese Antwort