www.lamepage.de

Linux Tips & Tricks

Linux ist ein unglaublich umfangreiches System mit sehr vielen und netten Überraschngen, Features und Möglichkeiten. Einige von den, die uns aufgefallen sind und die wir selbst nutzen, wollen wir auf dieser Seite zusammenfassen. Es gibt sehr viele Bereiche wo man mit sehr kleinen Einsatz viel erreichen kann und das soll hier der Schwerpunkt sein. Die Tips wurden nach Themen sortiert.
Die Tips sind als Vorschläge zu sehen, sicherlich gibt es bessere Methoden um ans Ziel zu gelangen, aber das eine oder andere hier beschriebene Tip könnte vielleicht so manchen auf eine Idee bringen.


Inhaltsverzeichnis


System

  • Virtuelle Consolen
    Bei Linux gibt es eine wohlbekannte Möglichkeit mit ALT+F1...ALT+F6 zwischen den Textconsolen umzuschalten.
    Man kann aber mit der AltGr+F1...F12 weitere Consolen /dev/tty13.../dev/tty24 erreichen. Hiebei kann man sie  über /etc/inittab analog zu den anderen ansprechen und als eine Linux-Console benutzen.
    [zurück]
     
  • Syslogd
    folgende Einträge in /etc/syslog.conf erlauben das Mitverfolgen von System-Aktivitäten auf den virtuellen Consolen:
    mail.*                    /dev/tty10
    news.*                    /dev/tty11
    *.*;mail.none;news.none   /dev/tty12
    [zurück]
     
  • Login Benachrichtigung
    falls man auch andere User "von außen" per Telnet in sein System reinläßt, kann sich ein "Warn-System"  in der /etc/profile einbauen. Hierbei wird eine Mail an root und eine Broadcast-Message an alle Terminals geschickt wenn sich jemand ausser den festgelegten Usern einloggt:
    #
    # for automatically send a mail if any other users logged in
    #
    if [ "$LOGNAME" = "root" -o "$LOGNAME" = "petersob" -o "$LOGNAME" = "news" ];then
      # only show who is logged in
      echo --------------------------------------------
      who
      echo --------------------------------------------
    else
      who >~/.msg
      /bin/mail -s "$LOGNAME is logged in" root <~/.msg
      wall .msg
      rm ~/.msg
    fi
    [zurück]
     
  • Nützliche Aliasdefinitionen:
    Folgende Zeilen können sich in der /etc/profile als nützlich erweisen:
    alias dir='ls -FCx'
    alias ll='ls -al'
    alias l='ls -l'
    alias cls='tput clear'
    alias exit='tput clear; logout;'
    alias ..='cd ..'
    alias rd=rmdir
    alias md=mkdir
    alias which='type -p'
    [zurück]
     
  • Eingehende Faxe als PDF per Mail
    Wenn man sich zum Faxempfang und Versand mgetty+sendfax konfiguriert hat, bekommt man normalerweise die empfangene Faxe als eine Bilddatei mit je einer Seite pro Mail zugestellt. Das macht das Lesen mehrseitiger Dokumente sehr umständlich, weil mehrere Mails durchgeguckt werden müssen. Mit Hilfe eines kleinen Scripts lassen sich die FaxG3 Dateien eines Dokuments automatisch gleich als eine PDF Datei konvertieren und als eine Mail verschicken. Dadurch wird das Handling mit den empfangenen Faxdateien enorm erleichtert. Man kann sie sogar ohne weiteres per Mail weiterschicken, denn AcrobatReader von Adobe gibt es heute für fast jedes Betriebssystem. Ein spezielles Fax-Anzeigeprogramm wird dadurch überflüssig !
    Nach dem Empfang eines Fax-Dokuments ruft mgetty die Datei /usr/lib/mgetty+sendfax/new_fax auf um die FaxG3 Dateien aufzubereiten. Die unten angeführte abgewandelte Form des new_fax Scripts erledigt die Umwandlung in PDF und den Versand per Mail:
    #!/bin/sh
    #
    # this script converts the g3 fax file in pbm and send this as MIME to
    # user spicified by MAILTO. 1998 by Peter Sobisch.
    #
    # Syntax: new_fax <hup> <sender-id> <no of pages> <file> [ <file>...]
    #
    PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin
    HUP="$1"        # hangup error code: 0=OK
    SENDER="$2"     # caller id, given by remote fax
    PAGES="$3"      # total number of pages
    STRETCH=""      # default no stretch
    P=0             # reset count
    TMP=/tmp/fax$$          # set temp name
    cp /dev/null $TMP.ps    # init temp file
    MAILTO="petersob@comm.lamepage.de"                      # send mail to
    FILEPAR="-f $TMP.pdf -m application/pdf -e base64"      # how to encaps. file
    shift 3         # now expose only the file names
    for FILE in $*; do
       P=`expr $P + 1`                                      # set counter
       RES=`basename $FILE | sed 's/.\(.\).*/\1/'`          # extract resolution
       [ "$RES" = "n" ] && STRETCH="-s"
       g32pbm $STRETCH $FILE 2>/dev/null | pnmtops >>$TMP.ps        # convert to ps
    done
    ps2pdf $TMP.ps $TMP.pdf                 # convert ps dokument to pdf
    FILENAME=`echo $FILE | cut -f1 -d.`     # cut the index and set filename
    metasend -b $FILEPAR -t $MAILTO -s "Fax from $SENDER: $PAGES pages" -S 5000000
    rm $TMP.ps $TMP.pdf                     # remove tmp files
    exit 0
    Die Variable MAILTO muss natürlich die eigene Empfängeradresse eingetragen werden.
    Es werden folgende Pakete benötigt (SuSE Linux, Serie: gra):
    • g3utils (für g32pbm)
    • netpbm (für pnmtops)
    • Ghostscript gs_xxx + gs_lib (für ps2pdf).

    [zurück]
     
  • ISDN Auswertung mit isdnrep
    Wer eine ISDN Karte besitzt und isdn4linux inkl. isdnlog laufen hat, kann mit Hilfe des Tools isdnrep eine HTML- basierte Auswertung durchfühern. Erforderlich ist hierfür ein http Server (Daemon) zB apache.
    Es muß nur noch ein Script für isdnrep erstellt werden:

    /usr/local/httpd/cgi-bin/isdnrep:

    #!/bin/sh
    isdnrep -v -w1 $*
    Nach dem Erzeugen der Batchdatei müssen noch die Ausführrechte gesetzt werden:
    chmod a+x /usr/local/httpd/cgi-bin/isdnrep
    Jetzt kann man sich eine einfache HTML Seite basteln mit einem Link auf diesen Script, der HTML Code dafür könnte wie folgt aussehen:
    ...
    <a href="/cgi-bin/isdnrep?-w1">ISDN Report</a>
    ...
    Beim Anklicken des Links bekommt man jetzt eine Übersicht über die einzelnen Verbindungen und deren Zeitangaben. In der von isdnrep erzeugten HTML Seite sind bereits Links für das Zurück- und Vorblättern von Tagen und Monaten, so daß man sich sehr leicht die Übersicht über alle ISDN-Aktivitäten verschaffen kann (Gespräche und Datenanrufe).

    [zurück]
     

