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.
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.
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.
fmt
(coreutils)fmt
macht:
-w
(--width
)
Anzahl Zeichen pro Zeile
-p
(--prefix
)
nur die Zeilen mit dem Präfix berücksichtigen
$ fmt -w 50 -p "#" Kommentar
-c
(--crown-margin
)
die erste Zeile unverändert lassen
fold
(coreutils)fmt
-w
(--width
)
Anzahl der Zeichen pro Zeile
$ fold -w50 paragraph
The command `grep` works on text data as a filter
and only prints the lines of text that match a giv
en pattern. `grep` needs 'data' to work on in comb
ination with a 'pattern' to look for. In this cont
...
$
-s
(--spaces
)
respektiere Wortgrenzen
$ fold -sw50 paragraph
The command `grep` works on text data as a filter
and only prints the lines of text that match a
given pattern. `grep` needs 'data' to work on in
combination with a 'pattern' to look for. In this
...
$
column
(bsdmainutils)$ column addresses
D-91522 Ansbach D-60000 Frankfurt/Main CH-1000 Lausanne
F-25000 Besancon CH-1200 Genf D-80000 München
ZA-8000 Cape Town D-20000 Hamburg D-70173 Stuttgart
$
-c
spaltenweise formatieren
-x
Ausgabe von links nach rechts (füllt die Zeile zuerst)
$ column -x addresses
D-91522 Ansbach F-25000 Besancon ZA-8000 Cape Town
D-60000 Frankfurt/Main CH-1200 Genf D-20000 Hamburg
CH-1000 Lausanne D-80000 München D-70173 Stuttgart
$
-e
Leerzeilen beibehalten
$ cat addresses
D-91522 Ansbach
F-25000 Besancon
ZA-8000 Cape Town
D-60000 Frankfurt/Main
CH-1200 Genf
D-20000 Hamburg
CH-1000 Lausanne
D-80000 München
D-70173 Stuttgart
$
$ column -e addresses
D-91522 Ansbach CH-1200 Genf D-80000 München
F-25000 Besancon D-70173 Stuttgart
ZA-8000 Cape Town D-20000 Hamburg
D-60000 Frankfurt/Main CH-1000 Lausanne
$
-t
Zeilenumbrüche beibehalten
$ column -t /proc/mounts
sysfs /sys sysfs rw,nosuid,nodev,noexec,relatime 0 0
proc /proc proc rw,nosuid,nodev,noexec,relatime 0 0
udev /dev devtmpfs rw,nosuid,relatime,size=…,mode=755 0 0
devpts /dev/pts devpts rw,nosuid,noexec,relatime,… 0 0
tmpfs /run tmpfs rw,nosuid,noexec,relatime,… 0 0
/dev/sda1 / ext4 rw,relatime,discard,errors=remount-ro 0 0
tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
tmpfs /run/lock tmpfs rw,nosuid,nodev,noexec,relatime,size=… 0 0
[…]
$
comm
(coreutils)$ comm file1 file2
Line 1
Line 2
Line 3
Line 4
Line 5
$
-1
unterdrücke Spalte 1
-2
unterdrücke Spalte 2
-3
unterdrücke Spalte 3
$ comm -12 file1 file2
Line 2
Line 3
$
join
(coreutils)$ cat namen
Nummer Name
15672 Anna Fischer
31984 Holger Meier
21564 Werner Baumgarten
15670 Gottfried Scherz
$
$ cat geburtstage
Nummer Geburtstag
15672 12 Feb 1977
31984 1 Oct 1980
21564 15 Nov 1974
15670 5 May 2006
$
$ join namen geburtstage
Nummer Name Geburtstag
15672 Anna Fischer 12 Feb 1977
31984 Holger Meier 1 Oct 1980
21564 Werner Baumgarten 15 Nov 1974
15670 Gottfried Scherz 5 May 2006
$
-header
Behält die erste Zeile (Kopfzeile) bei
-t
Separator zwischen den Ausgabezeilen definieren
$ join -t, names birthdays
Number,Name,Birthday
15672,Anna Fischer,12 Feb 1977
31984,Holger Meier,1 Oct 1980
21564,Werner Baumgarten,15 Nov 1974
15670,Gottfried Scherz,5 May 2006
$
-i
(--ignore-case
)
Groß- und Kleinschreibung ignorieren
paste
(coreutils)-d
(--delimiters
)
Definiert das Zeichen zwischen den Spalten
$ paste -d "," namen3 geburtstage3
Nummer,Name,Geburtstag
15672,Anna Fischer,12 Feb 1977
31984,Holger Meier,1 Oct 1980
21564,Werner Baumgarten,15 Nov 1974
15670,Gottfried Scherz,5 May 2006
$
$ paste -d "|," namen3 geburtstage3
Nummer|Name,Geburtstag
15672|Anna Fischer,12 Feb 1977
31984|Holger Meier,1 Oct 1980
21564|Werner Baumgarten,15 Nov 1974
15670|Gottfried Scherz,5 May 2006
$
rev
(util-linux)$ echo Hallo | rev
ollaH
$
Gibt es einen Straßenatlas, in dem die Ortsnamen nach Endsilben sortiert sind?
$ 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
$ 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)shuf
kann nur Zahlen generieren
unsort
kann Zahlen und Zeichenketten durcheinanderwürfeln
$ shuf -i 1-5
2
5
1
4
3
$
$ shuf -i 1-25 -n 5
10
24
9
16
21
$
cvlc
ab
$ find . -name '*.mp3' -print0 | unsort -0 | xargs -0 cvlc
...
$
expand
und unexpand
(coreutils)-t
: setzt eine andere Anzahl von Leerzeichen
$ 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 |
|
1000 |
von IEC |
|
1024 |
von IEC-i |
|
1024 |
nach SI |
|
2,1K |
nach IEC |
|
2,0K |
nach IEC-i |
|
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)SIGTERM
(automatisch gesendet von timeout
)
timelimit
sendet zuerst ein freundlicheres Warn-"Signal"
timelimit
:
warntime=3600 seconds
(switch -t
)
warnsig=15
(switch -s
)
killtime=120 seconds
(switch -T
)
killsig=9
(switch -S
)
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
$
Typischer Aufruf: lese-kommando | durchflußmesser | schreib-kommando
pv
(pv)
pipemeter
(pipemeter)
bar
(bar)
dd
(coreutils)
cpipe
(cpipe)
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
$
q
(python3-q-text-as-data oder python-q-text-as-data): Text
mit SQL-artigen Abfragen auswerten