Skip to content

Kommandozeilen-Anwendungen ...

Meine private Top 10 oder der Anwendungen für die Kommandozeile, vielleicht sollte ich eher sagen, dass das meine Lieblingsanwendungen sind und nicht unbedingt die, die ich am häufigsten benutze (dann müsste wenigstens sudo noch dazu).

Taskwarrior finde ich gut und dass sage ich nicht nur, weil ich im Core Team bin, sondern eher andersherum, ich bin im Core Team, weil Taskwarrior klasse ist. Taskwarrior zeigt, dass auch Kommandozeilenprogramme durch sinnvollen Einsatz von Farbe und durch übersichtliche leicht zu erlernbare Befehle sehr mächtig und nützlich sein können. Das lohnt sich auch für Leute, die die Kommandozeile "eigentlich" nicht mögen.

rsync macht, anders als Unison, nur Synchronisationen in eine Richtung. Dafür bringt rsync aber auch einen grossen Haufen an (mehr oder weniger) sinnvollen Optionen mit. Selbst lokal kopiere ich grössere Dateien nicht mehr mit cp, sondern mit rsync, da rsync auch eine Fortschrittsanzeige hat (rsync -Pha quelle ziel)

OpenSSH ist für mich eine Sammlung von universellen Werkzeugen, was Verbindung zu oder über andere Rechner angeht. rsync kann über OpenSSH laufen, Tunnel können gebaut werden, ein einfacher Proxy ist möglich und die Administration anderer Systeme wäre ohne OpenSSH kaum denkbar.

htop und vielleicht Iotop, was ich aber sehr selten nutze. htop ist ein hervorragender Ersatz für top, der einige hilfreiche Optionen mitbringt und zum Teil Funktionen von ps bzw. pstree obsolet macht.

SYSSTAT ist eine Sammlung von Werkzeugen, die bei der Analyse eines laufenden Systems helfen. Grafische Auswertungen sind mit kSar möglich. Schaut auch mal in den Beitrag zu Sysstat in den Adminstories.

Git ist für mich das Versionskontrollsystem, es hat so viele Vorteile und eine unglaublich reichhaltiges Umfeld an Werkzeugen, dass alles hier den Rahmen sprengen würde. CRE130 möchte ich immer noch als beste Einführung in das Thema verteile Versionskontrollsysteme im Allgemeinen und Git im Speziellen empfehlen.

SoX ist das "Schweizer Taschenmesser" der Audiobearbeitung auf der Kommandozeile. Bis auf Schnitt gibt es kaum etwas, was nicht möglich ist und kaum ein Format, das nicht unterstützt wird.

ack! ist wie die URL schon sagt "better than grep", schnell und vielseitig, es macht einfach Spass.

Perl hier zu nennen ist mir echt schwer gefallen, aber als ich mich vor die Wahl gestellt hatte, Perl oder awk hier zu nennen, ist die Wahl nicht schwer gefallen. Perl ist eine einfach zu lernende und sehr mächtige Programmiersprache, die auch sehr nützlich auf der Kommandozeile ist, wie Perl One Liners und Hot Perl Oneliners beweisen

cURL ist die eierlegende Wollmilchsau, was Dateiübertragungen angeht, die Features sind lesenswert und, wenn man sich einmal die Vergleichstabelle anschaut, sieht man schnell, dass es das stärkste Download- UND Upload-Werkzeug für eine Vielzahl von Protokollen ist.

