Druckversion

Skripte, Programme und Anderes

Übersicht Weiter

An dieser Stelle sollen nützliche Skripte folgen, auf die teilweise im Buchtext verwiesen wird. Einige der Skripte sind bewusst einfach gehalten und verzichten zu Gunsten der Verständlichkeit auf umfangreiche Fehlerbehandlungen. Der Leser sollte diese leicht selbst ergänzen können.

Auch Themen, die nicht unbedingt in den Inhalt des Buches passen, finden ggf. hier ihren Platz.

crypt - Verschlüsselung von Passwörtern Zurück Anfang Weiter

Das nachfolgend beschriebene Programm ist ein Ersatz für das Unix-Programm crypt, das den meisten Linux-Distributionen nur in Form einer Bibliotheksroutine beiliegt. Das Programm erwartet als Eingabe das zu verschlüsselnde Passwort und eine aus 2 alphanumerischen Zeichen bestehende Zeichenkette - das Salz in der Suppe. Mit Hilfe dieser beiden Zeichen wird die Arbeitsweise des Algorithmus auf eine von 4096 möglichen Arten modifiziert. Die Zeichen können beliebig gewählt werden.

Aber nun das Listing des Programmes:

#include <unistd.h>
#include <stdio.h>

int main (int argc, char** argv)
{
   if ( argc != 3 )
   {
     fprintf(stderr, "%s need two arguments to encrypt\n", argv[0]);
     return -1;
   }

   printf("%s", crypt(argv[1], argv[2] ));

   return 0;
}

Übersetzt wird das Programm mit:

user@sonne> cc crypt.c -o mycrypt -lcrypt

Ein Aufruf sieht wie folgt aus:

user@sonne> ./mycrypt MyPassword X7
X7xe.8.ZuZ/PE

Zur Nutzerverwaltung

Farbe für die Konsole Zurück Anfang Weiter

Weiße Schrift auf schwarzem Grund...

Abbildung 1: Weiße Schrift auf schwarzem Grund...

Genug von Schwarz und Weiß? Dann gibt es mehrere Möglichkeiten, die Konsole ein wenig aufzupeppen...

Das Kommando ls kann mittels der Option --color zu einer farbigen Darstellung der Ausgabe überredet werden. Dazu verwendet ls die in der Datei /etc/DIR_COLORS angegebenen Informationen.

user@sonne> cat /etc/DIR_COLORS
############### gekürzte Datei #########################
# Configuration file for the color ls utility
# This file goes in the /etc directory, and must be world readable.
# You can copy this file to .dir_colors in your $HOME directory to override
# the system defaults.

# COLOR needs one of these arguments: 'tty' colorizes output to ttys,but not
# pipes. 'all' adds color characters to all output. 'none' shuts colorization
# off.

COLOR tty

# Extra command line options for ls go here.
# Basically these ones are:
#  -F = show '/' for dirs, '*' for executables, etc.
#  -T 0 = don't trust tab spacing when formatting ls output.

OPTIONS -F -T 0

# Below, there should be one TERM entry for each termtype that is colorizable
TERM linux
TERM console
TERM con132x25
TERM con132x30
TERM con132x43
TERM con132x60
TERM con80x25

# EIGHTBIT, followed by '1' for on, '0' for off. (8-bit output)
EIGHTBIT 1

NORMAL 00       # global default, although everything should be something.
FILE 00         # normal file
DIR 01;34       # directory
LINK 01         # symbolic link
FIFO 40;33      # pipe
SOCK 01;35      # socket
BLK 40;33;01    # block device driver
CHR 40;33;01    # character device driver

# This is for files with execute permission:
EXEC 01;31

# List any file extensions like '.gz' or '.tar' that you would like ls
.tar 00;31 # archives or compressed (red)
.tgz 00;31
.taz 00;31
.lzh 00;31
.zip 00;31
.z   00;31
.bz2 00;31
.jpg 01;35 # image formats
.gif 01;35
.bmp 01;35
.xbm 01;35a

Mit Hilfe des Kommandos echo lässt sich die Farbe für alle folgenden Ausgaben steuern:

Aufruf: echo -e "\033[<Flag>;<Farbe>[;<Farbe>]m"

Als »Flag« sind folgende Codes zulässig:
00 normale Darstellung
01 fette Schrift
04 unterstrichen
05 blinkende Schrift
07 inverse Darstellung
08 verborgene Darstellung (keine Ausgabe)
Als »Farbe« sind folgende Codes zulässig:
            Textfarbe             Hintergrundfarbe
