Latest change: Mi Mai 28 13:23:42 CEST 2014

= Page =

diese seite:
http://www.guckes.net/eisenstadt2014/vortrag.txt
http://www.guckes.net/eisenstadt2014/vortrag.html (in bunt) TODO

= Feedback =

hallo!
lesen Sie diesen text schon *vor* dem vortrag?
dann wuerde ich mich ueber feedback freuen:

mailto:eisenstadt2014@guckes.net
(gpg keys 57F77F09 0185391B)

vielen dank! :)

= Event =

2014-05-23/24 Fri+Sat Eisenstadt
12:30-18h  @FH_Burgenland
Linuxwochen Eisenstadt
http://eisenstadt.linuxwochen.at/
.      eisenstadt@linuxwochen.at

= Vortrag =

Vortrag:     Tools Tools Tools!
Untertitel:  Nuetzliche Werkzeuge
ProgrammURL: http://linuxwochen.at/index.php?option=com_content&view=article&id=391&Itemid=81

Raum:        *der* Raum :-)
Datum:       2014-05-24 Samstag
Zeit:        17:15-18:00

zielpublikum:
alle menschen, die auf einem computer mal ein
terminal aufmachen, "um mal was darin zu tun".

= Start =
               _____              _       _
              |_   _|___    ___  | | ___ | |
                | | / _ \  / _ \ | |/ __|| |
                | || (_) || (_) || |\__ \|_|
                |_| \___/  \___/ |_||___/(_)

    http://www.guckes.net/e/
    http://www.guckes.net/eisenstadt/
    http://www.guckes.net/eisenstadt/programm.kurz.txt
    http://www.guckes.net/eisenstadt/programm.lang.txt

    http://events.titanpad.com/17  pad!

    "Tools, Tools, Tools" bei den Grazer LinuxTagen (GLT):
    https://www.youtube.com/watch?v=mhAWgQ0dX3E [2014-04-05]

    Hinweis: 25. Mai -> Towel Day
    Dougles N. Adams (1952-2001) THHGTTG:
    The Hitch Hiker's Guide to the Galaxy
    http://de.wikipedia.org/wiki/Douglas_Adams

= screen =

CTRL-A S        :split
CTRL-A TAB      :focus
CTRL-A c        :screen ("create") -> shell!

= shell =

was man generell ueber Shells wissen sollte:

bash+zsh:
    $ alias c=clear

fuer die eingabe dieses kommandos
muss man eine leere inputzeile haben.
eventuell muss man die inputzeile loeschen.
das sind immer noch *zwei* tastendruecke.  zuviel!

bildschirm loeschen, aber inputzeile beibehalten:
    CTRL-L
("na, das war ja einfach!")

text loeschen - und dabei in den kill ring stecken:
    CTRL-K      delete to EOL of    input line
    CTRL-U      delete the complete input line
    CTRL-W      delete unto previos BOW

    CTRL-Y      insert latest   copy  from   kill ring
    ESC CTRL-Y  insert previous entry within kill ring

see also: man bash -> kill ring

version der laufenden shell anzeigen:
    CTRL-X CTRL-V

    CTRL-A      Anfang
    CTRL-E      Ende

    CTRL-B      ein zeichen backwards/zurueck
    CTRL-F      ein zeichen forward/vorwaerts

see also:
    man bash -> /^SHELL BUILTIN COMMANDS

    http://www.guckes.net/Setup/bashrc
    Funktion help_me -> viel text
    (wer moechte, dass ich das endlich mal
     fertigstelle? bitte mail schicken! :-)

= cd =

ohne parameter geht's immer nach hause:
    $ cd -> $HOME

mal woandershin wechseln:
    $ cd /usr/local/bin

im OLDPWD steht das letzte verzeichnis.
also kann man so zurueckwechseln:
    $ cd $OLDPWD

aber es geht auch schneller:
    $ cd -

und wozu noch "cd" tippen?
aliase sind unsere freunde!
    $ alias  -='cd -'
    $ alias ..='cd ..'

achja.. aliase!

= shell aliases =

