[[Vorlage(Ausbaufähig, "Mehr interessante Einzeiler sind gerne erwünscht")]] {{{#!vorlage Wissen [:Terminal: Ein Terminal benutzen] [:sudo:Rootrechte benutzen] [:Datenträger#Wie-heissen-die-Datentraeger:Wie heißen die Datenträger] [:Systeminformationen_ermitteln#Festplatten:Welche Datenräger sind angeschlossen] }}} [[Inhaltsverzeichnis()]] Sammlung von praktischen Einzeilern in der Bash. Diese einzeiligen "Skripte" geben auch gleich eine praktische Verwendung diverser Funktionen an. = Sortierte Liste = Stammt aus [topic:mp3s-automatisch-in-datenbank-file-eintragen: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'''. {{{#!vorlage Befehl 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. {{{#!vorlage Befehl 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: {{{#!vorlage 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. {{{#!vorlage Befehl grep -E '^https?://' datei | xargs xdg-open }}} Möchte man auch andere Protokolle unterstützen, lässt sich das wie folgt machen: {{{#!vorlage Befehl 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. {{{#!vorlage Befehl 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. {{{#!vorlage Befehl 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. {{{#!vorlage Befehl 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. {{{#!vorlage Befehl 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 [wikipedia: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 [:Shell/md5sum:md5sum] nicht rekursiv arbeitet. {{{#!vorlage Befehl 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: {{{#!vorlage Befehl find . -type f -exec md5sum {} + > MD5SUMS }}} Statt '''md5sum''' kann natürlich auch ein anderer Befehl genutzt werden (z.B. für einen [wikipedia:Secure Hash Algorithm:SHA]-Algorithmus statt MD5). Die Programme befinden sich üblicherweise in '''/usr/bin''': {{{#!vorlage Befehl ls /usr/bin/*sum }}} = Auflisten aller eingehangenen Partitionen = Die eingehängten Partitionen lassen sich wie unter [:Systeminformationen ermitteln#Eingehaengte-Festplatten:] angegeben anzeigen. Für Swap-Partitionen siehe [:Swap#Swap-ueberwachen: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 [:Shell/grep:grep] (mit Dateinamen): [:sources.list#Support:] Und mit [:sed:] (ohne Dateinamen): {{{#!vorlage Befehl sed '/^[ \t]*#\|^[ \t]*$/d' /etc/apt/sources.list /etc/apt/sources.list.d/*.list }}} = Partitionstabellen = {{{#!vorlage 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]: {{{#!vorlage befehl sudo hexdump -s0 -n512 -C /dev/sdX }}} Nur die Partitionen-Einträge lesbar ansehen: {{{#!vorlage befehl 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: {{{#!vorlage befehl sudo hexdump -s512 -n512 -C /dev/sdX }}} Hexdump des Datenträgers ''sdX'' __mit__ Partitionen-Einträgen: {{{#!vorlage befehl sudo hexdump -s512 -n$((512*33)) -C /dev/sde }}} == Hexdump des GPT-Secondary-Headers == Zum Ausführen des Kommandos wird das Programm [:gdisk#sgdisk:sgdisk] benötigt, da es die Ende-Sektoren ermittelt. Hexdump des Datenträgers ''sdX''[4] __ohne__ Partitionen-Einträgen: {{{#!vorlage befehl 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: {{{#!vorlage befehl 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. {{{#!vorlage Befehl 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. {{{#!vorlage Befehl gthumb $(locate email | grep .png) }}} [[Anker(PublicIP)]] = Ö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: {{{#!vorlage Befehl 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/] {en} zeigt einem allerdings inzwischen eine falsche IP. Man sollte daher im obigen Befehl alternativ verwenden: * [http://checkip.dyndns.org/ http://checkip.dyndns.org] {en} – zeigt IPv4-Adresse * [https://www.myipaddress.com/ http://www.myipaddress.com] {en} – zeigt IPv6-Adresse * [https://httpbin.org/ip http://httpbin.org/ip] {en} – zeigt IPv4-Adresse * oder ähnliche Angebote Hier noch eine Abfragemöglichkeit ohne `grep` und mit `http://showip.spamt.net/` {{{#!vorlage Befehl wget -q -O - http://showip.spamt.net/ }}} Bei IPv6 wird die interne Adresse auch im Internet verwendet: {{{#!vorlage Befehl 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]): {{{#!vorlage Befehl 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. {{{#!vorlage Befehl set -f; O=$IFS IFS=$'\n' files=($(find ~/Bilder/ -name '*')) IFS=$O; set +f && feh --bg-scale ${files[ $(( $RANDOM % ${#files[@]} )) ]} }}} Mit {{{#!vorlage Befehl 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. {{{#!vorlage Befehl echo "Z" | mail -u user -f /home/user/Maildir/ }}} Es wird die älteste E-Mail (Nr. 1) des Benutzers "user" gelöscht. {{{#!vorlage Befehl echo "d 1" | mail -N -u user -f /home/user/Maildir }}} = Links = * [:Shell:] {Übersicht} Übersicht über die Shell * [:Skripte:] {Übersicht} weitere Skripte * [:FritzBox/Skripte:] - spezielle Skripte für den Umgang mit der FritzBox * [https://www.commandlinefu.com/commands/browse Commandlinefu.com] {en} - weitere interessante Einzeiler # tag: Shell