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