Shell-Fu for Developers


Franz Pletz I 15. September 2011




                                   © Mayflower GmbH 2011
Kung Fu?




Quelle: http://www.flickr.com/photos/stopherjones/707077871/
                                                               Mayflower GmbH I 2
Shell Fu!




Quelle: http://www.flickr.com/photos/tom_focus/5710555681/
                                                             Mayflower GmbH I 3
Ziele



I Sehr subjektiver Vortrag ;-)
I Aus meinem Linux-Sysadmin Alltag ein paar nützliche Tools und
     Tipps vorstellen
I In der Shell sind fast alle Dinge viel schneller erledigt, als mit jeder
      general purpose GUI
I Ihr sollt mehr Console benutzen!!!!11elf1




                                                                       Mayflower GmbH I 4
Die Shell – first things first



I Tipp: zsh
     Zum Anfang Config von grml: http://grml.org/zsh/
I Viele nützliche Features von bash, ksh, tcsh und eigene, z.B.
     Globbing: Negierung, Grouping, Ranges
     Directory Stacking: pushd, popd, AUTOPUSHD
     Process Substitution: =()
     Erweiterte Command Line Editing und Completion
I Egal welche Shell man nutzt, Manpage komplett lesen und nach
  eigenen Vorlieben konfigurieren!



                                                                  Mayflower GmbH I 5
vim/emacs – Dateien editieren mit Style



I Tipp: Münzwurf um sich zwischen vim oder emacs zu entscheiden
     Vergleich beider Editoren am besten gar nicht anfangen
     Religionskriege!
I Mindestens eine Woche Zeit nehmen, einarbeiten und benutzen!
    Painful, aber schnelleres editieren garantiert




                                                             Mayflower GmbH I 6
most – more or less enhanced pager



I Pager: Langen Text in Console als Seiten anzeigen
     more: einfacher Pager
     less: more mit forward/backward, vi Keybindings
I Features
     Windows!
     Binary Files
     Line Wrapping




                                                       Mayflower GmbH I 7
pgrep & pkill – Prozesse brauchen Pflege



I Wer kennt das nicht? ps aux | grep foo
    Probleme: nicht weiterverwendbar, taucht selbst in Liste auf
I $ pgrep zsh
    3145
    3148
    3174
I Weitere Optionen zum filtern nach z.B.
    -u, -g         User & Gruppen
    -n, -o         newest, oldest
I pkill mit gleichen Parametern als Alternative zu killall


                                                                   Mayflower GmbH I 8
ack – Das bessere grep



I Komplett in Perl geschrieben, auf Suche in Quellcode optimiert
I Schneller, da nur Source Code Files durchsucht werden
     Keine VCS-Verzeichnisse, Backup-Files, Core Dumps etc.
I Angabe von Dateitypen einfach
    $ ack –-php --js
I Syntax Highlighting!
I Viele GNU grep Parameter werden supportet
I 25% weniger Zeichen zu tippen!
I http://betterthangrep.com/

                                                                   Mayflower GmbH I 9
ack – Das bessere grep (2)




                             Mayflower GmbH I 10
pv – stalking the pipes



I Verlauf von Daten durch Pipes beobachten
I $ tar c dir | pv | nc fnordhost 2342
    64kB 0:00:00 [71.4MB/s] [ <=>                          ]
I Viele Optionen, z.B.
     -p       Progress Bar anzeigen
     -r       Datenrate anzeigen
     -a       durchschnittliche Datenrate anzeigen
     -s BYTES Dateigröße angeben
     -L RATE Datenrate begrenzen
     -R PID Commandline eines laufenden pv modifizieren


                                                          Mayflower GmbH I 11
ngrep – Grepping Network Traffic



I Wireshark ist toll, aber oft einfach Overkill
I # ngrep -W byline "^(GET|POST) .*"
    Mal schnell alle GET und POST Requests anzeigen
I # ngrep -q -W byline "search" host
  www.google.com and port 80
    Alle Google-Suchanfragen ausgeben




                                                      Mayflower GmbH I 12
curl – HTTP Magic for the masses



I $ curl ifconfig.me
    88.217.134.114
I $ curl -s -I nyan.cat | head -n1
    HTTP/1.1 200 OK
    Nur die Headers bitte!
