Ein Debian basiertes System (Debian, Ubuntu, Kubuntu,…, Mint) aktualisieren:

sudo apt-get update
sudo apt-get upgrade

und zurückgehaltene Pakete auch aktualisieren:

sudo apt-get dist-upgrade

Alternativ kann man das noch kürzere und für den Endbenutzereinsatz stabil gehaltene Kommando apt verwenden:

sudo apt full-upgrade

Bitte hier die zugehörige man page konsultieren. Es sind nicht alle Optionen, die apt-get unterstützt auch mit apt verfügbar.

Achtung! Hier gibts absolute Grundlagen für egrep, awk, xargs und Unix Pipe. Die hier vermittelten Elemente lassen sich beliebig für andere Einsätze kombineren. Dieses Unterkapitel geht davon aus, dass man bereits als root user angemeldet ist. Dies kann z.B. durch das Kommando sudo su erfolgt sein.
Schauen wir uns zuerst an, welche Pakete auf dem lokalen System installiert sind.
Alle installierten Pakete ausgeben:

 dpkg -l

Beispiel(teil)ausgabe:

ii  xserver-xorg-video-vesa       1:2.3.4-1build2     amd64               X.Org X server -- VESA display driver
rc  xserver-xorg-video-vmware     1:13.1.0-2ubuntu3   amd64               X.Org X server -- VMware display driver
ii  xsltproc                      1.1.28-2.1ubuntu0.1 amd64               XSLT 1.0 command line processor
ii  xtrans-dev                    1.3.5-1             all                 X transport library (development files)
rc  xviewer                       1.2.2+serena        amd64               Image viewer program

Wenn man sich die Liste auf einem System anschaut, das bereits eine Weile installiert ist, werden einem zwischen den Zeilen die mit ii beginnen - und installierte Pakete anzeigen, viele auffallen, die den Status rc haben. Der Status bedeutet:

  • r - remove
  • c - configuration


Will heißen: Das eigentliche Paket ist entfernt worden, die Konfiguration des Pakets aber noch vorhanden. Das sind in der Regel Einstellungsdateien und Verzeichnisse irgendwo im System. Da die noch existieren wacht der Paketmanager auch weiter über diesen Eintrag. Es könnte ja sein, das man dieses Paket doch wieder installiert.
Wann und wieso passiert das automatisch?
Immer wenn man apt-get mit remove aufruft, aber auch wenn Pakete mit autoremove entfernt werden. Um diese Hinterlassenschaften zu beseitigen - in der Mehrzahl ist das Abfall - Könnte man jeden einzelnen der betroffenen Paketnamen kopieren und mit apt-get purge aufrufen. Aber das wäre sehr langwierig und garnicht Unix-like.

 Ziel Definition: Wir wollen möglichst automatisch alle installierten, aber entfernten Paketnamen im Status
 "rc" rückstandsfrei aus dem System entfernen. Nach Möglichkeit mit nur einem Aufruf.

Beginnen wir damit erstmal nur diese Pakete auszugeben. Das Kommando egrep unterstützt mit der Option -e ein Pattern. Wer mehr wissen möchte bitte auf der man Page von egrep nachschlagen. ^rc bedeutet das die Zeile mit den Zeichen rc beginnen muss.

 STRATEGIE: Baue deine Pipe Schritt für Schritt auf.
 Kontorlliere die Einzelergebnisse, bevor du weiter gehst und das nächste Element anbaust.
Nun bauen wir eine Pipe, die die Ausgabe des ''dpkg -l''  mit der Eingabe des ''egreps''  verbindet. \\ Alle Pakete mit dem Status ''rc''  anzeigen:
 dpkg -l | egrep -e "^rc"

Die Ausgabe:

 rc  xserver-xorg-video-vmware     1:13.1.0-2ubuntu3   amd64               X.Org X server -- VMware display driver
 rc  xviewer                       1.2.2+serena        amd64               Image viewer program

Ok, schonmal alles mit 'ii' vorne ist verschwunden.
Der nächste Schritt ist: Wir wollen nur die Paketnamen, nicht den Status und auch nicht die weitere Beschreibung. Und so schneiden wir das Feld mit dem Paketnamen heraus:

dpkg -l | egrep -e „^rc“ | awk '{print $2}'

Dazu ein paar Worte. Das Kommado awk ist der Urvater aller Parsersprachen unter Unix. Noch älter als Perl. Es bietet neben zahlreichen weiteren Funktionen eine einfache Funktion um Leerzeichen/Tab getrennte Felder aus einer Zeichenkette zu lesen. Das machen wir uns hier zu nutze. print $2 übernimmt nur das zweite Feld aus jeder Zeile in die Ausgabe. An dieser Stelle sind die Paketnamen. Da diese keine Leerzeichen enthalten dürfen ist dies eine sichere Methde.
Die Ausgabe:

 xserver-xorg-video-vmware
 xviewer

