Linux-Tips-HOWTO
Paul Anderson <
[email protected]>
prevedel Andrej Grauf <
[email protected]>
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
[email protected]
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
[email protected].
# �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,
[email protected], 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,
[email protected].
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,
[email protected]
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,
[email protected],
ki me je opozoril na to. -Vzdr�evalec)
2.7. Iskanje najve�jih imenikov. Mick Ghazey,
[email protected]
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,
[email protected]�
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
<
[email protected]>. 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,
[email protected]
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,
[email protected]
�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,
[email protected]
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,
[email protected]
#!/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,
[email protected]
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,
[email protected]
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,
[email protected]
#
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,
[email protected]
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,
[email protected]
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,
[email protected]
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.
[email protected] 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,
[email protected]
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,
[email protected]
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,
[email protected]
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,
[email protected]
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,
[email protected]
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,
[email protected]
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,
[email protected]
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,
[email protected]
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.