Da bei mir gerade Hausputz angesagt ist, wollte ich auch digital
mal mein System entruempeln, denn da hat sich ueber die Jahre maechtig
viel Kram angesammelt ...
Nebeninfo: das Alter der aktuellen Distribution kann ueber folgenden
Befehl herausgefunden werden:
$ ls -ld /lost+found
drwx------ 2 root root 16384 May 24 2011 /lost+found/
Hier stelle ich ein paar Loesungen vor, das digitale /home
(und auch
den Rest der Festplatte) zu entschlacken.
Generell
Da wir gerade am aufraeumen sind, koennen ja auch mal die ganzen toten
Links geloescht werden, die sich so ueber die Jahre angesammelt haben.
Das geht ganz einfach mit (Quelle):
# find / -type l -! -exec test -e {} \; -print
Diese Liste kann dann nach und nach durchgegangen werden und die Links
alle einzeln geloescht werden oder direkt so (aber erst
kontrollieren!):
# find / -type l -! -exec test -e {} \; -delete
Es gibt auch spezielle Programme, die uns die Aufraeumarbeit etwas
erleichtern koennen. BleachBit (aehnlich zum Programm CCleaner unter
Windows) raeumt dabei z.B. die Caches verschiedener Browser auf,
beseitigt (mit u.U. etwas laengerer Wartezeit) alle .DS_Store
- und
Thumbs.db
-Dateien von OS X bzw. Windows oder loescht alle nicht
benoetigten Lokalisierungen (= Sprachdateien).
Installiert werden kann es mit folgendem Befehl:
# pacman -S bleachbit
Da es mit normalen Rechten nicht Systemdateien wie z.B. die
Lokalisierungen loeschen kann und es umgekehrt mit Root-Rechten nicht
die Caches der $USER
-Browser leeren kann, muss es zweimal ausgefuehrt
werden, einmal mit und einmal ohne Root-Rechte, um wirklich alles zu
loeschen.
Pakete
Ein weiterer Sammelplatz fuer viel Kram sind die Pakete, die via
Paketverwaltung installiert wurden. Noch schlimmer wird es nur durch
Pakete im AUR oder selbst kompilierte Pakete.
Da ja nach "Don't try this at home"-Manier nie alle Paketdateien
geloescht werden sollten, da ja unter Umstaenden ein Downgrade
durchgefuehrt werden muss, hilft nur eine teilweise Bereinigung der
alten Paketdaten.
Dafuer gibt es mit paccache
ein eigenes Programm, das mit pacman
daherkommt (Quelle).
Um maximal drei Versionen eines Paketes aufzubewahren, reicht
folgender Befehl:
$ paccache -r
Dabei werden aber auch Versionen schon nicht mehr installierter
Pakete beibehalten, die aber eigentlich nicht mehr benoetigt werden.
Die koennen so direkt geloescht werden:
$ paccache -ruk0
Paccache hat noch ein paar mehr Optionen, die sich per paccache -h
anzeigen lassen.
Auch noch ab und zu sinnvoll ist das optimieren der
Paketverwaltungsdatenbank. Diese besteht naemlich aus vielen kleinen
Dateien, die ueber die ganze Festplatte verstreut liegen. Der folgende
Befehl sammelt diese ein und platziert sie so um, dass sie alle nah
beinander auf der Festplatte liegen, damit der Lese-Schreibkopf sich
nicht so viel bewegen muss (Quellen: Arch Linux Wiki und
pacman-optimize -h
):
# pacman-optimize && sync
Ueber die Jahre sammeln sich auch generell viele "Orphans" an, also
Pakete, um die sich niemand seit dem letzten Update
gekuemmert hat. Diese koennnen wie folgt aufgelistet werden
(Quelle):
$ pacman -Qtdq
Sollen diese Orphans direkt alle auf einmal geloescht werden, reicht
dieser Befehl aus (Achtung!):
# pacman -Rns $(pacman -Qtdq)
Um mal die Liste der explizit installierten Pakete aus den offiziellen
Paketquellen (Repositories) zu entschlacken,
kann folgender Befehl verwendet werden (Quelle):
$ pacman -Qen
Und folgender Befehl schliesslich listet alle explizit installierten
Pakete aus den inoffiziellen Paketquellen auf:
$ pacman -Qem
$HOME/.*
Sofern nicht von Anfang an die XDG Spezifikation umgesetzt wurde, hat sich
das $HOME
mit all den versteckten Dateien in ein wahres Schlachtfeld
verwandelt, denn natuerlich will jedes Programm mitmachen und legt die
Konfigurationsdateien schoen brav direkt ins $HOME
ab und raeumt diese
auch nicht weg, wenn es deinstalliert wird.
Um XDG zu "aktivieren", d.h. einige Umgebungsvariablen zu definieren,
reicht es, in der Shell-Konfigurationsdatei (z.B. .bashrc
oder
.zshrc
) folgende Zeilen hinzuzufuegen:
export XDG_CONFIG_HOME="$HOME/.config"
export XDG_DATA_HOME="$HOME/.local/share"
export XDG_CACHE_HOME="$HOME/.cache"
Danach reicht ein simples source ~/.bashrc
bzw. source ~/.zshrc
um
die Variablen zu setzen (oder einfach eine neue Shell aufmachen).
Ich habe leider nicht vor dem Aufraeumen gezaehlt, aber es waren
bestimmt ueber 150 versteckte Dateien und Ordner bei mir im Home.
Nun sind es nach einigem Aufraeumen 88:
$ ls -d .* | wc -l
Hier hilft leider kein Programm, zumindest habe ich kein brauchbares
gefunden.
Letztendlich bin ich alle Dateien nach und nach nach folgendem Prinzip
durchgegangen:
Ist das Programm ueberhaupt noch installiert? Dazu habe ich einfach
die Paketdatenbank gefragt ($NAME
sollte sich von der Datei ableiten,
also z.B. heisst die Datei .tmux.conf
, dann sollte das Paket und
damit $NAME
tmux
sein):
$ pacman -Qs $NAME
Wenn der Befehl nichts findet, ist das Programm unter Umstaenden
nicht installiert, und die Datei kann geloescht werden.
Vorsichtshalber habe ich die Datei zuerst in einen Ordner TRASH
verschoben, den ich nach einiger Benutzungszeit loesche.
Kann die Datei auch nach dem XDG-Prinzip wo anders abgelegt werden?
Da half nur die jeweilige Hilfe bzw. Manpage oder eine
Suchmaschine mit "XDG $NAME" weiter.
Dabei gab es folgende Moeglichkeiten:
Entweder liess sich dann eine Umgebungsvariable setzen, die ich in
der Konfigurationsdatei meiner Shell (zsh
) gesetzt habe:
export ACKRC="$XDG_CONFIG_HOME/ack/ackrc"
Oder das Programm erwartet von sich aus die
Konfigurationsdateien nach dem XDG-Schema, dann konnte die Datei
einfach in den jeweilgen Ordner verschoben werden:
$ mkdir $XDG_CONFIG_HOME/git && mv ~/.gitk $XDG_CONFIG_HOME/git/gitk
Oder es sind zwar einige Hacks noetig, aber es geht. Spezielle
Kandidaten sind z.B. vim
(Anleitung) und zsh
(Anleitung).
Wenn die viminfo
nicht direkt in den Cache wandert, hilft
vielleicht diese Loesung.
Die ZSH hat nun bei mir immer noch eine Datei im $HOME
, naemlich
.zshrc
. Denn dort werden ja die ganzen XDG-Pfade erst definiert.
Ansonsten fuehrt das zur Configception oder so ;)
Der Pfad zur .zshrc
kann auch in /etc/profile
festgelegt
werden (Quelle), ich hab mich aber damit nun abgefunden.
Oder aber das Programm unterstuetzte weder Umgebungsvariablen
noch XDG. In diesem Falle gibt es zwei Moeglichkeiten: den
Quellcode via ABS runterladen, aendern und kompilieren oder (von
mir bevorzugt) aufgeben.
Eine gute Anlaufstelle hierbei ist das Debian Wiki.
Wird das Programm ueberhaupt noch benoetigt? Bei meiner Reise durch
die ganzen Konfigurationsdateien bin ich immer wieder auf Programme
gestossen, die ich seit Jahren (ok, Monaten) nicht benutzt habe bzw.
einfach nicht benoetige.
Da macht es dann schon Sinn, diese einfach zu deinstallieren:
# pacman -Rns $NAME
Es macht uebrigens Sinn, nicht nur -R
zu verwenden, um ein Paket
zu entfernen, denn -n
sorgt dafuer, dass auch die
Konfigurationsdateien geloescht werden und -s
, dass keine
"Orphans" zurueckbleiben (also die nicht benoetigten und
nicht selbst installierten Abhaengigkeiten). Fuer mehr Infos: siehe
man pacman
.
Danach kann die Datei bzw. der Ordner geloescht werden.
In Zukunft gilt es nun, direkt bei der Installation eines neuen
Programms die Moeglichkeit zu ueberpruefen, XDG zu nutzen.
Wahrscheinlich ist aber der Beste Ansatz, von neu anzufangen.
Also:
# mv /home/NAME /home/NAME.bak && mkdir /home/NAME
Und dann die wichtigen Dateien rueberkopieren, also zumindest mal
angefangen mit den Shell-Konfigurationsdateien.
Altes und alles andere
Christian hat einen guten Beitrag zur Entruempelung geschrieben, in
dem er mit einem kleinen Skript mit find
, grep
und gawk
Dateileichen findet, um sie dann durchzusehen und ggf. zu loeschen.
Dieses Skript hat auch mir schon geholfen :)
Ein anderer Weg ist, mit einem Programm die Speicherbelegung der
Ordner im $HOME
anzuzeigen, um dann die groessten Dateien zu
entfernen.
Ein solches Programm ist z.B. ncdu, welches wie folgt installiert
werden kann:
# pacman -S ncdu
Nach der Aufraeumaktion gilt es, von nun an moeglichst die Vermuellung
zu vermeiden.
Wie das gehen koennte, hat Vain in einem Artikel beschrieben (auch
die Kommentare beachten).
Viel Spass beim entruempeln :)