Eine kleine Sammlung an bash-Kniffen, Tricks und HowTos.
Diese Unterseite ist bisher ohne durchdachte Sortierung. Werde für Interessierte das Neueste immer oben anfügen.
Boot-Stick erstellen
1sudo dd bs=4M if=/path/to/manjaro.iso of=/dev/sd[drive letter] status=progress oflag=sync
Dateien anlegen via Allokierung
1fallocate -l 10GB meine_grosse_datei
ggf. Parameter -o offset und -n beachten, bei Größenänderung swap-File.
Passwort generieren
1tr -dc A-Za-z0-9 </dev/urandom | head -c 64
Als kleine Script-Version in meinem GitLab-Repository
Datumsberechnungen
Übermorgen
1date --date="2 days" +"%d.%m.%Y"
Vorgestern
1date --date="2 days ago" +"%d.%m.%Y"
Ausgabe von “du”
1du -sk * | sort -n
1du -sb * | sort -n | numfmt --to=iec
Etwas mehr Erklärung hier im Blog-Artikel.
Binary installiert ?
1if ! type "docker-compose" > /dev/null; then
2 echo 'Error: docker-compose is not installed.' >&2
3 show_error_function
4 exit 1
5fi
Eingaben
1read -rp "Hier eine Entscheidungsfrage (j/n): " VARIABLE_WO_DER_INHALT_REIN_SOLL
tabellarische Umformartierung
1echo "a11 b12_Text c13" > /tmp/beispiel
2echo "a21 b22 c23" >> /tmp/beispiel
3column -t /tmp/beispiel
Ausgabe:
a11 b12_Text c13
a21 b22 c23
Alias
1alias sdf='df -h|egrep -v '\''^(overlay|nsfs|shm|cgroup|tmpfs|debugfs|mqueue)'\'''
2alias smount='mount|egrep -v '\''^(overlay|nsfs|shm|cgroup|tmpfs|debugfs|mqueue)'\'''
3alias dc='docker-compose'
4de() { docker exec -it "$1" bash; }
5alias dpa='docker ps -f status=exited'
6psg() { ps aux | grep "$1" | grep -v grep; }
7alias t='ls -lrt --color=auto'
Prompting
1PS1="[\u@\H:\w]\$ "
Ggf \n einstreuen für extra Zeile.
Verzeichniswechsel
Mal wieder beim Verzeichniswechsel vertippt?
Die bash speichert das letzte Verzeichnis, in welchem man sich
befunden hat in der Variable $OLDPWD.
Ein
1cd $OLDPWD
bringt einen also wieder zurück ins alte Verzeichnis.
Kürzer wird es mit:
1cd -
aktuelles Verzeichnis
Das aktuelle Verzeichnis kann man sich mit pwd ausgeben lassen.
1pwd
1erde:~$ cd /etc
2erde:/etc$ cd /var
3erde:/var$ cd -
4/etc
5erde:/etc$ cd $OLDPWD
6erde:/var$
Schreiben auf STDERR
1echo "Dieser Text erscheint auf STDERR" >&2
Fehlermeldungen umleiten
in Log-Datei
1./foo.sh bar/* >foo-bar.log 2>&1
wegwerfen
1./foo.sh > /dev/null 2>&1
Backup einer Datei
1cp -p foo{,.bak}
ist dasselbe wie
1cp -p foo foo.bak
Spezial-Variablen
Es gibt ein paar Spezialvariablen in der bash, die einem das Tippen ersparen.
Umgebungsvariablen
| Name | Erklärung |
|---|---|
$$ |
Prozess-ID (PID) des laufenden Programms |
$? |
Rückgabewert des letzten Befehls |
in Scripten
$* Alle dem Programm übergebenen Parameter, durch Leerzeichen getrennt.
1$*=$1 $2 $3 $4 ...
"$*" Alle dem Programm übergebenen Parameter in Anführungszeichen, durch das 1. Zeichen der Variablen $IFS getrennt.
1"$*"="$1c$2c$3c$4"...
$@ Alle dem Programm übergebenen Parameter, durch Leerzeichen getrennt.
1$@=$1 $2 $3 $4
"$@" Alle dem Programm übergebenen Parameter, einzeln in Anführungszeichen eingeschlossen und durch Leerzeichen getrennt.
1"$@"="$1" "$2" "$3" "$4" ...
$# Anzahl der übergebenen Parameter
Historie
!$ letzter Parameter des vorhergehenden Befehls
1$ ls -l foo
2$ echo !$
3echo foo
4foo
!! letzter Befehl inkl. aller Parameter
Mal wieder sudo vergessen? Kein Problem:
1$ ein script
2$ sudo !!
| kurz | lang |
|---|---|
history 10 |
history | tail |
cd !$:h |
cd !!:$:h |
Beispiel
1$ ls -l /etc/apt/apt.conf.d/20auto-upgrades
2$ cd !$:h
3cd /etc/apt/apt.conf.d
Eselsbrücke: RegEx-like
| Eingabe | Funktion |
|---|---|
!?abc |
das erste Kommando in der History suchen, das abc enthält |
!abc |
das erste Kommando in der History suchen, das mit abc beginnt |
!! |
zuletzt aufgerufener Befehl |
!^ |
erster Parameter im vorherigen Befehl |
!* |
alle Parameter im vorherigen Befehl |
!$ |
letzter Parameter im vorherigen Befehl |
!n |
Befehl an Position n in der History |
!-n |
Befehl, der an der n-ten Stelle von hinten in der History steht :2 |
:2 |
Nur der zweite Parameter des Befehls |
:2-5 |
der zweite bis fünfte Parameter des Befehls |
:2-$ |
der zweite und alle weiteren Parameter des Befehls |
:* |
Sämtliche Parameter des Befehls |
:q |
den Text in Anführungsstriche setzen |
:p |
"print" den Befehl nur ausgeben |
:h |
≈ dirname in einer Pfadangabe das Ende abschneiden /etc/apt/apt.conf.d |
:t |
≈ basename das Ende einer Pfadangabe (zum Beispiel der Dateiname) 20auto-upgrades |
ls -l /foo/bar.baz |
|
:r |
remove alles hinter dem letzten Punkt abschneiden (zum Beispiel die Dateiendung) /foo/bar |
:e |
Endung alles hinter dem letzten Punkt (zum Beispiel die Dateiendung) = baz |
Beispiel Befehlssuche
1$ echo foo bar baz
2foo bar baz
3$ echo !echo:2
4echo bar
5bar
Nur ausgeben:
1$ echo foo bar baz
2foo bar baz
3$ echo !echo:2:p
4echo bar
schnell in bash mal würfeln:
1let z=$RANDOM%6
| Datum | Änderung |
|---|---|
| 03.11.2023 | Passwort generieren |
| 14.02.2024 | Hinweis auf gen_passwort.sh im GitLab-Repository |
| 11.09.2024 | fallocate |
| 22.09.2024 | Bootstick |
| 13.11.2024 | Fix Typo |