Start : Inhalt : Bastelbuch : Das Terminal

Das Terminal

Bildschirmfoto eines Terminals
Um es einfach mal auszusprechen: Wenn es nicht in einem Terminal läuft, dann ist es nichts wert :)

Nach fast 13 Jahren beruflichem Umgang mit FreeBSD und Linux bin ich entgültig davon überzeugt das weniger mehr ist. vi, mutt, w3m, grep, awk, sed und bash ist alles was man braucht. In den allermeisten Fällen brauche ich nocht nichtmal screen. Alles andere lenkt nur von den relevanten Dingen ab. Die Aufmerksamkeit wird sonst weniger von der Aufgabe und mehr von der Bedienung der Werkzeuge belastet. Das ist schlecht ;)

Als Terminal-user reicht mir dann auch ein Debian in einem colinx auf einem Intel Atom. Ich nutze blockdevices als Festplatten. Das macht das backup einfach und die Rechenleistung ist mehr als ausreichend.

sh - Die Basis für alles

Man braucht ja schliesslich einen command-line interpreter. sh ist gut, aber jede Bourne-ähnliche shell tut ihren Zweck. bash ist heute wohl die am meisten verbreitete shell.

Neben der Fähigkeit Befehle auszuführen sind Makros bzw. shell-Skripte sehr mächtig. Tatsächlich lassen sich sehr komplexe Aufgaben mit Skripten bewältigen.

ASCII - Datenverarbeitung im Textformat

Ur-Uni* basiert auf dem Textformat. Es ist an sich nicht schwer zu verstehen. Jeder beliebige Text besteht aus Zeilen und Spalten. Das ist auch eine zweidimensionale Datenbank und damit kann man eine Menge anfangen.

Ein simples Beispiel ist der Befehl ls -l. das ergibt etwas wie:
-rwxr-xr-x 1 mague users  6471 2012-02-21 09:40 dodeauth
-rwxrwxr-x 1 mague users 10073 2012-02-21 09:40 dodns
-rwxrwxr-x 1 mague users 18566 2012-02-21 09:51 dodom
-rw-rw-r-- 1 mague users  3349 2012-02-21 09:41 lfnet-hm-tools-upd.tar.gz

Wir haben 4 Zeilen und 8 Spalten. Man kann nun die Dateigrösse aller Dateien addieren und die Summe in Megabyte ausgeben.
ls -l | awk '{ SUM += $5} END { print SUM/1024/1024 }'

0,0366774

Man achte noch auf die pipe |. Damit lassen sich Texte durch mehrere Befehle tunneln. Hier ein Beispiel in dem nur Dateien welche mit do beginnen addiert werden.
ls -l | grep "do.*$" | awk '{ SUM += $5} END { print SUM/1024/1024 }'

0,0334835

Ob der Datenstrom von einem Befehl oder aus Dateien kommt ist egal. Man beachte das man mit mehreren Dateien und Ordnern dreidimensionale Datenbanken abbilden kann.

Zu erwähnen ist noch, dass man häufug verwendete Konstrukte in Makros oder Skripten abgebildet werden koennen.

Grundsätzlich ist grep das zeilenorientierte Werkzeug und awk das spaltenorientierte Werkzeug. Man beachte auch noch sed und find. Für all diese Befehle gibt es man pages und sehr viel Informationen im Internet.

Der Editor

Da Un*x auf dem Textformat aufbaut braucht man einen Texteditor. Mir ist es egal ob vi oder emacs. Aber ein Editor ohne shell Filter ist in diesem Zusammenhang kein Editor !!

Ich gebe zu, es dauert eine Weile um von der WYSIWYG Denkweise wegzukommen. Dann ist es aber um Welten besser.

Ich habe vim mit syntax highlightning versucht. Ich muss sagen, dass ätzt !! Monochrom ist immer noch am Besten. Klasse ist aber eine Funktion zum Prüfen der Klammern :)

RCS - merkt sich alles

Es gibt inzwischen einige revision control Systeme. SVN, git usw. Ich finde RCS für Textdateien ist immer noch ausreichend. Es ist simpel, effektiv und kann auch in bash Makros verwendet werden.

Jede Textdatei, seien es sourcen, TeX Vorlagen, Zonen von Nameservern oder aufwendig gesammelte Daten, sollte ins RCS. Alles was versehentlich geloescht werden kann oder sonst irgendwie versaut werden kann sollte ins RCS.

