Linux-Befehle
Eine Übersicht über die wichtigsten Linux-Shell-Befehle
Shell-Tastaturkürzel
Ctrl
+A
Go to the beginning of the line you are currently typing onCtrl
+E
Go to the end of the line you are currently typing onCtrl
+L
Clears the Screen, similar to the clear commandCtrl
+U
Clears the line before the cursor position. If you are at the end of the line, clears the entire line.Ctrl
+K
Clear the line after the cursorCtrl
+H
Same as backspaceCtrl
+R
Let’s you search through previously used commandsCtrl
+C
Kill whatever you are runningCtrl
+D
Exit the current shellCtrl
+Z
Puts whatever you are running into a suspended background process. fg restores it.Ctrl
+W
Delete the word before the cursorCtrl
+T
Swap the last two characters before the cursorEsc
+T
Swap the last two words before the cursorAlt
+F
Move cursor forward one word on the current lineAlt
+B
Move cursor backward one word on the current lineTab
Auto-complete files and folder names
vi-Tastaturkürzel
Im Command-Mode (der Startmodus):
$
: Ans Ende der Zeile springen^
: Am den Anfang der Zeile springenShift
+G
: Ans Ende der Datei springenG
,G
: An den Anfang der Datei springenV
: Markierung startenD
: Markierten Bereich löschen/
: Suche startenI
In den Insert-Mode wechseln
Paketverwaltung (apt)
Mehr Infos:
- http://wiki.ubuntuusers.de/apt-get
- http://www.pixelbeat.org/docs/packaging.html
- http://packages.ubuntu.com/
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:
-a
für Archiv-Modus. Dieser kombiniert:-r
für rekursiv-l
für Kopieren von Symlinks (nicht Hard-Links)-t
für Behalten der Zeitstempel-p
für Behalten der Rechte (p
ermission)-o
für Behalten des Nutzers (o
wner)-g
für Behalten der Gruppe (g
roup)-D
für Behalten von Device-Files (nur Super-User) und Special-Files
-v
zeigt während des Synchronisierens alle Schritte die ausgeführt werden an-n
simuliert nur was passieren würde ("dry run")--delete
löscht Dateien im Zielverzeichnis, falls sie im Quellverzeichnis nicht mehr da sind--exclude=pattern
schließt ein bestimmtes Verzeichnis von der Sicherung aus (kann mehrfach verwendet werden). Das Pattern arbeitet ähnlich wie Ant-Includes mit*
und**
(weitere Features siehe man-Page). Beispiele:my/path/
,**/.DS_Store
,/some/path/*.txt
--stats
zeigt einen ausführlicheren Report am Ende einer Übertragung an.--size-only
sorgt dafür, dass Dateien mit gleicher Dateigröße übersprungen werden, unabhängig davon, ob sie sich in anderen Eigenschaften unterscheiden. Hilfreich bei Sicherungen auf Datenträger mit den Dateisystemen FAT oder NTFS (wegen fehlender Rechteflags)
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
-
Beispiel-Ausgabe:
Establish Connection: 0,043492s TTFB: 0,086725s Total: 0,086888s
tmux
Startet ein Terminal, das im Hintergrund weiterläuft - auch wenn man sich abmeldet.
Neue tmux-Session starten:
tmux
- tmux-Session detachen:
Ctrl
+B
, dannD
- Scrollen in History:
Ctrl+B
, dannAlt+5
([
)- Jetzt kann man mit
PageUp
undPageDown
scrollen ESC
zum Verlassen des Scroll-Modus
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
0
verhindert, dass das Dateisystem ausgeworfen wird,2
gibt an, dass es sich um ein Nicht-Root-Gerät handelt.
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:
-ac 1
für Downmix nach Mono.-vn
Evtl. vorhandenen Video-Stream entfernen.
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:
- Laut ffmpeg ist der eingebaute aac-Encoder nicht sehr gut. Daher verwenden wir
libfdk_aac
(entwickelt vom Fraunhofer) -
libfdk_aac
muss unter Umständen dazuinstalliert werden. Unter MacOS per Homebrew (siehe Homebrew-Anleitung von ffmpeg):brew tap homebrew-ffmpeg/ffmpeg brew install homebrew-ffmpeg/ffmpeg/ffmpeg --with-fdk-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:
- Blog-Artikel zur Optimierung von jpg-Bildern
- smlr - Tool, das
jpg
-Datei besser packt (TODO testen)
.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>