Linux-Befehle

Eine Übersicht über die wichtigsten Linux-Shell-Befehle

Shell-Tastaturkürzel

vi-Tastaturkürzel

Im Command-Mode (der Startmodus):

Paketverwaltung (apt)

Mehr Infos:

Pakete suchen:

apt-cache search Suchbegriff1 [Suchbegriff2] ...

Pakete installieren:

sudo apt-get install paketname1 paketname2

Pakete ohne empfohlene (nur mit benötigten) Abhängigkeiten installieren:

sudo aptitude install paketname1 paketname2 -R

Pakete deinstallieren:

sudo apt-get remove --purge paketname1 paketname2

Automatisch installierte Abhängigkeiten entfernen:

sudo apt-get autoremove

Installationsstatus von Paketen sehen:

sudo dpkg --get-selections | grep cyrus

Details zu einem Paket sehen (z.B. Version):

dpkg -s paketname

Ubuntu-Version anzeigen:

cat /etc/lsb-release

Rechte

Rechte nur von Dateien ändern:

find . -type f -exec chmod 664 {} \;

Rechte nur von Verzeichnissen ändern:

find . -type d -exec chmod 775 {} \;

tgz

Mehr Infos: http://www.cs.duke.edu/~ola/courses/programming/tar.html

tgz erzeugen:

tar -cvzf foo.tgz /path/to/directory

Inhalt von tgz zeigen:

tar tzf foo.tgz

tgz auspacken:

tar xvzf foo.tgz

Zip

zip erzeugen (evtl. noch -9 für max. Kompression):

zip -r foo.zip /path/to/directory

zip auspacken:

unzip foo.zip

Jar-Datei suchen, die eine bestimmte Datei enthält:

for file in `find . -name '*.jar'`; do unzip -l $file | grep $1; done

rsync lokal

Lokales Verzeichnis in anderes lokales Verzeichnis kopieren (nur Zielverzeichnis wird verändert):

rsync -av --delete --stats /path/to/source/myfolder /path/to/target

Rsync-Optionen:

Siehe auch:

rsync und scp über SSH

Ganzes Verzeichnis über SSH kopieren. Dateiattribute behalten, Symlinks als Symlinks kopieren (aber nicht verfolgen), bereits kopierten Kram nicht nochmal kopieren. Bei kleiner Bandbreite Option -z (für Kompression) hinzufügen.

