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
-l: nur Filename anzeigen, nicht matchende Zeile, zB zum weiterverarbeiten
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}'
cut
file="Smoothie.md"
Von Anfang des Strings entfernen
echo $file | cut -c 3-
oothie.md
Nur Anfang des Strings behalten
echo $file | cut -c -3
Smo
Ende des Strings entfernen
Wirkt bissi hacky aber funktioniert, naja
echo $file | rev | cut -c4- | rev
Smoothie
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
tar
Extract: xf, mit verbose = v, für .tar.gz = z
Extract into to directory: -C /tmp
Inhalt nur auflisten, nicht entpacken: -tvf
zip
was zippen: zip archivname.zip file1.txt file2.exe - ggf. recursive mit -r
xz
Paket heißt xz-utils in Debian / Ubuntu, xz in RH / Fedora
unxz file.xz oder xz -d / --decompress file.xz
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
date
$ date +%Y-%m-%d-%H:%M:%S%z
2023-07-27-22:53:20+0200
split
Datei in 1G große Teile splitten: split -b 1G datei.tar.gz
Output by default z.B. xaa, xab, xac, xac
Wieder zusammenfügen: cat xa* > datei.tar.gz