Unix-Tricks

Eigene Apache- Locations einrichten

Alias /sk → Zielverzeichnis

Location /sk/perl → Document options: Enable CGI
Directives: add CGI-script pl

Kopieren von Daten vom einen auf den anderen Rechner

Zuerst auf dem neuen Rechner:

cd Verzeichnis_für_die_zu_kopierenden_Dateien

netcat -l -p 8765 | tar xvSpf -

Auf dem alten Rechner:

cd Verzeichnis_mit_zu_kopierenden_Dateien

tar cSpf - .. | netcat -w 40 host-ip 8765

In neueren netcat Versionen hat sich die Syntax für listen verändert: Aus netcat -l -p 8765 wird bloß noch netcat -l 8765

Linefeeds (in der Pipe) konvertieren

Unix LF zu CR/LF:

sed "s/$/`echo \\\r`/"

CR/LF zu Unix LF:

sed 's/.$//'

Programme mit scheinbar interaktiven Befehlen speisen

Der Trick läuft über „here documents“:

ftp -n 192.168.1.1 <<EOF
user bla fasel
get foo.txt
quit
EOF

URLs aus Texten filtern

cat index.html | grep -o '<a .*href=.*>' | sed -e 's/<a/\n<a/g' | sed -e 's/<a .*href=['"'"'"]//' -e 's/["'"'"'].*$//' -e '/^$/ d'

Bash History mit Cursor Tasten durchsuchen

Weil die Bash so viel kann, bekommt sie eine eigene Seite für Bash Eingabe Tricks

Tab separierte Daten formatiert ausgeben

Mit column lassen sich Tabulator- getrennte Texte formatiert anzeigen:

cat mydata.csv | column -tn -s $'\t'

Wenn man sich diese Kommandofolge nicht merken will, kann man sie auch als Alias ablegen

alias showtabs="column -tn -s $'\t'"

und dann den Alias benutzen

cat mydata.csv | showtabs

Permanente Remote Session mit Tmux

Mit Tmux kann man Sessions verlassen, ohne das die Tochterprozesse beendet werden. Mit dem folgenden Script kann man seine aktuelle Tmux Konfiguration speichern und wieder neu starten, falls TMux mal zwischendurch durch einen Neustart beendet wurde:

#!/usr/bin/env bash # Save and restore the state of tmux sessions and windows. # TODO: persist and restore the state & position of panes. set -e dump() { local d=$'\t' tmux list-windows -a -F "#S${d}#W${d}#{pane_current_path}" } save() { dump > ~/.tmux-session } terminal_size() { stty size 2>/dev/null | awk '{ printf "-x%d -y%d", $2, $1 }' } session_exists() { tmux has-session -t "$1" 2>/dev/null } add_window() { tmux new-window -d -t "$1:" -n "$2" -c "$3" } new_session() { cd "$3" && tmux new-session -d -s "$1" -n "$2" $4 } restore() { tmux start-server local count=0 local dimensions="$(terminal_size)" while IFS=$'\t' read session_name window_name dir; do if [[ -d "$dir" && $window_name != "log" && $window_name != "man" ]]; then if session_exists "$session_name"; then add_window "$session_name" "$window_name" "$dir" else new_session "$session_name" "$window_name" "$dir" "$dimensions" count=$(( count + 1 )) fi fi done < ~/.tmux-session echo "restored $count sessions" } case "$1" in save | restore ) $1 ;; * ) echo "valid commands: save, restore" >&2 exit 1 esac

Prozesse und ihre Kinder anhand des Namen darstellen

for i in $(ps ax | grep -i wwjc | grep -v grep | cut -d "?" -f 1); do pstree -a -p -l $i ; done