LPIC-1 Cheat Sheet Module 102

This page contains my brain dump while learning for the LPIC-1 Module 102 certificate. The notes contain German comments – please just ignore them if you don’t speak that language.
Disclaimer: This page does not contain hints about what the exam contained in my case. I won’t tell you! ­čÖé

Sorry about the bad formatting – I just copied and pasted this stuff from my private wiki.

====== LPIC 1 - Pr├╝fung 102 ======
===== 105 - Shells, Skripte und Datenverwaltung =====
==== 105.1 - Die Shell-Umgebung anpassen und verwenden ====
  * /etc/profile
  * env
  * export
  * set
  * unset
  * .bash_profile
  * .bash_login
  * .profile
  * .bashrc
  * .bash_logout
  * function
  * alias
  * lists
  * Eine Shell namens bash = Bourne Again Shell, die weit verbreiteste Shell
  * sh = Vorfahre der Bash
  * ksh = Korn-Shell (Kombination von sh- mit C-Shell)
  * csh = vom Syntax her an C angelehnt
  * zsh = ├Ąhnelt der ksh, bietet aber h├Âheren Funktionsumfang
  * In der Pr├╝fung werden nur Fragen zur Shell gestellt.
  * Umgebungs- und Shell-Variablen
  * Umgebungsvariablen gelten f├╝r alle Shells, die ein Benutzer verwendet. Beim Aufruf einer Subshell werden diese Variablen weiter vererbt. Bei Umgebungsvariablen werden i.d.R. Gro├čbuchstaben verwendet.
  * Shell-Variablen m├╝ssen in jeder Shell neu deklariert werden. Werden meist kleingeschrieben.
  * Shell-Variable: a=5
  * b=6
  * let c=$a+$b
  * echo $c=$a+$b  -> Ausgabe: 11=5+6
  * Diese Variablen st├╝nden in einer Sub-Shell nicht zur Verf├╝gung.
  * Durch einen Variablenexport st├╝nden die Variablen in untergeordneten, jedoch nie in ├╝bergeordneten Shells zur Verf├╝gung.
  * Ein Export bewirkt NICHT, dass aus einer Shell-Variable eine Umgebungsvariable wird.
  * export c
  * sh
  * echo $c
  * Ausgabe: 11
  * Zweite Methode f├╝r den Export: export Z=1000
  * sh
  * echo $Z
  * Ausgabe: 1000
  * Variablendefinition und -export k├Ânnen also in einem Streich erfolgen.
  * set zeigt an, welche Umgebungs- und Shell-Variablen die aktuelle Shell verwendet.
  * Nur Umgebungsvariablen anzeigen: env
  * Umgebungsvariable definieren: export VARIABLE=bla
  * Variablen l├Âschen: unset a (oder alternativ: ab- und anmelden, da es ja nur Shell-Variablen sind)
  * alias tx="tar -xvzf" definiert einen Alias f├╝r den angegebenen Befehl.
  * Mehrere Befehle k├Ânnen in einem Alias definiert werden, in dem ein Komma verwendet wird: alias frei="free; df -h"
  * Die Eingabe von alias ohne Parameter bewirkt die Auflistung aller definierten Aliase.
  * Definieren von Funktionen ist m├Âglich:
  * function addiere ()
  * {
  * let summe=$1+$2
  * echo -e "Die Summe ist $summe"
  * }
  * addiere 3 4 ergibt als Ausgabe: Die Summe ist 7
  * In einer Zeile definiert: function addiere () { let summe=$1+$2; echo "Die Summe ist $summe"; }
  * Man k├Ânnte sogar eine Funktion nach einem Bash-Kommando benennen:
  * function ls ()
  * {
  * builtin ls -lisa
  * }
  * Damit die Funktion sich nicht versehentlich selbst aufruft, wird bei der ├ťbergabe des Kommandos mit builtin klargestellt, dass es sich hier um ein bash-internes Kommando handelt. Es w├╝rde sonst zu einer Endlosschleife kommen, die bei jedem Aufruf an sich selbst Arbeitsspeicher anfordert.
  * Konfigurationsdateien, die f├╝r alle Anwender G├╝ltigkeit besitzen, befinden sich im Verzeichnis /etc/ und beginnen niemals mit einem Punkt.
  * Die individuellen Konfigurationsdateien f├╝r den jeweiligen User befinden sich im entsprechenden Heimatverzeichnis und beginnen immer mit einem Punkt.
  * /etc/profile ist die erste Konfigurationsdatei, die bei der Anmeldung (f├╝r die Login-Shell) eines Benutzers eingelesen wird. Sie enth├Ąlt erste Umgebungsvariablen und die erste PATH-Anweisung. ├änderungen in dieser Datei erfordern eine neue Anmeldung des Benutzers.
  * /etc/bashrc kann von der .bashrc eines Benutzers geladen werden. Sie enth├Ąlt systemweite Einstellungen, Aliase und Funktionen. Diese Datei wird beim Start jeder Shell neu eingelesen und erfordert deshalb nach ├änderung keine Neuanmeldung des Benutzers.
  * (In Ausf├╝hrungsreihenfolge:)
  * ~/.bash_profile wird, falls vorhanden, nur bei einer Neuanmeldung eingelesen und sofort nach /etc/profile ausgef├╝hrt. Sie beinhaltet zus├Ątzliche Pfadanweisungen (z. B. das Heimatverzeichnis), den zu verwendenden Standardeditor und benutzerspefizische Umgebungsvariablen.
  * ~/.bash_login ist eine Alternative zu .bash_profile und wird auch nur dann abgearbeitet, wenn die Datei .bash_profile nicht existiert. Auch diese Datei wird nur w├Ąhrend der Anmeldung verwendet. = vom Inhalt her wie .bash_profile
  * ~/.profile ist die urspr├╝ngliche Konfigurationsdatei der Bash. Sie wird nur w├Ąhrend der Anmeldung (f├╝r die Login-Shell) eingelesen, und das auch nur dann, wenn weder eine .bash_profile noch eine .bash_login-Datei im Verzeichnis des Benutzers existieren. = vom Inhalt her wie .bash_profile und .bash_login.
  * ~/.bashrc ist die andere, ursprüngliche Konfigurationsdatei der Bash. Sie wird in jedem Fall eingelesen, und zwar auch beim Aufruf einer neuen Shell. Nach Änderungen in dieser Datei ist entsprechend keine Neuanmeldung des Benutzers erforderlich. Sie beinhaltet im Wesentlichen Aliase und Funktionen.
  * ~/.bash_logout ist eine optionale Datei, die ausgef├╝hrt wird, wenn der Benutzer sich abmeldet. Sie k├Ânnte z. B. den Monitor l├Âschen.
  * ~/.inputrc enth├Ąlt Definitionen, welche die Tastatur betreffen. So wird hier auch der Verwendungszweck von Funktionstasten definiert u.├ä. Es ist auch m├Âglich, in dieser Datei Hotkeys f├╝r h├Ąufig verwendete Befehle zu definieren. Z. B. k├Ânnte man mit [Strg] + [H] ins Heimatverzeichnis wechseln wollen. Das erreichen wir durch folgenden Eintrag:
  * Control-h: "cd ~"
  * Eine systemweite /etc/inputrc ist heutzutage eigentlich Standard bei fast allen Systemen.
  * /etc/skel dient als Skeleton-Verzeichnis als Grundger├╝st/Skelett/Vorlage f├╝r das Heimatverzeichnis eines neuen Benutzers. Beim erstellen eines neuen Benutzers samt homes wird der Inhalt des Skeleton-Verzeichnisses dann nach /home/$USER kopiert und anschlie├čend die Berechtigungen gesetzt.
==== 105.2 - Einfache Skripte anpassen oder schreiben ====
  * for
  * while
  * test
  * if
  * read
  * seq
  * Unser Beispielscript: vi add
  * let summe=$1+$2
  * echo "Die Summe aus $1 und $2 ist $summe"
  * Kommentare k├Ânnen mit einem vorangestellten "#" hinzugef├╝gt werden: # blabla
  * Variante #1 der Ausf├╝hrung: /bin/bash add 5 6
  * Ausgabe: Die Summe aus 5 und 6 ist 11
  * Variante #2 der Ausf├╝hrung: source add 5 6
  * source ist ein Bash-internes Kommando.
  * Variante #3: chmod a+x add && Hinzuf├╝gen der ersten Zeile zum Script: #!/bin/bash
  * Diese s.g. "shebang!"-Zeile teilt der Shell mit, dass es sich um ein ausf├╝hrbares Programm handelt und welche Umgebung f├╝r das Script ben├Âtigt wird.
  * /bin/bash ist der Interpreter.
  * Scripte mit administrativen Aufgaben erhalten meist die Dateirechte 700, damit ein normaler User weder lesen noch schreiben kann.
  * chmod 4700 add bewirkt, dass das Script im Sicherheitskontext des Programmbesitzesrs ausgef├╝hrt wird.
  * Somit kann ein normaler User das Script als root ausf├╝hren, wenn es denn dem root geh├Ârt.
  * In /usr/bin k├Ânnen Scripte abgelegt werden, die systemweit f├╝r jeden zug├Ąnglich sein sollen und oft verwendet werden.
  * Wenn ein Script ausgef├╝hrt wird, sort die shebang-Zeile (#!) daf├╝r, dass eine neue Shell aufgerufen wird. Shell-Variablen, die zuvor nicht exportiert wurden, stehen in dieser neuen Umgebung (Sub-Shell) nicht zur Verf├╝gung.
  * Umgekehrt bedeutet es auch, dass die Shell-Variablen, die mit Hilfe des Scripts ggf. gesetzt werden, nicht in der normalen ├╝bergeordneten Shell zur Verf├╝gung stehen. Ein Export ist hier ja auch nicht m├Âglich. Die Variablen m├╝ssten dann beispielsweise nach /tmp geschrieben werden, wenn diese nach Beendigung des Scripts noch zur Verf├╝gung stehen sollen.
  * #!/bin/sh
  * echo Das Script wurde mit $0 gestartet
  * Echo Sie haben $# Parameter ├╝bergeben.
  * echo Der erste ├ťbergabewert war $1.
  * echo Der zweite ├ťbergabewert war $2.
  * Murks
  * echo Der aktuelle Errorlevel ist $?.
  * exit 0
  * Die Variable $0 enth├Ąlt den Namen des aufrufenden Programms mit samt dem beim Start angegebenen Pfad.
  * $1 und $2 enthalten die ├ťbergabewerte.
  * $# enth├Ąlt die Anzahl der ├╝bergebenen Parameter.
  * Errorlevel 0 = alles war ok, 1 = Fehler, 127 = was spezielles.
  * #!/bin/sh
  * summe=0
  * while test $# -gt 0
  * do
  * let summe=summe+$1
  * shift
  * done
  * echo Die Summe Ihrer Eingaben ist $summe
  * unset summe
  * exit 0
  * summe = 0 setzt die Summe sicherheitshalber auf 0, falls es diese Variable schon vorher gegeben hat. Reine Sicherheitsma├čnahme.
  * shift bewirkt, dass anschlie├čend die Werte der ├ťbergabeparameter innerhalb Ihrer Variablen verschoben werden. Aus $2 wird somit $1, aus $3 wird $2 usw...
  * Abbruchbedingung = while test $# -gt 0 pr├╝ft, ob noch weitere ├ťbergabeparameter vorhanden sind. ├ťbersetzung: Solange (while) die Anzahl der verbleibenden ├ťbergabeparameter ($#) greater than 0 ist (gt 0), tue (do)...
  * shift wird solange ausgef├╝hrt, bis diese Abbruchbedingung erreicht ist.
  * Wenn die Bedingung nicht mehr zutrifft, wird die Schleife verlassen und hinter dem done fortgesetzt.
  * gt = greater than
  * Anstatt while test.. kann man auch while [ $# -gt 0 ] schreiben. Hier wird "test" durch die eckigen Klammern ersetzt. Hier d├╝rfen die Leerzeichen nicht fehlen! Die ge├Âffnete eckige Klammer "[" ist ein Programm mit der Bezeichnung "[", nach dem nun mal ein Leerzeichen folgen muss. Alles, was danach kommt (also auch "]") sind nur Parameter f├╝r "[", die erwartet werden.
  * test -r <file> - Die Datei existiert ud ist lesbar (readable).
  * test -w <file> - Die Datei existiert und ist beschreibbar (writeable).
  * test -x <file> - Die Datei existiert und ist ausf├╝harbar (exexutable).
  * test -d <file> - Die Datei existiert und ist ein Verzeichnis (directory).
  * test -b <file> - Die Datei existiert und ist ein blockorientiertes Ger├Ąt (block).
  * test -c <file> - Die Datei existiert und ist ein zeichenorientiertes Ger├Ąt (character).
  * test -g <file> - Die Datei existiert und das SGID-Bit ist gesetzt.
  * test -k <file> - Die Datei existiert und das Sticky-Bit ist gesetzt.
  * test -u <file> - Die Datei existiert und das SUID-Bit ist gesetzt.
  * test -e <file> - Die Datei existiert (exists).
  * test -f <file> - Die Datei existiert und ist eine regul├Ąre Datei (file).
  * test -L <file> - Die Datei existiert und ist ein symbolische rLink (link).
  * test <file1> -nt <file2> - file1 ist neuer als file2 (nt = newer than).
  * test <file1> -ot <file2> - file1 ist ├Ąlter als file2 (ot = older than).
  * test <value1> -eq <value2> trifft zu, wenn value1 und value2 gleich sind (equal).
  * test <value1> -ne <value2> trifft zu, wenn die Werte unterschiedlich sind (not equal).
  * test <value1> -gt <value2> trifft zu, wenn value1 gr├Â├ęr als value2 ist (greater than).
  * test <value1> -ge <value2> trifft zu, wenn value1 gr├Â├čer oder gleich value2 ist (greater or equal).
  * test <value1> -lt <value2> trifft zu, wenn value1 kleiner ist als value2 (less than).
  * test <value1> -le <value2> trifft zu, wenn value1 kleiner oder gleich value2 ist (less or equal).
  * Befehlssubstitution: Ausgabe eines Befehls wird an einen anderen Befehl oder an eine andere Variable weiter gereicht.
  * Z. B.: for z in `find /home -name *.old` (Backquotes/Backticks!)
  * Z. B.: for z in $(find /home -name *.old) (Klammern -> Sub-Shell?)
  * Die Ausgabe des Befehls wird einzeln (also jedes einzelne Ergebnis) an die Schleife ├╝bergeben.
  * Escape-Zeichen: \
  * Escape-Zeichen: \a (alert, piept einmal)
  * \b (backspace)
  * \c (unterdr├╝ckt die Ausgabe des Newline-Zeichens)
  * \f (form feed, Leerseite)
  * \n (new line)
  * \r (carriage return)
  * \t (horizontal tabulator, entspricht 8 Leerzeichen)
  * \v (vertical tabulator, entspricht 8 Leerzeilen)
  * Text per Mail zustellen: echo "was testen" |mail -s Test root
  * if - fi, elif, else, case - esac, read, clear
  * echo -e "bla"; read operator; echo $operator; -> holt sich die eingabe des benutzers
  * case "$operator" in 
  * a)
  * let c=a+b
  * clear; echo $a + $b = $c;;
  * *)
  * clear; echo "*) ist das equivalent zu else"
  * exit1;;
  * esac