I $ curl -c cookies.txt -H "User-Agent:
  Mozilla/5.0" -F
  "name=test;photo=@lolcat.jpg"
  mysocialnetwork.com/profile
    Cookies, Headers, Formularfelder, Dateiupload!




                                                     Mayflower GmbH I 13
openssh – fun with remote servers



I Der openssh Client hat eine Config-File: ~/.ssh/config
     Man kann Optionen global oder auf Host-Basis festlegen
I Connection Sharing
    ControlMaster auto
    ControlPath /tmp/ssh-%h-%p-%r
I Hostname Aliases, Local Forwards
    Host dev
        HostName dev.foobar.de
        LocalForward 5433 localhost:5432
I Restriktive Proxies bezwingen (sshd auf Port 443)
     ProxyCommand corkscrew proxy.org 8080 %h %p

                                                              Mayflower GmbH I 14
git – git it up



I Pull mit rebase statt merge
      $ git pull –rebase
      oder
      $ git config branch.master.rebase true
I Letzter Commit mit Message Regex Matching
      $ git show :/fix
      $ git show :/^Merge
I Einfaches Tracking von Remote Branches
      $ git checkout -t origin/feature




                                               Mayflower GmbH I 15
git – git it up (2)



I $ git log --oneline --decorate




                                   Mayflower GmbH I 16
git – git it up (3)



I $ git diff --word-diff




                           Mayflower GmbH I 17
tmux – modern terminal multiplexing



I Prinzip: mehere Terminals in einem darstellen, wie GNU screen
I Features:
     Client/Server-Modell
     Transfer/Linking von Terminals in andere Sessions
     Copy/Paste mit mehreren Buffers
     Windows mit horizontal und vertikal splitten
     Freies verschieben, resizen oder einpassen in Layouts
     Terminal Locking
     Gute Dokumentation
I Quickstart fuer screen-User: Ctrl+B statt Ctrl+A ;-)
I http://tmux.sourceforge.net/
                                                              Mayflower GmbH I 18
Fragen?
Quelle: http://www.flickr.com/photos/ericarhiannon/3591044454/
                                                                      Mayflower GmbH I 19
Vielen Dank für eure Aufmerksamkeit!




      Kontakt   Franz Pletz
                franz.pletz@mayflower.de
                +49 89 242054 1173
                Mayflower GmbH
                Mannhardtstrasse 6
                80538 München


29.09.11                             Mayflower GmbH   20

