Linux-Tips-HOWTO Paul Anderson <paul@geeky1.ebtech.net> prevedel Andrej Grauf <andrej.grauf@club.win-ini.si> v3.6, junij 1998, prevod 22. december 1998 Ta HOWTO vsebuje namige in nasvete, ki jih boste te¾ko na¹li drugje, naredijo pa Linux prijaznej¹i. ______________________________________________________________________ Kazalo 1. Uvod 2. Kraj¹i nasveti 2.1 Uporabna zvijaèa za Syslog 2.2 Skripta za ogled stisnjenih HOWTO-jev 2.3 Ali je dovolj prostora na disku??? 2.4 Pripomoèek za odstranjevanje dnevnikov 2.5 Priroèna skripta za odstranjevanje odlagali¹è 2.6 Prena¹anje imenikov med datoteènimi sistemi 2.7 Iskanje najveèjih imenikov 2.8 Glasilo za Linux 2.9 Kako priti do popravka za program GNU make 3.70 in s tem prepreèiti èudno obna¹anje VPATH 2.10 Kako prepreèiti preverjanje sistema s programom fsck ob vsakem zagonu raèunalnika? 2.11 Kako se izogniti preverjanju, do katerega pride zaradi "zasedenosti naprav" 2.12 Kako poiskati najveèje datoteke na trdem disku 2.13 Kako natisniti strani, da jih boste lahko kasneje preluknjali in vstavili v mapo 2.14 Naèin za iskanje doloèenih regularnih izrazov v drevesnih strukturah datotek 2.15 Skripta za odstranjevanje varnostnih kopij datotek in samodejno shranjenih datotek, ki jih tvorijo nekateri programi 2.16 Kako ugotoviti, kateri proces zavzema najveè pomnilnika? 2.17 Priprava programa vi na programiranje v programskem jeziku C 2.18 Uporaba ctags za poenostavitev programiranja 2.19 Zakaj se sendmail ob zagonu v distribuciji RedHat obesi za 5 minut? 2.20 Kako lahko preuredim distribucijo RedHat tako, da bom lahko uporabljal ukaz ls z barvami? 2.21 Kako lahko ugotovim, katera knji¾nica v /usr/lib vsebuje doloèeno funkcijo? 2.22 Prevedel sem majhen testni program v C-ju, ko pa ga po¾enem, ne dobim nobenega rezultata! 3. Podrobni nasveti 3.1 Deljenje izmenjalnih particij med Linuxom in Windows 3.2 Obnavljanje zbrisanih datotek 3.3 Kako uporabljati nespremenljive oznake 3.4 Nasveti, kam dati nove stvari 3.5 Kako spremeniti vse velike èrke v imenih datotek v majhne èrke 3.6 Kako nadgraditi sendmail 3.7 Nekaj nasvetov za nove sistemske administratorje 3.8 Kako nastaviti xdm-ovega izbiralca za izbiro gostitelja ______________________________________________________________________ 1. Uvod Dobrodo¹li v Linux Tips-HOWTO, seznamu zanimivih zvijaè in optimizacij, ki naredijo Linux bolj zabaven. Spis vsebuje samo nasvete iz moje glave in nasvete iz prej¹njega spisa Tips-HOWTO (Zakaj bi izpu¹èali spodobne nasvete?). Zato bom zelo vesel va¹ih najljub¹ih namigov in nasvetov, ki jih bom tako lahko uvrstil v naslednji Tips- HOWTO. Paul Anderson, vzdr¾evalec Linux TIPS HOWTO panderson@ebtech.net 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@des tin.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. Tips-HOWTO Pripomoèek za odstranjevanje dnevnikov. Paul Ander son, vzdr¾evalec spisa È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.washing ton.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è obrav naval 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 nas tavi 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. Send mail 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. 3. Podrobni nasveti 3.1. Deljenje izmenjalnih particij med Linuxom in Windows. Tony Acero, ace3@midway.uchicago.edu 1. Sformatirajte particijo kot particijo za DOS in na njej ustvarite izmenjalno datoteko za Windows, vendar operacijskega sistema Windows ¹e ne za¾enite (naj izmenjalna datoteka zaenkrat ostane ¹e prazna, da jo je mo¾no dobro stisniti). 2. Ponovno za¾enite raèunalnik v Linuxu in shranite particijo v datoteko. Npr. èe je bila to particija /dev/hda8: dd if=/dev/hda8 of=/etc/dosswap 3. Stisnite izmenjalno datoteko za DOS; ker je navidezno prazna, jo je mogoèe zelo dobro stisniti: gzip -9 /etc/dosswap 4. Da bi pripravili in namestili izmenjalno datoteko v Linuxu, dodajte v datoteko /etc/rc naslednje: XXXXX je ¹tevilo blokov v navidezni particiji mkswap /dev/hda8 XXXXX swapon -av Preprièajte se, da ste v datoteko /etc/fstab dodali vnos za izmenjalno particijo. 5. V primeru da va¹ osnovni/zagonski paket podpira /etc/brc ali /sbin/brc, v datoteko /etc/brc dodajte naslednje (drugaèe to opravite roèno, ko ¾elite raèunalnik zagnati v DOSu|OS/2 in posku¹ate izmenjalno particijo pretvoriti nazaj v razlièico za dos/windows): swapoff -av zcat /etc/dosswap.gz | dd of=/dev/hda8 bs=1k count=100 # Ne pozabite, da se na ta naèin zapi¹e nazaj na particijo samo prvih 100 blokov. Empirièno sem ugotovil, da to zado¹èa. >>Kak¹ne so prednosti in pomanjkljivosti tak¹nega poèetja? Prednost: prihranite precej¹no kolièino prostora na disku. Pomanjkljivost: Èe 5. korak ni avtomatiziran, boste morali to opraviti roèno, kar bo upoèasnilo proces ponovnega zagona za nanosekundo :-) 3.2. Obnavljanje zbrisanih datotek. Michael Hamilton, michael@actrix.gen.nz Tu je trik, ki sem ga morali uporabiti ¾e nekajkrat. Obnovitev zbrisane tekstovne datoteke obupanega uporabnika. Èe po nesreèi odstranite tekstovno datoteko, npr. neko elektronsko sporoèilo ali rezultate noène programerske seanse, ni nujno, da je vse izgubljeno. Èe je datoteka bila na disku in na njem ostala veè kot 30 sekund, je njena vsebina mogoèe ¹e vedno na particiji diska. Vsebino datoteke na particiji diska lahko poi¹èete s pomoèjo ukaza grep. Na primer, pred kratkim sem zbrisal del elektronskega sporoèila. Takoj sem prekinil vse operacije, ki bi particijo lahko spremenile: v tem primeru sem se samo izognil shranjevanju datotek, prevajanju, itd. V drugih primerih sem sistem moral celo privesti na naèin enega samega uporabnika in odklopiti datoteèni sistem. Na particiji diska sem potem uporabil ukaz egrep: v mojem primeru je bilo elektronsko sporoèilo v imeniku /usr/local/hime/michael. Iz izhoda ukaza df sem lahko ugotovil, da je ta na particiji /dev/hdb5: sputnik3:~ % df Filesystem 1024-blocks Used Available Capacity Mounted on /dev/hda3 18621 9759 7901 55% / /dev/hdb3 308852 258443 34458 88% /usr /dev/hdb5 466896 407062 35720 92% /usr/local sputnik3:~ % su Password: [root@sputnik3 michael]# egrep -50 'ftp.+COL' /dev/hdb5 > /tmp/x Kadar delam s particijami diska, sem zelo previden. Torej sem si vzel odmor in se pred potrditvijo preprièal, da res razumem pomen ukaza. V tem primeru je elektronsko sporoèilo vsebovalo besedo 'ftp', ki ji je sledil tekst in na koncu ¹e beseda 'COL'. Sporoèilo je bilo dolgo okrog 20 vrstic, torej sem uporabil 50, da bi dobil vse vrstice okrog izraza. Vèasih sem uporabljal tudi 3000 in s tem zagotovil, da sem dobil nazaj vse vrstice izvorne kode. Rezultat sem iz ukaza egrep usmeril na drugo particijo diska in s tem prepreèil, da bi se sporoèilo, ki ga i¹èem, prepisalo. Izhod sem preiskal z uporabo ukaza strings: strings /tmp/x | less in seveda na¹el elektronsko sporoèilo. Ta metoda ni zanesljiva. Mogoèe je bilo nekaj, ali pa celoten prostor na disku, ponovno uporabljeno. Ta zvijaèa je verjetno uporabna samo na sistemih z enim uporabnikom. Na sistemih z veè uporabniki z visoko dejavnostjo diskov se je mogoèe prostor na disku, ki ste ga sprostili, ponovno porabil. Prav tako veèina izmed nas ne more kar tako prepreèiti uporabe raèunalnika ostalim uporabnikom, kadar ¾elimo obnoviti neko datoteko. Na domaèem sistemu me je ta zvijaèa re¹ila v pribli¾no treh primerih v zadnjih nekaj letih po navadi takrat, ko sem po pomoti zavrgel rezultate celodnevnega dela: èe moje delo pre¾ivi do neke toèke, kjer imam obèutek, da sem naredil pomemben napredek, to delo shranim na disketo in te zvijaèe sploh ne uporabljam pogosto. 3.3. Kako uporabljati nespremenljive oznake. Jim Dennis, jadestar@rahul.net Uporaba nespremenljivih oznak Takoj po tem, ko boste namestili in nastavili va¹ sistem, preglejte datoteke /bin/sbin, /usr/bin, /usr/sbin, /usr/lib (in ¹e nekatere druge obièajne osumljence) in brez predsodkov uporabite ukaz chattr +i. To vrstico dodajte tudi v datoteke jedra v korenskem imeniku. Naredite nov imenik 'mkdir /etc/.dist/' in prekopirajte vsebino imenika /etc (to naredim v dveh korakih z uporabo /tmp/etcdist.tar in se s tem izognem podvajanju) v ta novi imenik. (Lahko bi tudi ustvarili imenik /etc/.dist.tar.gz) -- in ga oznaèili kot nespremenljivega. Vzrok za vse to delo je zmanj¹ati ¹kodo, ki bi jo lahko naredili, kadar boste prijavljeni kot korenski uporabnik. Na ta naèin ne boste mogli prepisati datotek z napaènim preusmeritvenim operatorjem in presledkom v ukazu 'rm -fr' (¹e vedno lahko naredite veliko ¹kodo sistema ne boste mogli po¹kodovati z nepravilno postavljenim va¹im podatkom ampak vsaj va¹e knji¾nice in binarne datoteke bodo bolj za¹èitene). S tem boste prav tako onemogoèili ali vsaj ote¾ili uporabo ¹tevilnih varnostnih in preklicnih storitev (ker veèina temelji na prepisovanju datotek med izvajanjem programa SUID, ki *ne nudi poljubnih ukazov lupine*). Edina neprijetnost se bo pojavila pri grajenju in izvajanju ukaza "make install" na razliènih vrstah sistemskih binarnih datotek. Po drugi strani pa boste s tem prepreèili, da bi 'make install' prepisal datoteke. Kadar pozabite prebrati Makefile in chattr -i, datoteke, ki bodo prepisane (in imenike, katerim ¾elite datoteke dodati) -- in se ukaz make ne izvede, samo uporabite ukaz chattr in ga ponovno za¾enite. Izkoristite lahko tudi prilo¾nost in prestavite stare binarne datoteke, knji¾nice oz. kar koli je ¾e v imeniku .old/, jih preimenujete, stisnete ali poènete z njimi kar paè ¾elite. 3.4. Nasveti, kam dati nove stvari. Jim Dennis, jadestar@rahul.net Vse nove stvari se zaènejo pod /usr/local! Ali v /usr/local/'hostname'. Èe je va¹a distribucija ena tistih, ki pusti imenik /usr/local prazen, tvorite svoje imenike /usr/local/src, /usr/local/bin, itd. in jih uporabljajte. V primeru da va¹a distribucija v drevesno strukturo imenika /usr/local shrani stvari, boste verjetno uporabili ukaz 'mkdir /usr/local/'hostname'' in mu podelili 'wheel' group +w (prav tako jih naredim SUID in SGID in s tem zagotovim, da lahko vsak èlan skupine wheel upravlja samo s svojimi datotekami in da vse ustvarjene datoteke pripadajo wheel skupini). Disciplinirajte se in nove pakete *Vedno! Vedno! Vedno!* shranite v /usr/local/src/.from/$KJERKOLI_SEM_JIH_DOBIL/ (za .tar oz. katere koli datoteke) in jih zgradite v imeniku /usr/local/src (ali /$HOSTNAME/src). Preprièajte se, da se namesti pod lokalno ureditev. Èe je paket *nujno potrebno* namestiti v /bin, /usr/bin ali kjer koli drugje podajte symlink od lokalne ureditve do vsakega posameznega elementa. Vzrok za to -- èeprav je veè dela -- je pomoè pri osamitvi tistih stvari, za katere je potrebno narediti varnostne kopije, jih obnoviti ali ponovno namestiti pri opravilu popolne ponovne namestitve z distribucijskega medija (obièajno s CD-ja). Z uporabo imenika /usr/local/.from vzdr¾ujete tudi dnevnik z informacijami, kje ste izvorno kodo dobili -- kar vam je v pomoè pri iskanju novih razlièic -- je pa nujno potreben, kadar nadzorujete sezname objav glede varnosti. Eden mojih domaèih sistemov (s katerega klièem) je bil sestavljen preden sem zaèel uporabljati tak¹en sistem. ©e vedno ne *poznam* vsega, po èemer se razlikuje od po namestitvi pripravljenega sistema. To se mi dogaja kljub temu, da zelo malo delam s konfiguracijo domaèega sistema in da sem *edina* oseba, ki ga uporablja. V primerjavi s tem so vsi sistemi, ki sem jih nastavil v slu¾bi (ko so mi zaupali vlogo sistemskega administratorja), nastavljeni na ta naèin -- in èeprav so jih upravljali razlièni ljudje in so bili velikokrat nadgrajeni, pa vendar dobro vem kateri elementi so bili dodani *naknadno* po zaèetni namestitvi in nastavitvi. 3.5. Kako spremeniti vse velike èrke v imenih datotek v majhne èrke. Justin Dossey, dossey@ou.edu V razdelku 2c nasvetov 12. izdaje sem opazil kar nekaj prezahtevnih ali nepotrebnih postopkov. Ker jih je veè, vam jih po¹iljam: #!/bin/sh # lowerit # spremeni vse velike èrke v imenih datotek v trenutnem imeniku v majhne èrke # uporabna samo za navadne datoteke--ne spreminja imen imenikov # preden prepi¹e obstojeèo datoteko, boste morali to potrditi for x in `ls` do if [ ! -f $x ]; then continue fi lc=`echo $x | tr '[A-Z]' '[a-z]'` if [ $lc != $x ]; then mv -i $x $lc fi done Uh, to je pa dolga skripta. Za izvajanje tega opravila jaz ne bi pisal skripte. Namesto tega bi v ukazni vrstici uporabil ukaz: for i in * ; do [ -f $i ] && mv -i $i `echo $i | tr '[A-Z]' '[a-z]'`; done; Avtor pravi, da je skripto zapisal v tej obliki zaradi veèje razumljivosti (glej spodaj). V naslednjem primeru, o dodajanju in odstranjevanju uporabnikov, Geoff dela dokaj dobro, razen v zadnjem koraku. Ponoven zagon? Resno upam, da avtor raèunalnika ne zaganja ponovno, vedno kadar odstrani uporabnika. Opraviti morate samo prva dva koraka. Kak¹ne procese pa naj bi uporabnik sploh uporabljal? Mogoèe irc bot? Postopek ubijete z enostavnim ukazom kill -9 `ps -aux |grep ^<username> |tr -s " " |cut -d " " -f2` Primer; uporabni¹ko ime je foo kill -9 `ps -aux |grep ^foo |tr -s " " |cut -d " " -f2` S tem je delo opravljeno; gremo naprej na pozabljeno korensko geslo. Re¹itev, ki je navedena v glasilu, je najbolj univerzalna, ne pa tudi najenostavnej¹a. Z LILO in loadlin lahko vsak poda zagonski parameter "single" in raèunalnik se neposredno za¾ene v privzeti lupini brez poziva za prijavo in geslo. V tem primeru lahko pred vnosom "init 3" za zagon veè-uporabni¹kega naèina, vsakdo spremeni ali zbri¹e katero koli geslo. ©tevilo ponovnih zagonov v tem primeru: 1, ¹tevilo ponovnih zagonov v drugih primerih: 2 Justin Dossey 3.6. Kako nadgraditi sendmail. Paul Anderson, paul@geekyl.ebtech.net Zaèeli bomo z neobdelano, èisto izvorno kodo. Najprej si priskrbite izvorno kodo Sendmaila. Zajel sem verzijo 8.9.0, kar pa je zelo zahtevno opravilo, kot boste ugotovili. Kodo sem dobil na <ftp://ftp.sendmail.org/pub/sendmail/sendmail.8.9.0.tar.gz>. Dolga je okrog 1 MB in glede na to, da uporabljam 8.7.6, mislim, da je vredna truda. Èe bo to delovalo, boste nedvomno izvedeli, saj sicer ne bom mogel izdati nove HOWTO verzije :) Ko ste kodo prenesli, jo razpakirajte. V trenutnem imeniku bom ustvaril imenik z imenom sendmail-8.9.0. Premaknite se v ta imenik ter preberite datoteki README in RELESE_NOTES (preseneèeni boste nad opravljenimi nadgraditvami). Premaknite se sedaj v src. V tem imeniku boste opravili veèino dela. Kratko sporoèilo: Sendmail je kratek, zelo uporaben, dobro napisan program. Binarna datoteka se na raèunalniku 5x86 133 z 32 MB RAM-a prevede v manj kot 5 minutah! Celotno prevajanje in namestitev (brez nastavitev) traja manj kot 15 minut! Obièajno na mojem sistemu ne zaganjam BIND, zaradi tega sem na¹el naslednje vrstice: # ifndef NAMED_BIND # define NAMED_BIND 1 /* uporabi Berkeleyski internetni stre¾nik */ # endif in spremenil 1 v 0: # ifndef NAMED_BIND # define NAMED_BIND 0 /* uporabi Berkeleyski internetni stre¾nik */ # endif Pri distribuciji Debian 1.3.1 se db.h glede na privzeto vrednost namesti v /usr/include/db, namesto v /usr/include, kjer jo sendmail posku¹a najti. Pojdite v imenike src, mailstats, makemap, praliases in smrsh in tam izvedite naslednji ukaz: ./Build -I/usr/include/db Ko boste s tem gotovi, cd .. in vnesite make install. Tako! Program sendmail razlièice 8.9.0 naj bi bil sedaj name¹èen! V tem primeru sem predpostavil, da ste prej ¾e opravili originalno nastavitev. Da bi na mojem sistemu vse potekalo gladko, ker gostim brezplaène po¹tne sez name za ljudi, ki uporabljajo majordomo, sem moral na zaèetek datoteke /etc/sendmail.cf dodati: O DontBlameSendmail=forwardfileinunsafedirpath, forwardfileinunsafedirpathsafe Dandanes je sendmail zelo obèutljiv na dovoljenja imenikov in datotek ter bo javljal napake o imenikih in datotekah v privzetih imenih ali datotekah .forward, ki jih lahko spreminjajo skupine ali so prosto dostopne. Ker ni dobro odpraviti te obèutljivosti, uporabljam v kon zoli samo naèin enega uporabnika in se mi je zdelo, da je v redu tudi, èe obstaja ta majhna varnostna luknja. YMMV 3.7. Nekaj nasvetov za nove sistemske administratorje, Jim Dennis, jadestar@rahul.net Ustvarite in vzdr¾ujte /README.'hostname' in/ali /etc/README.'hostname' [oz. èe je le mo¾no /usr/local/etc/README.'hostname' - Vzdr¾evalec.] Od prvega dne upravljanja dalje sistem zapisuje stvari v omre¾ni dnevnik. Mogoèe boste v root-ov /bash_logout vnesli vrstico "vi /README.$(ime gostitelja)". To lahko pravite tudi tako, da napi¹ete skripto za su ali sudo, ki poène nekaj podobnega: function exit \ { unset exit; exit; \ cat ~/tmp/session.$(date +%y%m%d) \ >> /README.$(hostname) && \ vi /README.$(hostname) } script -a ~/tmp/session.$(date +%y%m%d) /bin/su.org - (Dnevnik ustvarite s pomoèjo ukaza typescript. Prav tako ustvarite funkcijo, ki bo avtomatizirala dopolnjevala in posodabljala dnevnik.) Priznati moram, da te avtomatizacije nisem vgradil do sedaj sem se zana¹al na samodisciplino. Kakor koli ¾e, s to zamislijo sem se igral (naredil sem celo prototip skripte in funkcije lupine, kot lahko vidite.) Nekaj, kar me pri tem moti, je ukaz 'script' sam. Mislim, da bom moral zajeti izvore in dodati nekaj parametrov ukazne vrstice (za prekinitev/zaustavitev shranjevanja skript iz ukazne vrstice), preden bom zaèel uporabljati ta naèin. Moj zadnji nasvet (v tem trenutku): Korenska pot mora biti sestavljena iz 'PATH= /bin' To je to. Niè drugega v korenski poti. Za vse, kar poène korenski uporabnik, poskrbi symlink iz /bin, privzeto ime ali funkcija lupine, oziroma je skripta ali binarna verzija v /bin ali pa je izpisana z eksplicitno potjo. S tem se vsi, ki se prijavljajo kot korenski uporabnik, zavedajo (vèasih na zelo boleè naèin), kako zaupajo binarnim verzijam. Pameten sistemski administrator z veè uporabniki bo redno pregledoval datoteke /bin in /.*history, da bi s tem na¹el vzorce in zanène napake. Zares dobro motivirani sistemski administratorji bodo poiskali opravila, ki jih je mogoèe avtomatizirati, mesta, kjer je mo¾no vnesti logièna preverjanja in opravila (zagon urejevalnikov, MTA in druge obse¾ne interaktivne programe, z izpopolnjenimi lastnostmi skript, ki jih je mogoèe vna¹ati v prosojne ali podatkovne datoteke kot je neslavni vi ./.exrc in emacs ./.emacs in celo bolj zahrbten $EXINIT in vgrajeni makri v glavi/nogi), ki jih je potrebno opravljati brez korenskih privilegijev. Seveda je tak¹ne vrste ukazov mogoèe zaganjati s: cp $data $some_users_home/tmp su -c $origcommand $whatever_switches cp $some_users_home/tmp $data (kjer so specifikacije odvisne od ukaza). Veèina teh zadnjih varnostnih ukrepov prenese na domaèo delovno postajo ali postajo z enim samim uporabnikom so pa zelo dober naèin za upravljanje veèjega ¹tevila uporabnikov ¹e posebej javnosti izpostavljeni sistemi (kot tisti pri netcom-u.) 3.8. Kako nastaviti xdm-ovega izbiralca za izbiro gostitelja. Arrigo Triulzi, a.triulzi@ic.ac.uk 1. Uredite datoteko, ki za¾ene xdm (najverjetneje je to datoteka /etc/rc/rc.6 ali /etc/rc.local), tako da bo v razdelku za zagon xdm vsebovala naslednje vrstice: /usr/bin/X11/xdm exec /usr/bin/X11/X -indirect hostname 2. Uredite datoteko /usr/lib/X11/xdm/Xservers in odstranite znak za komentar v vrstici, ki za¾ene stre¾nik na lokalnem raèunalniku (npr. z zaèetnim nizom 0:) 3. Ponovno za¾enite raèunalnik in delo je opravljeno. To sem dodal zato, ker sem ga hotel nastaviti tudi za svojo podmre¾o, pa sem za odpravo vseh problemov potreboval skoraj en teden. Opozorilo: s starimi distribucijami SLS (1.1.1) lahko po vrstici za klic xdm izpustite -nodaemon: to NE deluje pri kasnej¹ih izdajah.