==== 105.3 - SQL-Datenverwaltung ====
  * insert
  * update
  * select
  * delete
  * from
  * where
  * group by
  * order by
  * join
  * SQL = Structured Query Language
  * SQL ist von der ISO und der ANSI standardisiert.
  * Vier Bereiche von SQL-Befehlen:
  * DQL (Data Query Language): Z. B. SELECT, ORDER BY, DISTINCT
  * DML (Data Manipulation Language): Z. B. INSERT, UPDATE, COMMIT, ROLLBACK
  * DDL (Data Definition Language): Z. B. CREATE TABLE, ALTER TABLE, DROP TABLE..
  * DCL (Data Control Language): GRANT, REVOKE
  * MySQL-Shell starten: mysql --user=root -h localhost --pasword
  * status; oder \s
  * help; oder \h
  * help contents;
  * help data types;
  * help VARCHAR;
  * show databases;
  * CREATE DATABASE kontakte;
  * USE kontakte;
  * CREATE TABLE rufnummern (
  * -> id INT(10) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  * -> vorname VARCHAR(128),
  * -> nachname VARCHAR(128),
  * -> vorwahl VARCHAR(32), 
  * -> rufnummer VARCHAR(32)
  * -> );
  * INSERT INTO
  * -> rufnummern (id,vorname,nachname,vorwahl,rufnummer)
  * -> VALUES
  * -> (1,
  * -> 'Hans',
  * -> 'Panz',
  * -> '030',
  * -> '1234588'
  * );
  * Hinweis: Bei Eingabe des jeweils letzten Werts wird kein Komma gesetzt (siehe jeweils die vorletzte Zeile der beiden Beispiele).
  * Daten aus MySQL raus importieren: mysql> source e:/daten/rufnummern.sql
  * SELECT * FROM rufnummern;
  * SELECT vorname, nachname FROM rufnummern;
  * SELECT vorwahl, rufnummer FROM rufnummer WHERE vorname='Willi';
  * SELECT * FROM rufnummern WHERE id > AND id <4;
  * UPDATE rufnummern SET vorwahl = '123' WHERE vorname = 'Dieter';
  * UPDATE rufnummern SET vorwahl = '1234' WHERE id=2;
  * SELECT * FROM rufnummern ORDER BY nachname;
  * SELECT vorname, nachname FROM rufnummern ORDER BY vorwahl LIMIT 2;
  * GROUP w├Ąhlt nur einen Repr├Ąsentanten pro gefundenen Datensatz aus: SELECT * FROM rufnummern GROUP BY vorwahl;
  * INSERT INTO kategorien (kategorie) VALUES ('Freunde');
  * DROP TABLE kategorien;
  * SHOW TABLES;
  * ALTER TABLE rufnummern ADD (kategirie_id INT(5));
  * CHECK TABLE rufnummern EXTENDED;
  * Beispiel f├╝r einen Subselect:
  * SELECT vorname, vorwahl, rufnummer FROM rufnummern
  * -> WHERE kategorie_ID IN
  * -> (SELECT id FROM kategorien
  * -> WHERE kategorie='Freunde'
  * -> );
  * Aliase in SQL-Befehlen gelten auch r├╝ckwirkend f├╝r den aktuellen Befehl. Allerdings kann der ausgeschriebene Tabellennamen dann nicht mehr innerhalb desselben Befehls verwendet werden. Beispiel:
  * SELECT r.vorname, r.nachname, r.vorwahl,
  * -> r.rufnummer, k.kategorie
  * -> FROM rufnummern r
  * -> LEFT JOIN kategorien k ON r.kategorie_id=k.id;
  * SELECT r.vorname, r.nachname, r.vorwahl,
  * -> r.rufnummer, k.kategorie
  * -> FROM kategorien k
  * -> RIGHT JOIN rufnummern r ON r.kategorie_id = k.id;
  * LEFT JOIN und RIGHT JOIN sind "outer joins". Es gibt daher auch "inner joins".
  * SELECT r.vorname, r.nachname, r.vorwahl,
  * -> r.rufnummer, k.kategorie
  * -> FROM rufnummer r
  * INNER JOIN kategorien k ON r.kategorie_id = k.id;
  * Einzelne Datenfelder k├Ânnen nur mit einem leeren UPDATE-Statement gel├Âscht werden.
  * Die kleine zu l├Âschende SQL-Einheit ist eine Zeile. Beispiel:
  * DELETE FROM rufnummern
  * -> WHERE vorname='Dieter'
  * -> AND nachname='Durstig';
  * Alle Zeilen einer Tabelle l├Âschen: DELETE FROM rufnummern;
  * Tabelle l├Âschen: DROP TABLE kategorien;
  * Datenbank l├Âschen: DROP DATABASE kontakte;