steht das kommando nicht im "pfad" ($PATH)?
dem kommando ein verzeichnis hinzufuegen:
    $ alias arp=/usr/sbin/arp

kommandos immer mit denselben parametern aufrufen:
    $ alias bz='bzip2 -v9'

wie lange dauert das eigentlich?
interne funktion "time" verwenden:
    $ alias bz='time bzip2 -v9'

gpg - einen schluessel mit "ascii armor" exportieren:
    $ alias asc='gpg --export -a'
zB: $ asc 0185391B
(ja, der 0185391B ist mein neuester schluessel.
 das ist ein "8000R". key signing, anyone?)

identifikation bei einer webseite mit "user=bitte pass=danke" :-)
    $ cget='wget -Y off --http-user=bitte --http-password=danke'

eine schoene idee, das world wide web etwas freundlicher zu machen :)

auf besuch in einer firma mit sicherheit?
du darfst nur mit deiner kiste hinein?
dann solltest du deine MAC wissen!

    $ mac='/sbin/ifconfig eth0 | grep -o '\''\([0-9a-f][0-9a-f]:\)\{5\}[0-9a-f][0-9a-f]'\'

see also:
    http://de.wikipedia.org/wiki/MAC-Adresse
    http://de.wikipedia.org/wiki/Media_Access_Control

    man grep:
    -o, --only-matching
    Print only the matched (non-empty) parts of a matching line,
    with each such part on a separate output line.

initialer start mit parametern:
    alias WORK='screen -m -c ~/.screenrc.work'

bemerkung:
die namen von aliasen duerfen auch doppelpunkte enthalten.
darum fuer benutzer des editors "vi":
    $ alias :q=exit

= ls =
    $ ls -l         # langes listing

es gibt noch viele weitere optionen:
    $ ls -d         # qb abg yvfg qverpgbevrf
    $ ls -g         # qb abg yvfg bjare
    $ ls -G         # qb abg yvfg tebhc
    $ ls -i         # fubj vabqrf
    $ ls -F         # pynffvsl jvgu vaqvpngbe
    $ ls -r         # yvfg erirefr
    $ ls -S         # yvfg ol fvmr
    $ ls -t         # yvfg ol gvzr
    $ ls -X         # fbeg ol rkg

    $ ls -rtl       # ab gi!

und nun.. FARBE!
    $ ls --color
("bunt ist meine lieblingsfarbe!" :)

kombinationen sind in umgebungsvariable gespeichert:
    $ echo $LS_COLORS

es gibt ein setup tool fuer diese farben:
    $ dircolors

welche dateiendungen kennt jenes tool? (print database)
    $ dircolors -p

see also:
    http://ubuntuforums.org/showthread.php?t=1297960
    https://github.com/trapd00r/LS_COLORS
    $ FILE=~/.dircolors; dircolors -p > $FILE; vim $FILE

Q: kennt jemand ein schoeneres tool mit
dem man diese farben einstellen koennte?
also interaktiv, zum ausprobieren?

= zsh =

zeige die der zsh bekannten optionen fuer ls:
(wie viele moegen das wohl sein? mal raten!)
    $ ls -[TAB]

    $ ls --color=[TAB]

was passiert, wenn die shell ausdruecke verwendet?
will man das einfach so abschicken?
"DANGER, WILL ROBINSON!"
inline tab expansion - mal die shell
die ausdruecke expandieren lassen:
    $ echo {23..42}[TAB]
    echo 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42

mal die zahlen faktorieren lassen:
    $ for n in {23..42}; do factor $n; done

die gerade zahlen sind eh keine primzahlen.
also nur jede zweite zahl nehmen:
    $ for n in {23..42..2}; do factor $n; done

manchmal braucht man die fuehrenden nullen dazu:
    $ echo {-10..10..01}
    -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 00 01 02 03 04 05 06 07 08 09 10

see also:
    BRACE EXPANSION (for echo {n1..n2..n3})

benutzung von "kill".. den richtigen prozess erwischen:
    $ sleep 23 &
    $ kill <TAB>
    {select sleep prozess}
    [1]  + terminated  sleep 23