rsync -auv -e ssh /home/* user@remotehost:/mnt/backup/

Eine Datei über SSH kopieren:

scp thefile user@remotehost:/some/dir

CURL

POST:

curl -X POST -H 'Authorization: Basic ...' -H 'Content-Type: application/json' --data '{"stuff":5}' http://myservice/

POST mit gzip:

cat request.json | gzip | curl -H 'Content-Encoding: gzip' -H 'Content-Type: application/json' -X POST --data-binary @- 'http://myservice/'

Zeitmessung per CURL:

curl -o /dev/null -s -w 'Establish Connection: %{time_connect}s\nTTFB: %{time_starttransfer}s\nTotal: %{time_total}s\n' google.com

tmux

Startet ein Terminal, das im Hintergrund weiterläuft - auch wenn man sich abmeldet.

Neue tmux-Session starten:

tmux

Zur letzen tmux-Session attachen:

tmux a

Sessions auflisten:

tmux list-sessions

Zur tmux-Session #2 attachen (erste Session ist 0):

tmux a -t 2

Platte zu fstab hinzufügen

Device-ID der gewünschten Platte ermitteln:

$ lsblk
[...]
nvme1n1     259:0    0 100G  0 disk /mnt/bla

UUID-ID und Dateisystem der gewünschten Platte ermitteln:

$ sudo blkid
[...]
/dev/nvme1n1: UUID="4b4b3bf4-52d5-4ca1-af1a-91337cc618ba" TYPE="ext4"

Zeile zu fstab hinzufügen (Achtung: UUID hat hier keine Quotes):

$ sudo vi /etc/fstab
UUID=4b4b3bf4-52d5-4ca1-af1a-91337cc618ba /mnt/bla ext4 defaults,nofail 0 2

Audiospur aus Video extrahieren

Erstmal schauen, welchen Audio-Codec das Video verwendet:

ffmpeg -i myvideo.flv

Beispiel-Ausgabe:

[...]
Duration: 00:03:55.52, start: 0.000000, bitrate: 297 kb/s
Stream #0.0: Video: h264 (Main), yuv420p, 640x480 [PAR 1:1 DAR 4:3], 183 kb/s, 25 tbr, 1k tbn, 50 tbc
Stream #0.1: Audio: aac, 44100 Hz, stereo, s16, 113 kb/s

In diesem Fall ist der Codec also AAC.

Audio-Spur extrahieren:

ffmpeg -i myvideo.flv -acodec copy -vn myaudio.aac

Audio transcodieren

aif nach mp3 transcodieren:

ffmpeg -i input.aif -f mp3 -acodec libmp3lame -ab 192000 -ar 44100 output.mp3

Weitere Optionen:

aac nach mp3 transcodieren:

ffmpeg -i input.aac -codec:a libmp3lame -b:a 160k output.mp3

Nach aac mit variabler Bitrate trancodieren:

ffmpeg -i input.wav -c:a libfdk_aac -vbr 3 output.m4a

Hinweise zu aac:

Nach wav transcodieren:

ffmpeg -i input.mp3 file.wav

ffmpeg-Hilfe:

ffmpeg -h

Codecs auflisten:

ffmpeg -codecs

Bild-Größe ändern

Imagemagick installieren:

TODO

Bild-Größe ändern:

convert myimage.jpg -resize 1024x1024 myimage_resized.jpg

Siehe: Imagemagick-Doku

Bilder optimieren

.png optimieren

optipng installieren (Alternativen: pngcrush, pngquant):

sudo apt-get install optipng

Alle .png-Dateien besser packen (verlustfrei):

find . -iname '*.png' -exec optipng -o7 {} \;

Alle .png-Dateien besser packen (mit kaum sichtbarem Verlust):

pngquant --ext=.png --force --skip-if-larger *.png

.jpg optimieren

Eine .jpg-Dateien besser packen:

jpegtran -copy none -optimize my.jpg > my_small.jpg

Siehe auch:

.svg optimieren

svgo installieren (einmalig):

npm i -g svgo

SVG optimieren (-o - gibt SVG in Std-Out aus, -p 2 rundet auf 2 Nachkommastellen):

svgo --pretty --multipass -p 2 -o - myicon.svg

SVG in PDF umwandeln

svg2pdf installieren:

brew install svg2pdf

SVG in PDF umwandeln:

svg2pdf -w 24 -h 24 myimage.svg myimage.pdf

EXIF-Infos (z.B. Geo-Koordinaten) aus Bildern entfernen

jpegoptim installieren:

brew install jpegoptim

EXIF-Infos entfernen:

jpegoptim --strip-exif *.jpg

Textkram

Windows-Zeilenenden in Unix-Zeilenenden umwandeln:

brew install dos2unix
for file in `find . -iname '*.txt' -o -iname '*.xml'`; do dos2unix $file; done

Schnell eine Datei erstellen:

$ cat << "EOF" > test.txt
> Erste Zeile
> Zweite Zeile
> EOF

Tail mehrererer Dateien von verschiedenen Rechnern:

sudo apt-get install multitail
multitail -l "ssh user@host1 'tail -f logfile'" -l "ssh user@host2 'tail -f logfile'" ...

Search and Replace:

sed 's/oldstring/newstring/g' myfile.txt > myfile.txt.tmp
mv myfile.txt.tmp myfile.txt

Beispiel mit Gruppen (Motto: Klammern, Pipes und Referenzen escapen):

sed 's@^\(Index:\|---\|+++\) source/@\1 trunk/source/@g' $file > $file.tmp
mv $file.tmp $file

Doppelte Zeilen entfernen:

sort -u

SVN

Version des SVN-Clients:

svn --version

.svn-Verzeichnisse löschen:

find . -type d -name ".svn" -exec rm -rf {} \;

Alle Dateien außer .svn-Verzeichnisse löschen:

find . -type f ! -path "*/.svn*" -exec rm -rf {} \;

Gelöschtes Verzeichnis mit Historie wieder herstellen:

svn copy https://svn-server/path/deleted@2539 https://svn-server/path/deleted

Änderungen aus einem Branch mit anderem Branch (oder Trunk) mergen: \ Das Beispiel merged die Änderungen zwischen rev 12 (exclusive) und 24 (inklusive) aus dem Branch "my-branch" in den lokalen Stand

