Bash Magic
Alle Befehle echoen
set -x oder in Script einfach #!/bin/bash -x
Cert-Ablaufdatum
DOMAIN=example.com
echo | openssl s_client -showcerts -servername $DOMAIN -connect ${DOMAIN}:443 2>/dev/null | openssl x509 -inform pem -noout -text | grep 'Not After' | sed 's/.*: //'
SSH-Keys easy von einem Server auf den anderen kopieren
`ssh root@server1.com grep shah .ssh/authorized_keys | ssh server2.com tee -a .ssh/authorized_keys
Alle Domains aus BIND-Config lesen
Mit Vorsicht zu genießen! Deckt vermutlich nicht alle edge cases ab.
cat /etc/bind/db.external/db.example.com.soa | sed -e '/^[[a-z0-9*]/!d' | awk -F ' ' '{ print $1 }'
Alle Rails-Deploys löschen, die älter sind als ein Monat
Beispiel example.com:
cd /var/www/app/shared/system/app-updates/production
find . -type d -maxdepth 1 ! -name "2019-08*" -exec echo rm -rf {} +
Monat vorher anpassen zu Monat von letztem Deploy mit mehreren Ordnern (könnte man automatisieren, aber schadet nicht da selbst ein Auge drauf zu haben). Wenn Ergebnis ok aussieht, das echo entfernen.
Alle Dateien mit exakter Größe löschen
for i in *; do size=$(stat -c%s $i); if [[ $size == 52428800 ]]; then rm $i; fi; done
snippets
now="$(date +%Y%m%d_%H%M%S%z)"
brace expansion
Mit Braces und komma wird das Dingen expandiert. ABER nicht mit space dazwischen, das macht kaputto! dig example.{com,net} wird zu dig example.com example.net
Ausrechnen, wieviel Text die Notizen haben
cd ~/notes/ && echo "Deine Notizen haben $(find . -name '*.md' -exec cat {} + | sed '/^[[:space:]]*$/d' | wc -l) Zeilen und $(find . -name '*.md' -exec cat {} + | sed '/^[[:space:]]*$/d' | wc -c) Zeichen. Wahnsinn!"
Variablennamen dynamisch übergeben
https://unix.stackexchange.com/questions/557361/how-to-dynamically-set-a-variable-name-in-shell-script
Also ${!var}
Real-life Beispiel: (check_env soll prüfen, ob Umgebungvariable gesetzt ist)
marvin@BWP-3200556:~$ docker run -it debian:latest
root@fb003c0e6d2c:/# check_env(){ [ -z "$1" ] && echo "$1 not defined" && exit 1; } # falsch / funktioniert nicht, weil -z gegen den reinen String prüft
root@fb003c0e6d2c:/# export TESTVAR=123
root@fb003c0e6d2c:/# check_env TESTVAR
root@fb003c0e6d2c:/# check_env asasfsafsd
root@fb003c0e6d2c:/# check_env(){ [ -z "${!1}" ] && echo "$1 not defined" && exit 1; } # so ists richtig
root@fb003c0e6d2c:/# check_env TESTVAR
root@fb003c0e6d2c:/# check_env asasfsafsd
asasfsafsd not defined
exit