Skripte/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:

  1. ⚓︎ Ein Terminal benutzen

  2. ⚓︎ Rootrechte benutzen

  3. ⚓︎ Wie heißen die Datenträger

  4. ⚓︎ Welche Datenräger sind angeschlossen

Inhaltsverzeichnis
  1. Sortierte Liste
  2. Leere Dateien auflisten
  3. Links aus einer Datei im Browser öffnen
  4. Die größten Verzeichnisse/Dateien
    1. Die 5 größten Verzeichnisse je Partition...
    2. Die 15 größten Verzeichnisse im Dateisys...
    3. Die 5 größten Dateien je Partition
    4. Die 15 größten Dateien auflisten
  5. Prüfsummen für gesamtes Verzeichnis berech...
  6. Auflisten aller eingehangenen Partitionen
  7. Auflistung sources.list, incl. Unterverzei...
  8. Partitionstabellen
    1. Hexdump des MBR
    2. Hexdump des GPT-Primary-Headers
    3. Hexdump des GPT-Secondary-Headers
  9. Bestimmte Dateien aus Verzeichnisstruktur ...
  10. Bilder suchen
  11. Öffentliche IP-Adresse anzeigen
  12. Hintergrundbild mit feh und cron alle 30 M...
  13. Mailbox für Benutzer auslesen und bearbeit...
  14. 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 

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:

Bei den Partitionstabellen wird von einer logischen Sektorgöße von 512 Byte ausgegangen. Die Angabe des Datenträgers[3] muss auf die eigenen Belange[4] abgestellt werden.

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:

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