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.
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
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
Č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 :)
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.
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)
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
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.
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.
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).
Č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.
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
#!/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
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 "$@"
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 {} \;
ps -aux | sort +4n
-ALI-
ps -aux | sort +5n
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
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.
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
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
.
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.
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
.