Shell Fu for Developers

  • 1.
    Shell-Fu for Developers FranzPletz I 15. September 2011 © Mayflower GmbH 2011
  • 2.
  • 3.
  • 4.
    Ziele I Sehr subjektiverVortrag ;-) I Aus meinem Linux-Sysadmin Alltag ein paar nützliche Tools und Tipps vorstellen I In der Shell sind fast alle Dinge viel schneller erledigt, als mit jeder general purpose GUI I Ihr sollt mehr Console benutzen!!!!11elf1 Mayflower GmbH I 4
  • 5.
    Die Shell –first things first I Tipp: zsh Zum Anfang Config von grml: http://grml.org/zsh/ I Viele nützliche Features von bash, ksh, tcsh und eigene, z.B. Globbing: Negierung, Grouping, Ranges Directory Stacking: pushd, popd, AUTOPUSHD Process Substitution: =() Erweiterte Command Line Editing und Completion I Egal welche Shell man nutzt, Manpage komplett lesen und nach eigenen Vorlieben konfigurieren! Mayflower GmbH I 5
  • 6.
    vim/emacs – Dateieneditieren mit Style I Tipp: Münzwurf um sich zwischen vim oder emacs zu entscheiden Vergleich beider Editoren am besten gar nicht anfangen Religionskriege! I Mindestens eine Woche Zeit nehmen, einarbeiten und benutzen! Painful, aber schnelleres editieren garantiert Mayflower GmbH I 6
  • 7.
    most – moreor less enhanced pager I Pager: Langen Text in Console als Seiten anzeigen more: einfacher Pager less: more mit forward/backward, vi Keybindings I Features Windows! Binary Files Line Wrapping Mayflower GmbH I 7
  • 8.
    pgrep & pkill– Prozesse brauchen Pflege I Wer kennt das nicht? ps aux | grep foo Probleme: nicht weiterverwendbar, taucht selbst in Liste auf I $ pgrep zsh 3145 3148 3174 I Weitere Optionen zum filtern nach z.B. -u, -g User & Gruppen -n, -o newest, oldest I pkill mit gleichen Parametern als Alternative zu killall Mayflower GmbH I 8
  • 9.
    ack – Dasbessere grep I Komplett in Perl geschrieben, auf Suche in Quellcode optimiert I Schneller, da nur Source Code Files durchsucht werden Keine VCS-Verzeichnisse, Backup-Files, Core Dumps etc. I Angabe von Dateitypen einfach $ ack –-php --js I Syntax Highlighting! I Viele GNU grep Parameter werden supportet I 25% weniger Zeichen zu tippen! I http://betterthangrep.com/ Mayflower GmbH I 9
  • 10.
    ack – Dasbessere grep (2) Mayflower GmbH I 10
  • 11.
    pv – stalkingthe pipes I Verlauf von Daten durch Pipes beobachten I $ tar c dir | pv | nc fnordhost 2342 64kB 0:00:00 [71.4MB/s] [ <=> ] I Viele Optionen, z.B. -p Progress Bar anzeigen -r Datenrate anzeigen -a durchschnittliche Datenrate anzeigen -s BYTES Dateigröße angeben -L RATE Datenrate begrenzen -R PID Commandline eines laufenden pv modifizieren Mayflower GmbH I 11
  • 12.
    ngrep – GreppingNetwork Traffic I Wireshark ist toll, aber oft einfach Overkill I # ngrep -W byline "^(GET|POST) .*" Mal schnell alle GET und POST Requests anzeigen I # ngrep -q -W byline "search" host www.google.com and port 80 Alle Google-Suchanfragen ausgeben Mayflower GmbH I 12
  • 13.
    curl – HTTPMagic for the masses I $ curl ifconfig.me 88.217.134.114 I $ curl -s -I nyan.cat | head -n1 HTTP/1.1 200 OK Nur die Headers bitte! I $ curl -c cookies.txt -H "User-Agent: Mozilla/5.0" -F "name=test;photo=@lolcat.jpg" mysocialnetwork.com/profile Cookies, Headers, Formularfelder, Dateiupload! Mayflower GmbH I 13
  • 14.
    openssh – funwith remote servers I Der openssh Client hat eine Config-File: ~/.ssh/config Man kann Optionen global oder auf Host-Basis festlegen I Connection Sharing ControlMaster auto ControlPath /tmp/ssh-%h-%p-%r I Hostname Aliases, Local Forwards Host dev HostName dev.foobar.de LocalForward 5433 localhost:5432 I Restriktive Proxies bezwingen (sshd auf Port 443) ProxyCommand corkscrew proxy.org 8080 %h %p Mayflower GmbH I 14
  • 15.
    git – gitit up I Pull mit rebase statt merge $ git pull –rebase oder $ git config branch.master.rebase true I Letzter Commit mit Message Regex Matching $ git show :/fix $ git show :/^Merge I Einfaches Tracking von Remote Branches $ git checkout -t origin/feature Mayflower GmbH I 15
  • 16.
    git – gitit up (2) I $ git log --oneline --decorate Mayflower GmbH I 16
  • 17.
    git – gitit up (3) I $ git diff --word-diff Mayflower GmbH I 17
  • 18.
    tmux – modernterminal multiplexing I Prinzip: mehere Terminals in einem darstellen, wie GNU screen I Features: Client/Server-Modell Transfer/Linking von Terminals in andere Sessions Copy/Paste mit mehreren Buffers Windows mit horizontal und vertikal splitten Freies verschieben, resizen oder einpassen in Layouts Terminal Locking Gute Dokumentation I Quickstart fuer screen-User: Ctrl+B statt Ctrl+A ;-) I http://tmux.sourceforge.net/ Mayflower GmbH I 18
  • 19.
  • 20.
    Vielen Dank füreure Aufmerksamkeit! Kontakt Franz Pletz franz.pletz@mayflower.de +49 89 242054 1173 Mayflower GmbH Mannhardtstrasse 6 80538 München 29.09.11 Mayflower GmbH 20