Inhaltsverzeichnis

Unix-Tricks

Eigene Apache- Locations einrichten

  1. Alias /sk → Zielverzeichnis
  2. 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:

Auf dem alten Rechner:

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