Login schließen
Hinweis: In Ihrem Browser müssen Cookies und JavaScript aktiviert sein!
Login login

Hier schreibe ich Linux-Shell-Kommandos auf, die sich als nützlich erwiesen haben und die ich später vielleicht noch mal brauche. Diese Seite ist vor allem als Erinnerungshilfe für mich selbst gedacht. Wenn sie auch anderen hilft – um so besser.

 

konvertiere wma zu mp3 128kb/s

mkdir out
for i in *.wma
do
   mplayer -ao pcm:file=temp.wav "$i"
   lame -h -b 128 temp.wav "./out/$(echo $i | sed s/\\.wma/.mp3/)"
done
rm temp.wav

konvertiere mp3 zu ogg 160kb/s

mkdir out
for i in *.mp3
do
   mplayer -ao pcm:file=temp.wav "$i"
   oggenc -b 160 -o "./out/$(echo $i | sed s/\\.mp3/.ogg/)" temp.wav
done
rm temp.wav

konvertiere flac zu ogg 160kb/s

# oggenc kann *.flac direkt lesen, umwandeln nach wav ist nicht nötig
for i in *.flac
do
   oggenc -b 160 -o "ogg/$(echo $i | sed s/\\.flac/.ogg/)" "$i"
done

konvertiere wav zu flac, mit Unterordnern

find original -name "*.wav" |
while read i
do
   filename="neu/$(echo $i | sed s/\\.wav/.flac/)"
   mkdir -p "$(dirname "$filename")"
   flac -V --best -o "$filename" "$i"
done

Umlaute und andere "gefährliche" Zeichen aus einem Dateinamen entfernen (UTF-8-Dateisystem)

detox -s utf_8 Dateiname

Xorg: Bildschirm 45° drehen

xrandr --output <screen name> --transform 1.3,-1.3,<horizontal screen size/2>,1.3,1.3,-<horizontal screen size/2>,0,0,1 --fb <horizontal screen size>x<vertical screen size>

Neuer Mimetyp mit Programm und Icon (Beispiel: Celtx)

/usr/local/share/mime/packages/celtx.xml (Zuordnung Dateiendung - Mimetyp):
<?xml version="1.0" encoding="UTF-8"?>
<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
 <mime-type type="application/celtx-project">
   <comment>Celtx project file</comment>
   <glob pattern="*.celtx"/>
 </mime-type>
</mime-info>
/usr/local/share/applications/celtx.desktop (Zuordnung Mimetyp - Symbol und Programm):
[Desktop Entry]
Encoding=UTF-8
Name=Celtx
Exec=/opt/celtx/celtx
Icon=/usr/local/share/icons/hicolor/48x48/mimetypes/application-celtx-project.png
MimeType=application/celtx-project
Icon kopieren:
cp /opt/celtx/chrome/icons/default/default48.png /usr/local/share/icons/hicolor/48x48/mimetypes/application-celtx-project.png
Cache aktualisieren;
update-mime-database /usr/local/share/mime
update-desktop-database /usr/local/share/applications
update-icon-caches /usr/local/share/icons/hicolor

Auf einem TCP-Port Daten entgegennehmen und an einen Unix-Socket weiterleiten

socat UNIX-CONNECT:/path/to/socket TCP-LISTEN:8040

Dateien von Source nach Destination kopieren, Dateiattribute behalten, Dateien löschen, die in Source nicht vorhanden sind, Dateien überspringen, wenn Größe übereinstimmt

rsync -a --delete --progress --size-only <source> <destination>

Video als Einzelbilder abspeichern

mplayer -vo png:z=4 video.mov

Standbild und Musik zu einem Video kombinieren (z.B. um Musik auf youtube hochzuladen)

ffmpeg -loop 1 -shortest -i black.png -i in.wav -ab 320k out.avi

Finde alle Ordner im aktuellen Verzeichnis, die nicht auf einen bestimmten Regex passen

find . -maxdepth 1 -mindepth 1 -not -regex ".*-neu" -type d

Git: lokale Änderungen in Branch master verwerfen, andere lokale Branches löschen, ungetrackte Dateien löschen