===== 106 - Oberfl├Ąchen und Desktops =====
==== 106.1 - X11 installieren und konfigurieren ====
  * /etc/X11/xorg.conf
  * xhost
  * DISPLAY
  * xwininfo
  * xdpyinfo
  * x
  * X-Window wurde vom MIT (Massachusetts Institute of Technology), DEC (Digital Equipment Corporation) und IBM (International Business Machines Corporation) in Zusammenarbeit entwickelt, bevor es Linux gab (1984). Bereits 1987 lag X-Window in der Version 11 vor und diese Versionsnummer ist bis heute aktuell (X11).
  * Der Aufbau von X: Client-Server, Kommunikation also via Netzwerkschicht
  * X-Server: Der X-Server ist die Komponente, die ├╝ber den Kernel und seine Module mit der Hardware kommuniziert. Er nimmt Eingaben von der Tastatur entgegen und ist f├╝r die Kommunikation mit der Grafikhardware zust├Ąndig. Der X-Server hat keinen Einfluss auf das Aussehen der Anwendungsprogramme, sondern ist nur f├╝r die Ausgabe zust├Ąndig.
  * X-Client: Der X-Client ist ein Programm, welches mit dem X-Server kommuniziert. Meistens handelt es sich bei einem X-Client um ein Anwendungsprogramm (wie beispielsweise ein Browser oder Mail-Client) und ├╝bernimmt die eigentliche Verarbeitung der Daten. Das Ergebnis wird dann an den X-Server gesendet, welcher die Ausgabe auf dem Bildschirm durchf├╝hrt.
  * Windowmanager: Ein Windowmanager ist selbst ein X-Client, der als Schnittstelle zu allen anderen X-Clients fungiert. Zudem ist er f├╝r das Aussehen der Fenster und Schaltfl├Ąchen innerhalb von X-Window verantwortlich. Beispiele f├╝r Windowmanager: KWin, Metacity, Windowmaker, FVWM95, twm, Sawfish...
  * Displaymanager: Der Displaymangaer ist haupts├Ąchlich f├╝r die Authentifikation von Benutzern zust├Ąndig. 
  * Desktop Environment: Ein Desktop Environment ist eine Desktop-Umgebung. Hierbei handelt es sich um eine vorkonfigurierte Ansammlung von Programmen, einen Window-Manager und einen passenden Displaymanager. Die beiden bekanntesten Desltop-Umgebungen sind KDE und GNOME. KDE verwendet als Windowmanager KWin und als Displaymanager kdm. GNOME arbeitet mit dem Windowmanager Metacity und Sawfish. Als Displaymanager kommt bei GNOME gdm zum Einsatz.
  * startx ist ein Frontend f├╝r das Startskript xinit und startet den x-Server.
  * Folgende Dateien werden ├╝blicherweise beim Start des X-Servers mit startx als Konfigurationsdateien eingezogen:
  * xinitrc - Startskript f├╝r xinit
  * xserverrc  - Startskript f├╝r den X-Server
  * .xinitrc - Benutzerspezifisches Startskript f├╝r xinit
  * .xserverrc - Benutzerspezifisches Startskript f├╝r den X-Server
  * .Xresources bzw. Xdefaults - Enth├Ąlt benutzerspezifische Einstellungen
  * Die Datei xinitrc enth├Ąlt u.a. Anweisungen dar├╝ber, welche X-Clients gestartet werden sollen und welcher Windowmanager zu verwenden ist. Programme, die ├╝ber dieses Script gestartet werden, sollten im Hintergrund gestartet werden. Einzig der Windowmanager sollte immer im Vordergrund laufen.
  * X-Terminals: xterm ist ein Terminal-Emulator und verwendet folgende Datei: /usr/lib/X11/app-defaults/XTerm
  * Alternativen: aterm, eterm, rxvt...
  * X-Librarys: KDE verwendet bevorzugt QT-Libs, w├Ąhrend GNOME auf GTK (GIMP Toolkit) setzt.
  * Die Konfigurationsdatei von X ist entweder die Datei xorg.conf oder XF86Config. Beide befinden sich in /etc/X11.
  * Die konfigurationsdatei vom X, xorg.conf, ist in verschiedene Sektionen unterteilt:
  * Sektion "Sektionsname"
  * Sektionseintrag
  * Sektionseintrag
  * EndSection
  * Section "Files": Definiert Pfade, die der Server f├╝r den Betrieb ben├Âtigt. 
  * Section "Files"
  * FontPath "/usr/X11R6/lib/X11/fonts/misc:unscaled"
  * FontPath "/usr/X11R6/lib/X11/fonts/local"
  * FontPath "/usr/X11R6/lib/X11/fonts/Speedo"
  * EndSection
  * Fonts k├Ânnen auch zentral auf einem X-Fontserver gepflegt werden. In so einem Fall sieht die entsprechende Files-Section so aus:
  * Section "Files"
  * Fontpath "Unix/:7100"
  * EndSection
  * RgbPath ist ein weiterer Eintrag in der Files-Section. In dieser Datei werden Farbbezeichnungen zu RGB-Werten ├╝bersetzt.
  * Section "Files"
  * RgbPath "/usr/X11R6/lib/X11/rgb.txt"
  * EndSection
  * Auszug aus rgb.txt:
  * 0 250 154   MediumSpringGreen
  * 255 250 240 FloralWhite
  * Es befinden sich meist knapp 800 Farben in de rgb.txt.
  * Section "Server-Flags": Globale Einstellungen f├╝r den Server, z. B. das Verhalten des Power-Managers, Hotkeys... Optionale Section.
  * Section "Input Device": Angaben ├╝ber verwendete Tastatur, Maus... H├Ąufig kommt diese Section mehrfach vor, aus Gr├╝nden der ├ťbersicht. Bsp.:
  * Section "InputDevice"
  * Driver "kbd"
  * Identifier "Keyboard[0]"
  * Option "Protocol" "Standard"
  * Option "XkbLayout" "de"
  * Option "XkbModel" "pc105"
  * Option "XkbRules" "xfree86"
  * Option "XkbVariant" "nodeadkeys"
  * EndSEction
  * Section "InputDevice"
  * Driver "mouse"
  * Identifier "Mouse[1]"
  * Option "Buttons" "5"
  * [..]
  * EndSection
  * Der Aufbau der Eintr├Ąge in dieser Section ist immer in dieser Abfolge organisiert:
  * Section "InputDevice"
  * Driver "Treiber"
  * Identifier "Name des Ger├Ąts"
  * Option
  * Option
  * [...]
  * EndSection
  * Section "Monitor" und "Modes":
  * In der Section "Monitor" sind die technischen Daten des Bildschirms (bzw. der Bildschirme) spezifiziert. Anschlie├čend werden in der Section Modes die m├Âglichen verwendbaren Videomodi f├╝r das Ger├Ąt aufgelistet:
  * Section "Monitor"
  * DisplaySize 300 230
  * HorizSync 30-61
  * Identifier "Monitor[0]"
  * [..]
  * EndSection
  * Section "Modes"
  * Identifier "Modes[0]"
  * Modeline "1024x768" 81.80 1024 1096 1208 1344 768 769 772 802
  * [...]
  * EndSection
  * Der aktuell eingestellte Modus kann mit xvidtune -show ermittelt werden. Das funktioniert aber nur in einer Shell, die von X-Window aus gestartet wurde. Die Section Modes ist optional, weil die verwendbaren Modi f├╝r einen Monitor auch direkt in der Section Monitor eingetragen werden k├Ânnen.
  * Section "Device": Diese Section enth├Ąlt Angaben f├╝r die Grafikkarte(n).
  * Section "Device"
  * BoardName" Geforce 4 MX 440 with AGB8X"
  * BusID "1:0:0"
  * Driver "nv"
  * Identifier "Device[0]"
  * VendorName "NVidia"
  * EndSection
  * Section "Screen": Diese Section f├╝hrt sozusagen Grafikkarten und Monitore zusammen. Daher gibt es f├╝r die Grafikkarte und den Monitor auch den eindeutigen Bezeichner "Identifier".
  * Beispiel f├╝r eine Screen-Section:
  * Section "Screen"
  * DefaultDepth 24
  * SubSection "Display"
  * Depth 24
  * Modes "1024x768" "800x600"
  * EndSubSection
  * SubSection "Display"
  * Depth 32
  * Modes "1024x768" "800x600"
  * EndSubSection
  * [...]
  * Device "Device[0]"
  * Identifier "Screen[0]"
  * Monitor "Monitor[0]"
  * EndSection
  * X-Fontserver (xfs): Dient der zentralen Verwaltung von Fonts.
  * Config-File f├╝r den X-Fontserver: /etc/X11/fs/config.
  * port=7100
  * client-limit=10 #max. 10 Clients pro xfs-Instanz
  * clonse-self=on #bei ├ťberschreitung des Limits erstellt der xfs Klone von sich f├╝r die Bedienung weiterer clients
  * use-syslog=on
  * catalogue = /usr/x11R6/lib/X11/fonts/misc:unscaled,
  * /usr/X11R6/lib/x11/fonts/75dpi:unscaled,
  * [...]
  * default-point-size=120
  * default-resolutions=75,75,100,100
  * Starten des X-Fontservers: /etc/rc.d/xfs start
  * Testen des X-Fontservers: fslsfonts -server Unix/:7100
  * Den X-Fontserver in die Datei xorg.conf eintragen:
  * Section "Files"
  * Fontpath "Unix/:7100"
  * EndSection
  * X-display exportieren: Der Computer, an dem sich der Benutzer befindet (X-Server), muss den Zugriff auf sein Display durch den entfernten Rechner (X-Client) erlauben. Dazu kann xhost verwendet werden.
  * xhost + erlaubt den Zugriff von jeden beliebigen Computer aus.
  * xhost - verbietet pauschal den Zugriff.
  * xhost +hostname erlaubt nur "hostname" den Zugriff.
  * xhost -hostname verbietet den Zugirff f├╝r "hostname".
  * Auf dem Client muss die Variable DISPLAY so ge├Ąndert werden, dass die Ausgabe der Anwendung zum X-Server umgeleitet wird. Beispiel f├╝r OpenOffice: export DISPLAY=ubuntu-desktop:0.0
  * OpenOffice.org wird dann auf dem Host A ausgef├╝hrt, die Ein- und Ausgabe erfolgt jedoch auf dem Desktop von Computer B.
  * Sollte der Ziel-Host ├╝ber mehrere Displays verf├╝gen, muss das Kommando zum Export der DISPLAY-Variable entsprechend anders lauten.
  * xwininfo kann Informationen ├╝ber das einzelne Fenster herzeigen. Beispiel: xwininfo eingeben und das gew├╝nschte Fenster einfach anklicken.
  * xdpyinfo zeigt umfangreiche Informationen ├╝ber den installierten X-Server. Zeigt z. B., welche Screens von dem Server unterst├╝tzt werden.
==== 106.2 - Einen Display-Manager einrichten ====
  * /etc/inittab
  * Configs von xdm
  * Configs von kdm
  * Configs von gdm
  * Der grafische Anmeldebildschirm wird von einem Displaymanager bereit gestellt.
  * kdm, gdm, xdm sind pr├╝fungsrelevant.
  * Die Eingabe von "xdm" in der Shell startet den Displaymanger xdm.
  * init 5 wechselt in den Runlevel 5 - Hier wird meist die grafische Darstellung angeboten. Unter Debian und Ubuntu geht das schon ab Runlevel 2 los.
  * Wenn der Runlevel 5 automatisch beim Boot geladen werden soll, muss die Datei /etc/inittab editiert werden:
  * id:5:initdefault:
  * Konfiguratsiondateien f├╝r die Displaymanager:
  * xdm - /etc/X11/xdm-config, /etc/X11/Xresources und /etc/X11/xdm/Xsetup f├╝r Hintergurnd und Farben
  * kdm - /etc/X11/kdm/kdmrc
  * gdm - /etc/X11/gdm/init/Default und /etc/opt/gnome/gdm/gdm.conf
  * H├Ąufig befinden sich diese Configs in der Realit├Ąt in einem anderen Verzeichnis.
  * gdm sollte f├Âr gew├Âhnlich mit gdmconfig konfiguriert werden.
  * xdm und kdm ├Ąhneln sich von der Konfiguration her.


==== 106.3 - Hilfen f├╝r Behinderte ====
  * Klebrige und Widerholungstasten
  * Langsame/Bounce/Umschalt-Tasten
  * Maustasten
  * Desktop-Themen mit hohem Kontrast und gro├čer Schrift
  * Screen-Reader
  * Braille-Anzeige
  * Bildschirmvergr├Â├čerung
  * Tastatur auf dem Bildschirm
  * Gesten (beim Anmelden, etwa bei gdm)
  * Orca = Screenreader
  * GOK = Bildschirmtastatur (bedient mit Maus oder Eyetracker)
  * emacspeak (Screanreader vom Emacs)

