[0x06] Mit der Shell kleine Alltagsprobleme lösen

Zur Intro hat uns l0rb eine kurze Intro in die Shell Syntax gegeben und dabei bereits einige Problemlösungen vorgestellt. Das ganze kann auch im Nachhinein gleich selbst interaktiv ausprobiert werden, in der eigenen Shell oder direkt im Webbrowser: https://repl.it/@l0rb/bash101

Danach hat uns Maria gezeigt, wie alle FLAC-Audiofiles (z.B. Musikstücke) im aktuellen Verzeichnis mit einer command line in MP3-Audiofiles konvertiert werden können. Und zwar lässt sich das so machen (vorausgesetzt lame und flac sind schon installiert, z.B. mit sudo apt install lame flac):

for f in *.flac; do flac -cd "$f" | lame -b 320 - "${f%.*}".mp3; done

Beim Ausprobieren und Plaudern sind wir dann auch noch auf viele weitere praktische Varianten gekommen.

Alternativ kann auch SoX verwendet werden, das für Sound eXchange steht und nach Eigenangaben in der manual page „the Swiss Army knife of audio manipulation“ ist (vorausgesetzt es ist z.B. mit sudo apt install sox schon installiert worden, wie auch die lame und flac libraries oben schon):

for f in *.flac; do sox ${f} ${f%.flac}.mp3; done

Abgesehen vom kürzeren Befehl, der ohne Pipe auskommt, ist der Vorteil von SoX, dass mit einem einzigen Programm gleich ganz verschiedene Formate konvertiert und bearbeitet werden können. Ein Nachteil hier ist jedoch, dass die jeweiligen Libraries schon installiert sein müssen, was je nach Distribution und Format bereits out-of-the-box installiert ist, einfach über ein Paket mit offensichtlicher Benamung installiert werden kann, oder sich eben erst nach mühsamer Webrecherche durch Installation bestimmter Library-Pakete löst.

Für besonders Wagemutige (oder einfach nur Geduldige und ausdauernde Doku-Leser*innen oder Websearcher*innen) empfiehlt sich das besonders mächtige ffmpeg, mit dem nicht nur Audio- sondern auch Videobearbeitung direkt von der command line gemacht werden kann. Auch hier müssen die relevanten Codecs (via entsprechender Library Pakete) installiert sein. Dann lassen sich mit folgender command line alle .flac files in einem Verzeichnis und allen Unterverzeichnis finden und per ffmpeg in .mp3 files konvertieren (die ursprünglichen .flac files bleiben dabei unverändert):

find -name "*.flac" -exec ffmpeg -i {} -acodec libmp3lame -ab 128k {}.mp3 \;

ffmpeg kann, sofern nicht bereits schon im System vorhanden, z.B. bei Debian basierten Distributionen mit sudo apt install ffmpeg installiert werden. Zum Codieren, je nachdem in welches Format, braucht ffmpeg auch die entsprechenden libraries.

Zum Abschluss des Abends hat uns jackie noch gezeigt wie wir unser Notebook aus der command line heraus schlafen legen können. Dazu gibt es je nach Distribution und verwendetem init system unterschiedliche Variante. Einen guten Überblick bietet der Quick Tip: How to Suspend from the Command Line in Andrew Powell’s The Linux Rain.

Demnach ist das in systemd-basierten Distributionen, also vor allem Ubuntu, Debian, Fedora und Arch, ziemlich einfach mit einem:

systemctl suspend

Für nicht systemd-basierte Distributionen (z.B. Gentoo, Devuan oder Void) oder auch für wesentlich ältere Versionen der oben genannten, ist das auch nicht viel komplizierter, benötigt aber root-Rechte:

sudo pm-suspend

Und schwupps, schon schlummert das Notebook im sleep mode, bzw. zu deutsch Bereitschaftsbetrieb, in der Fachsprache auch suspend to RAM. Nun wartet es darauf wieder aufgeweckt zu werden. Genauso einfach können mit einem systemctl poweroff und systemctl hibernate ein Herunterfahren des Systems oder der Tiefschlafmodus aktiviert werden, der eigentlich Ruhezustand, oder im englischen eben hibernation genannt wird, der zwar gar keinen Stromverbrauch mehr hat, dafür auch länger wieder zum hochfahren dauert. In der Fachsprache heißt letzterer suspend to disk. Das weist auch auf den fehlenden Stromverbrauch und die längere Ladezeit hin. Während bei suspend to RAM der aktuelle Systemzustand im RAM gespeichert wird, der als flüchtiger Speicher eben doch ein bisschen Strom braucht um die Information auf Dauer zu behalten, wird beim suspend to disk der komplette Systemzustand auf die Festplatte geschrieben. Letztere braucht als nicht-flüchtiger Speicher keinen Strom um die Daten dauerhaft zu speichern, ist aber langsamer als der RAM, wenn für das Hochfahren des Systems der gesamte Systemzustand wieder geladen werden muss.

Nun gut, jetzt können wir also unser Notebook von der command line aus (tief-)schlafen schicken und haben einen Klick gespart. Aber was bringt das wirklich?

Zuerst mal wollen wir vielleicht zum Schlafengehen noch Musik vom Notebook hören, wollen aber nicht, dass dieses dann die ganze Nacht noch durch läuft. Wenn wir also nun unseren Musikplayer laufen haben und das Notebook nach 30 Minuten von selbst schlafen gehen soll, brauchen wir nur folgendes:

sleep 30m && systemctl suspend

Genauso können wir ein Backup ausführen und das Notebook danach schlafen legen. Wex sich nach dem Juni-Meetup [0x03] zu Backups auch ein Backupscript, sagen wir unter /usr/local/bin/backup.sh eingerichtet hat, kann dies dann analog zum obigen Beispiel so tun:

backup.sh && systemctl suspend

Und wer zu später Stunde keine Lust mehr viel zu tippen hat, kann sich in der eigenen .bashrc, oder in den .bash_aliases, je nachdem wie eins das konfiguriert hat, noch folgende Zeile einrichten:

alias b='backup.sh && systemctl suspend'

Einfacher geht backuppen vor dem Schlafengehen nicht mehr:

b

Na dann, liebe Linüxe, guten Tag, guten Abend und gute Nacht!