Netzwerk

  • pppd: nach Verbindungsaufbau Programme automatisch starten
    nachdem die Verbindung mit pppd aufgebaut wurde, startet pppd automatisch den Script /etc/ppp/ip-up mit SUID=root, nach dem Verbindungsabbau wird /etc/ppp/ip-down gestartet. pppd übergibt folgende Parameter an die Scripte:
    #ip-up <interface> <device> <speed> <local-ip> <remote-ip> <ipparam>
    oder
    #ip-down <interface> <device> <speed> <local-ip> <remote-ip> <ipparam>
    Wobei <ipparam> ein Parameter ist, der mit pppd ipparam <parameter> übergeben werden kann. Durch die Auswertung der Parameter kann man in Abhängigkeit von zB der Baudrate: Traffic-Intensiven Downloads ausführen oder über verschiedene IP´s die Einstellungen vornehmen. Alle in den beiden Scripts ausgeführten Programme oder Aktionen werden als root durchgeführt, so wenn ein spezieller User gefragt ist muss man sich mit su behelfen. Auf die Weise lassen sich in Abhängigkeit von den Parametern entsprechende Aktionen einleiten. Beispiel:
    wir möchten, daß unser System beim Provider anruft und nur Mails und News spoolt und dann automatisch auflegt.
    Es soll mit dem Aufruf von einem Script namens ppp-spool geschehen. Dazu basteln wir uns in ip-up folgende Zeilen ein:
    if [ "$6" = "spool" ]; then
       su <user> -c sendmail -q
       su <user> -c ´fetchmail -f /home/<user>/.fetchmailrc´
       su news -c /var/lib/news/suck/news
       ppp-off
    fi
    Der Script ppp-spool sieht dann folgendermaßen aus (die richtigen Einstellungen in /etc/ppp/options und /etc/ppp/pap-secrets für eine funktionierende Onlineverbindung vorrausgesetzt):
    /usr/sbin/pppd /dev/modem name mylogin connect "/etc/ppp/dial 123456" ipparam spool
    [zurück]
     
  • akustische Hinweise in ip-up und ip-down
    Die standard Eingabe und Ausgabe-Kanäle werden bei der Ausführung der ip-up und ip-down Scripts auf /dev/null umgelenkt. Um trotzdem an die Statusinformationen der einzelnen Programme oder andere Hinweise müssen wir die Ausgabekanäle auf eine der virtuellen Consolen umleiten. Dazu eignen sich hervorragend die /dev/tty9.../dev/tty12. Man kann sie später über Alt+F9...Alt+F12 anschauen. So läßt sich mit einem echo Befehl zB: ein Beep generieren und damit eine akustische Statusinformation für zB: Verbindung aufgebaut oder abgebaut bewerkstelligen:
    echo -e "\007" 1>/dev/tty10 2>/dev/tty10
    Denkbar wäre auch das Abspielen einer Sounddatei, wobei man daran denken sollte sie im Hintergrund abzuspielen (<command> &) damit der ip-up Script nicht aufgehalten wird.

    [zurück]
     
  • online Zeit erfassen
    Durch eine Erweiterung der ip-up und ip-down Dateien um paar weitere echo-Zeilen lässt sich die Online Zeit auf einem Terminal und in einer Datei "mitschreiben":

    ip-up:

    echo -n "$(date +"%d.%m.%Y %H:%M:%S") - " >>/etc/ppp/online-time
    echo -n "$(date +"%d.%m.%Y %H:%M:%S") - " 2>&1 1>/dev/tty10
    ip-down:
    echo "$(date +"%d.%m.%Y %H:%M:%S")" >>/etc/ppp/online-time
    echo "$(date +"%d.%m.%Y %H:%M:%S")" 2>&1 1>/dev/tty10
    Bei jeder Einwahl wird nun ein String in das Terminal /dev/tty10 und in die Datei /etc/ppp/online-time reingeschrieben:
    13.12.1999 18:37:36 -
    Auf ein RETURN Zeichen wird hier verzichtet, so daß beim Auflegen die Offline-Zeit hinten drangehängt wird:
    13.12.1999 18:37:36 - 13.12.1999 19:25:30
    Die so protokolierte Zeiten lassen sich einfach mit einem Script auswerten. calc ist ein Shell Script das awk zur einfachen Kalkulation benutzt. Es werden nur die Zeilen, die vollsändig sind, ausgewertet. calc rechnet lediglich die Zeiten zusammen und zählt die Anzahl der Verbindungen.

    calc:

    #!/bin/sh
    #
    # calc by Peter Sobisch
    #
    case $* in
       -d) PARAM=`/bin/date +%d.%m.%Y`;;
       -m) PARAM=`/bin/date +%m.%Y`;;
       -y) PARAM=`/bin/date +%Y`;;
       -?|-h|--help) echo "calc [-d|-m|-y|<pattern>]"
           echo "Calculates online times and count of connections"
           echo
           exit;;
        *) PARAM="$*";;
    esac
    
    grep "$PARAM" /etc/ppp/online-time | awk 'BEGIN { total=0 }
    NF == 5 {
       n=split($1,d,".")
       date1=(d[1]+d[2]*30+d[3]*365)
       n=split($2,t,":")
       time1=(t[1]*3600+t[2]*60+t[3])
    
       n=split($4,d,".")
       date2=(d[1]+d[2]*30+d[3]*365)
       n=split($5,t,":")
       time2=(t[1]*3600+t[2]*60+t[3])
    
       time=(date2-date1)*3600*24+time2-time1
       total=total+time
    }
    END \
    {
       hours = total / 3600
       print NR" connects, "hours" hours, (= "total" seconds)"
    }'
    Man kann als Parameter -d (den heutigen Tag) -m für den aktuellen Monat und -y für das aktuelle Jahr sowie ein beliebigen String nach dem gesucht werden soll. So kann zB einfach durch die Eingabe von:
    calc 12.1999
    die Anzahl und Länge der Verbindungen im Dezember 1999 bestimmt werden:
    116 connects, 11.8047 hours, (= 42497 seconds)
    Wird kein Parameter angegeben, rechnet calc alle Verbindungen die in der online-time Datei protokolliert sind zusammen. calc wurde geschrieben um auf eine einfache Weise die Onlinezeiten und die Verbindungszahl zu bestimmen.
    Diese Werte können sehr hilfreich sein, wenn es darum geht einen Internet Provider zu wählen.
    Sicher, eine Auswertung anhand der System-Logfiles wäre genauer, aber das Dursuchen MB-Schwerer Logdateien dauert nun mal seine Zeit. Diese Idee entstand aber um einem kleinen 486er der nonstop als Server läuft ein wenig Luft zum Atmen zu lassen :-)
    Man kann sich die Arbeit automatisieren lassen und per Cronjob sich am letzten Tag des Monats eine Zusammenfassung über Online-Zeiten per Mail zuschicken lassen. Der Kreativität sind keine Grenzen gesetzt.

    [zurück]
     
  • dummy Device
    Linux bietet uns eine Möglichkeit mit Netzwerk zu experimentieren ohne jegliche Netzwerkanbindung mittels dem dummy Device. Vorraussetzung hierfür ist, daß wir vorher den Kernel mit der Option "dummy-Device" kompilliert haben. Dann kann man dieses Device mit einem Aufruf von ifconfig dummy0 192.168.1.1 konfigurieren. Man kann so eingerichtetes Device nutzen um zB Permissions-Checks durchzuführen denn alle Pakete die über dieses Device rausgeschickt werden kommen mit der eingestellten IP als Absender-IP zurück (hier: 192.168.1.1). Auf diese Weise lassen sich zB.: Firewalls, Hostzugriffe und andere Netzspezifische Einstellungen durchtesten.

    [zurück]
     

