====== Unix-Kommandos ======
Diese Kommandos sollten auf allen Unix-basierenden Betriebssystemen ([[macosx:start|MacOS X]], [[linux:start|Linux]], etc.) funktionieren. Sofern Abweichungen bekannt sind, sind diese an den entsprechenden Stellen dokumentiert.
===== Dateien =====
==== Auflisten ====
Alle nicht-versteckten Dateien vom Typ Text ([[lexikon:mime|MIME]] ''text/plain'') des aktuellen Verzeichnis anzeigen:
file -i0 * | grep -a text/plain | cut -d '' -f1
==== Größe von Verzeichnissen ====
Die Größe von Verzeichnissen lässt sich mit folgendem Befehl berechnen:
du -hs /foobar
==== Verschieben/Kopieren ====
Dateien/Verzeichnisse kopieren und deren Eigenschaften (Besitzer, Erstellungsdatum, etc.) beibehalten:
cp -a [source] [target]
==== Dateien vergleichen ====
Zwei Dateien vergleichen, ob sie identisch sind (byte-weise):
cmp -l [file1] [file2]
==== Rechte rekursiv setzen ====
Rechte rekursiv für alle Dateien/Unterordner in einem Ordner setzten, um bspw. Lese- oder Schreibrechte für viele Ordner und Dateien zu setzen oder zu entziehen. Pfade und Rechte müssen für den Einzellfall angepasst werden.
Dateien (''%%-rwxr--r--%%''):
find ./ -type f -print -exec chmod 644 {} \;
Ordner (''%%drwxr-xr-x%%''):
find ./ -type d -print -exec chmod 755 {} \;
===== Archive =====
==== tar-Archive erstellen ====
tar -zcvf foobar.tar.gz foobar/
Quelle: [[http://www.zyxware.com/articles/2009/02/26/how-to-create-and-extract-a-tar-gz-archive-using-command-line|Zyxware Technologies: How to create and extract a .tar.gz archive using command line]]
==== Dateien und Ordner als ZIP-Datei verpacken ====
Einzelne Datei in eine ZIP-Datei verpacken und komprimieren:
zip -9 [zip-file] [filename]
Einen gesamten Ordner in einer ZIP-Datei verpacken und komprimieren:
zip -9 -r [zip-file] [folder]
Das Attribut ''-9'' steht dabei für die maximale Komprimierung.
==== Inhalte eines ZIP-Archives entpacken ====
Zum entpacken eines ZIP-Archives gibt es den Befehl ''unzip'':
unzip [zip-file]
==== Inhalte eines tar-Archives auflisten ====
Inhalt einer **tar**-Datei ausgeben:
tar -tvf example.tar
Das Attribut ''t'' listet den Inhalt der Datei auf.
Das Attribut ''v'' (für "verbose") gibt die Ausgabe von ''tar'' auf der Konsole aus.
Das Attribut ''f'' weist ''tar'' an, die angegebene Datei (hier: ''example.tar'') zu verwenden.
Inhalt einer **tar.gz**- oder **tgz**-Datei ausgeben:
tar -ztvf example.tar.gz
Das zusätzliche Attribut ''z'' weist ''tar'' an, die Datei mit ''gzip'' für die Auflistung zu dekomprimieren.
Inhalt einer **tar.bz2**-Datei ausgeben:
tar -jtvf example.tar.bz2
Das zusätzliche Attribut ''j'' weist ''tar'' an, die Datei mit ''bzip2'' für die Auflistung zu dekomprimieren.
==== Inhalte eines tar-Archives entpacken ====
Eine **tar.gz**- oder **tgz**-Datei entpacken:
tar zxvf example.tgz
Das Attribut ''z'' weißt ''tar'' an, die Datei mithilfe von ''gzip'' zu entpacken.
Das Attribut ''x'' entpackt die ''tar''-Datei.
Das Attribut ''v'' gibt während des Entpackens Meldungen auf der Konsole aus.
Das Attribut ''f'' weißt ''tar'' an, die angegebene Datei (hier: ''example.tgz'') zu verwenden.
Um ein ''tar''-Archiv in ein anderes Verzeichnis zu entpacken, muss nach dem Dateinamen das Attribut ''-C'' (Achtung: großes C!) mit dem Ziel-Verzeichnis angegeben werden:
tar zxvf example.tgz -C ~/tmp/example
===== Dateisysteme =====
==== Festplatten und Partitionen auflisten ====
Alle ans System angeschlossene Festplatten mit Partitionen, Größe und Mount-Punkt lassen sich mit ''lsblk'' ausgeben:
lsblk
Unter macOS ist ''lsblk'' nicht verfügbar, dort eignet sich der Befehlt ''df'':
df
==== Status von dd anzeigen ====
Um während eines Kopier-Vorgangs von ''dd'' zu sehen, wie weit fortgeschritten der Vorgang ist, muss eine zweites, virtuelles Terminal geöffnet werden, indem dann der Fortschritt abgefragt werden kann. Im zweiten Terminal muss zunächst die Prozess-ID (PID) von ''dd'' ermittelt werden:
pgrep -l '^dd$'
Die Rückgabe sieht in etwas wie folgt aus (Prozess-ID, Prozess):
2342 dd
Nun kann man mit dem Befehl ''kill'' ein ''USR1''-Signal an den ''dd''-Prozess (PID: ''2342'') schicken und dieser gibt dann den aktuellen Status auf sein ''STDERR'' (hier: das erste Terminal in dem ''dd'' läuft) aus:
kill -USR1 2342
Die Ausgabe sieht dann z.B. so aus:
$ dd if=/dev/random of=/dev/null bs=1K count=100
0+14 records in
0+14 records out
204 bytes (204 B) copied, 24.92 seconds, 0.0 kB/s
Dieser Befehl zeigt allerdings nur einmalig den Status von ''dd'' an, er kann aber beliebig oft wiederholt werden. Um den Status automatisch wiederholt ausgeben zu lassen, kann der Befehl ''watch'' zur Hilfe genommen werden:
watch -n 10 kill -USR1 2342
Über das Attribut ''-n'' von ''watch'' wird ein Intervall (in Sekunden) definiert, wie oft der nachfolgende Befehl (hier: ''kill -USR1 2342'') ausgeführt werden soll.
Quelle: [[http://linuxcommando.blogspot.de/2008/06/show-progress-during-dd-copy.html|Linux Commando: Show Progess During dd Copy]]
===== Sicherheit =====
==== Passwörter erzeugen ====
Wenn [[openssl:start|OpenSSL]] installiert ist, lassen sich darüber sehr einfach Passwörter erzeugen:
openssl rand -base64 12
===== Text =====
==== Einen base64-String dekodieren ====
echo QWxhZGRpbjpvcGVuIHNlc2FtZQ== | base64 --decode
Quelle: [[http://askubuntu.com/a/178546|Ask Ubuntu: How can I decode a base64 string from the command line?]]
===== Internet =====
==== IP einer Domain abfragen ====
Die [[lexikon:ip|IP]] einer [[lexikon:domain|Domain]] lässt sich mit dem Befehl ''dig'' erfragen:
dig example.com A +short
Der Befehl ''dig'' ohne die Paramter ''A +short'' ergibt eine ausführliche Auflistung inklusive abgefragtem [[lexikon:dns|DNS-Server]].
==== Dateien mit wget laden ====
Mit dem Programm [[https://www.gnu.org/software/wget/|wget]] können Dateien und Seiten aus dem Internet geladen werden.
=== Einzelne Datei laden ===
Um mit ''wget'' eine einzelne Datei herunterzuladen reicht folgender Befehl:
wget http://example.org/downloads/example.zip
===== E-Mail =====
==== E-Mail mit Datei-Anhang verschicken ====
Die E-Mails werden mit dem E-Mail-Programm [[http://www.mutt.org/|mutt]] verschickt:
mutt -s "Betreff" -a /tmp/foobar.tar.gz foo@example.com < /tmp/message.txt
===== Links =====
* [[http://helmbold.de/artikel/linux-blatt|Linux auf einem Blatt]]