RCS ist in man pages wie auch im Internet ausreichend dokumentiert. Eine weniger bekannte Funktion ist der Id tag. Man kann in eine Datei eine auskommentierte Zeile mit dem Id tag schreiben. In einem bash Skript etwa so:
#!/bin/bash
#
# $Id$
#
Das siht nach dem ersten Ein- und wiedere Auschecken dann so aus:
#!/bin/bash
#
# $Id: myscript.sh,v 1.1 2013/02/07 15:29:44 mague Exp mague $
#
Das RCS pflegt die Id automatisch mit und man hat die Infos immer parat ohne sich darum kümmern zu müssen.

eMail in ASCII

mutt. Mehr gibts nicht zu sagen.

Ich empfehle dringend Maildir und nmzmail. nmzmail baut auf namazu auf und ist schnell und mächtig. Zu namazu weiter unten mehr.

Wer keinen IMAP daemon laufen lassen will oder kann, der sollte procmail ansehen. Duch die Syntax kann man damit eingehende Mails in Maildir einsortieren.
MAILBOX=/home/mague/Maildir/INBOX

## Dann einen slash anhaengen und schon wird in Maildir einsortiert.
:0
*
$MAILBOX/

HTML im Terminal

Es gibt einige Textbrowser. Soweit ich weiss ist elinks einer der kompatibelsten. Ich komme nicht von w3m weg. Es ist der einzige Textbrowser welcher das freie Bewegen des Cursors erlaubt.
Bildschirmfoto des w3m Textbrowser

Man muss nicht unbedingt das WWW damit absurfen. Aber ein Textbrowser ist sehr gut fuer schnelle google Suchen, loakle Suchen, Dokumentationen lesen und fuer ( selbstgeschriebene ) Webinterfaces geeignet. Gutes Beispiel ist das Webinterface einen VoiP Telefons. Auch braucht man einen textbrowser um HTML in eMails anzeigen zu können. w3m kann z.B. auch HTML als TXT (ohne tags) dumpen. Es gibt endlos viele Einsatzmöglichkeiten. Anwendungen.

Andererseits beweisst diese Seite das es moeglich ist HTML Inhalte so aufzubereiten das sie in allen Browsern funktionieren. Selbst barrierefreise Internet kommt mit dieser Siete klar. Das aktuelle Internet hat halt sehr wenig mit Informationstechnologie zu tun.

Grafikbearbeitung

Ganz klar erstmal netpbm. Es ist schoen old-school und erledig erstmal alle Aufgaben. Wenn das nicht reicht, dann halt ImageMagick.

Neben Bildbetrachtern fuer X gibts noch fbi fuer die Konsole. Leider wird nichts mehr fuer die SVGALib entwickelt. Teilweise fallen sogar Werkzeuge aus, weil sie nicht mehr gewartet werden.

Typesetting

TeX ist eigentlich relativ alt, aber undurchschaubar und passt nicht zu old-school Uni*. Ich wuerde es bloatware nennen. Daher groff. Das ist Uni* pur. Die Lernkurve empfinde ich flacher als die von TeX und wenn man das wichtigste verstanden hat gibt es keine Grenzen mehr.

Ein recht altes Werzeug waere noch udo. Das kommt noch aus der Atari ST Zeit und wird tatsächlich noch etwas gewartet. Neben groff sind noch die psutils, ghostview und xpdf zu nennen. Leider gibt es keinen SVGA port der Dokumentbetrachter. Zumindest ist der aktuelle port von dvifb unter Debian gebrochen. An einem minimalen X kommt man also nicht mehr vorbei. Es sei denn man macht staendig Probedrucke.

Graphen erstellen

Nach wie vor ist gnuplot ein gutes Werkzeug. Es ist sogar moeglich Graphen direkt in ASCII auszugeben.
gnuplot graph in ASCII

Terminkalender

remind ist ein klassisches Werkzeug um Termine usw. zu verwalten. wyrd ist eine recht komfortable Oberflaeche dafuer.

So lassen sich reminder per eMail versenden.
remind -z -k"echo %s | mail -s [REMINDER] username@irgendwo.de" /home/username/.reminders &

remind console interface

Terminal Multiplexer

Wenn man doch mal etwas mehr Multitasking will oder einen Task auf einem entfernten Rechner laufen lassen will ohne eingeloggt zu sein, dann braucht man einen Terminal Mulitplexer.
Ein Multiplexer erlaubt es mehrere Fenster gleichzeitig zu nutzen und diese Fenster noch in Panele aufzuteilen.
Diese session bleibt erhalten und kann spaeter wieder geladen werden. Man kann also einen zeitintensiven task starten, sich ausloggen und spaeter zurueck kommen. Der task laeuft in der Zwischenzeit weiter.
Bisher gab es screen fuer solche Aufgaben. tmux ist die modernere Version eines Multiplexers.

tmux terminal multiplexer

TODO

coming soon..