git checkout master
git branch | grep -v "master" | xargs git branch -D
git fetch origin
git reset --hard origin/master
git clean -dfx

Dateien rekursiv umbenennen: *.htm zu *.html

find . -name "*.htm" -print0 |
tr "\0\n" "\n\0" |
sed -e "p;s/htm$/html/" |
tr "\0\n" "\n\0" |
xargs -0 -r -n2 mv -v

Das NULL-Zeichen ist das einzige Zeichen, das in Unix-Pfaden nicht erlaubt ist. Deshalb wird es als Trennzeichzen verwendet (Parameter -print0 und -0). sed kann nur das Linefeed-Zeichen als Trennzeichen verwenden, darum werden NULL und Linefeed vor dem Aufruf von sed getauscht und anschließend wieder zurückgetauscht.
sed gibt mit dem p-Kommando den unveränderten Dateipfad und mit dem s-Kommando den veränderten Dateipfad aus. Durch den Parameter -n2 gibt xargs immer zwei Argumente an mv weiter.
Der erste Parameter von find gibt das Verzeichnis an, in dem nach Dateien gesucht wird.

Ein Verzeichnis rekursiv per FTP herunterladen, vorhandene Dateien nicht erneut runterladen

$ lftp
~> set ftp:ssl-force on
~> set ftp:ssl-protect-data on
~> set ssl:verify-certificate no
~> set ftp:charset ISO8859-15
~> open -u username host
~> mirror -veP 10 /
~> quit

Das Verzeichnis / vom Server wird in das aktuelle lokale Verzeichnis kopiert. Dabei werden Dateien übersprungen, die in Größe und Datum übereinstimmen. Dateien, die nur lokal existieren, werden gelöscht.

Wenn Dateien noch mal runtergeladen werden, obwohl sie sich nicht geändert haben, hilft eventuell --only-newer als Parameter für mirror. Zum Testen ist --dry-run hilfreich.

Löschen rückgängig machen (ext3/ext4)

Zunächst so schnell wie möglich die entsprechende Partition unmounten, damit die gelöschten Dateien nicht überschrieben werden:

sudo umount /dev/DEVICE

Falls die Partition noch benutzt werden muss, geht auch ein readonly-Remount:

sudo mount -o remount,ro /dev/DEVICE

Anschließend können die gelöschten Dateien mit ext4magic auf eine andere Partition gesichert werden:

sudo ext4magic -r /dev/DEVICE -f /Pfad/zur/gelöschten/Datei -d /Pfad/zum/Zielverzeichnis/

/Pfad/zur/gelöschten/Datei kann dabei auch ein Verzeichnis sein, das rekursiv wiederhergestellt werden soll. Der Pfad muss relativ zur Dateisystem-Wurzel angegeben werden.

Um den Pfad der gelöschten Dateien zu finden, kann man debugfs nutzen:

$ sudo debugfs /dev/DEVICE
debugfs: ls -ld
debugfs: cd Verzeichnis
debugfs: pwd
debugfs: quit

Der Parameter -d beim ls-Befehl sorgt dafür, dass auch gelöschte Dateien angezeigt werden. -l sorgt für eine schönere Darstellung.

Manchmal werden bei Angabe eines Verzeichnisses nicht alle Dateien wiederhergestellt. Dann hilft es, diese Dateien einzeln wiederherzustellen.

Löschen rückgängig machen (fat32)

Zunächst so schnell wie möglich die entsprechende Partition unmounten, damit die gelöschten Dateien nicht überschrieben werden:

sudo umount /dev/DEVICE

Anschließend testdisk als root starten:

sudo testdisk

Nacheinander folgende Menüpunkte wählen:

[ No Log ]
Gerät auswählen, [ Proceed ]
Partitionstyp auswählen (meist [ None ])
[ Advanced ]
Partition auswählen, [ Undelete ]

Nun können die gewünschten Dateien ausgewählt und wiederhergestellt werden.
 

Prüfen, ob ein Dienst auf $port aktiv ist (TCP, IPv4)

ss -lt4 '( sport = :'${port}' )' | grep -c LISTEN