Mail

  • Mailforwarding
    viele kleinere Internetprovider benutzen UNIX(Linux)-basierte Homepageserver für ihre Kunden. Wenn man auch noch das Glück hat, daß der Homepage-Server gleichzeitig auch als Mailserver eingesetzt wird (lässt sich z.T. über host Befehl feststellen) kann man ohne den Provider damit zu belästigen und auf eigenes Risiko die Mails automatisch woandershin weiterleiten. Sinn macht das zB: wenn man ein bestehendes Mail-Account auf ein anderes umleiten möchte wie zB.: GMX. Das Homepageverzeichnis enthält in den meisten Fällen ein Unterverzeichnis mit dem Namen html wo dann auch die eigene Homepage Platz findet. Um jetzt die Umleitung zu setzen, muß eine Datei namens .forward (bitte den führenden Punkt beachten) im eigenen Home-Verzeichnis (das nächsthöhere als das html) deponieren. In dieser Datei muß man nun die Zieladressen (eine pro Zeile) angeben. Die .forward Datei wird in der Regel von sendmail beim Eintreffen einer Mail ausgewertet und die Mails werden an die in der .forward Datei enthaltene Adressen geschickt. Für die Funktionalität oder Nebenwirkungen übernehme ich keine Garantie.

    [zurück]
     
  • Envelope masquerading
    wenn man ausser der From:  Zeile im Mailheader auch noch die From - (envelope) Zeile "verkleiden" möchte, muß hierfür eine Zeile in der sendmail.cf geändert werden.
    vorher:
    ###################################################################
    ###  Ruleset 94 -- convert envelope names to masqueraded form   ###
    ###################################################################
    
    S94
    #R$+                     $@ $>93 $1
    R$* < @ *LOCAL* > $*   $: $1 < @ $j . > $2
    nachher:
    ###################################################################
    ###  Ruleset 94 -- convert envelope names to masqueraded form   ###
    ###################################################################
    
    S94
    R$+                     $@ $>93 $1
    #R$* < @ *LOCAL* > $*   $: $1 < @ $j . > $2
    [zurück]
     

