64 lines
3.0 KiB
Markdown
64 lines
3.0 KiB
Markdown
# GNU Stow – Dateien mit Symlinks verwalten
|
||
|
||
**GNU Stow** verwaltet Verzeichnisbäume, indem es symbolische Links (Symlinks) zu deren Dateien und Unterverzeichnissen anlegt oder entfernt. Ein häufiger Anwendungsfall ist die zentrale Verwaltung von **Dotfiles** und Konfigurationsdateien.
|
||
|
||
Stow führt dabei keine Installationsskripte aus und erzeugt keine Konfigurationsdateien aus Vorlagen: Seine Aufgabe ist die Verwaltung der Symlinks.
|
||
|
||
## Grundidee: Paketstruktur spiegelt das Ziel
|
||
|
||
Jede Unterstruktur unterhalb des Stow-Verzeichnisses ist ein „Paket“. Die Verzeichnisse und Dateien darin entsprechen den Pfaden, die im Zielverzeichnis entstehen sollen.
|
||
|
||
```text
|
||
~/dotfiles/
|
||
├── zsh/
|
||
│ ├── .zshrc
|
||
│ └── .config/
|
||
│ └── zsh/
|
||
│ └── aliases
|
||
└── git/
|
||
└── .gitconfig
|
||
```
|
||
|
||
Beim Stowen von `zsh` mit `~` als Ziel werden zum Beispiel `~/.zshrc` und `~/.config/zsh/aliases` verlinkt.
|
||
|
||
## Pakete verknüpfen und entfernen
|
||
|
||
Mit explizitem Stow- und Zielverzeichnis sind die Befehle unabhängig vom aktuellen Arbeitsverzeichnis verständlich:
|
||
|
||
```bash
|
||
# Erst gefahrlos prüfen, was Stow tun würde
|
||
stow --simulate --verbose --dir="$HOME/dotfiles" --target="$HOME" zsh
|
||
|
||
# Symlinks anlegen
|
||
stow --dir="$HOME/dotfiles" --target="$HOME" zsh
|
||
|
||
# Symlinks dieses Pakets wieder entfernen
|
||
stow --delete --dir="$HOME/dotfiles" --target="$HOME" zsh
|
||
|
||
# Paket entfernen und anschließend erneut verknüpfen
|
||
stow --restow --dir="$HOME/dotfiles" --target="$HOME" zsh
|
||
```
|
||
|
||
Die Kurzformen für häufige Optionen sind `-n` (simulieren), `-v` (Ausgabe), `-d` (Stow-Verzeichnis), `-t` (Zielverzeichnis), `-D` (entfernen) und `-R` (erneut anwenden).
|
||
|
||
## Typischer Dotfiles-Workflow
|
||
|
||
1. Konfigurationen in einem versionierten Verzeichnis wie `~/dotfiles` organisieren.
|
||
2. Pro Gruppe oder Programm ein Paketverzeichnis anlegen, zum Beispiel `zsh`, `git` oder `hypr`.
|
||
3. Die Paketstruktur so aufbauen, dass sie die gewünschten Pfade relativ zum Home-Verzeichnis abbildet.
|
||
4. Mit `stow -n -v ...` zunächst prüfen, welche Links entstehen würden.
|
||
5. Das Paket mit Stow verknüpfen und die Links bei Bedarf mit `stow -D ...` wieder entfernen.
|
||
|
||
## Konflikte und wichtige Hinweise
|
||
|
||
- Stow überschreibt vorhandene, nicht von Stow verwaltete Dateien nicht einfach. Bei Konflikten bricht es ab und meldet das Problem.
|
||
- Vorhandene Konfigurationen erst sichern oder bewusst in das Paket übernehmen, bevor Stow sie verwalten soll.
|
||
- Die Option `--adopt` kann vorhandene Dateien aus dem Ziel in das Paket verschieben. Sie kann Dateien verändern; nur nach Prüfung und mit Backup verwenden.
|
||
- Symlinks können auf dasselbe Dateisystem oder über verschiedene Datenträger hinweg zeigen, solange Ziel und Link erreichbar sind.
|
||
- Stow ist kein Paketmanager und installiert keine Programme. Für hostabhängige Logik, Templates oder zusätzliche Aktionen sind Skripte oder andere Dotfile-Manager nötig.
|
||
|
||
## Siehe auch
|
||
|
||
- [[IT-Know-How/Linux/Hyprland/Stow mit Logik|Stow mit Logik]] – GNU Stow mit Skripten kombinieren
|
||
- [[IT-Know-How/Linux/Linux|Linux]]
|