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.