Vim; sudo; host aus den Utilities von bind; whois - als Client für das Whois-Protokoll; rename (perl-rename in Sabayon); GNU screen nutze ich regelmässig und finde ich nützlich (ist aber weit entfernt von "toll"; awk; sudo; ... sind weitere gute Anwendungen, die ich auch mehr oder weniger regelmässig nutze, es aber nicht in die "Top 10" geschafft haben.

Kristóf Kovács: A little collection of cool unix terminal/console/curses tools

Cipher noch einmal ...

Auf Nachfrage von Alex in den Kommentaren dieses Artikels, habe ich den Test auch noch mit Localhost gemacht.

Mit diesem Skript:
#!/bin/bash

for cipher in 3des-cbc aes128-cbc aes192-cbc aes256-cbc aes128-ctr aes192-ctr aes256-ctr arcfour128 arcfour256 arcfour blowfish-cbc cast128-cbc
do
        echo ${cipher}
        for i in {1..3}
        do
                dd if=/srv/iso/ubuntu-10.04.1-server-i386.iso 2>/dev/null | ssh -o "Ciphers ${cipher}" localhost dd of=/dev/null 2>&1 | tail -1
        done
        echo
done

Der beste mittlere Wert ist wieder hervorgehoben:

3des-cbc
705077248 bytes (705 MB) copied, 43.7986 s, 16.1 MB/s
705077248 bytes (705 MB) copied, 46.7042 s, 15.1 MB/s
705077248 bytes (705 MB) copied, 43.7314 s, 16.1 MB/s

aes128-cbc
705077248 bytes (705 MB) copied, 9.3959 s, 75.0 MB/s
705077248 bytes (705 MB) copied, 9.46145 s, 74.5 MB/s
705077248 bytes (705 MB) copied, 9.94794 s, 70.9 MB/s

aes192-cbc
705077248 bytes (705 MB) copied, 10.3159 s, 68.3 MB/s
705077248 bytes (705 MB) copied, 10.6935 s, 65.9 MB/s
705077248 bytes (705 MB) copied, 10.9322 s, 64.5 MB/s

aes256-cbc
705077248 bytes (705 MB) copied, 11.2965 s, 62.4 MB/s
705077248 bytes (705 MB) copied, 11.8836 s, 59.3 MB/s
705077248 bytes (705 MB) copied, 11.4744 s, 61.4 MB/s

aes128-ctr
705077248 bytes (705 MB) copied, 13.4396 s, 52.5 MB/s
705077248 bytes (705 MB) copied, 13.4175 s, 52.5 MB/s
705077248 bytes (705 MB) copied, 12.8931 s, 54.7 MB/s

aes192-ctr
705077248 bytes (705 MB) copied, 16.1927 s, 43.5 MB/s
705077248 bytes (705 MB) copied, 13.1323 s, 53.7 MB/s
705077248 bytes (705 MB) copied, 15.8256 s, 44.6 MB/s

aes256-ctr
705077248 bytes (705 MB) copied, 15.2297 s, 46.3 MB/s
705077248 bytes (705 MB) copied, 17.889 s, 39.4 MB/s
705077248 bytes (705 MB) copied, 18.0179 s, 39.1 MB/s

arcfour128
705077248 bytes (705 MB) copied, 7.51314 s, 93.8 MB/s
705077248 bytes (705 MB) copied, 7.46925 s, 94.4 MB/s
705077248 bytes (705 MB) copied, 7.40912 s, 95.2 MB/s

arcfour256
705077248 bytes (705 MB) copied, 7.43831 s, 94.8 MB/s
705077248 bytes (705 MB) copied, 7.47133 s, 94.4 MB/s
705077248 bytes (705 MB) copied, 7.52313 s, 93.7 MB/s

arcfour
705077248 bytes (705 MB) copied, 7.16657 s, 98.4 MB/s
705077248 bytes (705 MB) copied, 7.33755 s, 96.1 MB/s
705077248 bytes (705 MB) copied, 7.10961 s, 99.2 MB/s

blowfish-cbc
705077248 bytes (705 MB) copied, 14.8319 s, 47.5 MB/s
705077248 bytes (705 MB) copied, 18.36 s, 38.4 MB/s
705077248 bytes (705 MB) copied, 15.9737 s, 44.1 MB/s

cast128-cbc
705077248 bytes (705 MB) copied, 21.3008 s, 33.1 MB/s
705077248 bytes (705 MB) copied, 25.2206 s, 28.0 MB/s
705077248 bytes (705 MB) copied, 19.5291 s, 36.1 MB/s


Und, was sagt das ganze nun?

Es gibt nicht den einen perfekten Cipher-Algorithmus, manche Cipher verlangen viel Power auf dem Server, andere viel Power auf dem Client. Man muss je nach Anwendungsgebiet den richtigen auswählen.

Cipher-Wahl für SSH-Kopieraktionen ...

Durch die geschickte Wahl der Cipher Suite bei Kopieraktionen über die SSH kann man sehr viel Transferzeit sparen.

Ich habe das einmal mit einem kleinen Skript getestet. Der Test wurde in einem 100 MBit/s-Netz gemacht. Sender und Empfänger hingen am gleichen Switch.
#!/bin/bash

for cipher in 3des-cbc aes128-cbc aes192-cbc aes256-cbc aes128-ctr aes192-ctr aes256-ctr arcfour128 arcfour256 arcfour blowfish-cbc cast128-cbc
do
    echo ${cipher}
    for i in {1..3}
    do
        scp -c ${cipher} stardust-lan:/srv/iso/ubuntu-10.04.1-server-i386.iso .
        rm *.iso
    done
    echo
done

Das führte zu diesem Resultat, die Kopieraktion, bei der der mittlere Wert am besten ist, habe ich fett markiert:

3des-cbc
ubuntu-10.04.1-server-i386.iso 100% 672MB 7.0MB/s 01:36
ubuntu-10.04.1-server-i386.iso 100% 672MB 6.7MB/s 01:41
ubuntu-10.04.1-server-i386.iso 100% 672MB 6.7MB/s 01:40

aes128-cbc
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.0MB/s 01:24
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.0MB/s 01:24
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.0MB/s 01:24

aes192-cbc
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.0MB/s 01:24
ubuntu-10.04.1-server-i386.iso 100% 672MB 7.6MB/s 01:29
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.3MB/s 01:21

aes256-cbc
ubuntu-10.04.1-server-i386.iso 100% 672MB 11.0MB/s 01:01
ubuntu-10.04.1-server-i386.iso 100% 672MB 9.9MB/s 01:08
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.3MB/s 01:05

aes128-ctr
ubuntu-10.04.1-server-i386.iso 100% 672MB 7.9MB/s 01:25
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.1MB/s 01:23
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.1MB/s 01:23

aes192-ctr
ubuntu-10.04.1-server-i386.iso 100% 672MB 11.0MB/s 01:01
ubuntu-10.04.1-server-i386.iso 100% 672MB 11.2MB/s 01:00
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.7MB/s 01:03

aes256-ctr
ubuntu-10.04.1-server-i386.iso 100% 672MB 9.1MB/s 01:14
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.2MB/s 01:06
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.7MB/s 01:03

arcfour128
ubuntu-10.04.1-server-i386.iso 100% 672MB 9.3MB/s 01:12
ubuntu-10.04.1-server-i386.iso 100% 672MB 9.2MB/s 01:13
ubuntu-10.04.1-server-i386.iso 100% 672MB 9.3MB/s 01:12

arcfour256
ubuntu-10.04.1-server-i386.iso 100% 672MB 11.0MB/s 01:01
ubuntu-10.04.1-server-i386.iso 100% 672MB 11.2MB/s 01:00
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.9MB/s 01:02

arcfour
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.7MB/s 01:03
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.7MB/s 01:03
ubuntu-10.04.1-server-i386.iso 100% 672MB 10.2MB/s 01:06

blowfish-cbc
ubuntu-10.04.1-server-i386.iso 100% 672MB 9.1MB/s 01:14
ubuntu-10.04.1-server-i386.iso 100% 672MB 9.2MB/s 01:13
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.9MB/s 01:16

cast128-cbc
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.3MB/s 01:21
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.4MB/s 01:20
ubuntu-10.04.1-server-i386.iso 100% 672MB 8.6MB/s 01:18


66% Differenz in der Zeit im Extremen ist ein guter Grund, sich darüber Gedanken zu machen. Bei Kopieraktionen über das Internet lohnt sich zusätzlich noch, die Kompression einzuschalten.

Wichtig: Das sagt nur etwas über Übertragungszeiten und nicht über die Qualität der Ciphers aus!

Anwendung ("-C" oder "Compression yes" nur bei langsamen Netzwerken):
scp -c aes192-ctr -C quelle host:/ziel
rsync -avze 'ssh -o "Ciphers aes192-ctr" -o "Compression yes"' quelle/ host:/ziel/

Oder gleich als Eintrag in die ~/.ssh/config:
Host *
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour
Compression yes


Achtung: In der Config sollte man direkt mehrere Ciphers in Reihenfolge der eigenen Präferenzen eintragen, es kann sein, dass ein entferntes System eine bestimmte Cipher nicht beherrscht.

sysstat und kSar ...

Die kleinen Helferlein zum Performance-Monitoring aus der sysstat-Sammlung werden vermutlich einige von Euch kennen. Falls nicht, lasst Euch von der hässlichen Homepage nicht blenden ... "Niemals ein Buch nach seinem Einband beurteilen!".

Einige Basis-Informationen sind in diesem Blog hier zu finden, auf das ich nach der Suche der eigentlichen Homepage gestossen bin.

Die eigentliche Stärke von sysstat ist allerdings das periodische Aufzeichnen von Performance-Werten. Dazu muss man auf einem Ubuntu- oder Debian-System nach der Installation in der Datei /etc/default/sysstat enabled auf "true" setzen und fertig.

Im Standard zeichnet sar (System Activity Report) in je 10 Minuten einen Wert auf, wenn man das ändern möchte, kann man andere Zeitvorgaben in der Datei /etc/cron.d/sysstat machen.



Ein "sar -A" zeigt wie viele Werte aufgezeichnet werden und da ist ein grafischer Helfer willkommen. Der lässt sich in kSar finden. Dieses Programm kann auch per SSH auf einem entfernten Host die Daten suchen und grafisch aufbereiten. Oben seht Ihr die CPU-Werte des root-Servers von gestern.

Neben einzelnen Grafiken lässt sich auch ein kompletter Report im PDF-Format erstellen: ywc.pdf

Gelöscht und nicht freigegeben ...

linux Einer der grossen Stolpersteine, die Nutzern im Weg liegen, sind Dateien, die sie gelöscht haben, deren Speicherplatz aber nicht freigegeben wurde.

Um das Problem zu verdeutlichen, erzeuge ich einmal eine 1 GB Datei:

$ dd if=/dev/zero of=/tmp/GB-Datei bs=1024 count=1048576

$ df -h /tmp
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             142G  118G   17G  88% /

In einem zweiten Fenster lese ich jetzt die Datei mit less

less /tmp/GB-Datei

Jetzt lösche ich die Datei im ersten Fenster:

rm /tmp/GB-Datei

df -h /tmp
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             142G  118G   17G  88% /

Der Speicherplatz wurde nicht freigegeben, weil noch ein Prozess die Datei benutzt. Um herauszufinden wer noch offene Dateien hat, hilft der Befehl lsof (list open files, Lektüre der man-page lohnt sich!).

lsof | grep deleted
less      2204       dirk    4r      REG                8,1 1073741824    2621637 /tmp/GB-Datei (deleted)

ps -fp 2204
UID        PID  PPID  C STIME TTY          TIME CMD
dirk      2204  1807  7 17:26 pts/0    00:00:25 less /tmp/GB-Datei

Wenn jetzt das less-Kommando verlassen wird, ergibt sich:

df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             142G  117G   18G  87% /

Einen Hinweis noch am Ende. Sehr häufig gibt es die Herausforderung, dass das Log eines Serverdienstes zu gross wird und man kein Wartungsfenster bekommt, um die Logdateien wegzuräumen.

Wenn wirklich dringend Platz geschaffen werden muss, kann man mit

cat /dev/null > logdatei

oder

> logdatei

Die Datei auf null Bytes verkleinern. dabei wird das Dateihandle nicht verändert, der Serverdienst logged also weiter in die gleiche Datei.