man kann auch nach dem praefix des prozessnamens expandieren:
    $ sleep 42 &
    $ kill sl<TAB>

nuetzliche auftrennung der werte in der PATH variablen:
    $ echo $PATH
    $ echo $path

(manche leute entfernen die doppelpunkte mit awk,
 sed, perl.. mit kanonen auf spatzen schiessen!)

alle verzeichnisse im pfad ($PATH) auflisten:
    $ for dir in $path; do  ls -ld $dir; done

wie kommt man schneller in eines dieser laaaaangen unterzeichnisse?
TAB expansion.. eh kloar!

    how to "cd" to /usr/lib/python2.6/dist-packages/IPython/frontend/terminal/console ?
    $ cd /u/l/p/d/I/f/t/c
[fpuaryyrf jrpufrya va rva iremrvpuavf hrore qvr "vavgvnyvra" frvare iremrvpuavffr:]

hinweis:
    $ changing directories with "cd" (popdir, pushdir)
    see AUTO_PUSHD, PUSHD_IGNORE_DUPS, PUSHD_SILENT

= gpg =

[Key Signing, anyone?]

eine datei mit geheimen daten fuellen..
  $ echo my latest password is... > secret

.. und dann verschluesseln:
  $ gpg    -e secret    # erzeugt secret.gpg
  $ gpg -a -e secret    # erzeugt secret.asc

ACHTUNG:
die datei "secret" wird *nicht* entfernt!
eventuell moechte man diese daten
nach dem verschluesseln loeschen.

und so ENTschluesselt man diese daten:

  $ gpg secret.asc

  You need a passphrase to unlock the secret key for
  user: "Sven Guckes <pgp@guckes.net>"
  1024-bit RSA key, ID 57F77F09, created 1995-01-30

  Enter passphrase: _

  gpg: encrypted with 1024-bit RSA key, ID 57F77F09, created 1995-01-30
        "Sven Guckes <pgp@guckes.net>"

