Naprej Nazaj Vsebina

2. Krajši nasveti

2.1 Uporabna zvijača za Syslog. Paul Anderson, vzdrževalec spisa Tips-HOWTO

Uredite datoteko /etc/syslog.conf in vstavite naslednjo vrstico:

# Izpiši vse na tty8
                                *.*      /dev/tty8
Opozorilo: NE POZABITE UPORABITI TIPKE TAB! Syslog ne mara presledkov.

2.2 Skripta za ogled stisnjenih HOWTO-jev. Didier Juges, dj@destin.nfds.net

Začetnik začetniku. Tu je kratka skripta, ki vam bo olajšala iskanje in ogled spisov howto. Moji HOWTO-ji so v imeniku /usr/doc/faq/howto/ in so stisnjeni s programom gzip. Imena datotek so XXX-HOWTO.gz, kjer XXX predstavlja temo. V imeniku /usr/local/sbin sem ustvaril naslednjo skripto in jo poimenoval "howto":

#!/bin/sh
if [ "$1" = "" ]; then
    ls /usr/doc/faq/howto | less
else
    gunzip -c /usr/doc/faq/howto/$1-HOWTO.gz | less
fi
Kadar skripto kličete brez argumenta, ta izpiše imenik s HOWTO-ji, ki so na voljo, kadar pa vnesete prvi del imena datoteke (pred vezajem), kot argument, samodejno raztegne in izpiše spis (original pri tem ostane nespremenjen).

Za ogled spisa Serial-HOWTO vnesite:

$ howto Serial

2.3 Ali je dovolj prostora na disku??? Hans Zoebelein, zocki@gold-fish.cube.net

V tem razdelku boste našli kratko skripto, ki bo od časa do časa preverila, ali je še dovolj prostora na napravah, ki jih lahko izpišete z ukazom mount (diski, cdrom, disketa,)

Če zmanjkuje prostora, se na zaslonu vsakih X sekund izpiše sporočilo, za vsako zapolnjeno napravo pa boste dobili tudi elektronsko sporočilo.

#!/bin/sh

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

#
# Ko so datoteke tmp zapolnile moje diske, sem začel prejemati skrivnostna
# sporočila o napakah. Zato sem spisal tole skripto, ki me opozori, preden
# se diski zapolnijo.
#
# Če vam te vrstice obvarujejo strežnik pred porušitvijo,
# pošljite elektronsko sporočilo z zahvalami na zocki@goldfish.cube.net.
# Če vam tale skripta povzroča težave, mi je strašno žal, ampak
# posvaril sem vas: brez pritožb.
# Če res obvladate delo s sed, mi prosim oprostite :)
#

#
# Poženi in pozabi: V rc.local vstavite 'check_hdspace &'.
# Preveri količino nezasedenega prostora na napravah vsakih $SLEEPTIME sekund.
# Preverite lahko tudi diskete in tračne naprave. :)
# Če je nezasedenega prostora manj kot $MINFREE (kb), bo sprožila opozorilo
# in poslala eno elektronsko sporočilo za vsako triggering napravo
# na $MAIL_TO_ME.
# Če je prostora več, kot je spodnja meja, podana z omejitvijo, pri
# kateri se sprožijo opozorila, se tudi opravilo elektronskega
# pošiljanja ponovno opremi.
#

# NALOGA: Različen $MINFREE za vsako napravo.
# Če zmanjka prostora na disku, iz imenikov /*tmp varno odstrani
# staro šaro.


DEVICES='/dev/sda2 /dev/sda8 /dev/sda9'    # naprava; tu navedite diske
# sproži opozorilo
SLEEPTIME=10                               # sec; mirovanje med preverjanjem
MAIL_TO_ME='root@localhost'               # fool; kdo prejme opozorilo


# ------ pod to vrstico ni potrebno vnašati sprememb (vsaj upam :) -------