svn merge -r 12:24 https://svn-server/path/branches/my-branch

Patch erzeugen (von 90 exklusive nach 105 inklusive):

svn diff -r 90:105 > ../patch-to-105.patch

Patch inkl. nicht-eingecheckte Dateien (z.B. generiertes JS) erzeugen: Dazu müssen beide Version ausgecheckt sein.

diff -r --exclude=.svn ../path-to-old-version . > ../patch-to-105.patch

Shell-Skript-Geeier

Schleife mit eigenen Werten:

for I in de es fr uk us; do (cd bla/blubb-$I && mvn clean install); done

Auf Exit-Code prüfen:

some command
[ $? -ne 0 ] && echo "Das war nix" && exit 1

Dateiverwurstelung

Größe eines Verzeichnisses:

du -sh path/to/dir

Encoding von allen Dateien in einem Verzeichnis ändern (mit Unterverzeichnissen) Folgendes Shell-Script erstellen und ausführen:

#/bin/sh

for i in `find . -name "*.txt"`; do
  echo $i
  iconv -f ISO-8859-1 -t UTF-8 $i > $i.new
  mv -f $i.new $i
done

Encoding von XML-Dateien ändern (inklusive XML-Header, mit Unterverzeichnissen): Folgendes Shell-Script erstellen und ausführen:

for i in `find . -name '*.xml' | grep -v '/.svn/' | grep -v '/target/'`; do
  for j in `grep -l '<?xml version="1.0" encoding="ISO-8859-1"?>' $i`; do
    echo $j
    iconv -f ISO-8859-1 -t UTF-8 $j > $j.new
    mv -f $j.new $j
    sed --in-place -e 's/encoding="ISO-8859-1"/encoding="UTF-8"/g' "$j"
  done
done

Alle Dateien finden, die ISO-8859-1 sein sollten, aber UTF-8-Zeichen enthalten:

for file in `find -name "*.xml"`; do
  echo $file
  iconv -f ISO-8859-1 -t UTF-8 $file | grep "Ã"
done

(Alternativ als Einzeiler:)

(for file in `find -name "*.xml"`; do (echo $file && iconv -f ISO-8859-1 -t UTF-8 $file | grep "Ã"); done) | less

Pdf in Booklet umwandeln

Details siehe: http://www.peppertop.com/blog/?p=35

Details zu psutil siehe: http://gershwin.ens.fr/vdaniel/Doc-Locale/Outils-Gnu-Linux/PsUtils/

psutils und pdftk muss installiert sein:

sudo apt-get install psutils pdftk

PDF in Booklet umwandeln:

pdf2ps myfile.pdf - | psresize -pa5 | psbook | psnup -s1 -2 | ps2pdf - - | pdftk - cat 1-endE output myfile_booklet.pdf

Dienste

Siehe: http://wiki.ubuntuusers.de/Dienste

Userverwaltung

Informationen über den aktuellen Benutzer

id

Benutzer hinzufügen

sudo adduser <benutzername>

Benutzer löschen

# Nur Benutzer löschen
sudo deluser <benutzername>
# Benutzer inkl. der Daten aus dem Homeverzeichnis löschen
sudo deluser --remove-home <benutzername>

Benutzer einer Gruppe hinzufügen

sudo adduser <benutzername> <gruppenname>

Benutzer aus einer Gruppe entfernen

sudo deluser <benutzername> <gruppenname>

Eine neue Gruppe erstellen

sudo addgroup <gruppenname>

Alle User anzeigen:

cat /etc/passwd

Alle Gruppen anzeigen:

cat /etc/group

Eigenes Passwort ändern:

passwd

Passwort eines anderen Benutzers ändern:

sudo passwd <benutzername>

Hardware

Festplatten-Temperatur anzeigen (benötigt: smartmontools hddtemp):

hddtemp /dev/platte

ext3 gründlich prüfen:

sudo e2fsck -fck /dev/[device]

ext2 nach ext3 wandeln:

# Rechner in Single-User-Modus fahren
init S

# Zu modifizierende Partition unmounten
umount /dev/<PARTITION>

# Partition modifizieren
tune2fs -j /dev/<PARTITION>

# Optional: Regelmäßige Überprüfungen der Partition abschalten
tune2fs -c 0 -i 0 /dev/<PARTITION>