Fast am Ziel!
Und so nutzen wir diese Liste als Optionen für das Kommando apt-get –yes purge. Damit entledigen wir uns auf einen Schlag von allen diesen Überbleibseln.

 dpkg -l | egrep -e "^rc" | awk '{print $2}' | xargs apt-get --yes purge

Ok, hier gleich zwei Dinge, die Erklärung brauchen.

  1. xargs - ist ein Kommando, das von der Eingabe liest und alle Zeilen als Optionen an ein weiteres Kommando anreiht. Das Kommando, das xargs aufruft ist apt-get –yes purge
  2. apt-get –yes purge - Entfernt die Pakete rückstandsfrei. Allerdings fragt apt-get vor der Ausführung den User um Bestätigung. Da apt-get hier von xargs aufgerufen wird und nicht vom User direkt, kann man keine Bestätigung geben. Dehalb muss die Option –yes angegeben werden, um alle Fragen des apt-get mit „Yes=Ja“ zu beantworten. Damit läuft die Reinigung schnell durch.

WARNUNG! WARNUNG! Kleine Änderung sehr große Wirkung! Wer sein System komplett löschen möchte, sollte als Pattern für egrep nicht „^rc“ sondern „^ii“ angeben oder das egrep ganz weglassen. Dann löscht diese Kommandokette das komplette System. Also an der Stelle bitte vorsichtig sein.
Für Nebenwirkungen übernehme ich keine Haftung.

Den kennt jeder:

tail -f /pfad/zur/Logdatei

Konkret:

tail -f /var/log/syslog

Verlassen mit Strg+C

Aber besser ist:

less /var/log/syslog

Und dann Shift+F drücken. Mit Strg+C kommt man zurück in den Textviewer um z.B. zurück zu scrollen oder zu Suchen. Mit „q“ kann man den Textviewer verlassen.

Das ist z.B. nützlich bei Aktivtäten die länger dauern, denen man mit einem (oder mehreren) Kommando(s) den Status abfragen kann. Beispiel: Das Kopieren einer großen Datei. Wir stellen uns vor, das Kopieren läuf bereits. Wir wollen aber sehen wie groß die Zieldatei schon ist. Das geht z.B. so:

while true ; do ls -l /pfad/zur/Datei ; sleep 1 ; done

Mit diesem Konstrukt wird einmal die Sekunde ein ls -l auf eine Zieldatei gemacht. Das läßt sich aber mit jedem beliebigen Kommando machen.

Nützliche Zusätze - den Screen mit dem Kommando clear löschen, vor der Ausgabe:

while true ; do clear ; ls -l /pfad/zur/Datei ; sleep 1 ; done

Soll ja schonmal vorkommen, das das kleine System mal seine Platte voll gemacht hat. Dann sollte man sich auf die Suche machen, wo die großen Dateien liegen.

Methode 1: „find ist dein Freund.“

Zeige alle Dateien größer, gleich 100 Megabyte.

 find /start/verzeichnis -size +100M -ls

Methode 2: „du it.“
Das Kommando du - für Disk Usage - Es zeigt die Größe, die Verzeichnisse mit den darin enthaltenen Verzeichnissen und Dateien einnehmen:

 du /start/verzeichnis

Das Ergebnis ist noch nicht so lesbar. Es zeigt die Anzahl Bytes an:

 [...]
 84772    /home/klaus/Bilder/2015-05-05
 601832    /home/klaus/Bilder/2015-05-12
 32828    /home/klaus/Bilder/2015-05-22
 21176    /home/klaus/Bilder/Projekt
 372    /home/klaus/Bilder/Webcam
 2276    /home/klaus/Bilder/2015-08-09
 8750516    /home/klaus/Bilder/
Nehmen wir noch die Option "-h" (human readable) dazu:
 du -h /start/verzeichnis
Aha, schon besser…
 [...]
 83M    /home/klaus/Bilder/2015-05-05
 588M    /home/klaus/Bilder/2015-05-12
 33M    /home/klaus/Bilder/2015-05-22
 21M    /home/klaus/Bilder/Projekt
 372K    /home/klaus/Bilder/Webcam
 2,3M    /home/klaus/Bilder/2015-08-09
 8,4G    /home/klaus/Bilder/

Und? Wo ist das größte Verzeichnis und die größte Datei? Nicht so einfach bei 100 Zeilen.. aber damit gehts:

 du -h /start/verzeichnis | sort -h

