/home ist der Pfad, unter dem alle regulären Benutzer ihre persönlichen Verzeichnisse bekommen — typisch /home/<username>. Hier landen Dokumente, Downloads, Konfiguration als Dotfiles (.bashrc, .config/, .ssh/) und alle anderen nutzerbezogenen Daten. /home ist neben /etc und /var einer der drei Pfade, die in jedem Backup-Plan stehen sollten — und der einzige Bereich, wo eine separate Partition so sehr empfohlen wird, dass sie auf vielen Distributionen Standard ist.
Was ist /home?
Der FHS-Standard (3.0, Kapitel 3.10) definiert /home als den zentralen Sammelpfad für Benutzer-Heimverzeichnisse. Pro regulärem User gibt es ein Unterverzeichnis, das diesem alleinig gehört und in dem er beliebig schreiben darf — alles, was zu seiner Person gehört, lebt dort.
Was du in einem Home-Verzeichnis typisch findest:
| Inhalt | Beispiel |
|---|---|
| Klassische Daten-Ordner | Documents/, Downloads/, Music/, Pictures/, Videos/ |
| Dotfiles (Shell- und App-Konfiguration) | .bashrc, .zshrc, .gitconfig, .vimrc, .tmux.conf |
| XDG-Konfigurations-Verzeichnis | .config/ — moderne App-Settings (siehe unten) |
| XDG-Cache | .cache/ — temporäre App-Daten, wiederherstellbar |
| XDG-Lokal-State | .local/share/, .local/state/ |
| SSH-Schlüssel | .ssh/id_*, .ssh/known_hosts, .ssh/config |
| GnuPG-Schlüssel | .gnupg/ |
| Mail-Verzeichnisse | .thunderbird/, Mail/, Maildir/ |
| Browser-Profile | .mozilla/, .config/google-chrome/ |
Die Größe eines Home-Verzeichnisses variiert stark — auf Servern oft nur wenige MB (vor allem Konfiguration), auf Desktop-Systemen mit Browser-Caches, Steam-Library oder Projektordnern leicht hunderte GB.
# Top-Level-Übersicht inkl. versteckter Dateien
ls -la ~
# Größte Unterordner (Cache und Daten ausgeblendet ist sinnvoll)
du -sh ~/* 2>/dev/null | sort -hr | head -10
# Auch Dotfiles berücksichtigen
du -sh ~/.* 2>/dev/null | sort -hr | head -10Berechtigungen und Zugriff
Standardmäßig hat ein Home-Verzeichnis die Berechtigung 0750 oder 0755, mit Owner und Group auf den Nutzer und seine Primärgruppe gesetzt. useradd -m legt das Verzeichnis automatisch mit den richtigen Rechten an, indem es den Inhalt aus /etc/skel/ kopiert.
| Berechtigung | Wer sieht was? |
|---|---|
0700 | Nur der Owner — fremde User können nicht mal ls aufrufen |
0750 | Owner schreibt, Gruppe liest — Standard auf vielen Distributionen |
0755 | Owner schreibt, alle anderen können lesen/durchsuchen |
Die Default-Berechtigung wird durch zwei Faktoren bestimmt:
HOME_MODEin/etc/login.defs(z. B.HOME_MODE 0700oder0750).- Die
umaskzum Zeitpunkt der User-Anlage.
# Eigene Berechtigung anschauen
ls -ld ~
# drwxr-x--- 24 michael michael 4096 ... /home/michael
# Auf privat (nur ich) umstellen
chmod 700 ~
# Default für neue Nutzer: HOME_MODE in /etc/login.defs setzen
sudo grep HOME_MODE /etc/login.defs
# HOME_MODE 0750Sensibel und gesondert geschützt: das .ssh-Verzeichnis. SSH verweigert die Anmeldung, wenn die Berechtigungen zu offen sind:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/id_* # private Schlüssel
chmod 644 ~/.ssh/id_*.pub # public Schlüssel
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/known_hosts
chmod 644 ~/.ssh/configXDG Base Directory Specification
Historisch lag App-Konfiguration als Wildwuchs aus Dotfiles direkt im Home-Verzeichnis (~/.bashrc, ~/.vimrc, ~/.firefox-config, ~/.skype-data). Das wurde unhandlich — deshalb hat die Free Desktop Foundation die XDG Base Directory Specification definiert, an die sich heute die meisten Linux-Anwendungen halten.
XDG legt vier Standard-Pfade fest:
| XDG-Variable | Default-Pfad | Inhalt |
|---|---|---|
$XDG_CONFIG_HOME | ~/.config/ | Anwendungs-Konfiguration |
$XDG_DATA_HOME | ~/.local/share/ | Anwendungs-Daten (z. B. Spielstände, Vorlagen) |
$XDG_STATE_HOME | ~/.local/state/ | Persistenter Zustand (Logs, History — nicht zu cachen, nicht zu sichern) |
$XDG_CACHE_HOME | ~/.cache/ | Wiederherstellbare Caches (kann ohne Verlust gelöscht werden) |
$XDG_RUNTIME_DIR | /run/user/<uid>/ | Laufzeit-State, beim Logout entfernt |
Anwendungen, die XDG sauber unterstützen, lesen ihre Konfiguration aus ~/.config/<appname>/. Beispiele:
~/.config/git/config— git-Konfiguration (alternativ zu~/.gitconfig)~/.config/nvim/init.vim— neovim~/.config/htop/htoprc— htop~/.config/systemd/user/— User-Services in systemd
Vorteile: gemeinsamer Backup-Pfad (~/.config/), klare Trennung zwischen Cache (entfernbar) und State (wichtig), und konsistente Über-Steuerung via Environment-Variablen.
# Aktuelle XDG-Werte anzeigen
echo "$XDG_CONFIG_HOME"
# leer = Default ~/.config
# Eigene App-Daten beim Sichern fokussieren
tar czf homeconfig.tar.gz \
-C ~ .config .local/share \
--exclude='.cache' \
--exclude='.local/share/Trash'Dotfiles und Versionskontrolle
Die persönliche Konfiguration lebt in Dotfiles (.bashrc, .vimrc, .gitconfig, .ssh/config, …). Sie machen ein Linux-System produktiv — und wandern ständig zwischen Maschinen mit. Deshalb hat sich das Pattern etabliert, sie in einem Git-Repo zu verwalten.
Drei verbreitete Ansätze:
| Methode | Kurzbeschreibung |
|---|---|
| Symlink-Stow | Repo unter ~/dotfiles/, Tools wie GNU Stow erzeugen Symlinks im Home |
| Bare Git Repo | Git-Repo ohne Working Tree, das Home selbst ist die Working Copy |
| Frameworks | chezmoi, yadm, dotbot — vorgebackene Dotfile-Manager |
Das Bare-Repo-Pattern ist besonders elegant, weil es ohne Symlinks auskommt:
# Initial-Setup
git init --bare $HOME/.dotfiles
alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles --work-tree=$HOME'
dotfiles config --local status.showUntrackedFiles no
# Datei tracken und committen
dotfiles add .bashrc .gitconfig .config/nvim/init.vim
dotfiles commit -m "initial dotfiles"
dotfiles remote add origin git@github.com:user/dotfiles.git
dotfiles push -u origin main
# Auf neuer Maschine einspielen
git clone --bare git@github.com:user/dotfiles.git $HOME/.dotfiles
alias dotfiles='/usr/bin/git --git-dir=$HOME/.dotfiles --work-tree=$HOME'
dotfiles checkoutEigene Partition für /home
Eine separate /home-Partition (oder LVM-Volume) ist eine der häufigsten Layout-Entscheidungen bei Linux-Installationen — und meist die richtige.
Vorteile:
- System-Reinstallation ohne Datenverlust. Beim nächsten Distribution-Wechsel oder Major-Upgrade kannst du
/neu aufsetzen,/homebleibt unangetastet. - Quotas pro User möglich. Mit
quotaoder Filesystem-Features (Btrfs, XFS) lassen sich pro User Speicher-Limits setzen. - Unterschiedliche Filesystem-Optionen.
/mit konservativen Defaults,/homemitnoexec(Sicherheit),nodev,nosuid. - Encryption granular. Nur das User-Verzeichnis verschlüsseln, ohne das ganze System dem LUKS-Key auszusetzen (LUKS auf dem
/home-Volume).
Trade-off: bei zu kleiner /home-Partition läuft sie früher voll als das gesamte System. LVM löst das, weil sich die Volume-Größe online erweitern lässt.
# Hat /home eine eigene Mountpoint?
df -h /home
# Filesystem Size Used Avail Use% Mounted on
# /dev/nvme0n1p3 500G 80G 395G 17% /home
# In der fstab nachschauen, was beim Boot gemountet wird
grep '/home' /etc/fstab
# Mount-Optionen prüfen (z. B. nodev,nosuid,noexec wären restriktiv)
mount | grep '/home'Backup und Verschlüsselung
/home ist der wichtigste Backup-Pfad auf einem Endbenutzer-System. Die Strategie sollte zwei Aspekte abdecken:
Backup-Ziele:
- Eigene Daten: Dokumente, Bilder, Videos, Code-Projekte, Mails, Konfiguration.
- Verzichtbar (excluden): Caches (
.cache/,.mozilla/.../Cache/), npm-Module (node_modules/), Build-Output, Trash, virtuelle Maschinen-Images, Steam-Bibliothek (re-installierbar), Snapshots vom Backup-Tool selbst.
rsync -aHAX --delete \
--exclude='.cache' \
--exclude='.local/share/Trash' \
--exclude='node_modules' \
--exclude='.mozilla/firefox/*/Cache*' \
--exclude='.config/google-chrome/*/Cache*' \
--exclude='*.iso' \
~/ /mnt/backup/home-michael/Bessere Tools für dauerhaftes, dedupliziertes Backup: restic, borgbackup, kopia. Alle drei können /home performant und mit Verschlüsselung gegen externe Targets (S3, Backblaze, lokale Disks) sichern.
Verschlüsselung:
Auf modernen Distributionen ist die übliche Wahl vollständige Disk-Verschlüsselung mit LUKS — der gesamte Storage (also auch /home) wird beim Boot entschlüsselt. Alternativ:
- Per-User-Encryption mit
fscrypt(Ext4, F2FS): jeder User hat seinen eigenen Schlüssel, andere können seine Dateien nicht mal als Bytes lesen. - eCryptfs (deprecated) — historisch von Ubuntu für „Home-Encryption per User" genutzt, heute nicht mehr empfohlen.
- systemd-homed — modernerer Ansatz: das Home-Verzeichnis ist ein verschlüsseltes LUKS-Image, das beim Login eingehängt wird. Erfordert systemd ≥ 245 und Distributionen-Support.
Abgrenzung: /root, Service-Accounts und mehrere /home
/home ist nicht der Pfad für root oder System-Service-User:
| Account-Typ | Home-Pfad |
|---|---|
| Regulärer Nutzer | /home/<username> |
| Root (Superuser) | /root |
| System-Daemons (httpd, nginx, postgres, …) | /var/lib/<service> oder /nonexistent |
| Mail-User | /var/spool/mail/<user> (klassisch) |
Der Grund für /root außerhalb von /home: bei einer defekten oder nicht mountbaren /home-Partition muss root sich trotzdem einloggen können, um zu reparieren. Wäre /root unter /home, wäre genau das nicht möglich.
In großen Umgebungen mit vielen Nutzern wird /home oft per NFS oder anderen Netzwerk-Filesystemen gemountet — der Home-Inhalt eines Nutzers folgt ihm dann auf jede Maschine im Netzwerk. Das ist der klassische Unix-Workgroup-Setup, in modernen Cloud-Umgebungen seltener geworden.
Interessantes
/etc/skel ist die Vorlage für jedes neue Home
Beim Anlegen eines neuen Users mit useradd -m (oder adduser) wird der gesamte Inhalt von /etc/skel/ ins neue Home kopiert. Wer einheitliche Defaults für alle neuen Nutzer setzen will (Beispiel-.bashrc, Standard-Ordner), tut das hier — nicht nachträglich pro User.
Cache-Ordner sind eine separate Welt
~/.cache/ und ähnliche App-Caches (~/.mozilla/firefox/<profile>/Cache2/, ~/.npm/) können sehr groß werden — leicht 10–20 GB auf einem aktiven Entwickler-System. In Backups gehören sie nicht (per Definition wiederherstellbar), aber regelmäßig manuell aufzuräumen lohnt sich auch.
systemd-homed ist die Zukunft, aber selten Default
systemd-homed verschiebt das User-Home in eine LUKS-verschlüsselte Image-Datei, die beim Login automatisch gemountet und beim Logout entlassen wird. Vorteile: portable Homes, vollständig verschlüsselt, automatisches Resize. Nachteil: noch wenig verbreitet, manche Tools haben Probleme mit dem dynamischen Mount.
$HOME ≠ /home/$USER — auf Edge-Cases achten
Skripte sollten immer $HOME (oder ~) verwenden, nicht /home/$USER hartkodieren. Auf Systemen mit NFS-Homes, custom Layouts (z. B. /users/<name> auf manchen Universitäts-Servern) oder root (Home in /root) bricht der hartkodierte Pfad. getent passwd <user> | cut -d: -f6 liefert das echte Home aus der User-Datenbank.
Quotas können /home schützen, sind aber Aufwand
In Multi-User-Umgebungen kann ein einzelner User mit unbegrenztem Home das gesamte Filesystem füllen und alle anderen blockieren. Disk-Quotas lösen das: pro User wird ein Soft- und Hard-Limit gesetzt. Auf Btrfs/ZFS gibt es Subvolume-Quotas, auf Ext4/XFS klassische User-Quotas via quota-Paket.
NFS-Homes brauchen Locking-Support
Wer /home per NFS mountet, muss aufpassen: viele Programme legen Lock-Files an (.bash_history.lock, Browser-Profile, Sqlite-Datenbanken). Ohne funktionierendes File-Locking auf NFS gibt es subtile Korruptionen. NFSv4 mit aktivem nfslock löst das, aber lohnt einen Test vor produktivem Einsatz.
Weiterführende Ressourcen
Externe Quellen
- Filesystem Hierarchy Standard 3.0 — /home
- XDG Base Directory Specification
- systemd-homed Documentation
- restic — Backup Tool
- Linux man-pages: hier(7) — Verzeichnisstruktur