Naprej Nazaj Kazalo

2. Krajši nasveti

2.1 Uporabna zvijača za Syslog

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 Skript za ogled stisnjenih HOWTO

Začetnik začetniku. Tu je kratek skript, ki vam bo olajšal iskanje in ogledovanje spisov howto. Moji HOWTO so v imeniku /usr/doc/faq/howto/ in so stisnjeni s programom gzip. Imena datotek so XXX-HOWTO.gz, pri čemer XXX predstavlja temo. V imeniku /usr/local/sbin sem ustvaril naslednji skript in ga 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 skript kličete brez argumenta, ta izpiše imenik s HOWTO, ki so na voljo, kadar pa vnesete prvi del imena datoteke (pred vezajem) kot argument, samodejno raztegne in izpiše spis (izvirnik pri tem ostane nespremenjen).

Če si želite ogledati spis Serial-HOWTO, vnesite:

$ howto Serial

2.3 Ali je dovolj prostora na disku?

V tem razdelku boste našli kratek skript, ki bo tu in tam preveril, ali je še dovolj prostora na napravah, ki jih lahko izpišete z ukazom mount (diski, CD-ROM, disketa,)

Če zmanjkuje prostora, se na zaslonu vsakih X sekund izpiše sporočilo, o vsaki zapolnjeni napravi 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 mi datoteke tmp zapolnile diske, sem začel prejemati skrivnostna
# sporočila o napakah. Zato sem spisal tale skript, ki me opozori, preden
# se diski zapolnijo.
#
# Če te vrstice obvarujejo vaš strežnik, preden se zruši,
# pošljite elektronsko sporočilo z zahvalami zocki@goldfish.cube.net.
# Obžalujem, če vam tale skript povzroča težave, ampak
# saj sem vas posvaril: brez pritožb, prosim.
# Č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 enote. :)
# Če je nezasedenega prostora manj kakor $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 znova 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 treba vnašati sprememb (vsaj upam :) -------

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

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, skript odstrani
                      # oznako, da je bila elektronska pošta poslana.
                      # Pripravljeni smo za 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

Če ste taki kakor jaz, imate seznam 430 naročnikov plus 100+ sporočil na dan prek UUCP. Torej, kaj naj heker naredi s temi gromozanskimi 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 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čen skript za odstranjevanje odlagališč

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 iz enega datotečnega sistema v drugega

Hitri premik celotne drevesne strukture datotek z enega diska na drugega

(cd /source/directory && tar cf - . ) | (cd /dest/directory && tar xvfp -)
(Da bi se izognili izgubi imenikov, če bi se zgodila nesreča, 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

Ali vas je že kdaj zanimalo, kateri imeniki so v 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 bi si še lahko želeli? Oglejte si http://www.linuxgazette.com.

MMG, izkaže se, da (1) glasilo za Linux (LG) zdaj izhaja enkrat na mesec in (2) John Fisk ni več njegov urednik. Zdaj skrbi zanj ekipa pri SSC.

2.9 Kako dobiti popravek za program GNU make 3.70 in s tem preprečiti čudno vedenje VPATH

Ne vem, ali ima veliko ljudi podobne težave, vendar ima GNU make različice 3.70 "lastnost", ki mi ni všeč. Namreč to, da se VPATH čudno vede, če podaste absolutno pot do datoteke. Na voljo je zelo dober popravek, ki te težave odpravi. Dobite ga 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 spet prevedem gmake v vsakem sistemu, do katerega imam dostop.

2.10 Kako preprečiti preverjanje sistema s programom fsck ob vsakem zagonu računalnika?

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

O: Ko znova zgradite jedro, je datotečni sistem označen kot "umazan", torej bo vaš disk pregledan vsakič, ko boste zagnali računalnik. To 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 (navadno je to /etc/lilo.conf) namenjena "samo za branje" (read-only).

2.11 Kako se izogniti preverjanju zaradi "zasedenosti naprav"

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

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 vnovičnem zagonu vseeno čisti. S tem med zagonom pridobim veliko časa.

2.12 Kako poiskati največje datoteke na disku

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

2.13 Kako natisniti strani, da jih boste lahko pozneje preluknjali in vstavili v mapo

#!/bin/sh
# /usr/local/bin/print
# preprosta urejena oblika izpisa na list, da ga boste 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

Ta skript imenujem 'forall' (za vse). Uporabite ga na naslednji način:

forall /usr/include grep -i ioctl
forall /usr/man grep ioctl
Pa še vsebina skripta 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 Skripti za odstranjevanje varnostnih kopij datotek in samodejno shranjenih datotek, ki jih tvorijo nekateri programi

Tu je preprost dvovrstični skript, ki preišče ureditev imenika in odstrani emacsove samodejno shranjene (#) datoteke, varnostne kopije datotek (-), datoteke .o in datoteke .log, ki jih naredi TeX. Prav tako ga lahko uporabite za stiskanje datotek .tex in README. V svojem sistemu sem ga 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 zasede največ pomnilnika?

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

2.17 Priprava programa vi na programiranje v programskem jeziku C

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

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

2.18 Uporaba ctags za poenostavitev programiranja

Večina hekerjev ima ctags že nameščen v svoj računalnik, vendar ga ne uporabljajo. Zelo uporaben je lahko pri urejanju določenih funkcij. Predpostavimo, da imate v eni izmed številnih izvirnih 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 izvirni datoteki je ta funkcija. V tem primeru vam lahko pomaga ctags. Ko ga zaženete, program v trenutnem imeniku ustvari datoteko z imenom tags, ki obsega seznam vseh funkcij, podatke, v katerih datotekah so te funkcije in kje so v datotekah said. Datoteka tags je videti 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?

To je precej pogosta težava, skoraj že FAQ. Ne vem, ali jo je RedHat odpravil v svoji distribuciji, lahko pa jo odpravite sami. Poglejte v datoteko /etc/hosts in ugotovili boste, da je videti 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 začne novo iskanje. To nadaljuje tako dolgo, dokler končno ne obupa in konča. To težavo je mogoče zelo enostavno odpraviti. 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?

Distribucija RedHat ima barvni ls, ne vem pa, zakaj ne omogočijo uporabe barv kot privzete nastavitve. Težavo rešite tako:

Najprej vnesite eval 'DIRCOLORS'.

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

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

2.21 Kako lahko ugotovim, v kateri knjižnici v /usr/lib je določena funkcija?

Kaj storiti, če prevajate neki 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 preizkusni programček v jeziku C, ko pa ga poženem, ne dobim nobenega rezultata!

Verjetno ste program prevedli v binarno datoteko z imenom test, mar ne? Linux ima 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 Kazalo