Worüber ist unser Vortrag

Linux ist eine Schatzkiste voller Werkzeuge. Darin befinden sich gut bekannte wie ls, cd, mkdir, touch, cat und grep. Aber da ist noch viel mehr. Wir freuen uns, unsere Liste der tollen Werkzeuge, die wir gefunden haben, mit Euch zu teilen. Damit wird euer Leben als Linux-Benutzer, Admin und Entwickler einfacher. Schatzsuche vom Feinsten.

Wer wir sind

Axel Beckert

Linux-Systemadministrator und Spezialist für Netzwerksicherheit an der ETH Zürich. Debian-Entwickler und Administrator von debian.ethz.ch aka ftp.ch.debian.org. Vorstandsmitglied der Linux User Group Switzerland (LUGS). Hochgeschätzter Co-Moderator des Schweizerisch-Deutschen Podcasts Hackerfunk.

Frank Hofmann

IT-Spezialist mit dem Blickwinkel auf Training (LPI), Technische Dokumentation und Druck & Satz. Digitaler Nomade. Unabhängiger Autor für LinuxUser. Nach Berlin und Cape Town lebt er derzeit in Besançon, Franche-Comté. Mit Kind, Frau und ohne Katze.

Seit 2012 schreiben und betreuen wir das Debian Paketmanagement-Buch.

Was wir hier tun

Über die Liste der Werkzeuge

fmt (coreutils)

fold (coreutils)

column (bsdmainutils)

comm (coreutils)

join (coreutils)

paste (coreutils)

rev (util-linux)

$ echo Hallo | rev
ollaH
$

Gibt es einen Straßenatlas, in dem die Ortsnamen nach Endsilben sortiert sind?

Der tiefere Sinn des Labenz; Seite 220
— Sven Böttcher
$ zcat /usr/share/misc/countries.gz | awk -F: '{print $4}' | rev | sort | rev | tail -10
Vanuatu
Paraguay
Uruguay
Norway
Turkey
Italy
Germany
Hungary
British Indian Ocean Territory
Occupied Palestinian Territory
$

tac (coreutils)

$ cat adressen
CH-1000 Lausanne
D-20000 Hamburg
F-25000 Besancon
ZA-8000 Cape Town
$
$ tac adressen
ZA-8000 Cape Town
F-25000 Besancon
D-20000 Hamburg
CH-1000 Lausanne
$

shuf (coreutils) und unsort (unsort)

expand und unexpand (coreutils)

$ cat namen
Nummer  Name
15672   Anna Fischer
31984   Holger Meier
21564   Werner Baumgarten
15670   Gottfried Scherz
$ expand -t 10 namen
Nummer    Name
15672     Anna Fischer
31984     Holger Meier
21564     Werner Baumgarten
15670     Gottfried Scherz
$

numfmt (coreutils)

Konvertierung Kommando Resultat

vom SI

numfmt --from=si 1K

1000

von IEC

numfmt --from=iec 1K

1024

von IEC-i

numfmt --from=iec-i 1Ki

1024

nach SI

numfmt --to=si 2048

2,1K

nach IEC

numfmt --to=iec 2048

2,0K

nach IEC-i

numfmt --to=iec-i 2048

2,0Ki

$ cat verkäufe | numfmt --header=2 --field 2 --to=si
Produkt  Menge
 --------------
Schuhe    146K
Hüte      5,7K
Socken     32K
Hosen     516K
$

timeout (coreutils) und timelimit (timelimit)

timeout.png
Figure 1. Begrenzung der Laufzeit auf 10 Sekunden
Begrenze tail auf 10 Sekunden
$ timelimit -t10 tail -f /var/log/messages

sponge (moreutils)

Wo bzw. warum sponge gebraucht wird.

$ echo foo > bar
$ cat bar | sed -e s/foo/fnord/ > bar
$ cat bar
$

Mit sponge funktioniert das.

$ echo foo > bar
$ cat bar | sed -e s/foo/fnord/ | sponge bar
$ cat bar
fnord
$

Status- und Fortschrittsbalken: Übersicht

Durchflußmesser

Typischer Aufruf: lese-kommando | durchflußmesser | schreib-kommando

  • pv (pv)
  • pipemeter (pipemeter)
  • bar (bar)
  • dd (coreutils)
  • cpipe (cpipe)

Messung anhand von Lese- oder Schreibposition

  • progress (progress)

