Next Previous Contents

2. Småtips

2.1 Et nyttig syslog trick Paul Anderson, Tips-HOWTO vedlikeholder

Åpne filen /etc/syslog.conf og legg til denne linjen:

# Dumpe loggene til /dev/tty8
*.*                                     /dev/tty8
Viktig: HUSK Å BRUKE TABS! syslog liker ikke vanlige mellomrom.

2.2 Skript som lar deg se på komprimerte HOWTO dokumenter Didier Juges, dj@destin.nfds.net

Fra en nybegynner til en annen, her har du et lite skript som lar deg mye enklere enn før lete etter og se på howto dokumenter. Mine HOWTOs ligger i /usr/doc/faq/howto/ og er alle pakket med gzip. Filnavnene er XXX-HOWTO.gz, hvor XXX er subjektet. Jeg laget det følgende skriptet ('howto') i /usr/local/sbin/ katalogen:


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

Når programmet blir kjørt uten et argument, vil det vise filene i katalogen hvor howtoene ligger. Når argumentet er subjektet, derimot, vil howtoen pakke seg selv opp og vises på skjermen.

For å se på Serial-HOWTO.gz f.eks, er det bare til å skrive:

$ howto Serial

2.3 "Er det nok harddiskplass igjen??" Hans Zoebelein, zocki@goldfish.cube.net

Her er et lite skript som fra tid til annen vil sjekke om det er nok plass igjen på enheter som er montert på filsystemet (harddisk, cdrom, floppy osv.)

En melding vil bli skrevet til skjermen samt 1 e-post beskjed vil bli sendt hvis en enhet er full.


#!/bin/sh

#
# $Id: check_hdspace,v 1.18 1996/12/11 22:33:29 root Exp root $
#

#
# Jeg skrev dette skriptet for å få en advarsel før diskene ble
# fulle.
#
# Hvis skriptet reddet serverne dine fra å gå amok, kan du sende
# en takke-epost til zocki@goldfish.cube.net. Hvis maskinene dine
# blir ødelagt på et eller annet vis pga. dette programmet, er jeg
# overhodet ikke ansvarlig.
# 

#
# Putt 'check_hdspace &' i rc.local. Det vil sjekke om du har nok
# ledig plass på enhetene dine hvert $SLEEPTIME sekund. Du kan faktisk
# sjekke dine disketter og tapekassetter.
# Hvis den ledige plassen går under minimumet, $MINFREE kB, vil det
# komme frem en advarselsbeskjed om hver enhet som er i faresonen.
# En mail vil også bli sendt til $MAIL_TO_ME variablen.
# Hvis det plutselig blir mer plass igjen enn minimumet, så vil
# skriptet gjøre seg klar til å maile igjen.
#

# TODO: Different $MINFREE for each device.
# Free /*tmp dirs securely from old junk stuff if no more free space.


DEVICES='/dev/sda2 /dev/sda8 /dev/sda9'         # enhet; putt enheter her
MINFREE=20480                                   # kB; minimum ledig plass
SLEEPTIME=10                                    # sec; vente 10 sek. mellom
                                                # hver sjekk
MAIL_TO_ME='root@localhost'                     # her sendes mailen til


# ------- forhåpentligvis er forandringer under denne linjen unødvendige -------

MINMB=0
ISFREE=0
MAILED=""
let MINMB=$MINFREE/1024        

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  "ADVARSEL: $DEVICE har bare $ISMB MB ledig." >&2
                        #echo "hva du vil kan stå her" >&2
                        echo -e "\a\a\a\a"
                        
                        if [ -z  "`echo $MAILED | grep -w $DEVICE`" ] ; then
                                echo "ADVARSEL: $DEVICE har bare $ISMB MB ledig..      (Trigger is set to $MINMB mb)" \
                                | mail -s "ADVARSEL: $DEVICE har bare $ISMB MB ledig!" $MAIL_TO_ME
                                MAILEDH="$MAILED $DEVICE"
                                MAILED=$MAILEDH
                        # her kan du sette inn hva du vil, f.eks
                        # kommandoer som rydder opp i */tmpkataloger
                        fi
                        elif [ -n  "`echo $MAILED | grep -w $DEVICE`" ] ; then
                                # Gjøre klart for ny aksjon hvis plass
                                # tar slutt igjen
                                MAILEDH="`echo $MAILED  | sed s#$DEVICE##`"
                                MAILED=$MAILEDH
                        fi
                        
                done
                sleep $SLEEPTIME

done

2.4 Verktøy som rydder opp i loggfilene dine. Paul Anderson, Tips-HOWTO Vedlikeholder>

Hvis du er lik meg, har du sikkert en mailingliste med 430 medlemmer + 100 beskjeder som kommer inn hver dag gjennom UUCP. Hva gjør egentlig en hacker med disse enorme loggene som blir til? Svaret er enkelt nok å installere chklogs. Chklogs er skrevet av Emilio Grimaldo, grimaldo@panama.iaehv.nl. Den nyeste versjonen (1.8) finnes på ftp.iaehv.nl:/pub/users/grimaldo/chklogs-1.8.tar.gz. Det er temmelig selvforklarende å installere programmet og jeg antar at du leser filene i doc/ katalogen. Etter du har installert chklogs, kan du legge inn denne entryen i crontab:

# Kjør chklogs hver dag klokken 21:00
00 21 * * *       /usr/local/sbin/chklogs -m
Nå som du er i gang, kan du godt sende en mail til forfatteren av chklogs om hvor godt du liker programmet osv..

2.5 Et nyttig skript som hjelper deg å fjerne corefiler. Otto Hammersmith, ohammers@cu-online.com

Lag en fil ved navn 'rmcores' (også kalt 'handle-cores') og sett de følgende linjene inn:


#!/bin/sh
USAGE="$0 <katalog> <beskjed-fil>"

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

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

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

La deretter en cron jobb kjøre skriptet regelmessig hvis du ønsker det.

2.6 Flytting av kataloger mellom filsystemer. Alan Cox, A.Cox@swansea.ac.uk

En rask måte på å flytte et helt katalogtre med filer fra en disk til en annen.

(cd /kilde/katalog && tar cf - . ) | (cd /dest/katalog && tar xvfp -)
[ Gå ut av /kilde/katalog/ for å forhindre muligheten for at katalogen kan bli ødelagt. Takk til Jim Dennis, jim@starshine.org, som tipset meg om det -Maint. ]

2.7 Finne ut hvilke av katalogene dine som er størst. Mick Ghazey, mick@lowdown.com

Har du noensinne lurt på hvilke kataloger på harddisken din som er størst? Her er ihvertfall måten du kan finne Det ut på.

du -S | sort -n

2.8 "The Linux Gazette"

Mange takk går til John Fisk, skaperen av Linux Gazette. Linux Gazette er et utmerket elektronisk magasin og i tillegg er det helt gratis! Hva mer kan man be om? Du finner det på:

http://www.linuxgazette.com
PS: Det ser nå ut som at Linux Gazette blir gitt ut som et månedtlig magasin og at John Fisk har sluttet å vedlikeholde magasinet, folka fra SSC har overtatt den jobben.

2.9 Tips om en patch for GNU Make 3.70 for å forandre på rar VPATH oppførsel. Ted Stern, stern@amath.washington.edu

Jeg er ikke sikker på om mange har dette problemet, men det er en "del" av GNU Make versjon 3.70 som jeg ikke liker. Det er det at VPATH oppfører seg rart hvis det blir gitt et fullstendig "Path"-navn. Det finnes en effektiv patch mot dette problemet. Den kan du få hos Paul D. Smith <psmith@wellfleet.com>. Han pleier også å poste dokumentasjon og patcher til hver korrigert versjon av GNU Make på nyhetsgruppen "gnu.utils.bug". Vanligvis pleier jeg å installere denne patchen og rekompilere gmake på hvert system jeg har tilgang til.

2.10 Hvordan stopper jeg systemet i å kjøre 'fsck' under hver reboot Dale Lutz, dal@wimsey.com

Q: Hvordan stopper jeg e2fsck i å sjekke harddisken min hver gang jeg booter opp?

A: Når du rekompilerer kjernen blir filsystemet automatisk merket som 'skittent'. Derfor blir kjernen overbevist om at den må sjekke disken hver gang du booter opp. Løsningen er å kjøre:

rdev -R /zImage 1

PS: Hvis du bruker LILO, vennligst legg til read-only til din lilo konfigurasjonsfil (vanligvis /etc/lilo.conf)

2.11 Hvordan unngår jeg fsck'er som er forårsaket av device busy beskjeder som jeg fikk når jeg startet Linux på nytt? Jon Tombs, jon@gtex02.us.es

Hvis du ofte får beskjeder om at enheten (devicet) er opptatt når du rebooter systemet vil programmet fsck bli kjørt neste gang du startet systemet. Her er en løsning:

Legg til den følgende linjen i /etc/rc.d/init.d/halt eller /etc/rc.d/rc.0

mount -o remount,ro /mount.katalog

/mount.katalog kan være alle dine monterte filsystem unntatt /. Disse kommandoene vil bli kjørt før 'mount -a' er kjørt. Dette betyr at hvis shutdown mislykkes i å drepe alle prosesser og avmontere disker vil diskene likevel være 'rene' neste gang du booter. Jeg sparer ihverfall mye tid.

2.12 Hvordan finne de største filene på harddisken din.

Simon Amor, simon@foobar.co.uk

ls -l | sort +4n

Eller hvis du ønsker, kan du bruke denne kommandoen istedet (tar litt lengre tid):

cd /
ls -lR | sort +4n

2.13 Hvordan skrive ut sider klare for hulling. Mike Dickey, mdickey@thorplus.lib.purdue.edu


        #!/bin/sh
        # /usr/local/bin/print
        # Formattere dokumentet slik at noen kan hulle arket
        # og putte det i en trehullsmappe

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