X-Windows

  • Tilde "~" in xterm
    um die sog. Tilde und auch andere Sonderzeichen die durch Dead-Keys produziert werden zu benutzen, muß in der /etc/XF86config folgende Änderungen eingearbeitet werden:
    Section "Keyboard"
        Protocol    "Standard"
        AutoRepeat  500 5
        XkbLayout   "de"
        XkbVariant  "nodeadkeys"
        XkbModel    "pc102"
    EndSection
    Wichtig sind hierbei der XkbModel und XkdVariant Eintrag !

    [zurück]
     
  • Console-switching Probleme bei SVGATextMode
    Die aktuellen XFree3.3.1 X-Server der einigen Karten haben ein Problem mit dem Registerbackup der Grafikkarte. Es wird einfach davon ausgegangen, daß die Grafik-Karte mit der gleichen Frequenz betrieben wird und nur ein Teil der Register gesichert. Wenn man hier mit SVGATextMode die Karte auf eine andere Frequenz eingestellt hat und dann X-Windows startet bekommt man nach dem Beenden von X-Windows oder Umschalten zu einer Textmode-Console gar kein oder ein verzerrtes Bild zu sehen. Um dieses Manko des X-Servers auszugleichen kann man nun durch ein Trick eine Abhilfe schaffen. Folgende Zeilen sind am Anfang der $HOME/.xinitrc oder $HOME/.xsession Datei einzufügen:
    #
    chvt 1
    SVGATextMode 0
    chvt 7
    #
    wobei die Ausführrechte von SVGATextMode für die ensprechenden User vorhanden sein müßten. Es wird beim Start von X-Windows auf die Text-Console umgeschaltet und die Frequenz mit SVGATextMode "nachgesetzt" daher keine Panik wenn das Bild kurz flackert.

    [zurück]
     

