Merkzettel: Linux Shell-Befehle

Hier sammle ich einige nützliche Linux Shell-Befehle.

tar|tar

Große Dateibäume mit tar-pipe-tar kopieren:

tar -cf - ./directory_name | (cd /to/target/ && tar -xf -)

Geht auch per SSH übers Netzwerk:

tar -cf - ./directory_name | ssh user@server "cd /to/target && tar -xf -"

SSH-Tunnel

Um durch einen SSH-Tunnel auf einen entfernten Dienst zugreifen zu können:

ssh -L<local-port>:<remote-host>:<remote-port> <user>@<server>

Note: <remote-host> ist dabei aus Sicht von <server> anzugeben.

Will man also auf Port 80 des Servers zugreifen und dafür z.B. den lokalen Port 8080 nutzen ergibt sich folgendes Beispiel:

ssh -L8080:localhost:80 user@server

SSH-Fingerprint

Verbindet man sich zum ersten Mal zu einem Host per SSH wird man aufgefordert den Fingerprint des Public-Keys des Hosts zu bestätigen, dieser wird dann in der know_hosts Datei gespeichert um spätere Main-in-the-Middle Attacks erkennen zu können.

Um den Fingerprint eines Hosts herauszufinden hilft folgender Befehl (auf dem jeweiligen Host):

ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key.pub

Ausgabe Umleiten

Um zum Beispiel die Ausgabe eines Cron-Jobs nicht per Mail zu erhalten, sondern über den Syslog-Mechanismus zu loggen, kann man folgendes Konstrukt hinter dem Befehl verwenden:

2>&1 | /usr/bin/logger -t TAG

Wobei "TAG" ein frei wählbarer String ist, der es erlaubt die Einträge im Log leichter zu identifizieren.

Eine andere Variante ist die Std-Err Ausgabe in eine Datei umzuleiten:

2>> log.txt &

2> statt > sorgt dafür, dass die Std-Err Ausgabe umgeleitet wird und >> statt > sorgt dafür, dass die Datei nicht überschrieben wird, sondern die Ausgabe an die Datei angehängt wird.