===== 107 - Administrative Aufgaben =====
==== 107.1 - Benutzer- und Gruppenkonten und dazugeh├Ârige Systemdateien verwalten ====
  * /etc/passwd
  * /etc/shadow
  * /etc/group
  * /etc/skel
  * chage
  * groupadd
  * groupdel
  * groupmod
  * passwd
  * useradd
  * userdel
  * usermod
  * Es ist m├Âglich im laufenden Betrieb die Gruppe zu wechseln, um Zugriff auf Ressourcen zu erlangen (es wird dann eine Sub-Shell gestartet).
  * /etc/passwd: <login name>:<password>:<user-id>:<Group-ID>:<gecos name>:<home path>:<login shell>  (6 Felder)
  * Ein Sternchen als Passwort dient zur Sperre des Benutzers.
  * Falls unter <password> ein x hinterlegt ist, liegt es in der /etc/shadow.
  * Der root erh├Ąlt immer die ID 0.
  * Die ersten 100 IDs sind f├╝r administrative Benutzer und Programme gedacht.
  * Wenn als Login-Shell keine ausf├╝hrbare Datei angegeben wird, kann sich der Benutzer nicht anmelden.
  * chfn ├Ąndert den gecos name.
  * finger fragt u.a. den gecos name eines Users ab. Gibt auch andere n├╝tzliche Info zu einem Benutzer aus.
  * /etc/shadow enth├Ąlt die Kennw├Ârter der Benutzer.
  * Der Vorteil bei Verwendung einer shadow-Datei: Dieses file muss nicht f├╝r alle als lesbar gespeichert werden. Die passwd hingegen ist f├╝r jeden lesbar.
  * /etc/shadow: <anmelde name>:<verschl├╝sseltes pass DES 8 Zeichen/MD5 hat mehr>:<zeitpunkt der letzten kennwort├Ąnderung, in tagen seit 1.1.1970>:<mindestanzahl von tagen zwischen kennwort├Ąnderungen>:<maximale anzahl an tagen zwischen kennwort├Ąnderungen>:<der benutzer wird vor ablauf seines kennworts gewarnt, zeigt an, wie viele tage vorher er gewarnt wird>:<wenn konto abgelaufen konto wird deaktiviert, tage bis zur deaktivierung>:<ablaufdatum>:<reserviert f├╝r zuk├╝nftige zwecke>
  * Beispiel: dominik: $2a$10$7oAMWZUt...OwK8kMhuAk:13760:1:21:1:3:::
  * /etc/group: <gname>:<passwort>:<gid>:<group members>
  * Falls ein x als Kennwort vergeben ist, steht das Passwort in der Datei /etc/gshadow.
  * Viele Distributionen erstellen beim Anlegen eines neuen Users auch eine Gruppe mit demselbigen Namen.
  * /etc/gshadow: <gname>:<g passwd>:<g verwalter>:<g members>:
  * Beispiel: sales: $2a$10$....5nvMAwrW39u1:harald:michaela,dominik,willi
  * Gruppenverwalter k├Ânnen die Member verwalten sowie das Kennwort ├Ąndern.
  * useradd erstellt einen neuen User, als Grundlage dient die Datei /etc/default/useradd.
  * useradd -c (comment): Beschreibungsfeld bestimmen
  * useradd -d <dir>: Gibt das Home an (default: /home/username)
  * useradd -m: Steht f├╝r make und legt das Home mit den Settings aus /etc/default/useradd an.
  * useradd -s: Stellt eine alternative Shell ein.
  * useradd -G: Legt die Mitgliedschaft in Gruppen fest, Trennung durch Kommata ohne Leerzeichen.
  * useradd -g: Legt die Initialgruppe fest.
  * useradd -p: Legt das Kennwort fest.
  * useradd -k: Spezifiziert ein alternatives Skeletonverzeichnis.
  * useradd -u: Legt die UID f├╝r den neuen Benutzer fest.
  * Bsp.: useradd -m -c "Dominit bla" -s /bin/sh dominik
  * userdel entfernt User vom System.
  * userdel -r: L├Âscht das Home.
  * userdel -f: L├Âscht das Home auch, wenn es Dateien anderer Benutzer enth├Ąlt.
  * Bsp.: userdel willi -rf
  * usermod: Ändert existierende Benutzerkonten.
  * usermod -L (lock): Deaktiviert ein Konto.
  * usermod -U (unlock): Aktiviert ein Konto.
  * Bsp.: usermod -L dominik
  * Ansonsten bleiben die Optionen wie bei useradd gleich.
  * passwd: ├ändert Kennw├Ârter von Benutzern und kann auch ├änderungen durchf├╝hren, die eigentlich usermod machen sollte.
  * passwd hat das SUID-Bit gesetzt und somit k├Ânnen auch normale User schreibend auf  /etc/passwd bzw. /etc/shadow zugreifen.
  * Bsp.: passwd dominik
  * chage: chage -m 2 dominik
  * chage -m (minimum): Legt den fr├╝hesten Zeitpunkt in Tagen fest, nach denen der Benutzer sein Kennwort ├Ąndern darf.
  * chage = change user passwort expiry information
  * chage -M (maximum): Legt fest, wie lange der Benutzer maximal dasselbe Kennwort verwenden darf. Ein Benutzer kann nicht zweimal hintereinander dasselbe Kennwort angeben.
  * chage -l <user>: l f├╝r list, zeigt Infos zum Account an.
  * groupadd: Erstellt neue Benutzergruppen und legt diese in /etc/group ab.
  * /etc/groups gibt es nicht!
  * groupadd -g, --gid: Legt die GID f├╝r die neue Gruppe fest.
  * groupadd -o, --non-unique: Erlaubt die Verwendung von nicht eindeutigen GIDs.
  * groupadd -p, --password: Gibt das Kennwort an, welches zum Wechsel in diese Gruppe notwendig ist. Die Verwendung von Gruppenpassw├Ârtern ist allerdings eher un├╝blich.
  * groupadd produktion -g 4711 -p GEHEIM
  * groupdel: L├Âscht Gruppen.
  * groupmod: Modifiziert bestehende Gruppen, ├Ąhnlicher Syntax wie groupadd.
  * groupmod -A, --add-user: F├╝gt Benutzer zur Gruppe hinzu.
  * groupmod -R, --remove-user: Entfernt Benutzer von einer Gruppe.
  * groupmod -n, --new-name: Ändert den Namen der Gruppe unter Beibehaltung aller anderen Attribute.
  * Bsp.: groupmod marketing -n marketing_alt
  * gpasswd: Ändert das Gruppenkennwort.
  * gpasswd -r: Entfernt das Kennwort.
  * newgrp: Benutzer k├Ânnen dieses Tool ausf├╝hren, um ihre Gruppenzugeh├Ârigkeiten zu ├Ąndern.
  * pwconv: Erstellt und aktualisiert die /etc/shadow. pwconv sucht in /etc/passwd nach Kennw├Ârtern und verschiebt diese, falls vorhanden, in die Datei /etc/shadow. 
  * pwunconv: Verschiebt verschl├╝sselte Kennw├Ârter nach /etc/passwd und l├Âscht anschlie├čend /etc/shadow.
  * pwck: Pr├╝ft Konsistenz von /etc/passwd und /etc/shadow.
  * grpconv: Sucht in /etc/group nach Kennw├Ąrtern und verschiebt diese nach /etc/gshadow.
  * grpunconv: Schiebt die Passw├Ârter von /etc/gshadow nach /etc/group und l├Âscht anschlie├čen /etc/gshadow.
  * grpck: ├ťberpr├╝ft die Konsistenz von /etc/group und /etc/gshadow.