Drucker

  • hpdj als HP DeskJet Druckertreiber
    Ghostscript bietet eine Fülle an Druckertreibern an. Die sind aber keine festen Bestandteile von GhostScript sondern werden als getrennte Module von verschiedenen Authoren entwickelt und mitdazukompilliert. Drunter sind auch deskjet, djet500 und djet500c als Treiber für den DeskJet Drucker von HP. Es gibt aber zusätzlich einen anderen Druckertreiber der sehr ausgereift und besser auf die DeskJet´s abgestimmt ist, den hpdj von Martin Lottermoser. Der hpdj gehört ebenfalls zu den einkompillierten Treibern. Nach einer leichten Anpassung des apsfilters Scripts ist man sogar im Stande den Farbdruckmodus zu bestimmen: CTY und CTY+K (mit Farb- und Schwarz-Patronen oder mit Farbpatrone wobei schwarz gemischt wird). Hier ist meine Version der Anpassung für den apsfilter Script. Um mehr über hpdj zu erfahren kan man diese Web-Seite besuchen: ftp://ftp.pdb.sni.de/pub/utilities/misc/hpdj.html.
    Es ist zwar ungewöhnlich das diese WWW-Seite nur per FTP erreichbar ist aber mit Netscape ist das gar kein Problem.

    [zurück]