pv (pv) + pipemeter (pipemeter) + bar (bar)

Beispiele für pv

$ zcat 9pi.img.gz | pv > /dev/null
 480MiB 0:00:04 [ 116MiB/s] [       <=>                         ]
$ zcat 9pi.img.gz | pv -s 480M > /dev/null
 178MiB 0:00:02 [76.5MiB/s] [===========>                       ] 37% ETA 0:00:03
$

Beispiele für pipemeter

$ zcat 9pi.img.gz | pipemeter > /dev/null
 120.00M/s  480.00M    8.00k   0:00:04
$ zcat 9pi.img.gz | pipemeter -s 480M > /dev/null
[********------------------------]  115.18M/s  115.18M  24.0%   0:00:03
[…]
[********************************]  120.00M/s  480.00M 100.0%   0:00:04
$

Beispiele für bar

$ zcat 9pi.img.gz | bar > /dev/null
 480.0MB at  120.0MB/s  elapsed:   0:00:04
Copied: 503316480B (480.0MB)
Time:  4 seconds
Throughput: 125829120B (120.0MB/s)
$ zcat 9pi.img.gz | bar -s 480M > /dev/null
 119.1MB at   59.5MB/s  eta:   0:00:06   24% [=========                         ]
[…]
 480.0MB at  120.0MB/s  eta:   0:00:00  100% [==================================]
Copied: 503316480B (480.0MB) (100% of expected input)
Time:  4 seconds
Throughput: 125829120B (120.0MB/s)
$

dd (coreutils)

(Funktion verfügbar ab Debian 9 Stretch und Ubuntu 14.04 LTS.)

Beispiel von dd als reinen Durchflußmesser

$ zcat 9pi.img.gz | dd status=progress > /dev/null
473956864 bytes (474 MB, 452 MiB) copied, 4 s, 118 MB/s
983040+0 records in
983040+0 records out
503316480 bytes (503 MB, 480 MiB) copied, 4.18 s, 120 MB/s
$

cpipe (cpipe)

Beispiel für cpipe

$ zcat 9pi.img.gz | cpipe -vt > /dev/null
thru:   1.144ms at  109.3MB/s ( 109.3MB/s avg)  128.0kB
thru:   1.223ms at  102.2MB/s ( 103.8MB/s avg)  256.0kB
thru:   1.525ms at   82.0MB/s (  95.1MB/s avg)  384.0kB
thru:   1.605ms at   77.9MB/s (  89.9MB/s avg)  512.0kB
thru:   1.719ms at   72.7MB/s (  85.5MB/s avg)  640.0kB
thru:   1.542ms at   81.1MB/s (  84.6MB/s avg)  768.0kB
thru:   1.611ms at   77.6MB/s (  83.3MB/s avg)  896.0kB
thru:   1.658ms at   75.4MB/s (  82.1MB/s avg) 1024.0kB
thru:   1.538ms at   81.3MB/s (  81.9MB/s avg)    1.1MB
thru:   1.599ms at   78.2MB/s (  81.4MB/s avg)    1.2MB
thru:   1.704ms at   73.4MB/s (  80.5MB/s avg)    1.4MB
thru:   1.473ms at   84.9MB/s (  80.8MB/s avg)    1.5MB
[…]
$

progress (progress)

Einfaches Beispiel für progress

$ zcat 9pi.img.gz > /dev/null &
[1] 19513
$ progress
[19153] gzip /home/abe/Images/Raspberry_Pi/9pi.img.gz
        14.0% (17.1 MiB / 121.8 MiB)
$

Beispiel, wenn progress keine ihm bekannten Programme findet.

$ progress
No command currently running: cp, mv, dd, tar, cat, rsync, grep, fgrep, egrep, cut, sort, md5sum, sha1sum, sha224sum, sha256sum, sha384sum, sha512sum, adb, gzip, gunzip, bzip2, bunzip2, xz, unxz, lzma, unlzma, 7z, 7za, zcat, bzcat, lzcat, split, gpg, or wrong permissions.
$

Monitoring-Modus von progress

[21040] gzip /home/abe/Images/Raspberry_Pi/9pi.img.gz
        66.0% (80.4 MiB / 121.8 MiB) 40.0 MiB/s remaining 0:00:01
$

Ergänzungen von bisherigen Zuhörern dieses Vortrages

Links