==== 107.2 - Systemadministrationsaufgaben durch Einplanen von Jobs automatisieren ====
  * /etc/cron.*
  * /etc/at.allow
  * /etc/crontab
  * /etc/cron.allow
  * /etc/cron.deny
  * /var/spool/cron/*
  * crontab
  * at
  * atq
  * atrm
  * Zur einmaligen Ausf├╝hrung von einer Aufgabe verwendet man at.
  * at basiert auf dem Daemon atd.
  * Sollen Programme hingegen regelm├Ą├čig ausgef├╝hrt werden, greift man besser zu cron oder anacron.
  * Der Hauptunterschied zwischen cron und anaccron liegt daron ,dass anacron einkalkuliert, dass der Rechner zur geplanten Laufzeit der Jobs herunter gefahren werden k├Ânnte. Somit geht kein Job verloren.
  * Das Werkzeug, womit automatisch Programme ausgef├╝hrt werden kann, heisst cron.
  * Der Daemon, der automatisch Programme ausf├╝hrt, heisst crond.
  * Informationen ├╝ber den Syntax der Datei /etc/crontab erh├Ąlt man mit man5 crontab, w├Ąhrend das Kommando man 1 crontab ├╝ber den Befehl zum Hinzuf├╝gen von Jobs informiert.
  * /etc/crontab: <s> <h> <d> <m> <days of the week> <user> <command> <parameter if required>
  * Bsp.:   01 * * * * root run-parts /etc/cron.hourly = Eine Minute nach jeder vollen Stunde, zu jeder Stunde zu jedem Tag im Monat, und in jedem Monat an beliebigen Wochentagen.
  * Werte:  0-59 0-23 1-31 0-12 0-7 (Sonntag ist sowohl 0 als auch 7.)
  * Bsp.: 0/30 8-16 * * 1-5 rppt /etc/virusscan: An Wochentagen zwischen 8 und 16 Uhr alle 30 Minuten den Virusscanner ausf├╝hren.
  * @yearly   = 0 0 1 1 * (einmal im Jahr)
  * @annually = 0 0 1 1 * (einmal im Jahr)
  * @monthly  = 0 0 1 * * (zum 1. jeden Monats)
  * @daily    = 0 0 * * * (jeden Sonntag um Mitternacht)
  * @hourly   = 0 * * * * (zu jeder vollen Stunde)
  * @reboot   = Einmal nach Systemstart
  * Bsp.: @reboot root run-parts /bla/bla
  * In /var/spool/cron werden die benutzerspezifischen crontab-Dateien abgelegt.
  * Das Tool crontab modifiziert nicht die Tabelle /etc/crontab.
  * Beim aufrufen des Tools crontab wird eine benutzerspezifische Crontab-Datei angelegt.
  * crontab -e editiert die crontab des angemeldeten Benutzers.
  * crontab -l listet den Inhalt einer crontab-Datei auf.
  * crontab -r l├Âscht die crontab-Datei eines Benutzers (remove).
  * crontab -u erm├Âglicht es dem root, die Crontabs der anderen Benutzer einzusehen und zu bearbeiten.
  * at heisst das Tool, atd der Daemon.
  * Bei vielen Distributionen l├Ąuft der atd nicht standardm├Ą├čig.
  * at 17:00 tomorrow
  * at> /home/michaela/script
  * at> /bla
  * at>  <EOT>
  * Hier wurde interaktiv f├╝r morgen 17 Uhr ein Job hinterlegt. [Strg] + [D] = Interaktiven Modus beenden.
  * at -l listet die geplanten Jobs auf.
  * Soll eine ganze Reihe von Kommandos zeitgesteuert ausgef├╝hrt werden, dann k├Ânnen Sie diese zeilenweise in eine Textdatei schreiben und dann wie folgt an at ├╝bertragen:
  * at -f <file> teatime tomorrow
  * "teatime" = 16 Uhr - lulz =)
  * atq = ├ťberpr├╝fen der at-Warteschlange, scheint das gleiche zu sein wie at -l.
  * atrm <job-nr> oder at -d <job-nr> l├Âscht anstehende Auftr├Ąge.
  * anacron kann nur vom root verwendet werden.
  * anacron bezieht die Konfiguration aus /etc/anacron.
  * Der Daemon von anacron heisst anacron!
  * Jeweils in /etc:
  * cron.allow: Wenn diese Datei existiert, dann d├╝rfen nur die Benutzer cron verwenden, die in dieser Datei gelistet sind.
  * cron.deny: Wenn diese Datei existiert, aber keine cron.allow-Datei, dann d├╝rfen alle Benutzer cron verwenden, die nicht in cron.deny aufgef├╝hrt sind.
  * at.allow: Wenn diese Datei existiert, dann d├╝rfen nur die Benutzer den at verwendetn, die in dieser Datei gelistet sind.
  * at.deny: Wenn diese Datei existiert, aber keine at.allow-Datei, dann d├╝rfen alle Benutzer at verwenden, die nicht in at.deny aufgef├╝hrt sind.
  * Wenn es weder die Datei cron.allow noch cron.deny gibt, d├╝rfen alle Benutzer cron verwenden.
  * Wenn es weder die Datei at.allow noch at.deny gibt, darf nur root at verwenden. Eine leere at.deny-Datei erm├Âglicht den Zugriff f├╝r alle Benutzer.

==== 107.3 - Lokalisierung und Internationalisierung ====
  * /etc/timezone
  * /etc/localtime
  * /usr/share/zoneinfo
  * Umgebungsvariablen: LC_*, LC_ALL, LAG
  * /usr/bin/locale
  * tzselect
  * tzconfig
  * date
  * iconv
  * UTF-8
  * ISO-8859
  * ASCII
  * Unicode
  * tzselect: Gibt ├ťberblick ├╝ber die verf├╝gbaren Zeitzonen. 
  * tzselect verwendet f├╝r seine Anzeige die Dateien im Verzeichnis /usr/share/zoneinfo (Bin├Ąrdateien).
  * Wenn die Zeitzone des Rechners ge├Ąndert werden soll, dann erstellt man einen Symlink mit der jeweiligen "Stadt-Datei" zu /etc/localtime oder man kopiert die Stadt-Datei einfach direkt nach /etc/localtime. Aus Kompatibilit├Ątsgr├╝nden zu hwclock sollte man letztere Methode w├Ąhlen.
  * In der Konfigurationsdatei /etc/zimezone muss die Zeitzone ebenfalls nach folgendem Muster festgelegt werden: <Kontinent/City>, oder auch den Verzeichnisname unterhalb von /usr/share/zoneinfo.
  * Wenn die Zeitzone nur vor├╝bergehend oder nur f├╝r einen bestimmten Benutzer gelten soll, kann man geschickt mit der Variablen TZ (Time Zone) arbeiten, z. B. in der .profile eines Users: TZ='Europe/Berlin'
  * Oder: export TZ='Europe/Berlin'
  * date und direkt danach date -u zeigt dann das gew├╝nschte Ergebnis.
  * date -u = UTC
  * tzconfig ist ein interkativer Zeitzonen-Konfigurator.
  * Einige Anwendungen ben├Âtigen Angabne wie die W├Ąhrung, Papierformate etc.. Daf├╝r existieren verschiedene Umgebungsvariablen:
  * LC_CTYPE = Zeichenklassifikationen
  * LC_COLLATE = Sortierreihenfolge
  * LC_TIME = Zeit- und Datumsformat
  * LC_NUMERIC = Numerische Formate au├čerhalb des Finanzsektors
  * LC_MONETARY = Numerische Formate innerhalb des Finanzsektors
  * LC_MESSAGES = Formate f├╝r informative und diagnostische Benachrichtigungen
  * LC_PAPER = Papierformate und Gr├Â├čen
  * LC_NAME = Namenformate
  * LC_ADDRESS = Adressformate
  * LC_TELEPHONE = Formate der Telefonnummern
  * LC_MEASUREMENT = Ma├čeinheit (metrisch oder andere)
  * LC_IDENTIFICATION = Metadaten der Lokalisation
  * Diese Umgebungsvariablen befinden sich meist in /usr/lib/locale. In meinem Beispiel existiert dort unter Debian 6 eine Datei namens locale-archive, welche die oben genannten Angaben allesamt enth├Ąlt.
  * In /usr/share/i18n/SUPPORTED erf├Ąhrt man, welche Sprachunterst├╝tzung grunds├Ątzlich m├Âglich ist.
  * Um einen schnellen ├ťberblick zu erhalten, wie die Umgebungsvariablen in Bezug auf die Lokalisation gerade gesetzt sind, k├Ânnen Sie einfach das Kommando locale verwenden.
  * locale zeigt die aktuellen Einstellungen zur Sprachunterst├╝tzung.
  * Die Variable LANG hat eine Sonderstellung. Eine eine der anderen Variablen (auch LC_ALL) fehlen sollte, gilt der hier stehende Eintrag. LANG halt also eine geringe Priorit├Ąt.
  * LC_LANG ist normalerweise ├╝berhaupt nicht gesetzt. Falls doch, so hat sie Priorit├Ąt vor allen anderen LC-Variablen - auch vor LANG.
  * Wenn LANG manuell gesetzt und exporiert wird, werden alle anderen LC-Variablen ├╝berschrieben. Hier gilt auch die Besonderheit: LANG=C -> Alle Scripte, die auf Lokalisation reagieren, geben ihre Daten "roh" aus. Die Daten durchlaufen dann keine Zeichensatztabelle mehr. Ein US-Finanzprogramm w├╝rde dann auf deinem deutsch lokalisierten Linux ein Dollarzeichen anstatt des Eurozeichens ausgeben.
  * locale -a: Zeigt alle verf├╝gbaren Lokalisationen (gem├Ą├č /usr/lib/local) an.
  * locale -m (charamp): Zeigt eine Liste an verf├╝gbaren Zeichens├Ątzen an.
  * Der Vorg├Ąnger von ASCII ist der Baudot-Code (5 Bit, 2 hoch 5 = 32 = Platz f├╝rs gesamte Alphabet).
  * Die Ma├čeinheit "Baud" geht auf den Nachnamen von Jean-Maurice-├ëmile Baudots zur├╝ck.
  * 1260 Buchstaben pro Minuten = 21 Baud/Buchstaben pro Sekunde
  * ASCII - American Standard Code for Information Interchange
  * ASCII = 7-Bit-Zeichenkodierung, die bereits 1967 als Standard ver├Âffentlicht wurde. Die Zeichenkodierung von ASCII umfasst 128 Zeichen (2 hoch 7 = 128).
  * 95 dieser Zeichen sind druckbar, w├Ąhrend die ├╝brigen 33 Zeichen Steuerzeichen sind.
  * Die Druckbaren Zeichen beginnen mit dem Space-Zeichen und enden mit der Tilde (von 32 bis 126).
  * Beispiele f├╝r nicht druchbare Steuerzeichen:
  * 00 NUL
  * 01 SOH - Start of Header
  * 02 STX - Start of Text
  * 03 EOT - End of Transmission
  * 10 LF - Line Feed
  * 12 FF - Form Feed
  * 13 CR - Carriage Return (Zeilenumbruch)
  * 27 ESC - Escape
  * Es gibt eine Erweiterung der ASCII-Tabelle f├╝r Umlaute, franz├Âsische Zeichen etc...
  * Die ASCII-Tabelle ist dann auf 8 Bit erweitert = 256 Zeichen.
  * Die ZEichen 129, 143, 144 und 157 sind bisher nicht definiert.
  * Zeichen 160 ist das Leerzeichen.
  * Zeichen 173 ist der bedingte Trennstrich.
  * ISO 8859 = Normenfamilie. Jede Teilnorm der ISO 8859 ist ein 8-Bit-Zeichensatz. Die Gemeinsamkeit all dieser Normen liegt in den rsten 128 Zeichen. Diese sind n├Ąmlich identisch mit dem 7-Bit-ASCII-Code.
  * Normen:
  * 1 - Latin-1, Westeurop├Ąisch
  * 2 - Latin-2, Mitteleurop├Ąisch
  * 3 - Latin-3, S├╝deurop├Ąisch
  * 4 - Latin-4, Baltisch
  * 5 - Kyrillisch
  * 6 - Arabisch
  * 7 - Griechisch
  * 8 - Hebr├Ąisch
  * 9 - Latin-5, T├╝rkisch
  * 10 - Latin-6, Nordisch
  * 11 - Thai
  * 12 - nicht verwendet, abgelehnte Normvorschl├Ąge
  * 13 - Latin-7, Baltisch
  * 14 - Latin-8, Keltisch
  * 15 - Latin-9, Westeurop├Ąisch
  * 16 - Latin-10, S├╝dosteuropp├Ąisch
  * Numerisch w├╝rde z. B. der Zeichensatz Latin-1, Westeurop├Ąisch als ISO-8859-1 ausgedr├╝ckt werden.
  * Die deutschen Umlaute sind ├╝brigens in allen zehn ISO-8859 Zeichens├Ątzen enthalten, die jeweils mit Latin bezeichnet sind. ├ťblicherweise werden bei deut. Texten allerdings ISO-8859-1 oder ISO-8859-15 verwendet.
  * Unicode ist ein internationaler Standard, der irgendwann einmal alle bekannten Schriftarten enthalten soll, die es gibt. Um eine Kompatibilit├Ąt zu bestehenden Zeichens├Ątzen zu gew├Ąhrleisten, entsprechen die ersten 128 Zeichen des Unicode nat├╝rlich dem ASCII-Zeichensatz.
  * Die erstne 256 Zeichen enthalten au├čerdem die ISO-8859-1-Kodierung.
  * UTF-8 ist die am weitesten verbreitete Form von Unicode. Die 8 im Namen weist auf einen 8-Bit-Code hin.
  * UTF8-Zeichen k├Ânnen aus bis zu vier Byte bestehen. 
  * Wenn man Dateien von einer Zeichenkodierung in eine andere ├╝berf├╝hren muss, kann das Tool iconv verwendet werden.
  * iconv --from-code, -f: Gibt die aktuelle Zeichenkodierung an.
  * iconv --to-code, -t: Gibt die Zeichenkodierung f├╝r die Ausgabe an.
  * iconv --list, -l: Zeigt die dem Programm bekannten Kodierungen an.
  * iconv --output, -o: Gibt die Ausgabedatei an.
  * Man kann leider nicht aus jeder Kodierung in jede beliebig andere umwandeln.
  * Bsp.: iconv -f UTF-8 -t ISO-8859-15 Quelldatei -o Zieldatei
===== 108 - Grundlegende Systemdienste =====
==== 108.1 - Die Systemzeit verwalten ====
  * /usr/share/zoneinfo
  * /etc/timezone
  * /etc/localtime
  * /etc/ntp.conf
  * date
  * hwclock
  * ntpd
  * ntpdate
  * pool.ntp.org
  * Der Aufruf von "date" bewirkt die Ausgabe des heutigen Datums und der aktuellen Uhrzeit (Systemzeit!).
  * Es gibt die Systemzeit und die Hardware-Uhr (RTC = Real-Time-Clock).
  * Die Systemzeit kann z. B. mittels date ge├Ąndert werden: date -s 1755 (stellt die Uhr auf 17:55 Uhr).
  * Bsp.: date "+Heute ist der %d.%m.%Y. Das ist der %j. Tag des Jahres."
  * hwclock stellt die Hardware-Uhr ein.
  * hwclock --systohc schreibt die Systemzeit in die Echtzeituhr.
  * hwclock --show (bzw. oft auch nur hwclock) zeigt u.a. auch die Differenz zwischen System- und HW-Uhr an.
  * UTC = Coordinated Universal Time
  * UTC +1 = MEZ
  * MEZ = UTC +1
  * In /usr/share/zoneinfo und /etc/localtime finden sich die Bin├Ąrdateien zu den Zeitzonen.
  * /etc/timezone ist eine textbasierte Konfigurationsdatei. Man kann hier einfach die richtige Zeitzone hinterlegen.
  * tzselect zeigt die verf├╝gbaren Zeitzonen an.
  * NTP = Network Time Protocol
  * NTP wurde bereits 1985 in der RFC 958 definiert und nutzt den UDP-Port 123.
  * ntpdate pool.ntp.org l├Ąsst die Zeit von einem NTP-Server synchronisieren.
  * ntpd synchronisiert die Zeit automatisch (oder alternativ: ntpdate via Cron ausf├╝hren lassen).
  * Die Hauptkonfigurationsdatei f├╝r NTP lautet /etc/ntp.conf.
  * Driftfile: /etc/ntp.drif
  * Beispiel f├╝r eine minimale ntp.conf:
  * server de.pool.ntp.org
  * server ptbtime1.ptb.de
  * driftfile /var/lib/ntp/drift/ntp.drift
  * Driftdatei: Wird von ntpd verwendet, um die Ungenauigkeiten der Systemuhr festzuhalten. Ermittlung bis auf eine Millionstel Sekunde.
  * ntpq und ntpdc: Diagnose-Tools f├╝r NTP.
  * pool.ntp.org: Beliebte Quelle zur Synchronisation, gro├čer ├╝ber die Welt verteilter virtueller Cluster. Alleine in Europa stehen rund 1000 Nodes. Die Verteilung an die Clients wird ├╝ber DNS mittels Round Robin abgewickelt.
==== 108.2 - Systemprotokollierung ====
  * syslog.conf
  * syslogd
  * klogd
  * logger
  * syslog-ng: Neue Variante vom syslogd.
  * /etc/syslog.conf: Regelt das Protokollierungsverhalten des syslogd.
  * Aufbau der syslog.conf: facility.level action
  * facility: Prozess, der den zu protokolliertenden Eintrag erstellt, z. B. auth (ehemals security), authpriv, cron, daemon, kern, lpr, mail, mark, news, syslog, user, uuco, local0 bis local7.
  * Ein Stern (engl. asterisk) bezeichnet alle facilities.
  * Wenn ein eigenes Programm das Syslog verwenden soll, kann man auf die facilities local0 bis local7 zur├╝ck greifen.
  * level legt den jeweiligen Protokollierungsgrad fest.
  * debug = extremer Log-Level
  * info = harmlose Infos werden geloggt
  * notice = ungef├Ąhrliche Hinweise
  * warning, warn = normalerweilse harmlos, je nach facility (also Prozess)
  * err, error = z. B. bei I/O- oder Auth-Fehlern
  * crit = kritische Fehler
  * alert = Alarme, immer schwerwiegende Probleme
  * emerg panic = wird, wenn ├╝berhaupt noch, als letzter Eintrag vor dem Systemcrash geschrieben. 
  * Die Level error, warn und panic sind veraltet und es sollten stattdessen jeweils err, warning und emerg verwendet werden.
  * action bezeichnet das Ziel, in welches die facility protokollieren soll. Das Ziel ist meist eine Datei, kann aber auch ein anderer Rechner oder eine kommagetrennte Liste an Benutzern sein.
  * Beispiel f├╝r eine typische syslog.conf unter Debian:
  * auth,authpriv.*      /var/log/auth.log
  * cron.*               /var/log/cron.log
  * Viele Distributionen loggen einfach alles nach /var/log/messages.
  * Konfigurationsdatei /etc/logrotate.conf und Vereichnis /etc/logrotate.d/
  * Logrotate sollte t├Ąglich von cron ausgef├╝hrt werden.
  * tail -f <file>
  * logger hilft beim eigenen Loggen von Nachrichten, z. B. in eigenen Scripten.
  * Beispiel: logger -t Backup "Datensicherung ausgef├╝hrt"
  * klogd = Kernellog f├Ąngt die Meldungen des Kernels ab und protokolliert diese.
  * Die Ausgabe des Kernellog erfolgt meist in das Syslog oder kern.log.
  * klogd - c <n> setzt das Loglevel f├╝r Konsolenmeldungen auf <n>.
  * klogd -d aktiviert den Debugging-Modus.
  * klogd -f <file> ├Ąndert die Ausgabe des Syslog auf die angegebene Datei.
  * Als Eingabedatei verwendet klogd /proc/kmsg.
  * klogd -p <target> ├Ąndert die Eingabedatei f├╝r den klogd.
==== 108.3 - Grundlagen von Mail Transfer Agents (MTAs) ====
  * .forward
  * Sendmail-Emulationsschickt: Diverse Commands
  * newaliases
  * mail
  * mailq
  * postfix
  * sendmail
  * exim
  * qmail
  * Die Verarbeitung von Mail-Nachrichten auf einem STMP-Server wird von drei Software-Komponenten durchgef├╝hrt.
  * MUA = Mail User Agent = Mail-Client wie Outlook oder kmail
  * MDA = Mail Delivery Agent = Nimmt Mails entgegen und reicht diese beispielsweise an lokale Mail-Verzeichnisse oder MTAs weiter (z. B. cyrus, procmail)
  * MTA = Mail Transfer Agent = Zust├Ąndig f├╝r die Zustellung einer Nachricht an den richtigen Zielserver (z. B. sendmail, postfix, qmail, exim).
  * F├╝r die endg├╝ltige Auslieferung einer Mail-Nachricht an einen Client sind diese drei Agents allerdings nicht zust├Ąndig. Daf├╝r ben├Âtigt man noch einen Server-Dienst wie IMAP oder POP.
  * /etc/aliases: Mit Hilfe dieser Datei k├Ânnen Mails umgeleitet werden. Daf├╝r gibt es vier Verfahren. Die g├Ąngiste lautet:
  * willi:    wilhelm
  * root:     wilhelm
  * Mit dem ersten Eintrag werden Mails, die an willi adressiert sind, dem real existierenden Benutzerkonto "wilhelm" zugeordnet.
  * Eine andere Methode ist die Zuweisung eines Alias zu einer Datei. So k├Ânnte man T├Ątigkeitsberichte, automatisch mit Datum und Uhrzeit versehen, per Mail-Programme schreiben:
  * taetigkeiten:       "/home/harald/taetigkeitsbericht"
  * Die Brichte m├╝ssen dann einfach an das Konto "taetigkeiten" gesendet werden, und die Aufzeichnung geschieht automatisch in die angegeben Datei. Fpr dieses konto muss ebenfalls kein reales Benutzerkonto auf dem Server existieren.
  * freunde:         :include:/home/harald/meinefreunde
  * Wenn eine Mail an Freunde gesendet wird, wird diese Nachricht an alle Mail-Adressen versendet, die in der Textdatei /home/harald/meinefreunde zeilensepariert aufgef├╝hrt sind.
  * Oder auch eine ├ťbergabe an ein anderes Programm ist m├Âglich:
  * majordomo:   "|/usr/lib/majordomo/wrapper majordomo"
  * Der Unterschied zur Umleitung in eine Datei ist das f├╝hrende Pipe-Zeichen.
  * newaliases: Nach dem Anlegen eines neuen Alias in der Datei /etc/aliases muss der Befehl "newaliases" aufgerufen werden, damit Sendmail den neuen Alias auch verwendet. Alternativ kann beispielsweise sendmail -bi ausgef├╝hrt werden (├╝brigens ist die Antwort der beiden Kommandos identisch).
  * Mail-Weiterleitung: Datei mit dem Namen ".forward" im Heimatverzeichnis erstellen, welche die Weiterleitungsadresse in einer einzelnen Zeile enth├Ąlt. Die Weiterleitung greift sofort.
  * Wichtige Verzeichnisse:
  * /var/spool/mail: Enth├Ąlt Dateien mit dem Namen der Benuterkonten, die auf diesem System Mails empfangen. Der MDA liefert hier Nachrichten f├╝r die lokale User aus.
  * /var/spool/mqueue: Mail-Queue/Warteschlange. Hier holt der MDA Nachrichten ab und entscheidet dann, ob diese lokal ausgeliefert werden oder an den MTA zur weiteren Verarbeitung ├╝bergeben werden m├╝ssen.
  * /var/spool/postfix: Hier liegt die Datenverzeichnisstruktur von Postfix.
  * /var/mail ist ein typischer Link auf /var/spool/mail.
  * /etc/postfix: Beherbergt die Konfigurationsdateien von Postfix.
  * /etc/mail enth├Ąlt die meisten Konfigurationsdateien f├╝r sendmail.
  * Inhalt einer Mail-Queue im laufenden Betrieb ansehen: mailq
  * sendmail.cf: Hauptkonfigurationsdatei von Sendmail. Weitere solcher Dateien finden sich i.d.R. in /etc/mail.
  * /etc/postfix/main.cf: Globale Konfigurationsdatei f├╝r postfix.
  * Beispieleinstellungen daraus:
  * myhostname = echtername.domain.tld
  * myhostname = virtuellername.domain.tld
  * mydomain = domain.tld
  * /etc/postfix/master.cf: Enth├Ąlt Config f├╝r Postfix-interne Prozesse.
  * Ein Smarthost ist ein Mail-Server, der als SMTP-Relay fungiert. Normalerweise stellt man die Mails nicht direkt zu, sondern liefert diese an den SMTP-Server des Internet Service Providers (ISP) aus. Andernfalls w├╝rden viele Mail-Server die Mails nicht entgegen nehmen, da der SMTP-Server im Internet nicht bekannt ist. Daraus sclhie├čen die Ziel-Server, dass der Server ein m├Âgliches Relay f├╝r Spam ist und verwerfen die Nachrichten.
  * Bsp.: Angabe eines externen Smarthosts f├╝r sendmail: Datei sendmail.cf editieren, nach "DS" am Zeilenanfang suchen und dahinter eintragen:
  * # "Smart" relay host (may be null)
  * DSmailrelay.myisp.org.
  * Sollte mein Server selbst als SMTP-Relay fungieren, so m├╝ssen die Dateien /etc/mail/access und /etc/mail/relay-domains modifiziert werden und anschlie├čend "make" aufgerufen werden. Somit werden die korrespondierenden db-Files generiert.
  *  Smarthost mit Postfix: Wenn Postfix als MTA verwendet wird, dann muss der Smarthost entsprechend in der Datei /etc/postfix/main.cf eingetragen werden. Der eintrag sieht aus wie folgt:
  * relayhost = mail.myisp.org
  * Um Postfix selbst als Releay einzusetzen, existieren verschiedene M├Âglichkeiten. Eine sehr einfache, wenn auch umstrittene Methode ist es, einfach mit der Angabe der eigenen Netzwerke f├╝r bestimmte subnetze Relaying zuzulassen:
  * mynetworks = 127.0.0.0/8 92.168.50.0/24 172.16.0.0/28
  * Das setzt nat├╝rlich voraus, dass die Mitarbeiter aus diesen Subnetzen vertrauensw├╝rdig sind und den eigenen Absender nicht f├Ąlschen.
  * Wesentlich sicherer ist eine Authentifizierung der Benutzer. Als Mechanismus kommt hier wohl am ehesten SASL (Simple Authentication and Security Layer) infrage.
  * qxim und qmail: Weniger bekannte MTAs; Exim ist weitgehend ├Ąhnlich zu konfigurieren wie sendmail, die Konfiguration ist jedoch etwas einfacher. Debian verwendet exim sogar als Standard-MTA. Der MTA qmaul wurde haupts├Ąchlich entwickelt, um die sicherheit gegen├╝ber sendmail zu erh├Âhen. Auch qmail ist erheblich leichter zu konfigurieren als sendmail.
==== 108.4 - Drucker und Druckvorg├Ąnge verwalten ====
  * CUPS configs, Tools, Hilfsprogramme
  * /etc/cups
  * lpd: lpr, lprm, lpq
  * Drucken unter Linux funktioniert praktisch genauso wie unter Unix.
  * LPRng = neu geschriebenes BSD-Drucksystem f├╝r Linux.
  * Das zweite gro├če Drucksystem unter Linux heisst CUPS (Common Unix Printing Solution oder auch Common Unix Printing System).
  * Druckauftr├Ąge reihen sich in einer Queue (Schlange) ein oder werden gespoolt (aufgespult).
  * Druck-Client: Z. B. lpr
  * Der Druck-Client stellt einen Auftrag in die entsprechende Warteschlagen.
  * Um das genaue Verzeichnis zu ermitteln, in welches der Druckauftrag hingespoolt werden muss, wird die Konfigurationsdatei /etc/printcap ausgewertet.
  * Normalerweise befinden sich die Warteschlangen unterhalb von /var/spool.
  * Ein Druckauftrag besteht immer aus zwei Dateien, n├Ąmlich einem Control-File mit der Dateierweiterung cf und einem in der Regel erheblich gr├Â├čeren Data-File mit der Extension df.
  * Der Spool-Vorgang ist nun abgeschlossen, und diese beiden Dateien bleiben jetzt so lange lieben, bis sie jemand bearbeitet.
  * Diese Aufgabe ├╝bernimmt der line Printer Daemon (lpd).
  * lpd pr├╝ft zyklisch das Vorhandensein von Dateien in allen Druckerwarteschlangen. Wird er f├╝ndig, so ├╝bergibt er die momentan noch in einem sehr rohen, RAW genannten Format, vorliegenden Daten an einen Druckfilter.
  * Der Druckfilter wandelt dann die Daten in Abh├Ąngigkeiten vom verwendeten Druckermodell in einen geeigneten Datenstrom und sendet diesen an den Drucker. Wenn der auftrag ausgedruckt wurde, werden die Kontroll- und die Datendatei aus der Warteschlange gel├Âscht.
  * Die Verarbeitung der Dateien ist bei der Verwendung von CUPS geringf├╝gig anders. So sind beispielsweise die Konventionen f├╝r die Benennung der Dateien innerhlab einer Warteschlange different, aber das Druckprinzip ist weitesgehend gleich.
  * Abfolge: 
  * Druck-Client legt Daten im Spool ab -> lpd holt diese Daten ab und ├╝bergibt die Daten als RAW an den Druckfilter -> Druckfilter konvertiert in Datenstrom und sendet an den Drucker
  * /etc/init.d/lpd start ODER /etc/init.d/cups start
  * lp und lpr senden Druckeruaftr├Ąge an den angegebenen Drucker. lp stammt aus dem System V und versteht andere Optionen als lpr.
  * lpr -p gibt die verwendende Warteschlange an.
  * lpr -P<Drucker> <file>
  * lpq zeigt den Inhalt von Warteschlangen an. Mit lpq -p kann auch eine ganz bestimmte Warteschlange angegeben werden.
  * lprm l├Âscht Auftr├Ąge aus der Warteschlange. Bereits im Druck befindliche Auftr├Ąge k├Ânnen nicht mehr entfernt werden.
  * lprm -P<Drucker> <Job-ID>
  * Ein Benutzer ohne root-Rechte kann ohne Weiteres alle eigenen Auftr├Ąge mit lprm - l├Âschen. Wenn root diesen Befehl eintippt, werden alle Jobs aus allen Queues getilgt.
  * lpc = Line Printer Control
  * lpc kann normal oder interaktiv verwendet werden, ├Ąhnlich wie crm status.
  * Wenn lpc in Verbindung mit CUPS verwendet wird, sind nur einige wenige Befehle innerhalb von lpc verf├╝gbar (bzw. nur einer: lpc> status = Statusabfrage).
  * Unter BSd bzw. LPRng sind mehr Optionen verf├╝gbar.
  * lpc> up <Printer>
  * lpc> up all
  * lpc start startet den Druckprozess als solchen, so dass jetzt Auftr├Ąge aus der Warteschlange abgearbeitet und ausgedruckt werden k├Ânnen.
  * lpc stop beendet den Druckprozess. Ein laufender Auftrag wird noch bis zum Ende abgearbeitet. Die Druckerwarteschlange nimmt aber weiterhin Auftr├Ąge entgegen.
  * lpc enable aktiviert die Druckerwarteschlange.
  * lpc disable l├Ąsst neue Jobs f├╝r die Warteschlange ablehnen.
  * lpc up = lpc enable + lpc start
  * lpc down = lpc disable + lpc stop
  * lpc abourt = beendet den Druckprozess sofort, auch in Arbeit befindliche Jobs werden sofort gecancelt. Sollte ein Drucker seine T├Ątigkeit nicht sofort einstellen, ist dies auf Restdaten im Druckerspeicher zur├╝ckzuf├╝hren.
  * lpc topq stellt einen bereits gespoolten Job an die erste Position in der Queue.
  * lpc topq <Printer> <Job-ID> (Unterbricht aber keinen bereits in Arbeit befindlichen Job.)
  * lpc quit
  * CUPS wurde von Anfang an auf das Drucken im Netzwerk ausgelegt. Deshalb modifiziert CUPS auch gleich nach seiner Installation die /etc/printcap, in der er sich selbst als Netzwerkdrucker deklariert:
  * laserjet1300|laserjet1300:rm=archangel:rp=laserjet1300:
  * remote printer an einer remote machine, obwohl der Drucker lokal angeschlossen ist.
  * Config-Files f├╝r CUPS: /etc/cups
  * CUPS-Interface: http://localhost:631
  * /etc/cups/cupsd.conf
  * lpadmin = Config-Tool
===== 109 - Netz-Grundlagen =====
==== 109.1 - Grundlagen von Internet-Protokollen ====
  * /etc/services
  * ftp
  * telnet
  * host
  * ping
  * dig
  * traceroute
  * tracepath
  * TCP/IP wurde etwa Ende 1974 entwickelt.
  * Der Name des Internets leitet sich von TCP/IP ab (Internet Protocol).
  * TCP = Transmission Control Protocol, verbindungsorientiertes Protokoll; stellt die Integrit├Ąt der Verbindung sicher, indem es eventuell besch├Ądigte Datenpakete neu anfordert oder deren Reihenfolge reorganisiert;
  * UDP = User Datagram Protocol, verbindungsloses Protokoll; Z. B. Broadcasts, Multicasts, DNS, NTP sind UDP-Protokolle;
  * Port 20 (TCP, UDP):  FTP (DATA)
  * Port 21 (TCP):       FTP (wahrschein. control)
  * Port 22 (TCP, UDP):  SSH
  * Port 23 (TCP, UDP):  TELNET
  * Port 25 (TCP, UDP):  SMTP
  * Port 53 (TCP, UDP):  DNS
  * Port 80 (TCP, UDP):  HTTP
  * Port 110 (TCP, UDP): POP3
  * Port 119 (TCP, UDP): NNTP
  * Port 123 (TCP, UDP): NTP
  * Port 139 (TCP, UDP): NETBIOS-SSN
  * Port 143 (TCP, UDP): IMAP
  * Port 161 (TCP, UDP): SNMP
  * Port 443 (TCP, UDP): HTTPS
  * Insgesamt sind 65536 Ports verf├╝gbar
  * Die ersten 1024 Ports werden als Well known Ports bezeichnet
  * /etc/services gibt Aufschluss ├╝ber Dienste/Ports
  * nmap und netstat zeigen, auf welchen Ports derzeit gelauscht wird.
  * IPv4 f├╝gt den Datenpaketen zur Adressierung IP-Header hinzu. L├Ąnge von IPv4-Adressen: 32 Bit
  * IPv6-Adressen: 128 Bit
  * RIP (Routing Information Protocol) dient zum Austausch von Informationen zwischen Routern
  * OSPF (Open Shortest Path First) = wie oben, nur f├╝r gr├Â├čere Netzwerke geeignet
  * ARP (Address Resolution Protocol) stellt den Zusammenhang zwischen IPs und MACs her.
  * ICMP (Internet control Message Protocol)
  * IGMP (Internet Group Management Protocol) (z. B. f├╝r Videokonferenzen oder Pr├Ąsentationen, adressiert Gruppen von Hosts)
  * IPv4 wurde bereits 1981 von der Organisation ARPA fertig gestellt, bis zu 4,2 Milliarden IP-Adressen;
  * Klasse A IPv4: 1.0.0.0 bis 127.255.255.255, Subnetzmaske 255.0.0.0; Privater Anschlussbereich: 10.0.0.0-10.255.255.255
  * Klasse B IPv4: 128.0.0.0 bis 191.255.255.255, 255.255.0.0, Privat: 172.16.0.0-172.31.255.255
  * Klasse C IPv4: 192.0.0.0 - 223.255.255.255., 255.255.255.0, Privat: 192.168.0.1 - 192.168.255.255
  * Klasse D IPv4: 224.0.0.0 - 239.255.255.255, 255.255.255.255
  * Klasse E IPv4: 240.0.0 - 255.255.255.254, 255.255.255.255
  * Besonderheiten: 127.0.0.1, 169.254.0.0 (APIPA, automatische Adressierung in Heimnetzwerken)
  * Klasse A: Erstes Bit hinten gesetzt, also beginnt mit 1: 00000001.00...
  * Klasse B: Erstes Bit vorne gesetzt, also 128: 10000000.00...
  * Klasse C: Die ersten beiden Bits vorne gesetzt: 11000000.00...
  * Klasse D: Die ersten drei Bits vorne gesetzt: 11100000.000
  * Klasse E: Die ersten vier Bits vorne gesetzt: 11110000.00...
  * Es k├Ânnen nur Computer direkt miteinander kommunizieren, die sie sich im gleichen Subnetz befinden.
  * 9 verschiedene m├Âgliche Werte pro Oktett der Subnetzmaske:
  * 9, 128, 192, 224, 240, 248, 252, 254, 255
  * CIDR-Notation (Classless Inter-Domain Routing):  192.168.100.0/24 (= 255.255.255.0)
  * Logische UND-Verkn├╝pfung: Die 1er von einer IP mit der Subnetzmaske.. also z. B. 11000000 und 11111111 = passt!...
  * IPv6: 128 Bit-Adresse = ├╝ber 340 Sextillionen m├Âgliche Adressen (36 stellige Zahl);
  * IPv6: Eine Adresse besteht aus acht Segmenten zu je 16 Bit;
  * IPv6: Private Adressen werden ├╝ber die ersten 10 Bit definiert: fe80-febf
  * IPv6: Integration von IPv4: Nur die letzten 32 Bit in einer IPv6-Adresse verwendet, die ersten 96 Bits bleiben frei;
  * ping und traceroute: Beide basieren auf ICMP.
  * TTL: Time to Live -> TTL = 64, jede Zwischenstation (Router) zieht 1 ab
  * ping pr├╝ft Erreichbarkeit, traceroute den Weg
  * traceroute -n <target>: Unterdr├╝ckt DNS.
  * tracepath funktioniert auch ohne root-Rechte und untersucht zus├Ątzlich die MTU.
  * dig, host, nslookup: Diagnose-Tools f├╝r DNS
  * Bsp.: host www.google.de (Verwendet den DNS-Server aus /etc/resolv.conf.)
  * Bsp.: host -t MX google.de (Verwendet den DNS-Server aus /etc/resolv.conf.)
  * Bsp.: dig  @<NS> -t MX google.de
  * nslookup
  * > server <IP>
  * > set type=MX
  * > google.de
  * whois verwendet den TCP-Port 43.
  * whois google.de
  * ftp <server>
  * get <filename>
  * mget <wildcards> -> Download von mehreren Dateien.
  * put <file> -> Upload
  * mput <wildcards>
  * telnet: Konsolensitzung, die nicht verschl├╝sselt ist. TCP-Port 23. Unsicheres Protokoll, ├╝bertr├Ągt sogar das Passwort in PLAIN.
==== 109.2 - Grundlegende Netz-Konfiguration ====
  * /etc/hostname
  * /etc/hosts
  * /etc/resolv.conf
  * /etc/nsswitch.conf
  * ifconfig
  * ifup
  * ifdown
  * route
  * ping
  * /etc/hosts, /etc/hostname und /etc/HOSTNAME enthalten den Hostname.
  * /etc/hosts ist historisch betrachtet der Vorg├Ąnger vom DNS.
  * /etc/networks wird - falls vorhanden - von route und netstat eingelesen und enth├Ąlt z. B. die loopback- oder localnet-Adresse.
  * /etc/resolv.conf enth├Ąlt die IPs der DNS-Server, sowie domain, search..
  * Der search-Eintrag wird ben├Âtigt, wenn Computer unterschiedlicher Dom├Ąnen sich gegenseitig ├╝ber die kurzen Host-Namen erreichen k├Ânnen sollen.
  * /etc/nsswitch.conf beeinflusst diverse Systeme in Bezug auf Namensaufl├Âsung und Authentifizierung.
  * /etc/host.conf steuert ausschlie├člich die Aufl├Âsungsreihenfolge des DNS-Clients.
  * Beispiel:
  * order hosts, bind
  * multi on
  * "multi on" = Resolver f├╝r einen Host, der mit mehreren IPs in /etc/hosts/ eingetragen ist, diese (IPs) auch dem Client zur Verf├╝gung stellt
  * ifconfig konfiguriert Netzwerkschnittstellen.
  * Beispiel: ifconfig eth1 down
  * ifconfig eth1 10.10.125.20 netmask 255.255.255.0
  * ifconfig eth1 up
  * ifconfig bzw. ifconfig eth0 zeigt nur die aktuelle Konfiguration.
  * ifup und ifdown starten bzw. stoppen bereits vorkonfigurierte Netzwerkschnittstellen.
  * route zeigt die aktuellen Routen an.
  * Beispiel: route add default gw 10.10.125.1
  * route add -net 10.10.10.0 netmask 255.255.255.0 10.10.10.1
==== 109.3 - Grundlegende Netz-Fehlersuche ====
  * ifconfig
  * ifup
  * ifdown
  * route
  * host
  * hostname
  * dig
  * netstat
  * ping
  * traceroute
  * netstat: Diagnoseprogramm f├╝r das Anzeigen von Netzwerkverbindungen Routing-Tabellen oder Statistiken von Interfaces.
  * netstat -n: Keine Namensaufl├Âsung
  * netstat -r: Zeigt Routing-Tabellen
  * netstat -i: Zeigt Liste an Network-Interfaces
  * netstat -a: Zeigt alle Connections an und nicht nur die, an denen der Host selbst lauscht
  * netstat -c: Aktualisiert die Anzeige permanent

==== 109.4 - Clientseitiges DNS konfigurieren ====
  * /etc/hosts
  * /etc/resolv.conf
  * /etc/nsswitch.conf
  * Siehe vorherige Kapitel. DNS-Server m├╝ssen nicht konfiguriert werden.

===== 110 - Sicherheit =====
==== 110.1 - Administrationsaufgaben f├╝r Sicherheit durchf├╝hren ====
  * find
  * passwd
  * lsof
  * nmap
  * chage
  * netstat
  * sudo
  * /etc/sudoers
  * su
  * usermod
  * ulimit
  * find / -perm -u+s: Findet alle Dateien mit geseztem SUID-Bit.
  * find / -perm -g+s: Findet alle Dateien mit gesetztem GUID-Bit.
  * socket: Simuliert Netzwerkverbindungen.
  * Bsp.: socket -sl 80
  * socket -s: Erstellt einen Server.
  * socket -l: Erzeugt einen loop und kann nur in Verbindung mit -s verwendet werden.
  * ulimit -a zeigt die Limits des aktuellen Benutzers an.
  * ulimit sollte in /etc/profile konfiguriert werden.
  * ulimit -c 20000 setzt die Maximalgr├Â├če f├╝r Core-Files auf 20 MB.
  * ulimit -d 15000 setzt die maximale Datengr├Â├če eines Programms auf 15 MB.
  * ulimit -Sd $(ulimit -Hd) limitiert die Gr├Â├če des Softlimits f├╝r die maximale Datengr├Â├če eines Programs auf die Gr├Â├če des korrespondierenden Hardlimits.
  * lsof |wc -l zeigt die Anzahl der ge├Âffneten Dateien.
  * Bsp.: lsof /media/mount-ordner
  * kill -9 $(lsof -t /mount/bla) beendet schlagartig alle Zugriffe auf das angegebene Ziel.
  * lsof -i zeigt, welche Prozesse Verbindungen zum Netzwerk herstellen.
  * su = superuser -> verschafft einem vor├╝bergehend root-Rechte.
  * su -l dominik = Rechte von Dominik verwenden.
  * sudo <command>..
  * Man muss in /etc/sudoers stehen, wenn man die Berechtigung f├╝r sudo besitzen soll.
  * visudo bearbeitet /etc/sudoers.
  * Beispieleintrag f├╝r root: root ALL=(ALL) ALL
  * Beispieleintrag: %admin ALL=(ALL) ALL und dann in /etc/group eine Admingruppe definieren.
  * Ein unberechtigter Zugriff auf sudo wird meist protokolliert.

==== 110.2 - Einen Rechner absichern ====
  * /etc/nologin
  * /etc/passwd
  * /etc/shadow
  * /etc/xinetd.d/*
  * /etc/xinetd.conf
  * /etc/inet.d/*
  * /etc/inetd.conf
  * /etc/inittab
  * /etc/init.d/*
  * /etc/hosts.allow
  * /etc/hosts.deny
  * inetd ist ein alter Superdaemon und lauscht zur Laufzeit stellvertretend f├╝r ben├Âtigte Serverdienste an deren TCP- und UDP-Ports. Wenn nun ein Client eine Verbindung zu einem von inetd kontrollierten Netzwerkdienst aufnimmt, startet inetd diesen Dienst und ├╝bergibt ihm die Kontrolle ├╝ber die Sitzung.
  * Damit inetd seine Zust├Ąndigkeiten kennt, bezieht er seine Infos aus /etc/inetd.conf. Einige Dienste sind hier mit einem Doppelkreuz auskommentiert.
  * Beispieleintrag aus der inetd.conf:
  * imap2 stream tcp nowait root /usr/sbin/tcpd /usr/sbin/imapd
  * imap2 ist der Name des Dienstes, so wie er in der Datei /etc/services eingetragen ist. stream zeigt den Socket-Typ, g├╝ltige Werte sind hier stream, dgram, raw, rdm und seqpacket (meist: stream f├╝r TCP, dgram f├╝r UDP). tcp ist das Transportprotokoll (siehe /etc/protocols). nowait ist ein Flag, hier k├Ânnte nur noch wait stehen. /usr/sbin/tcpd /usr/sbin/imapd stellt das zu startende Programm inklusive Startparameter dar. Hier f├╝hrt der TCP-Wrapper imapd aus.
  * tcpdchk kann inetd.conf auf Syntaxfehler pr├╝fen.
  * xinetd ist der moderne Nachfrage von inetd. Er kann auch Dienste starten, die ├╝ber keinen Eintrag in /etc/services verf├╝gen.
  * /etc/xinetd.conf
  * /etc/xinet.d/<configs>
  * In xinetd ist der TCP-Wrapper funktional integriert.
  * Die Konfiguration von TCP-Wrappern erfolgt via /etc/hosts.allow und /etc/hosts.deny.
  * Wenn in /etc/hosts.allow eine zutreffende Regel gefunden wird, dann wird der Zugriff - basierend auf dieser Regel - erlaubt. Die Datei /etc/hosts.deny wird dann nicht mehr verarbeitet.
  * Wenn in /etc/hosts.deny eine zutreffende Regel gefunden wird, dann wird der Zugriff - basierend auf dieser Regel - verweigert.
  * Wenn keine Eintr├Ąge in den beiden Dateien zutreffen, wird der Zugriff erteilt.
  * Ist eine Datei oder sind beide nicht vorhanden, wird das gewertet, als w├Ąre(n) die Datei(en) leer.
  * /etc/nologin verhindert, dass sich ein Benutzer interaktiv am System anmeldet. Es gen├╝gt die Datei zu erstellen und jeden enutzer in einer eigenen Zeile mit seinem Loginnamen aufzuf├╝hren.
==== 110.3 - Daten durch Verschl├╝sselung sch├╝tzen ====
  * ssh
  * ssh-keygen
  * ssh-agent
  * ssh-add
  * .ssh/id_rsa und id_rsa.pub
  * .ssh/id_dsa und id_dsa.pub
  * /etc/ssh/ssh_host_rsa_key und ssh_host_rsa_key.pub
  * /etc/ssh/ssh_host_dsa_key und ssh_host_dsa_key.pub
  * .ssh/authorized_keys
  * /etc/ssh_known_hosts
  * gpg
  * .gnupg/*
  * SSH = Secure Shell
  * ssh <remote server>
  * ssh -l <user> <remote server>
  * Verbindung tunneln: ssh -l <user> -X <remote server> und dann ein Kommando ausf├╝hren.
  * Die Anwendung wird im oberen Beispiel auf dem remote server ausfgef├╝hrt, w├Ąhrend die grafische Ausgabe und die Bedienung lokal auf dem SSH-Client erfolgt. Das nennt man X11-Tunnel.
  * Port-Tunneling: ssh <server> -L <local port>:<IP>:<remote port>
  * Bsp.: ssh meinserver.org -L 4711:10.10.10.24:3389
  * ssh -L: Weiterleitung des lokalen Ports an die entfernte IP-Adresse mit dem externen Port.
  * Adressierung des Remote-Ports lokal via localhost:4711.
  * Priviligierte Ports k├Ânnen nur durch den Benutzer root weitergeleitet werden.
  * /etc/ssh/sshd_config: Konfiguration des sshd (SSH-Server), z. B. Port, Protocol, ListenAddress, PermitrootLogin....
  * /etc/ssh/ssh_config: SSH-Client konfigurieren
  * /etc/hosts.allow und /etc/hosts.deny: Der Zugriff auf SSh kann auch ├╝ber diese beiden Dateien gesteuert werden.
  * /etc/nologin: Leer erstellen, dann kann sich nur noch root via SSH verbinden. Man kann hier auch eine Nachricht an benutzer hinterlassen, die sich anmelden wollen. Diese Message wird dann beim Anmeldeversuch im SSH-Client angezeigt.
  * /etc/ssh_known_hosts beinhaltet die ├Âffentlichen RSA-Keys bereits bekannter Hosts.
  * /etc/sshrc wird ausgef├╝hrt, sobald sich ein Benutzer ├╝ber SSH authentifiziert hat. Das geschieht noch vor dem Laden einer Shell.
  * Beim Anmelden ├╝ber SSH authentifiziert sich der Server gegen├╝ber dem Client mit seinem Hostkey.
  * ssh-keygen -t dsa erstellt ein public/private DSA-Key-Pair. Speichert den Private (Identification) per default in /root/.ssh/id_dsa und den Public in blabla.pub.
  * Die /etc/ssh/ssh_host_dsa_key enth├Ąlt sowohl den privaten als auch den ├Âffentlichen Schl├╝ssel des Hosts.
  * die Datei /etc/ssh/ssh_host_dsa_key-pub nur den public key.
  * Der public key kann in die /etC/known_hosts eingetragen werden.
  * Der DSA-Key dient ausschlie├člich der Signatur. F├╝r die Verschl├╝sselung ist ein RSA-Key n├Âtig.
  * ssh-keygen -t rsa
  * Wenn noch Clients mit der SSH-Version 1 verwendet werden, wird noch ein weiterer Hostkey ben├Âtigt.
  * ssh-keygen -t rsa1
  * SSH1 sollte nicht mehr verwendet werden.
  * Wenn die Benutzerauthentifizierung f├╝r SSH-Verbindungen ohne Passwort durchgef├╝hrt werden soll, kann mit Keys gearbeitet werden.
  * Der public key eines Benutzers muss in die .ssh/authorized_keys gelegt werden.
  * Bei ssh-keygen kann ├╝brigens auch eine Passphrase eingestellt werden.
  * ssh-agent: Er ist in der Lage, mehrere Keys f├╝r einen Benutzer zu verwalten. Zu diesem Zweck sollte er fr├╝hzeitig w├Ąhrend der Startphase von X ausgef├╝hrt werden.
  * ssh-add f├╝gt dem ssh-agent weitere Keys hinzu. Der ssh-agent sieht dabei in .ssh/id_rsa, id_dsa und identitity nach.
  * Es k├Ânnen aber auch gezielt Keys angegeben werden.
  * ssh -l: Listet die finger prints der verf├╝gbaren Keys auf.
  * ssh -d: Entfernt den angegebenen Key vom ssh-agent.
  * ssh -D: Entfernt alle Keys vom ssh-agent.
  * ssh -s: Liegt Key von Smartcard.
  * ssh -e: Entfernt Key der Smartcard.
  * ssh -x: Sperrt den ssh-agent mit Kennwortschutz.
  * ssh -X: Entsperrt den Agent.
  * GnuPG kann Daten verschl├╝sseln oder signieren.
  * GnuPG = GNU Privary Guard
  * GPG ist eine Weiterentwicklung als Ersatz f├╝r PGP.
  * Das Verschl├╝sselungsverfahren von GPG ist asymmetrisch, weshalb bei der Verwendung von GnuPG ein Schl├╝sselpaar erforderlich ist.
  * Der public key verschl├╝sselt, der private key entschl├╝sselt.
  * Der private Key wird beim Generieren von Signaturen verwendet.
  * gpg --gen-key erstellt einen GPG-Schl├╝ssel.
  * Bei der Schl├╝sselg├╝ltigkeit: Diese Option ist nur f├╝r Signaturen von Belang. Ein verfallener Key kann aber weiterhin Daten ver- bzw. entschl├╝sseln.
  * Das Standardverzeichnis f├╝r GnuPG ist ~/.gnupg.
  * Es enth├Ąlt beispielsweise gpg.conf, pubring.gpg, random_seed, secring.gpg und trustdb.gpg.
  * Die Datei pubring.gpg enth├Ąlt den public key des Benutzers. secing.gpg die private keys.
  * In thrustedb.gpg sind die Signaturschl├╝ssel anderer Benutzer gespeichert, denen ein Benutzer selbst vertraut.
  * gpg.conf kann verwendet werden, um st├Ąndig wiederkehrende Optionen automatisch an das Kommando gpg anzuh├Ąngen.
  * gpg --encrypt <file> verschl├╝sselt eine Datei. Die urspr├╝ngliche bleibt jedoch erhalten und muss von Hand gel├Âscht werden.
  * gpg --decrypt <file>.gpg > <file>
  * Als Kennwort wird die passphrase vom key pair verwendet.

One thought on “LPIC-1 Cheat Sheet Module 102

Leave a Reply