MINMB=0
ISFREE=0
MAILED=""
let MINMB=$MINFREE/1024         # ja, mi smo striktni :)

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  "OPOZORILO: $DEVICE samo $ISMB mb prosto." >&2
              #echo "sem pridejo dodatne stvari" >&2
              echo -e "\a\a\a\a"

              if [ -z  "`echo $MAILED | grep -w $DEVICE`" ] ; then
                     echo "OPOZORILO: Na $DEVICE samo $ISMB mb prosto.      (Sprožilec je nastavljen na $MINMB mb)" \
                     | mail -s "OPOZORILO: Na $DEVICE le $ISMB mb prosto!" $MAIL_TO_ME
                     MAILEDH="$MAILED $DEVICE"
                     MAILED=$MAILEDH
                     # sem vstavite še druga opravila, npr. čiščenje
                     # imenikov */tmp...
              fi
              elif [ -n  "`echo $MAILED | grep -w $DEVICE`" ] ; then
                      # Če je dovolj prostora, skripta odstrani
                      # oznako, da je bila elektronska pošta poslana.
                      # Pripravljeni smo na novo opravilo pošiljanja
                      # elektronske pošte.
                      MAILEDH="`echo $MAILED  | sed s#$DEVICE##`"
                      MAILED=$MAILEDH
              fi

      done
      sleep $SLEEPTIME

done

2.4 Pripomoček za odstranjevanje dnevnikov. Paul Anderson, vzdrževalec spisa Tips-HOWTO

Če ste takšni kot jaz, potem imate seznam s 430 naročniki, plus 100+ sporočil na dan preko UUCP. Torej, kaj naj hacker naredi s temi ogromnimi dnevniki? Namesti naj chklogs. Avtor programa chklogs je Emilio Grimaldo, grimaldo@panama.iaehv.nl, trenutno različico 1.8, ki sama po sebi daje dovolj informacij o poteku namestitve (seveda bi bilo dobro preveriti tudi informacije v imeniku doc), pa lahko najdete na ftp://ftp.iaehv.nl/pub/users/grimaldo/chklogs-1.8.tar.gz. Ko boste program namestili, dodajte vnos crontab v naslednji obliki:

# Vsak dan ob 21:00 zaženi chklogs.
00 21 * * *       /usr/local/sbin/chklogs -m
Ko ste že pri tem, ne pozabite omeniti avtorju, kako uporaben program je to :)

2.5 Priročna skripta za odstranjevanje odlagališč. Otto Hammersmith, ohammers@cu-online.com.

Ustvarite datoteko z imenom rmcores (avtor jo imenuje handle-cores) in naslednjo vsebino:

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

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

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

echo e-mailing
for name in `find $1 -name core -exec ls -l {} \; | cut -c16-24`
do
        echo $name
        cat $2 | mail $name
done
Naj jo opravilo cron zažene vsake toliko časa.

2.6 Prenašanje imenikov med datotečnimi sistemi. Alan Cox, A.Cox@swansea.ac.uk

Hiter način za premik celotne drevesne strukture datotek iz enega na drug disk

(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)
(Da bi se izognili izgubi imenikov v primeru nesreče, se premaknite iz cd /source/directory; tar itd. Hvala Jimu Dennisu, jim@starshine.org, ki me je opozoril na to. -Vzdrževalec)

2.7 Iskanje največjih imenikov. Mick Ghazey, mick@lowdown.com

Ali vas je že kdaj zanimalo, kateri imeniki so na vašem računalniku največji? To lahko ugotovite na naslednji način:

du -S | sort -n

2.8 Glasilo za Linux

Zasluge ima John Fisk, avtor glasila za Linux. To je odličen e-zine plus in še brezplačen! Kaj več bi lahko še zahtevali? Oglejte si http://www.linuxgazette.com.

MMG, izkaže se, da (1) glasilo za Linux (LG) sedaj izhaja enkrat mesečno in (2) John Fisk ni več njegov urednik, saj sedaj zanj skrbi ekipa pri SSC.

2.9 Kako priti do popravka za program GNU make 3.70 in s tem preprečiti čudno obnašanje VPATH. Ted Stern, stern@amath.washington.edu.

Ne vem, ali ima veliko ljudi ta problem, vendar ima GNU make različice 3.70 "lastnost", ki mi ni všeč. Namreč to, da se VPATH čudno obnaša, če podate absolutno pot do datoteke. Obstaja zelo dober popravek, ki te težave odpravi in ga lahko dobite od Paula D. Smitha <psmith@wellfleet.com>. Po vsaki popravljeni izdaji programa GNU make, ustrezne popravke in dokumentacijo tudi objavi v novičarski skupini "gnu.utils.lug". Ta popravek uporabim in ponovno prevedem gmake na vsakem sistemu, do katerega imam dostop.

