Verder Terug Inhoud

2. Kleine Tips

2.1 Handige Syslog Truuk Paul Anderson, Tips-HOWTO maintainer

Wijzig je /etc/syslog.conf, en plaats daarin de volgende regel:

# Dump alles naar tty8
*.*                                     /dev/tty8
Een voorbehoud: DENK ERAAN TABS TE GEBRUIKEN! syslog houdt niet van spaties...

2.2 Script om die gecomprimeerde HOWTO's te bekijken. Didier Juges, dj@destin.nfds.net

Voor de ene aan de andere newbie is hier een klein script die het zoeken naar en het bekijken van howto documenten vereenvoudigt. Mijn howto's staan in /usr/doc/faq/howto/ en zijn met gzip gecomprimeerd. De bestandsnamen zijn XXX-HOWTO.gz, met XXX als het onderwerp. Ik maakte het volgende script aan met de naam "howto" in de directory /usr/local/sbin:


#!/bin/sh
if [ "$1" = "" ]; then
    ls /usr/doc/faq/howto | less
else
    gunzip -c /usr/doc/faq/howto/$1-HOWTO.gz | less
fi

Wanneer aangeroepen zonder argument, toont het een directory met de beschikbare howto's. Wanneer vervolgens ingevoerd met het eerste deel van de bestandsnaam (voor het koppelteken) als een argument, toont het dan het gedecomprimeerde bestand (waarbij het origineel intact blijft).

Om bijvoorbeeld de Serial-HOWTO.gz te bekijken, typ je:

$ howto Serial

2.3 Is er voldoende vrije ruimte??? Hans Zoebelein, zocki@goldfish.cube.net

Dit is een klein script waarmee van tijd tot tijd wordt gecontroleerd of er voldoende vrije ruimte beschikbaar is op alles wat mount laat zien (disks, cdrom, diskette...)

Als de ruimte opraakt, wordt iedere X seconden op het scherm een melding weergegeven en 1 mailbericht per gevuld device afgevuurd.


#!/bin/sh

#
# $Id: Tips-HOWTO-NL.sgml,v 1.3 2003/11/22 14:36:34 bokkie Exp $
#

#
# Sinds ik tijdens het compileren mysterieuze foutmeldingen kreeg toen
# tmp bestanden mijn disks opvulden, schreef ik dit om een waarschuwing te
# krijgen voordat de disks vol zijn.
#
# Als hiermee werd voorkomen dat je servers explodeerde
# stuur dan een lovende email naar zocki@goldfish.cube.net.
# Als je site hierdoor afbrandt, dan sorry, maar ik heb je
# gewaarschuwd: geen klachten.
# Vergeef me alsjeblieft als je echt weet hoe met sed om te gaan :)
#

#
# Alle gekheid op een stokje: Plaats `check_hdspace &' in rc.local.
# Controleer iedere $SLEEPTIME sec. op vrije ruimte op devices.
# Je zou zelfs je diskettes of tape drives erop kunnen controleren. :)
# Als de vrije ruimte onder de $MINFREE (kb) komt, zal er een waarschuwing
# op het scherm weerkaatsen en voor elke device waarop een tekort aan
# ruimte is geconstateerd een mail worden gestuurd aan $MAIL_TO_ME.
# Als er weer meer vrije ruimte is dan de limiet, gaat het ook weer gepaard
# met een mailactie.

# TEDOEN: Verschillende $MINFREE voor elk device.
# Bevrijd /*tmp dirs veilig van oude rommel als er geen vrije ruimte meer is.


DEVICES='/dev/sda2 /dev/sda8 /dev/sda9'         # device; hier plaats je disks
MINFREE=20480                                   # kb; hieronder een waarschuwing
SLEEPTIME=10                                    # sec; pauze tussen controles
MAIL_TO_ME='root@localhost'                     # dwaas; aan wie de waarschuwingsmail


# ------- geen wijzigingen nodig onder deze regel (hopelijk :) -------

MINMB=0
ISFREE=0
MAILED=""
let MINMB=$MINFREE/1024         # ja, we zijn strict :)