2.14 En måte å søke gjennom massevis av filer for å finne et spesielt uttrykk.Raul Deluth Miller, rockwell@nova.umd.edu

Jeg kaller skriptet 'forall'. Bruk det slik som vist nedenfor.

forall /usr/include grep -i ioctl
forall /usr/man grep ioctl
Here er 'forall':

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

2.15 Et skript som rydder opp etter programmer som lager 'autosave' og sikkerhetskopieringfiler (backup files)Barry Tolnas, tolnas@nestor.engr.utk.edu

Her er et enkelt skript som går gjennom katalogtre og fjerner emacs sine autosave (#) og backup (~) filer, .o filer og TeX .log filer. Det komprimerer også .tex filer og README filer. Skriptet heter 'squeeze'.


#!/bin/sh
# SQUEEZE fjerner unødvendige autosave, backup, .log filer osv. + mer
# Av 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 En måte for å finne ut om hvilken prosess som sluker mest minne. Simon Amor, simon@foobar.co.uk

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

2.17 Optimalisere vi for C programmering, Paul Anderson,Tips-HOWTO Vedlikeholder

Mye av min tid bruker jeg på å programmere i C, derfor har jeg tatt meg tid til å optimalisere vi til å være C vennlig. Her er .exrc filen min:


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

Hva gjør dette? Jo, autoindent får vi til å lage et automatisk innrykk som er på samme kolonne som begynnelsen av det siste ordet. Shiftwidth setter lengden til ^T til 4 mellomrom, backspace setter vi i backspace-mode og ruler får vi til å vise linjenummer. Husk at hvis du vil komme til linje 20, bruk denne enkle kommandoen:


vi +20 minfil.c

2.18 Forenklet programmering med ctags

De fleste hackere har som regel ctags på systemet sitt, men bruker det ikke. Det kan være veldig nyttig for spesielle redigeringsfunksjoner. La oss si at man har en funksjon i en av mange kildekode filer i en katalog for et program du utvikler. Denne funksjonen kan vi kalle foo(). Du vet heller ikke hvor funksjonen ligger i kildekoden. Det er her ctags begynner å bli nyttig. Når ctags er kjørt, vil det produsere en fil ved navn tags i den nåværende katalogen. Tags er en liste over alle funksjoner, hvilke filer de ligger i og hvor de ligger i disse filene. Slik ser tags filen ut:



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)$/

La oss si hvis du vil inn å se på funksjonen AddEndResize i vim, kjør kommandoen:

vim -t AddEndResize
Denne kommandoen vil vise filen som innehaver funksjonen i vim med markøren plassert akkurat der funksjonen er.

2.19 Hvorfor henger sendmail seg i 5 minutter under oppstarten av RedHat? Paul Anderson, paul@geeky1.ebtech.net

Det er et ganske vanlig problem, så svaret kunne godt ha vært i en FAQ. Jeg vet ikke om RedHat har fikset feilen, men du kan heldigvis reparere det selv. Hvis du titter i /etc/hosts filen din ser sikkert noe som dette:

127.0.0.1               localhost       dinmaskin

Når sendmail startes, vil det søke etter domenet ditt (i dette eksemplet, dinmaskin). Ettersom sendmail ikke liker at dinmaskin har IP adresse 127.0.0.1, vil den prøve å søke igjen. Sendmail fortsetter med dette helt til det gir opp og avslutter. Å fikse på dette problemet er veldig enkelt; Åpne /etc/hosts filen din og forandre innholdet til noe lignende:

127.0.0.1               localhost
10.56.142.1             yourbox

2.20 Hvordan får jeg til color-ls i RedHat? Paul Anderson, paul@geeky1.ebtech.net

RedHat distribusjonen kommer med color-ls, men de har likevel ikke konfigurert den, og det er noe jeg ikke skjønner. For å fikse det, gjør slik:

Først: skriv eval `DIRCOLORS`

Deretter: alias ls='ls --color=auto'

Sett inn 'alias.....' linjen i /etc/bashrc filen din

2.21 Hvordan finner jeg ut om hvilke funksjoner en fil i /usr/lib inneholder Pawel Veselow, vps@unicorn.niimm.spb.su

Hva om du kompilerer noe og du har glemt et library som trenger å linkes med programmet? Alt GCC rapporterer er funksjonsnavn. Her en et kommando som finner hva du leter etter:

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

Hvor tgetnum er navnet på funksjonen du leter etter.

2.22 Jeg kompilerte et lite testprogram i C, men når jeg kjørte det, fikk jeg ikke noen utskrift!

Jeg vedder på at du har kompilert programmet som en binærfil ved navn test. Linux har allerede et program som heter test, som sjekker om en spesiell filtilstand er sann eller falsk. Det produserer aldri noe på skjermen. For å kjøre ditt eget test program, skriv: ./test istedet.


Next Previous Contents