GNU Tools
All der übliche Standardshizzle.
grep
Immer wieder gerne vergessene Optionen:
-i, --ignore-case
-v, --invert-match
-r - recursive
-R - recursive, follow symlinks
-n, --line-number
-A NUM, --after-context NUM
-B NUM, --before-context NUM
-F, --fixed-string - keine Regex, sucht komplett literally
-h, --no-filename - zeigt zB bei -r keinen filename / path mit an
find
Syntax: find /etc -type f -name '.xinitrc'
Alle Dateien mit exakter Größe: root@das:/opt/zimbra# find store/0/220/msg/12/ -type f -size 63077602c - c nicht vergessen weil wichtig. Ansonsten wird * 512 gerechnet, danke posix: https://superuser.com/questions/644272/how-do-i-delete-all-files-smaller-than-a-certain-size-in-all-subfolders#644274
Mit exec: <find-befehl> -exec cp {} ~/Directory \; - {} ist Ergebnis, und der Befehl wird mit jedem Ergebnis einzeln ausgeführt. Andere Möglichkeit: <find-befehl> -exec cp {} ~/Directory + - exec wird nicht jedes mal einzln aufgerufen, sondern die Ergebnise gekatzt und komplett einmal übergeben.
Negieren / excluden: find . -name "20181*" -not -name "20181112_013148+0100" - double quotes sind wichtig! Geht nicht ohne
read
Ohne echo (zB für Passwörter und so): read -s variablenname
tail
Invertieren, d.h. alle Lines ausgeben bis auf die ersten $x: tail -n +$x
sed
Zeile in Datei löschen, wenn matcht: sed -i '/whatever/d' filename.txt
Und wenn NICHT matcht: !d statt d zum negieren.
Nicht den Punkt vergessen bei Matching: . matcht jeden Character. also: alles vor $string löschen: sed -e 's/^.*$string//, nur asterisk reicht nicht!
Alle occurences eines characters replacen: /g am Ende -> echo $filepath | sed 's/ /\\ /g' (zum path escapen)
awk
Field Separator setzen mit -F - Beispiel bei Input durch stdin: awk -F "/" '{print $1}'
Letztes Element printen: '{print $NF}'
wget
Datei nicht speichern und quiet output, also bevorzugter modus für bspw. Tests von LE-zertifikaten: -qO
Alle Dateien aus Verzeichnis runterladen (zB für Filme und sowas): wget --recursive --no-parent --no-directories -e robots=off https://scheisse.gold/download/haiyti/
curl
http auth testen: curl -u user:adslkjadslkjd -o testimg.jpg - suboptimal, weil wirft keinen Fehler bei falschem Passwort, Datei ist einfach nur leer --> nochmal nachforschen
zip
was zippen: zip archivname.zip file1.txt file2.exe - ggf. recursive mit -r
cat
EOF / multiline strings
Ca. so: cat <<EOF > irgendeine_datei.txt
Genauer:
work@panzer:~$ cat <<EOF > whatever.txt
> ddjdj
> nein
> doch
> ok
> EOD
> EOFFFF
> EOF
work@panzer:~$ cat whatever.txt
ddjdj
nein
doch
ok
EOD
EOFFFF
netcat
File transfer
Empfänger: nc -vl 1234 > output.txt
Sender: nc server.example.net 1234 < input.txt
Testen ob Port offen
auf "normalem" System:
m@void:~$ nc -zv 192.168.96.1 8080
Connection to 192.168.96.1 8080 port [tcp/http-alt] succeeded!
Busybox-Netcat (zb OpenWRT - hat glaube ich ne eigene Implementierung) funktioniert aber nicht so. Da ohne Optionen nc 192.168.8.54 5900, wobei ich nicht überzeugt bin, dass das immer und überall so funzt
SSH
Key aus known_hosts löschen: ssh-keygen -R git.example.com
sftp Cheatsheet
- Interaktiv:
sftp user@server ls,cd,get,put,exit,lls/lcd- Non-interaktiv:
sftp user@server:/path/to/file.txt
unrar
Wirft Fehler? rar installieren. Ist closed source und steht "Trial" dabei aber naja.
jq
Nicht pretty-printen, kompakter Output (zB um die Länge zu messen): -c / --compact