30 schwarz 40 schwarz
31 rot 41 rot
32 grün 42 grün
33 gelb 43 gelb
34 blau 44 blau
35 violett 45 violett
36 kobaltblau 46 kobaltblau
37 weiß 47 weiß

Die Eingabe user@sonne> echo -e "\033[01;33;41m" erzeugt folgende Konsolenoptik:

Etwas Farbe für die Konsole

Abbildung 2: Etwas Farbe für die Konsole

Zurück zum Abschnitt Bash.

Druckversion der Linuxfibel Zurück Anfang Weiter

Die Generierung der Druckversion der Linuxfibel übernimmt ein kombiniertes Awk- und Bash-Skript. Eine Diskussion des Skript selbst finden Sie im Abschnitt Bashprogrammierung, Komplexe Anwendungen.

user@sonne> cat printversion.sh
#!/bin/sh

linuxfibel_base=${1:-./}
awk_script=/tmp/`basename $0`.$$

trap 'test -e $awk_script && rm $awk_script' 2 15

test -d $linuxfibel_base || { echo "Verzeichnis $linuxfibel_base existiert nicht"; exit 1; }

cd $linuxfibel_base
test -e vorwort.htm || { echo "Falsches Linuxfibel-Verzeichnis?"; exit 1; }
test -d printversion || mkdir printversion
test -L printversion/images || (cd printversion && ln -s ../images)

cat > $awk_script << EOF
#--------- AWK-SCRIPT BEGINN --------------
#!/usr/bin/awk -f

BEGIN {
    DoPrint="true"
    IGNORECASE=1
}

/<script language="JavaScript">/ { DoPrint = "false" }
/<\/head>/ { DoPrint = "true" }
/<body bgcolor/ { print \$0; DoPrint = "false" }
/HIER BEGINNT DER TEXT/ { getline; getline; DoPrint = "true" }
/HIER ENDET DER TEXT/ { getline; print \$0; DoPrint = "false" }
/<\/body>/ { DoPrint = "true" }
{
    if ( DoPrint == "true") { print \$0 }
}
#--------- AWK-SCRIPT ENDE ----------------
EOF

chmod +x $awk_script

for i in *.htm; do
   $awk_script $i > printversion/$i
done

kill -2 $$

Speichern Sie das Skript Programm in eine Datei »printversion.sh« im Linuxfibel-Basisverzeichnis. Versehen Sie es mit Ausführungsrechten und starten Sie es innerhalb des Linuxfibel-Basisverzeichnisses!

user@sonne> cd Linuxfibel
user@sonne> chmod +x printversion.sh
user@sonne> ./printversion.sh

Die konvertierten Seiten werden im Unterverzeichnis »printversion« abgelegt.

PDF-Version der Linuxfibel Zurück Anfang

Sie benötigen hierfür das Paket »htmldoc«, das jeder umfangreichen Distribution beiliegen sollte. Wichtig ist, dass Sie die HTML-Seiten gemäß der Reihenfolge in der Linuxfibel dem Kommando zuführen. Ein kleines Skript nimmt Ihnen die wesentliche Arbeit ab:

# Skriptname: sortfiles.sh
# Nach eine Vorlage von Frank Exss.
#!/bin/sh
test -f default.htm || { \
    echo "die Startdatei 'default.htm' konnte nicht gefunden werden"; \
    exit 1; \
}

for chapter in `head -70 default.htm | egrep '<a href=".*\.htm"><span' | grep -v home | cut -f 2 -d '"'`
do
    echo $chapter
    for section in `head -70 $chapter | egrep '&nbsp;&nbsp; ?<a href=".*\.htm"><span' | grep -v home | cut -f 2 -d '"'`
    do
        echo " $section";
        head -70 $section | egrep '&nbsp;&nbsp;&nbsp;&nbsp; ?<a href=".*\.htm"><span' | grep -v home | cut -f 2 -d '"'
   done
done

Speichern Sie obiges Skript in eine Datei »sortfiles.sh« (Rechte setzen!). Der Aufruf zum Erzeugen der PDF-Datei sieht somit wie folgt aus.

user@sonne> htmldoc --book --webpage -f ~/linuxfibel.pdf $(./) $(sortfiles.sh)

Die Datei »toc.htm« enthält ein Inhaltsverzeichnis und liegt den Paketen ab Version 0.8.2 bei.

Dank

Die PDF-Version entstand nach Hinweisen von Martin Hauptmann und Daniel Münch. Das Skript zur Generierung der korrekten Reihenfolge der Dateinamen basiert auf einen Vorschlag von Jan Exss.

Korrekturen, Hinweise?
Startseite Nächste Seite Nächstes Kapitel Vorherige Seite Kapitelanfang