Basheinzeiler
Ausbaufähige Anleitung
Dieser Anleitung fehlen noch einige Informationen. Wenn Du etwas verbessern kannst, dann editiere den Beitrag, um die Qualität des Wikis noch weiter zu verbessern.
Anmerkung: Mehr interessante Einzeiler sind gerne erwünscht
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
- Sortierte Liste
- Leere Dateien auflisten
- Links aus einer Datei im Browser öffnen
- Die größten Verzeichnisse/Dateien
- Prüfsummen für gesamtes Verzeichnis berechnen
- Auflisten aller eingehangenen Partitionen
- Auflistung sources.list, incl. Unterverzeichnisse
- Partitionstabellen
- Bestimmte Dateien aus Verzeichnisstruktur entfernen
- Bilder suchen
- Öffentliche IP-Adresse anzeigen
- Hintergrundbild mit feh und cron alle 30 Minuten zufällig wechseln lassen
- Mailbox für Benutzer auslesen und bearbeiten
- Links
Sammlung von praktischen Einzeilern in der Bash. Diese einzeiligen "Skripte" geben auch gleich eine praktische Verwendung diverser Funktionen an.
Sortierte Liste¶
Stammt aus diesem Thread. Diese Zeile findet alle Dateien im Verzeichnis dir, die mit ".mp3" enden (Groß- und Kleinschreibung wird wegen -iname
ignoriert), sortiert die gefundenen Dateien und schreibt sie in die Datei sortierteliste.
find dir -iname "*.mp3" | sort > sortierteliste
Leere Dateien auflisten¶
Um herauszufinden, ob Dateien in einem Verzeichnis leer sind, gibt es verschiedene Möglichkeiten, z.B.
echo $(du -h * | grep ^0 | awk '{print $2}') | sed "s/\s/, /g"
Zuerst listet "du -h *
" die Größe aller Dateien in * auf. Anschließend werden nur diejenigen Textzeilen herausgefiltert, die mit einer 0 anfangen. Anschließend wird die zweite Spalte der Darstellung genommen. Das "echo $(...)
" bewirkt, dass alle Zeilen nacheinander durch Leerzeichen getrennt ausgegeben werden. Durch den sed-Befehl bewirkt man, dass die Leerzeichen durch ", " ersetzt werden.
Einfacher geht es mit diesem Befehl:
find -type f -empty
Links aus einer Datei im Browser öffnen¶
Dieser Einzeiler öffnet alle HTTP(S)-Links, die alleine in einer Zeile stehen mit dem Standard-Browser.
grep -E '^https?://' datei | xargs xdg-open
Möchte man auch andere Protokolle unterstützen, lässt sich das wie folgt machen:
grep -E '^(https?|ftp)://' datei | xargs xdg-open
Dieses Skript findet neben HTTP- auch FTP-Links.
Die größten Verzeichnisse/Dateien¶
Die 5 größten Verzeichnisse je Partition¶
Mit diesem Einzeiler werden die 5 größten Verzeichnisse je eingebundener Partition ermittelt und die Größe in GB und Bytes sowie der Name ausgegeben.
PART=($(awk '$1~/^\/dev/ {print $2}' /proc/mounts));for i in ${PART[@]};do echo;df -h $i;sudo du --max-depth=1 -kx $i|sort -nr|awk '{printf("%7.1f GB\t%s\n", ($1/1024)/1024,$0)}'|head -n6;done
Die 15 größten Verzeichnisse im Dateisystem¶
Mit diesem Einzeiler werden die 15 größten Verzeichnisse, ab dem Ausführungsverzeichnis, ermittelt und die Größe in GB und Bytes sowie der Name ausgegeben.
sudo du -kSx | sort -nr | awk '{printf("%7.1f MB\t%s\n", ($1/1024)/1024,$2)}' | head -15
Die 5 größten Dateien je Partition¶
Mit diesem Einzeiler werden die 5 größten Dateien je eingebundener Partition ermittelt und die Größe in GB und Bytes sowie der Name ausgegeben.
ARCH=($(awk '$1~/^\/dev/ {print $2}' /proc/mounts));for i in ${ARCH[@]};do sudo find $i -type f -printf "%k %p \n" 2>/dev/null|sort -rn|awk '{printf("%7.1f MB\t%s\n", ($1/1024)/1024, $0)}'|head -n6;echo;done
Die 15 größten Dateien auflisten¶
Durchsucht ab dem Ausführungsverzeichnis alle Verzeichnisse und listet die 15 größten davon auf. Ausgabe: Größe MB und Bytes sowie Name der Datei.
find / -type f -printf "%k\t %p\n" 2>/dev/null | sort -rn | awk '{printf("%7.1f GB\t%s\n", ($1/1024)/1024,$0)}' | head -15
Prüfsummen für gesamtes Verzeichnis berechnen¶
Der folgende Befehl berechnet die MD5-Prüfsummen aller Dateien innerhalb des aktuellen Verzeichnisses und seiner Unterverzeichnisse und speichert das Ergebnis in der Datei MD5SUMS ab, was je nach Anzahl und Größe der Dateien etwas dauern kann. Voraussetzung ist die Installation des Pakets md5deep (universe), weil das von Ubuntu mitgelieferte Tool md5sum nicht rekursiv arbeitet.
md5deep -rel * > MD5SUMS
Mit Hilfe von find kann man jedoch auf die Installation von md5deep verzichten. Der folgende Befehl durchsucht das aktuelle Verzeichnis und seine Unterverzeichnisse nach regulären Dateien (also keine Verzeichnisse, Gerätedateien [3] o.ä.) und ruft dann md5sum auf:
find . -type f -exec md5sum {} + > MD5SUMS
Statt md5sum kann natürlich auch ein anderer Befehl genutzt werden (z.B. für einen SHA-Algorithmus statt MD5). Die Programme befinden sich üblicherweise in /usr/bin:
ls /usr/bin/*sum
Auflisten aller eingehangenen Partitionen¶
Die eingehängten Partitionen lassen sich wie unter Systeminformationen ermitteln (Abschnitt „Eingehaengte-Festplatten“) angegeben anzeigen. Für Swap-Partitionen siehe Swap überwachen.
Auflistung sources.list, incl. Unterverzeichnisse¶
Auflistung der aktiven Einträge der sources.list und der Listen aus /etc/apt/sources.list.d/, ohne Kommentar- und Leerzeilen.
Mit grep (mit Dateinamen): sources.list (Abschnitt „Support“)
Und mit sed (ohne Dateinamen):
sed '/^[ \t]*#\|^[ \t]*$/d' /etc/apt/sources.list /etc/apt/sources.list.d/*.list
Partitionstabellen¶
Hinweis:
Hexdump des MBR¶
Hexdump des Datenträgers sdX[4]:
sudo hexdump -s0 -n512 -C /dev/sdX
Nur die Partitionen-Einträge lesbar ansehen:
sudo hexdump -s 446 -n 64 -v -e '1/1 "Part.:| %02x" 3/1 " | %3u" 1/1 " | %02x" 3/1 " | %3u" 2/4 " | %9u" "\n"' /dev/sdX
Hexdump des GPT-Primary-Headers¶
Hexdump des Datenträgers sdX[4] ohne Partitionen-Einträgen:
sudo hexdump -s512 -n512 -C /dev/sdX
Hexdump des Datenträgers sdX mit Partitionen-Einträgen:
sudo hexdump -s512 -n$((512*33)) -C /dev/sde
Hexdump des GPT-Secondary-Headers¶
Zum Ausführen des Kommandos wird das Programm sgdisk benötigt, da es die Ende-Sektoren ermittelt.
Hexdump des Datenträgers sdX[4] ohne Partitionen-Einträgen:
d=sdX;sudo dd if=/dev/$d skip=$(($(sudo sgdisk -p /dev/$d|sed -ne 's@Disk /dev/'$d': \([0-9].*\) s.*$@\1@p')-1)) 2>/dev/null|hexdump -C
Hexdump des Datenträgers sdX mit Partitionen-Einträgen:
d=sdX;sudo dd if=/dev/$d skip=$(($(sudo sgdisk -p /dev/$d|sed -ne 's@Disk /dev/'$d': \([0-9].*\) s.*$@\1@p')-33)) 2>/dev/null|hexdump -C
Bestimmte Dateien aus Verzeichnisstruktur entfernen¶
Rekursives Löschen von Dateien, auf die ein bestimmtes Muster zutrifft.
find srcPfad -name "*.typ" -type f -delete
Bilder suchen¶
Sucht man ein Bild auf seinem System, von dem man den Namen nur in etwa kennt, aber weiß, wie das Bild aussieht, so kann man mit locate
eine Liste aller möglichen Dateien generieren und mit gThumb diese Liste gleich ansehen. Also z.B.
gthumb $(locate email | grep .png)
Öffentliche IP-Adresse anzeigen¶
Viele Internet-Benutzer besitzen ein externes DSL-Modem/Router. In diesem Fall kann man mit ip addr
nur die lokalen IP-Adressen auslesen. Folgender Einzeiler gibt die öffentliche IP-Adresse auf der Standardausgabe aus:
wget https://whatsmyip.de/ -q -O - | grep -Eo -e '[0-9]{1,3}(\.[0-9]{1,3}){3}' -e '[0-9A-Fa-f]{0,4}(:[0-9A-Fa-f]{0,4}){2,7}'
Die Seite https://whatsmyip.de/ 🇬🇧 zeigt einem allerdings inzwischen eine falsche IP. Man sollte daher im obigen Befehl alternativ verwenden:
http://checkip.dyndns.org 🇬🇧 – zeigt IPv4-Adresse
http://www.myipaddress.com 🇬🇧 – zeigt IPv6-Adresse
http://httpbin.org/ip 🇬🇧 – zeigt IPv4-Adresse
oder ähnliche Angebote
Hier noch eine Abfragemöglichkeit ohne grep
und mit http://showip.spamt.net/
wget -q -O - http://showip.spamt.net/
Bei IPv6 wird die interne Adresse auch im Internet verwendet:
ip -6 addr show scope global | grep -o -e 'inet6 [23][0-9:A-Fa-f]*' | grep -o -e '[^ ]*$'
Man kann aber auch ein API verwenden (hier: http://www.wieistmeineipv6.de):
wget -q -O - http://6.wieistmeineipv6.de/ip_js.php | grep 6_ip | cut -d\" -f2
Hintergrundbild mit feh und cron alle 30 Minuten zufällig wechseln lassen¶
Hier ein interessanter Befehl, der das Hintergrundbild zufällig mit Feh wechselt. Dies kann man dann noch in Cron eintragen und so wird dann alle 30 Minuten (kann natürlich angepasst werden) das Hintergrundbild gewechselt.
set -f; O=$IFS IFS=$'\n' files=($(find ~/Bilder/ -name '*')) IFS=$O; set +f && feh --bg-scale ${files[ $(( $RANDOM % ${#files[@]} )) ]}
Mit
crontab -e
kann man die Crontabelle editieren.
Die Tabelle könnte dann so aussehen:
#----------------------------------------------------------------- # Shell variable for cron SHELL=/bin/bash # PATH variable for cron PATH=/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin:/bin:/usr/bin:/usr/bin/X11 #M S T M W Befehl #----------------------------------------------------------------- */30 * * * * set -f; O=$IFS IFS=$'\n' files=($(find ~/Bilder/ -name '*')) IFS=$O; set +f && feh --bg-scale ${files[ $(( $RANDOM % ${#files[@]} )) ]} #-----------------------------------------------------------------
Mailbox für Benutzer auslesen und bearbeiten¶
Die Parameter "-u
" und "-f
" dürften klar sein, "Z
" geht an das Ende der Mailqueue, "d
" löscht und "-N
" leitet die Ausgabe auf >dev/nul
um.
Es werden die zuletzt eingegangen E-Mail-Header des Benutzers "user" als Liste angezeigt.
echo "Z" | mail -u user -f /home/user/Maildir/
Es wird die älteste E-Mail (Nr. 1) des Benutzers "user" gelöscht.
echo "d 1" | mail -N -u user -f /home/user/Maildir
Links¶
Shell Übersicht über die Shell
Skripte weitere Skripte
FritzBox/Skripte - spezielle Skripte für den Umgang mit der FritzBox
Commandlinefu.com 🇬🇧 - weitere interessante Einzeiler