Aha, wunderbar. Da haben wir ja die Übeltäter.

 [...]
 17M    /home/klaus/Bilder/2015-09-24
 21M    /home/klaus/Bilder/2015-11-02
 21M    /home/klaus/Bilder/Projekt
 33M    /home/klaus/Bilder/2015-05-22
 40M    /home/klaus/Bilder/2015-10-30
 83M    /home/klaus/Bilder/2015-05-05
 248M    /home/klaus/Bilder/2015-09-17
 329M    /home/klaus/Bilder/2015-07-12
 588M    /home/klaus/Bilder/2015-05-12
 8,4G    /home/klaus/Bilder/

Das Kommando sort sortiert Zeilen nach einstellbaren Kriterien. Hier mit der Option -h sortiert es auf human readable Größen. Heißt es beachtet die Größenordnngen M, G, T etc. - 1G ist mehr als 100M. Sort kann noch viel mehr. Wenn man es umgekehrt sortiert haben möchte, fügt man die Option „-r“ für reverse ein. Man kann das Feld angeben, nach dem sortiert wird. Alles erklärt in der man Page.

Sagen wir nun, wir möchten nur die Top 5 in der Ausgabe haben.. Dann machen wir einfach noch ein tail dazu..

 du -h /start/verzeichnis | sort -h | tail -5''
Ergebnis - nur die letzten 5 Zeilen der Ausgabe erscheinen:
 83M    /home/klaus/Bilder/2015-05-05
 248M    /home/klaus/Bilder/2015-09-17
 329M    /home/klaus/Bilder/2015-07-12
 588M    /home/klaus/Bilder/2015-05-12
 8,4G    /home/klaus/Bilder/

tail ist die Universalschere für das Ende eines Textstroms. Man gibt als Option an, wieviele Zeilen Ausgabe vom Ende noch herauskommen sollen. Die Option -100 gibt z.B. bis zu 100 Zeilen aus. Das ist immer mal nützlich wo man nicht weiß wieviel da ansonsten kommt.

Und nun ein Beispiel, wie man einfache Dinge kompliziert machen kann. Wir möchten das Startverzeichnis nicht in der Ausgabe haben. Könnte man auf die Idee kommen es so zu machen: „Erst schneiden wir die letzen 6 Zeilen aus und dann nehmen wir davon die obersten 5 Zeilen.“

 du -h /start/verzeichnis | sort -h | tail -6 | head -5
Das Kommando ''head''  ist sozusagen das Gegenteil zu ''tail''. Man kann wie oben vorgehen um bestimmte Bereiche einer Textdatei in die Ausgabe zu bekommen. Ist aber unschön. ''head''  funktioniert genau wie ''tail''. Also mit der Anzahl Zeilen als Option, nur dieses Mal von Oben gezählt. Eine Option ''-f''  gibt es allerdings nicht bei ''head''. Dateien werden in der Regel nach Unten verlängert, nicht nach Oben. \\ Also die Kombi ''tail'' +''head''  geht, aber… vielleicht wäre etwas anderes besser… Denn man erinnert sich nach 3 Monaten wohl möglich nur noch ungefähr dran, was das sollte. Und die jetzige Liste bezieht nicht die Dateien ein, die im Startverzeichnis selbst liegen. Die wurden nur dem Startverzeichnis hinzugezählt. \\ Also vielleicht besser so:
 du -h /start/verzeichnis/* | sort -h | tail -5

Man beachte das * hinter dem Verzeichnis. Der letzte Schrägstrich vor dem * ist dabei wichtig. Dies weist die Unix Shell an alle Dateien und Verzeichnisse unter dem Startverzeichnis an das Kommando du zu übergeben. Das Kommando sieht die Optionen also so:

 du -h /start/verzeichnis/unterverzeichnis1 /start/verzeichnis/verzeichnis2 /start/verzeichnis/dateiA

Und so geht das weiter. du zählt dann für jedes dieser Einzelverzeichnisse die Größe.
Und Tataa, da verbergen sich doch tatsächlich die größten Dateien - doppelt und dreifach so groß wie das größte Verzeichnis:

 329M    /home/klaus/Bilder/2015-07-12
 588M    /home/klaus/Bilder/2015-05-12
 1,1G    /home/klaus/Bilder/IMGP1796.MOV
 1,4G    /home/klaus/Bilder/FlugMitHeartlakeAirlines.MOV
 1,4G    /home/klaus/Bilder/Petriheil.MOV

Apropos: das Kommando du zeigt rekursiv die Größe aller Verzeichnisse an. Wenn man nur die oberste Ebene sehen möchte ist die Option -s (summary) nützlich (man kann die Optionen anreihen, so lange sie keinen zweiten Parameter erfordern):

 du -sh /start/verzeichnis/* | sort -h | tail -5
  • klaren/klarensshellkochbuch/basedocument.txt
  • Zuletzt geändert: 2020/12/30 20:18
  • von klaren