falls die datei "secret" noch existiert
bekommt man natuerlich eine warnung:

  File `secret' exists. Overwrite? (y/N)

  Enter new filename: secret.neu

vergleichen der alten mit der neuen datei:
  $ diff secret secret.neu

keine ausgabe?!  alles gut! :-)

= htop =

"htop is 'top' on steroids"
prozessliste mit vielen farben.
(remember: bunt ist meine lieblingsfarbe!)

  F5: tree view
  F4: filter - zB mosh ssh screen tmux zsh
  F6: sort by "User" (name) or by "CPU" (time)

killing it softly...
  $ sleep 42
  htop: F4 sleep
  k
  9
  ENTER

(kein wunder, dass nerds kaum schlaf bekommen..)

= pv =

  pipe viewer

einfach mal viel output erzeugen und gleich in den "bit bucket" werfen.
  $ yes > /dev/null

aber wie viele daten werden dabei eigentlich erzeugt bzw versenkt?
"pv" sagt es euch!  einfach dazwischenschalten:
  $ yes | pv > /dev/null
  guckes@kudu:~> yes | pv > /dev/null
  1.23GB 0:00:23 [55.9MB/s] [  <=>  ]

generell kann man "pv" wie "cat" verwenden.
  $ pv source > destination

achtung: man sollte die umlenkung in zieldatei nicht vergessen,
sonst landet es auf dem terminal. ;-)

einfaches kopieren:
  guckes@kudu:~> pv Mail.IN/VIM > /tmp/VIM
   358MB 0:00:06 [52.7MB/s]
   [========================================>] 100%

kopieren und komprimieren:
  guckes@kudu:~> time pv Mail.IN/VIM | bzip2 -9 > /tmp/TMP2.bz2
   358MB 0:01:47 [3.34MB/s] [==============================>] 100%
  pv Mail.IN/VIM  0,04s user 0,65s system 0% cpu 1:47,19 total
  bzip2 -9 > /tmp/TMP2.bz2  96,18s user 0,85s system 90% cpu 1:47,31 total

immerhin - 3.33MB/s, dh 10MB in drei sekunden mit haertester komprimierung.

[TODO: weitere beispiele]

= Moo! =

spass mit apt-get, figlet, toilet, sl, und cowsay:

  $ apt-get moo
  $ aptitude -v{vvvvv} moo # homework! :)

  $ figlet
  hallo graz
  CTRL-D

  $ figlet -m0 serwas graz
  $ FIGLET GRAZ L

  $ toilet -w $COLUMNS --gay Graz is cool
  (nicht installiert am server.. tja..)

  $ sl -l       # "yvggyr" genva
  $ sl -F       # "sylvat" genva

  $ cowsay that is all folks

  -----------------------------------------------------------
  -----------------------------------------------------------
  -----------------------------------------------------------

= Kuer =

(wieder zuviel. das wird vielleicht ein eigener vortrag ;-)
(vielleicht bei einem show+tell zeigen)

== apt ==

apt?  apt-get, apt-cache, apt-key, apt-mark
apt-show-versions

  alias aptse='apt-cache search'
  alias aptsh='apt-cache show'
  alias aptgi='apt-get install'

  -rwxr-xr-x 1 root root 204800 Nov 16 13:43 /usr/bin/apt-get
  -rwxr-xr-x 1 root root 122080 Nov 16 13:43 /usr/bin/apt-cache

  $ aptse vim  --> 75 hits

Verwendung von "less" mit Suche nach dem Suchwort (Parameter $1):
  function acse { apt-cache search $1 | sort | less -S +/$1 }
  function acsh { apt-cache show   $1 |        less -S +/$1 }

  $ acse cowsay
  $ acsh mutt

  $ apt-show-versions gnupg mutt slrn vim zsh
  gnupg/wheezy uptodate 1.4.12-7+deb7u3
  mutt/wheezy uptodate 1.5.21-6.2+deb7u2
  slrn/wheezy uptodate 1.0.0~pre18-1.3
  vim/wheezy uptodate 2:7.3.547-7
  zsh/wheezy uptodate 4.3.17-1

nimm die liste der programmnamen aus einer datei:
  $ apt-show-versions $(cat mylist.txt)

hint: apt-file (trapicki)

== mutt ==

rendering attachments (DOC,HTML,PDF,RTF,TNEF) as text -
using antiword, elinks, pdftotext, unrtf, and tnef, respectively
(TODO)

== telnet ==

(zu viel. eigener vortrag?!)

mit telnet kann man sich direkt auf einen
port verbinden und "nach protokoll sprechen",
so zB "email" (SMTP,port 25),
.     "web"   (HTTP,port 80),
.oder "news"  (NNTP,port 119).

  $ telnet localhost 25
  helo $domain
  quit

see also: http://de.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol

html!

  $ telnet www.guckes.net 80
  ...

nntp!

  $ telnet www.in-berlin.de 119
  [TODO!]
  date
  list motd
  xuid
  xver
  quit

see also: http://www.dmoz.org/World/Deutsch/Computer/Usenet/%C3%96ffentliche_Newsserver/

  STAR WARS!
  $ telnet towel.blinkenlights.nl

  Nyan Cat in colour:
  $ telnet nyancat.dakko.us

  useful tools:
  $ telnet telehack.com

MUDs!

Regentag? Hausaufgabe!

see also: http://de.wikipedia.org/wiki/Multi_User_Dungeon
          http://www.lysator.liu.se/mud/faq/faq2.html
          http://en.wikipedia.org/wiki/LPMud
          http://wayback.archive.org/web/20140105084659/http://nordmud.de/dml/

tipp von equinox0815:
socat (SOcket CAT) http://www.dest-unreach.org/socat/

== vim ==

showing textwidth:
    :set colorcolum
    map ,cc :let &colorcolumn=join(range(81, 255), ',')<cr>

viewing data:
zz : reposition current line in middle line
zt : reposition current line at top    line
zb : reposition current line at bottom line

viewing characters:
ga : show ascii of current character
g8 : show utf-8 of current character

text manipulation (internal):
g? : rot13
gU : uppercasing
gu : lowercasing
gq : formatting

text manipulation (external,
ie using tools as filters):
rev : reversing text - within lines
tac : reversing text - block of lines
tr  : translations within alphabets
      tr [a-z] zyxwvutsrqponmlkjihgfedcba
      uggc://qr.jvxvcrqvn.bet/jvxv/Ngonfpu

boxes : draws boxes (comments) around text
tal   : text aligner
boxes+tal: http://thomasjensen.com/software.shtml

visual mode:
selecting rectangles
inserting/deleting comments

extracting URLs and showing with urlview:
:w !urlview
 $ grep -o 'http:[^ ]*' $file | urlview

reformatting paragraphs:
vip!par ...

automagically editing PDFs with pdftotext:
$ vim foo.pdf

und das bringt uns zu der automatischen extraktion
von text n "verpackten formaten" in emails:

= Ausblick =

weitere vortraege von neulich bei den
Grazer Linuxtagen am 5. April 2014:

Freitag 2014-04-04 14:00-16:00 [HS04] Kevin Krammer:
"Versionskontrolle mit Git"
http://glt14-programm.linuxtage.at/track/Entwickler/307.de.html
tools: git (was sonst? ;)

Samstag 2014-04-05 13:00-13:40 [Seminarraum 2] Kurt Pfeifle:
PDF-KungFoo mit Ghostscript & Co.
http://glt14-programm.linuxtage.at/track/Entwickler/320.de.html
tools: pdfinfo, pdffonts, pdfimages; gs (Ghostscript) + mutool;
pdftk, Poppler-Tools, pdfresurrect, pdf-parser.py, pdfid.py, qpdf

Samstag 2014-04-05 14:00-14:40 [HS01] Martin Leyrer
"Teste Deine sichere Kommunikationsinfrastruktur"
http://glt14-programm.linuxtage.at/events/338.de.html
tools: telnet!

Samstag 2014-04-05 17:00-17:40 [HS01] Axel Beckert: "aptitude"
http://glt14-programm.linuxtage.at/events/333.de.html
http://noone.org/talks/aptitude/
http://noone.org/talks/aptitude/aptitude-linuxday.txt
tools: aptitude = apt-get + apt-cache + apt-mark + ncurses + more

Samstag 2014-04-05 18:00-18:20 [HS01] Darshaka Pathirana:
"How to Encrypt your (headless) Root-Server"
http://glt14-programm.linuxtage.at/events/344.de.html
tools: cryptsetup, grml-debootstrap, grub2, cryptLuks, dropbear

Samstag 2014-04-05 18:30 Key Signing Party

Sonntag 2014-04-06 16-20h "Show+Tell"
im realraum: Brockmanngasse 15, 8010 Graz
http://osm.org/go/0Iz~oIhDI?way=85446625
https://realraum.at/wiki/doku.php?id=show_tell2014
https://plus.google.com/events/c2ufgal0mec6t5djf8ljkqat0fg
http://grical.realraum.at/e/show/439/

Dienstag 2014-04-15 17:42-23:42h
im metalab in wien "show+tell"
https://metalab.at/wiki/2014-04-15_Show_and_Tell
http://guckes.titanpad.com/15

= Feedback =

freue mich ueber feedback zum vortrag:

mailto:eisenstadt2014@guckes.net
(gpg keys 1024R/57F77F09 8000R/0185391B)

= TODO =

weitere tools. die man sich auch mal ansehen sollte,
weil sie einfach super hilfreich und cool sind:

ftp:
lftp        http://lftp.yar.ru/
ncftp       http://www.ncftp.com/

http:
curl        http://curl.haxx.se/
wget        http://www.gnu.org/directory/wget.html
            http://www.wget.org/ for sale! o_O

search/suchen:
ack         http://beyondgrep.com/ (aka ack-grep)

network:
nmap        http://nmap.org/
openssl     http://www.openssl.org/

TUIs:
elinks      http://elinks.cz        Web browser
irssi       http://irssi.org        IRC chat client
mutt        http://mutt.org         Mail User Agent
newsbeuter  http://newsbeuter.org   RSS Feed Readers
slrn        http://slrn.sourceforge.net
vim         http://vim.org          Text Editor
zsh         http://zsh.org          *Zee* Shell
            https://github.com/robbyrussell/oh-my-zsh

processes:
dtrx        http://brettcsmith.org/2007/dtrx/
dstat       http://dag.wieers.com/home-made/dstat/
htop        TODO
iotop       TODO
mtr         http://www.bitwizard.nl/mtr/
multitail   http://www.vanheusden.com/multitail/
lsof        TODO
pkill       TODO (package procps)
pv          http://www.ivarch.com/programs/pv.shtml

music:
mplayer     TODO

backup/synchronization:
rsync       TODO

interactive login:
autossh     TODO
mosh        TODO
ssh         TODO

window managers:
screen      TODO
tmux        http://tmux.sourceforge.net/

calendar:
ccal        TODO

apt-key     https://github.com/xtaran/curses-apt-key

sourceforge projects:
ditaa       http://ditaa.sourceforge.net/
netcat      http://netcat.sourceforge.net/
ngrep       http://ngrep.sourceforge.net/
slrn        http://slrn.sourceforge.net
tmux        http://tmux.sourceforge.net/    window manager

mii-tool    view, manipulate media-independent interface status

oneko       - katze, die der maus hinterherrennt
pv          - pipe viewer
lolcaT      - text mit einem regenbogen ueberziehen
https://github.com/busyloop/lolcat

atool       .       (acat, adiff, als, aunpack, etc.)
di / dfc / discus / pydf (df auf Drogen, tlw. farbig)
hardlink / fdupes / duff / rdfind (Doppelte Dateien finden und ggf. verlinken)
since (stateful tail)
swaks (Swiss Army-Knife for SMTP)
paket unp : ind unp und ucat (Pack einfach aus, egal, welches Format :-)
paket zutils: zcat/zgrep/zless auf Drogen: gzip/bzip2/lzma/xz/etc.)

strigi-utils:
deepfind / deepgrep

glances     An eye on your system
http://nicolargo.github.io/glances/

inxi - Command line system information script for console and IRC
    A newer, better system information script for
    irc, administration, and system troubleshooters.
example usage on IRC with irssi:  /exec -out inxi -bx

-> http://packages.qa.debian.org/$PAKETNAME
zB http://packages.qa.debian.org/g/glances.html

= Links =

das offizielle HomePage des Event:
http://eisenstadt.linuxwochen.at/

das offizielle Programm:
http://linuxwochen.at/index.php?option=com_content&view=article&id=391&Itemid=81

das inoffizielle Programm - kurz und lang:
http://www.guckes.net/eisenstadt2014/programm.kurz.txt
http://www.guckes.net/eisenstadt2014/programm.lang.txt

= References =

http://ss64.com/bash/

http://www.cyberciti.biz/faq/howto-use-grep-command-in-linux-unix/
http://www.cyberciti.biz/open-source/best-terminal-applications-for-linux-unix-macosx/
http://www.cyberciti.biz/open-source/30-cool-best-open-source-softwares-of-2013/
http://www.cyberciti.biz/open-source/command-line-hacks/pv-command-examples/
http://www.cyberciti.biz/tips/multitail-view-multiple-files-like-tail-command.html
http://www.cyberciti.biz/networking/nmap-command-examples-tutorials/

= Bemerkungen =

CLT := Command Line Interface
TUI := Text User Interface

was ist der unterschied zwischen CLI und TUI?

CLI findet auch verwendung in skripten
(ohne interaktion mit dem benutzer) -
[beispiele: agrep, date, wget.]

TUI laeuft dagegen mit darstellung im terminal und
wird von benutzer eine ganze weile interaktiv benutzt.
[beispiele: irssi, mutt, screen, vim.]

= HELP! =

kennt jemand ein tool fuer die folgenden probleme bzw situationen?

Q1: [colouring] einstellung von farben fuer "ls" (dircolors)?
Q2: [colouring] einfaerben von speziellen texten, zB gpg/pgp schluessel fingerprints?
Q3: [monitoring] ueber welchen port gehen/gingen wie viele daten?

EOF
</pre>
</body>