Inhaltsverzeichnis
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