while [ 1 ]; do
        DF="`/bin/df`"
                for DEVICE in $DEVICES ; do
                ISFREE=`echo $DF | sed s#.\*$DEVICE" "\*[0-9]\*""\*[0-9]\*" "\*## | sed s#" ".\*##`
                
                if [ $ISFREE -le $MINFREE ] ; then
                        let ISMB=$ISFREE/1024
                        echo  "WAARSCHUWING: Slechts $ISMB vrij op $DEVICE." >&2
                        #echo "meer code/tekst hier plaatsen" >&2
                        echo -e "\a\a\a\a"
                        
                        if [ -z  "`echo $MAILED | grep -w $DEVICE`" ] ; then
                                echo "WAARSCHUWING: Slechts $ISMB vrij op $DEVICE.      (Trigger is ingesteld op $MINMB mb)" \
                                | mail -s "WAARSCHUWING: Slechts $ISMB vrij op $DEVICE!" $MAIL_TO_ME
                                MAILEDH="$MAILED $DEVICE"
                                MAILED=$MAILEDH
                                # plaats verdere acties, zoals opschonen van
                                # */tmp dirs hier...
                        fi
                        elif [ -n  "`echo $MAILED | grep -w $DEVICE`" ] ; then
                                # Verwijder mailed markering als er weer voldoende
                                # diskruimte is. Zodat we klaar staan voor nieuwe
                                # mailactie.
                                MAILEDH="`echo $MAILED  | sed s#$DEVICE##`"
                                MAILED=$MAILEDH
                        fi
                        
                done
                sleep $SLEEPTIME

done

2.4 Util om je logbestanden op te schonen. Paul Anderson, Tips-HOWTO Maintainer>

Ben je net als ik, dan heb je een lijst met 430 subscribers, plus 100+ berichten per dag die via UUCP binnenkomen. Wat moet een hacker met zulke grote logs? Installeer chklogs, dat is wat je kunt doen. Chklogs is geschreven door Emilio Grimaldo, grimaldo@panama.iaehv.nl, en de huidige versie 1.8 is beschikbaar vanaf ftp.iaehv.nl:/pub/users/grimaldo/chklogs-1.8.tar.gz. Het is tamelijk eenvoudig te installeren (je zult natuurlijk de info in de doc subdirectory erop nazien). Zodra je het hebt geïnstalleerd, voeg je als volgt een crontab record in:

# Voer dagelijks chklogs uit om 9:00PM.
00 21 * * *       /usr/local/sbin/chklogs -m

2.5 Handig script om core bestanden op te schonen Otto Hammersmith,ohammers@cu-online.com

Maak een bestand aan met de naam rmcores (de auteur noemt het handle-cores) met daarin het volgende:


#!/bin/sh
USAGE="$0 <directory> <message-file>"

