Block > Systembereinigung

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:

  1. 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.

  2. 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:

    1. Entweder liess sich dann eine Umgebungsvariable setzen, die ich in der Konfigurationsdatei meiner Shell (zsh) gesetzt habe:

      export ACKRC="$XDG_CONFIG_HOME/ack/ackrc"
      
    2. 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
      
    3. 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.

    4. 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.

  3. 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 :)

Geschrieben: 2014-08-28, 14:00 - Tags: linux, rm