2.10 Kako preprečiti preverjanje sistema s programom fsck ob vsakem zagonu računalnika? Dale Lutz, dal@wimsey.com

V: Kako naj preprečim programu e2fsckm, da bi ob vsakem zagonu preverjal trde diske?

O: Ko ponovno zgradite jedro, je datotečni sistem označen kot "umazan", torej bo vaš disk pregledan vsakič, ko boste zagnali računalnik. To lahko preprečite, če zaženete:

rdev -R /zImage 1
S tem popravite jedro tako, da datotečnega sistema ne bo več obravnaval kot umazanega.

Opozorilo: Če uporabljate lilo, naj bo nastavitev za Linux v nastavitveni datoteki za lilo (običajno je to /etc/lilo.conf) namenjena "samo za branje" (read-only).

2.11 Kako se izogniti preverjanju, do katerega pride zaradi "zasedenosti naprav". Jon Tombs, jon@gtex02.us.es

Če pri zaustavitvi sistema pogosto dobite sporočilo o zasedenosti naprav, kar povzroči, da se ob ponovnem zagonu izvede preverjanje datotečnega sistema, se lahko temu izognete na naslednji način:

V datoteko /etc/rc.d/init.d/halt ali /etc/rc.d/rc.0 pred izvedbo ukaza umount -a dodajte vrstico

mount -o remount,ro /mount.dir
za vsak priključen datotečni sistem, razen za /. To pomeni, da če se pri zaustavitvi zaradi določenih razlogov ne prekinejo vsi procesi in se ne izvede odklop diskov, bodo ti ob ponovnem zagonu vseeno čisti. S tem med zagonom pridobim veliko časa.

2.12 Kako poiskati največje datoteke na trdem disku. Simon Amor, simon@foobar.co.uk

ls -l | sort +4n
Tisti, ki ste zares na tesnem s prostorom, lahko uporabite tudi naslednji način. To bo trajalo nekaj časa, ampak odlično deluje:
cd /
ls -lR | sort +4n

2.13 Kako natisniti strani, da jih boste lahko kasneje preluknjali in vstavili v mapo. Mike Dickey, mdickey@thorplus.lib.purdue.edu

#!/bin/sh
# /usr/local/bin/print
# preprosta urejena oblika izpisa na list, ki ga boste tako lahko
# preluknjali in vstavili v mapo.

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

2.14 Način za iskanje določenih regularnih izrazov v drevesnih strukturah datotek, Raul Deluth Miller, rockwell@nova.umd.edu

To skripto imenujem 'forall' (za vse). Uporabite jo na naslednji način:

forall /usr/include grep -i ioctl
forall /usr/man grep ioctl
Pa še vsebina skripte forall:
#!/bin/sh
if [ 1 = `expr 2 \> $#` ]
then
      echo Usage: $0 dir cmd [optargs]
      exit 1
fi
dir=$1
shift
find $dir -type f -print | xargs "$@"

2.15 Skripta za odstranjevanje varnostnih kopij datotek in samodejno shranjenih datotek, ki jih tvorijo nekateri programi, Barry Tolnas, tolnas@nestor.engr.utk.edu