if [ $# != 2 ] ; then
        echo $USAGE
        exit
fi

 echo Aan het verwijderen...
find $1 -name core -atime 7 -print -type f -exec rm {} \;

echo e-mailen
for name in `find $1 -name core -exec ls -l {} \; | cut -c16-24`
do
        echo $name
        cat $2 | mail $name
done

En laat het middels een cron job zeer vaak uitvoeren.

2.6 Directory's van het ene naar het andere bestandssysteem verplaatsen Alan Cox,A.Cox@swansea.ac.uk

Snelle manier om een gehele structuur met bestanden van de ene naar de andere disk te verplaatsen

(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)
[ Wijziging van cd /source/directory; tar....enz. ter voorkoming van een ramp waarmee de directory mogelijk wordt verwijderd. Met dank aan Jim Dennis, jim@starshine.org, dat hij me dit liet weten. -Maint. ]

2.7 Uitzoeken wat de grootste directory's zijn. Mick Ghazey, mick@lowdown.com

Je ooit afgevraagd welke directory's het grootst zijn op je computer? Zo kom je daar achter.

du -S | sort -n

2.8 De Linux Gazette

Eer komt John Fisk toe, oprichter van de Linux Gazette. Dit is een uitstekend e-zine en het is GRATIS!!! Wat valt er meer te wensen? Bekijk het op:

http://www.linuxgazette.com
BTW, Het schijnt dat (1) LG nu per maand uitkomt, en (2) John Fisk het niet langer onderhoudt, de lui bij SSC doen dit.

2.9 Verwijzer naar patch voor GNU Make 3.70 om het functioneren van VPATH te wijzigen.Ted Stern, stern@amath.washington.edu

Ik weet niet of veel mensen dit probleem hebben, maar er is een "faciliteit" van GNU make versie 3.70 die ik niet prettig vind. Het gaat erom dat VPATH zich raar gedraagt als je het een absolute padnaam opgeeft. Er is een uiterst degelijke patch waarmee dit wordt gecorrigeerd, die je kunt krijgen van Paul D. Smith <psmith@wellfleet.com>. Hij post de documentatie en patch ook na elke revisie van GNU make in de nieuwsgroep "gnu.utils.bug" Over het algemeen pas ik deze patch toe en hercompileer gmake op elk systeem waarop ik toegang heb.

2.10 Hoe stop ik mijn systeem dat het fsck uitvoert bij elke reboot? Dale Lutz, dal@wimsey.com

V: Hoe stop ik e2fsck dat het mijn disk elke keer bij het booten controleert.

A: Wanneer je de kernel opnieuw bouwt, wordt het bestandssysteem als `dirty' gemarkeerd en dus zal je disk bij elke boot worden gecontroleerd. Je kunt dit corrigeren door het opstarten van:

rdev -R /zImage 1

Dit corrigeert de kernel zodat het er niet langer van overtuigd is dat het bestandssysteem `dirty' is.

Noot: Voeg als je lilo gebruikt read-only toe aan je linux setup in je lilo config bestand (gewoonlijk /etc/lilo.conf)

2.11 Hoe fsck's te voorkomen door een "device busy" tijdens het booten. Jon Tombs, jon@gtex02.us.es

Als je vaak device busy fouten krijgt bij een shutdown die veroorzaken dat op het bestandssysteem bij een reboot een fsck moet worden toegepast, dan is hier een eenvoudige correctie:

Voeg aan /etc/rc.d/init.d/halt of /etc/rc.d/rc.0 de regel

mount -o remount,ro /mount.dir
toe voor alle gemounte bestandssystemen, behalve voor /, voor de aanroep naar umount -a. Dit betekent dat als het een shutdown om de een of andere reden niet lukt alle processen te killen en de disks te unmounten, ze bij een reboot toch clean zullen zijn. Het bespaart mij bij een reboot een heleboel tijd.

2.12 Hoe de grootste bestanden op je harddisk te vinden. Simon Amor, simon@foobar.co.uk

ls -l | sort +4n

Of voor degenen voor wie de ruimte er werkelijk op aankomt duurt dit wel even, maar het werkt geweldig:

cd /
ls -lR | sort +4n

2.13 Hoe druk ik pagina's af met een marge voor perforatiegaten. Mike Dickey, mdickey@thorplus.lib.purdue.edu


        #!/bin/sh
        # /usr/local/bin/print
        # een eenvoudige opgemaakte afdruk, om het iemand mogelijk te maken
        # 3 gaten in de uitvoer te ponsen en het samen te binden

        cat $1 | pr -t -o 5 -w 85 | lpr

2.14 Een manier om bestandsstructuren te doorzoeken op een bepaalde reguliere expressie.Raul Deluth Miller, rockwell@nova.umd.edu

Ik noem dit script 'forall'. Gebruik het als volgt:

forall /usr/include grep -i ioctl
forall /usr/man grep ioctl
Hier is forall:

#!/bin/sh
if [ 1 = `expr 2 \> $#` ]
then
        echo Gebruik: $0 dir cmd [optargs]
        exit 1
fi
dir=$1
shift
find $dir -type f -print | xargs "$@"

2.15 Een script voor opschonen nadat programma's autosave en backup bestanden hebben aangemaakt Barry Tolnas, tolnas@nestor.engr.utk.edu

Hier is een simpel tweeregelig script waarmee directory's worden afgedaald om emacs auto-save (#) en backup (~) bestanden, .o bestanden en TeX .log bestanden te verwijderen. Het comprimeert tevens .tex bestanden en README bestanden. Ik noem het op mijn systeem 'squeeze'.


#!/bin/sh
#SQUEEZE verwijdert onnodige bestanden en comprimeert .tex en README bestanden
#Door Barry tolnas, tolnas@sun1.engr.utk.edu
#
echo squeezing $PWD
find  $PWD \( -name \*~ -or -name \*.o -or -name \*.log -or -name \*\#\) -exec
rm -f {} \;
find $PWD \( -name \*.tex -or -name \*README\* -or -name \*readme\* \) -exec gzip -9 {} \;

2.16 Hoe kom ik erachter welke processen het meeste geheugen in beslag nemen. Simon Amor, simon@foobar.co.uk

ps -aux | sort +4n
-OF-
ps -aux | sort +5n

2.17 Vi optuigen voor het programmeren in C, Paul Anderson,Tips-HOWTO Maintainer

Ik programmeer in mijn vrije tijd nogal wat in C en ik heb er de tijd voor genomen vi op te tuigen zodanig dat het C vriendelijk is. Hier is mijn .exrc:


set autoindent
set shiftwidth=4
set backspace=2
set ruler

Wat doet het? autoindent zorgt dat vi automatisch elke regel volgend op de eerste inspringt, shiftwidth stelt de afstand van ^T in op 4 spaties, backspace stelt de backspace modus in, en ruler zorgt dat het regelnummer wordt weergegeven. Denk eraan, om naar een specifiek regelnummer te gaan, stel 20, gebruik je:


vi +20 myfile.c

2.18 Gebruik ctags om het programmeren te vereenvoudigen

De meeste hackers hebben ctags reeds op hun computers, maar gebruiken het niet. Het kan erg handig zijn voor het wijzigen van specifieke functies. Stel dat je een functie hebt in één van de vele bronbestanden in een directory voor een programma dat je aan het schrijven bent, en je wilt deze functie vanwege updates wijzigen. We zullen deze functie foo() noemen. Je weet niet waar het zich in het bronbestand bevindt. Hier komt ctags om de hoek kijken. Wanneer het wordt uitgevoerd, produceert ctags een bestand met de naam tags in de huidige dir, wat uit een opsomming bestaat met alle functies, in welke bestanden deze zich bevinden en waar in het bestand. Het bestand tags ziet er ongeveer zo uit:



ActiveIconManager       iconmgr.c       /^void ActiveIconManager(active)$/
AddDefaultBindings      add_window.c    /^AddDefaultBindings ()$/
AddEndResize    resize.c        /^AddEndResize(tmp_win)$/
AddFuncButton   menus.c /^Bool AddFuncButton (num, cont, mods, func, menu, item)$/
AddFuncKey      menus.c /^Bool AddFuncKey (name, cont, mods, func, menu, win_name, action)$/
AddIconManager  iconmgr.c       /^WList *AddIconManager(tmp_win)$/
AddIconRegion   icons.c /^AddIconRegion(geom, grav1, grav2, stepx, stepy)$/
AddStartResize  resize.c        /^AddStartResize(tmp_win, x, y, w, h)$/
AddToClientsList        workmgr.c       /^void AddToClientsList (workspace, client)$/
AddToList       list.c  /^AddToList(list_head, name, ptr)$/

Om bijvoorbeeld AddEndResize() met vim te wijzigen, geef je op:

vim -t AddEndResize
Hierdoor verschijnt het van toepassing zijnde bestand in de editor, met de cursor aan het begin van de functie.

2.19 Waarom hangt sendmail 5 minuten bij het opstarten onder RedHat? Paul Anderson, paul@geeky1.ebtech.net

Dit is een tamelijk algemeen probleem. Ik weet niet of RedHat deze bug al in hun distributie heeft gecorrigeerd, maar je kunt het zelf repareren. Als je in het bestand /etc/hosts kijkt, zul je zien dat het er ongeveer zo uitziet:

127.0.0.1               localhost       jebox

Wanneer sendmail start, zoekt het je hostnaam op (in dit voorbeeld, jebox). Het bemerkt dan dat het IP van jebox 127.0.0.1 is. Sendmail heeft hier problemen mee, dus voert het de zoekopdracht nogmaals uit. Het gaat hier een tijdje mee verder totdat het uiteindelijk opgeeft en stopt. Het corrigeren van het probleem is zeer eenvoudig. Wijzig het bestand /etc/hosts zodat het er ongeveer zo uit komt te zien:

127.0.0.1               localhost
10.56.142.1             jebox

2.20 Hoe configureer ik RedHat voor gebruik van color-ls? Paul Anderson, paul@geeky1.ebtech.net

De distributie van RedHat wordt geleverd met color-ls. Waarom ze het echter standaard niet voor kleurengebruik configureren, is me een raadsel. Zo kun je het corrigeren.

Typ als eerste: eval `DIRCOLORS`

Vervolgens, alias ls='ls --color=auto'

En plaats de 'alias.....' in /etc/bashrc

2.21 Hoe kom ik erachter welke library in /usr/lib een bepaalde functie bevat? Pawel Veselow, vps@unicorn.niimm.spb.su

Wat als je aan het compileren bent en je hebt een library gemist die moet worden gelinkt? Alle verslagen van gcc bestaan uit functienamen... Hier is een simpele opdracht dat zal vinden waarnaar je op zoek bent:

for i in *; do echo $i:;nm $i|grep tgetnum 2>/dev/null;done

tgetnum is hier de naam van de functie waar je naar op zoek bent.

2.22 Ik compileerde een klein testprogramma in C, maar toen ik het uit probeerde te voeren, kreeg ik geen uitvoer!

Je hebt het programma waarschijnlijk in een binary met de naam test gecompileerd, nietwaar? Linux heeft een programma met de naam test, die test of een bepaalde conditie waar is, het produceert nooit enige uitvoer op het scherm. Probeer in plaats van gewoon test, het intikken van: ./test


Verder Terug Inhoud