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.
- System
- Netzwerk
- Mail
- X-Windows
- Drucker
-
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]
-
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]
-
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]
-
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]
|