Schlagwort-Archive: Shell

Awk: Sortierte Verzeichnisliste nach Grösse (inkl. Unterverzeichnisse)

Aufgabe: Alle Files/Dirs nach Grösse (inkl. Belegung der Unterordner) nach Grösse sortieren und anzeigen (in Datei usage.txt speichern).

Dazu in das Verzeichnis wechseln, dass ausgewertet werden soll.

du -bs * | awk '{printf "%012.0f %s \n",$1,$2 } ' | sort > usage.txt
  • du -bs * = zeige Grösse für alle Dateien in Byte (-b) für Datei und alle Unterdateien (-s = Summe) an
  • awk … = formatiere die erste Spalte in eine 12 stellige Float-Zahl (Integer hat MaxInt bei 2 Milliarden) und den Datei-/Verzeichnisnamen
  • sort = sortiere Liste aufsteigend nach der Grösse (absteigend = sort -r)

Liefert eine Datei „usage.txt“ mit Spalte Grösse und File/Verzeichnis aufsteigend sortiert nach Grösse.

du -bs * | awk '{ printf("%010.0f ",$1); for (i=2;i<=NF;i++){printf("%s ", $(i))}; print "\n"}' | sort 

Die obige Version kann auch mit Leerzeichen in Verzeichnissen umgehen (zB Mailordner), wo der Name aus den Spalten 2 bis n bestehen kann. Das Ausgabeformat für die Grösse wurde auf 10 Ziffern geändert. NF ist in awk eine Konstante mit der Anzahl der Spalten in der aktuellen Zeile.

ClusterShell CSSH Servereinstellungen laden

Wer bei mehereren Servern gleiche Tasks auf der Shell zu erledigen hat, der wird die ClusterShell (cssh) zu schätzen wissen. Dort kann auch eine Datei angelegt werden, die eine Liste mit Labeln/Servern enthält. Das erspart das lästige manuelle Hinzufügen während des Betriebs.

/etc/clusters heisst die Config-Datei für die Serverlisten.

Die Datei enthält ein Label für die Servergruppe und danach in einer Zeile eine Auflistung <user>@<server> durch Leerzeichen getrennt.

zB:

webserver user@server1 user@server2 ...

Der Aufruf erfolgt dann über

cssh webserver &

(wobei das kommerzielle Und / Ampersand den Task im Background ausführt). Beachte, dass zwischen dem Label und dem ersten Server nur ein Leerzeichen steht und kein Gleichheitszeichen oder ähnliches.

Shell: Leerzeilen und Kommentare in einer Konfig-Datei löschen

Um zB eine php.ini-Datei von Kommentaren und Leerzeilen zu „befreien“ folgendes eingeben:

sed '/^\;/d' php.ini > /tmp/php.ini && sed '/^$/d' /tmp/php.ini > php.ini && rm /tmp/php.ini

Der erste Teil lölscht die Kommentare, die bei php.ini mit einem Semikolon beginnen. Sollen Kommentare in einem ShellSkript gellöscht werden, dann müsste der sed-Befehl wie folgt lauten:

sed '/^\#/d' php.ini

Die Ausgabe wird in einer temporären Datei angelegt (im /tmp-Ordner) und später wieder gelöscht. In sicherheitskritischen Umgebungen eigenen Ordner verwenden.