Überall "local"
Gerade wenn man viel und intensiv mit Debian arbeitet, sammeln sich mit der Zeit so einige Dinge an. Ich meine hier speziell:
- Konfigurationsdateien, die man mühsam ausgearbeitet und verfeinert hat
- Skripte, also kleine Helferchen, die natürlich auch irgendwohin müssen
- Aliase und Abbreviations
- Schriften
- Themes, Icons, ...
Evtl. hat man dann noch mehrere Rechner (Workstation, Laptop, Server, ...) und will diese Sachen natürlich überall synchron verfügbar haben. Vielleicht kennt ja der/die ein oder andere dieses Problem.
Anfangs kopierte ich alles einfach von Rechner zu Rechner.
Heutzutage lässt sich das allerdings sehr viel eleganter lösen.
Es geht hier also um benutzerdefinierte Anwendersoftware und alle dazu benötigten Ressourcen. Wo kann man diese ablegen und wie hält man dies auf mehreren Rechnern synchron.
local vs. local
Heute geht es um "/usr", einem sehr wichtigen Systemverzeichnis, in dem zentral die gesamte Anwendersoftware und alle dazu benötigten Ressourcen liegen. Das Verzeichnis wird von dpkg/apt verwaltet, weshalb man hier besser nichts manuell ändern sollte. Für Änderungen gibt es zwei Verzeichnisse, welche "/usr" sozusagen überlagern:
Verzeichnis | Art | Verwalter | Verfügbarkeit |
---|---|---|---|
/usr | Systemverzeichnis | dpkg / apt | systemweit |
/usr/local | Systemverzeichnis | Root | systemweit |
~/.local | Benutzerverzeichnis | Benutzer | einzelner Benutzer |
Für benutzerdefinierte Programme/Ressourcen kann man also sagen:
- Soll etwas für alle Benutzer am Rechner verfügbar sein: --> "/usr/local"
- Soll etwas nur für einen selbst verfügbar sein: --> "~/.local"
Eigene Skripte und Programme
In den zuvor genannten 3 Verzeichnissen existiert jeweils ein Verzeichnis namens "bin", in welchem eigene Skripte/Programme abgelegt werden können.
Das Programm zu einem eingegebenen Befehl wird dann der Reihe nach wie folgt gesucht (vereinfacht dargestellt):
- ~/.local/bin
- /usr/local/bin
- /usr/bin
So sind die eigenen Programme/Skripte gut vom restlichen System isoliert.
Für die Verwendung von "~/.local/bin" muss meist noch die PATH-Variable manuell angepasst werden. Dies kann z.B. in der ".bashrc" oder ".zshrc" geschehen:
PATH=~/.local/bin:$PATH
Unterverzeichnisse
Neben "bin" existieren noch weitere Unterverzeichnisse, welche man gut nutzen kann. Ggf. müssen diese erst angelegt werden:
├── bin # Ausführbare Skripte/Programme
├── etc # Konfigurationsdateien
├── games # Spiele
├── include # Header-Dateien für Programmierung
├── lib # Bibliotheken
├── share # Architekturunabhängige Daten
├── src # Quellcode
Weitere Verzeichnisse können natürlich nach belieben hinzugefügt werden. So verwende ich unter "/usr/local" z.B. "etc" und "config" getrennt. Hier ein paar konkrete Beispiele:
/usr/local/bin # Systemweit verfügbare Skripte
/usr/local/share/color/icc # Benutzerdefinierte ICC-Farbprofile
/usr/local/share/fonts/truetype # Benutzerdefinierte TrueType-Fonts
/usr/local/share/fonts/opentype # Benutzerdefinierte OpenType-Fonts
/usr/local/share/icons # Benutzerdefinierte Icons
/usr/local/etc # Globale Konfigurationsdateien, welche von /etc verlinkt werden können
/usr/local/config # Konfigurations-Dateien welche von ~/.config verlinkt werden können
Teils ist es zum Gruppieren sinnvoll, noch ein entsprechendes Unterverzeichnis zu verwenden. Z.B.: "/usr/local/share/fonts/truetype/google" oder "/usr/local/config/helix"
Ist man der einzige Benutzer oder Admin eines Rechners, so kann ich die Arbeit mit "/usr/local" sehr empfehlen. Neben einem selbst können so natürlich auch andere Benutzer von den dort abgelegten Sachen profitieren. Sollte hingegen kein Root-Zugriff bestehen, nutzt man eben "~/.local".
Zentrale Konfigurations-Dateien
Hat man seine Konfigurationen zentral unter "/usr/local/config" liegen, so kann bei Bedarf einfach darauf verlinkt werden. Als Beispiel erwähnt, meine Helix-Konfiguration liegt unter "/usr/local/config/helix" worauf ich im Homeverzeichnis einfach verlinke:
cd ~/.config
ln -s /usr/local/config/helix
Synchronisieren
Anfangs (so vor 15 Jahren) versuchte ich, "/usr/local" mittels "rsync" zwischen den Rechnern zu synchronisieren. Dies ist zwar möglich, allerdings auch etwas mühsam wenn Änderungen an mehreren Rechnern vorgenommen wurden. Versuche mit "unison" funktionierten da besser, jedoch ist dieses Tool auch etwas unhandlich. Heutzutage verwende ich "git", was wirklich einwandfrei läuft. Alternativ kann natürlich "svn", "cvs" oder jedes beliebige Versionsmanagement verwendet werden.
Es gibt Leute, die ihr gesamtes Home-Verzeichnis in einem Git-Repository haben. Meist reicht es aber, eines der beiden "local"-Verzeichnisse mittels Versionsmanagement zu verwalten.
Ich persönlich nutze einen kleinen OrangePi-Zero als Git-Server, über den ich alle Rechner und Laptops im Haus synchron halten kann. Änderungen sind so überall schnell verfügbar und es gibt kaum Probleme, wenn an mehreren Rechnern etwas geändert wurde.
Kommentare
Ansicht der Kommentare: Linear | Verschachtelt