Tu je preprosta dvo-vrstična skripta, ki preišče ureditev imenika in odstrani emacs-ove samodejno shranjene (#) datoteke, varnostne kopije datotek (-), datoteke .o in datoteke .log, ki jih naredi TeX. Prav tako jo lahko uporabite za stiskanje datotek .tex in README. Na svojem sistemu sem jo imenoval 'squeeze' (stiskač).

#!/bin/sh
#SQUEEZE odstrani nepotrebne datoteke in stisne datoteke .tex in README
#Avtor 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 Kako ugotoviti, kateri proces zavzema največ pomnilnika? Simon Amor, simon@foobar.co.uk

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

2.17 Priprava programa vi na programiranje v programskem jeziku C, Paul Anderson, Vzdrževalec spisa Tips-HOWTO

V prostem času veliko programiram v programskem jeziku C, zato sem pripravil program vi, tako da je primeren za programiranje v tem jeziku. Tukaj je moj .exrc:

set autoindent
set shiftwidth=4
set backspace=2
set ruler
Čemu služijo te nastavitve? Autoindent povzroči, da vi avtomatsko poravna vsako vrstico glede na poravnavo prve vrstice, shiftwidth nastavi razdaljo ^T na 4 presledke, backspace nastavi način backspace, ruler pa povzroči, da vi izpisuje število vrstic. Da bi se pomaknili na določeno vrstico, npr. v dvajseto, uporabite:
vi +20 myfile.c

2.18 Uporaba ctags za poenostavitev programiranja

Večina hackerjev ima ctags že nameščen na svojem računalniku, vendar ga ne uporabljajo. Zelo uporaben je lahko pri urejanju določenih funkcij. Predpostavimo da imate v eni izmed mnogih izvornih datotek v imeniku programa, ki ga pišete, neko funkcijo, ki bi jo radi posodobili. To funkcijo bomo poimenovali foo(). Prav tako ne veste, kje v izvorni datoteki ta funkcija je. V tem primeru vam lahko pomaga ctags. Ko ga zaženete, program v trenutnem imeniku ustvari datoteko z imenom tags, ki vsebuje seznam vseh funkcij, podatke, v katerih datotekah so te funkcije in kje so v datotekah said. Datoteka tags izgleda nekako tako:

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)$/
Da bi uredili npr. funkcijo AddEndResize() v programu vim, zaženite:
vim -t AddEndResize
S tem boste ustrezno datoteko odprli v urejevalniku, kazalec pa bo na začetku funkcije.

2.19 Zakaj se sendmail ob zagonu v distribuciji RedHat obesi za 5 minut? Paul Anderson, paul@geeky1.ebtech.net

To je precej pogost problem, skoraj že FAQ. Ne vem, če je RedHat odpravil ta problem v svoji distribuciji, lahko pa ga odpravite sami. Poglejte v datoteko /etc/hosts in ugotovili boste, da izgleda nekako tako:

127.0.0.1               localhost       vasaskatla
Ko se sendmail zažene, poišče ime gostitelja (v tem primeru vasaskatla). Potem ugotovi, da je IP za vasaskatla 127.0.0.1. Sendmail tega ne mara, zato prične z novim iskanjem. To nadaljuje tako dolgo, dokler končno ne obupa in konča. Odprava tega problema je zelo enostavna. Uredite datoteko /etc/hosts in jo preoblikujte nekako tako:
127.0.0.1               localhost
10.56.142.1             vasaskatla

2.20 Kako lahko preuredim distribucijo RedHat tako, da bom lahko uporabljal ukaz ls z barvami? Paul Anderson, paul@geekey1.ebtech.net

Distribucija RedHat vsebuje barvni ls, zakaj pa ne omogočijo uporabo barv kot privzeto nastavitev, pa presega moje znanje. Problem lahko rešite tako:

Najprej vnesite eval 'DIRCOLORS'.

Nato alias ls='ls --color=auto'.

In vstavite 'alias.....' v datoteko /etc/bashrc.

2.21 vps@unicorn.miimm.spb.su Kako lahko ugotovim, katera knjižnica v /usr/lib vsebuje določeno funkcijo? Pawel Veselow,

Kaj storiti v primeru, če prevajate nek program in pozabite vključiti potrebno knjižnico? Vsa poročila gcc so funkcijska imena.Tu je preprost ukaz, ki bo našel, kar iščete:

for i in *; do echo $i:;nm $i|grep tgetnum 2>/dev/null;done
Kjer je tgetnum ime funkcije, ki jo iščete.

2.22 Prevedel sem majhen testni program v C-ju, ko pa ga poženem, ne dobim nobenega rezultata!

Verjetno ste program prevedli v binarno datoteko z imenom test, mar ne? Linux vsebuje program z imenom test, ki preveri, ali je določen pogoj izpolnjen in rezultata nikoli ne izpiše na zaslon. Namesto vnosa test uporabite ./test.


Naprej Nazaj Vsebina