A Unix többfelhasználós, többprocesszes op. rendszer, esetenként egyedi, többnyire (i)x-re végzõdõ névvel. (SCO-Unix, Sinix, AIX, Xenix, Unixware, Linux, Solaris). Processz = egyedi azonosítóval(process-id=pid), "környezettel" (user, munkadirectory, környezetváltozók) rendelkezõ (rész)program. Program = parancsfájl(shell script) vagy bináris program. A ps parancs.
Daemon-ok (=háttérben futó kiszolgáló programok, pl. httpd) feladatai, foreground, background (parancs & --- pl. "sleep 5 &") parancs végrehajtás.
Editorok: vi(segédanyagok), emacs, joe, wpe.
Shell = parancs értelmezõ program. A Unix parancsok formája (parancsnév opciók fájlok).
A shell (sh, ksh, csh(kakukktojás), bash) feladatai:
Pl: | cd $HOME | # Ugyanaz, mint "cd" vagy "cd ~" : hazatérés |
cd /win95/"Program Files" | # Helyköz van a fájlnévben | |
cp /etc/passwd . | # A /etc/passwd fájlt a munkakönyvtárba (.) másolja | |
niscat passwd >passwd | # Az elõzõnek felel meg valerie-n | |
help | less | # Linux infó a bash "belsõ" parancsairól | |
help echo | less | # Linux infó az "echo" belsõ parancsról | |
man echo | # Infó a "/bin/echo" programról | |
man passwd | # Infó a jelszó változtatásról | |
man -S 5 passwd | # Infó a /etc/passwd fájlról (SEE ALSO passwd(5) alapján) | |
ls /etc/inittab /ETC/XXX 1>~/van 2>~/nincs | # Standard output és standard error szétválasztása | |
alias dir='/bin/ls -l' | # DOS parancs szimulálása | |
dir `cat $HOME/fontos.file-ok` *.c >$HOME/lista | # Dir. lista fájlba | |
PATH=$PATH:~/bin | # A keresési útvonal bõvítése saját programkönyvtárral | |
PS1="\w> " | # DOS-szerû prompt-beállítás (csak bash) | |
tail +25 textfile | head -24 | cut -c1-80 | # A 2., képernyõnyi rész a "textfile"-ból | |
fgrep procedure *.pas | fgrep proc2 | more | # A "procedure...proc2" sor(ok) keresése a *.pas fájlokban | |
tar -cvf /tmp/ARCHIV $HOME . | # $HOME és a munkadir. archíválása a /tmp/ARCHIV fájlba | |
tar -tvf /tmp/ARCHIV | tee /tmp/ARCLIS | # Az archívum listázása a /tmp/ARCLIS fájlba és képernyõre | |
cd ~/public; zip -9 -r ~/haza * | # A valerie publikus directorynk csomagolása a "~/haza.zip" fájlba. | |
find / -name "*.dvi" -print 2>/dev/null | more | # A gépen hozzáférhetõ ".dvi" fájlok megkeresése | |
cut -d: -f5 /etc/passwd | cut -d\  -f2 | \ sort | uniq -c | sort | # Az adott gép user-einek keresztnevei, gyakorisági sorrendben | |
echo * | xargs grep -i "alma" | # Akármekkora directory fájljaiban kis/nagy "almát" keres. | |
rm *.c /* mindet töröltem */ | # Szanálás "gondos c-programozó" módra |
Egy parancs több sorban (sor végén "\", folytatósor, elsõdleges, másodlagos prompt), több parancs egy sorban (köztük ";"). Az xargs parancs.
Sorvége jelzés MS-DOS (CR LF), Unix (LF) és Macintosh (CR) op. rendszerekben.
Hexadecimális(CR=^M=0x0d LF=^J=0x0a), oktális(CR=015 LF=012) jelölésmód. Az echo, sed és tr parancsok.
Pl: | echo -e "\007" | # sípol egyet (-e csak Linuxban) |
tr -d "\012" <textfile | # a textfile sorait egyberakja | |
tr -d "\015" <dosfile >unixfile | # DOS textfájlt Unix textfájllá konvertál | |
sed "s/`echo -en '\015'`//" dosfile >unixfile | # DOS textfájlt Unix textfájllá konvertál | |
sed "s/$/`echo -en '\015'`/" unixfile >dosfile | # Unix textfájlt DOS textfájllá konvertál |
Egyszerû parancsfájlok. A bc parancs, mint szûrõ.
Pl: | echo -e "ibase=16\012${1}\012quit" | bc | # a paraméterként adott hexadec. számot dec.-ra konvertálja |
echo "ibase=16 ${1} quit" | bc | # ugyanaz, olvashatóbban (más parancs is írható így, sokszor egy hiányzó bezáró idézõjel ( " ' ` ) ugyanezt "eredményezi", nehezen érthetõ parancsfájl hibaként !) | |
echo $((0x$1)) | # a paraméterként adott hexadec. számot dec.-ra konvertálja | |
sed "s/<[^>]*>//g" $1 | more | # a param. html-fájl "tartalmát" mutatja (nem mindig jól) | |
sort $1 | uniq -c | sort | tail -1 | # Egy fájl "leggyakoribb" sora az elõfordulási számával |
A cd, pwd, ls, cp, cat, head, tail, cut, man, help(bash), more/less(Linux), alias, sort, uniq, fgrep, tar, zip, tee, find parancsok.
A "sort" és "uniq" parancsokra további példákat az alábbi, kidolgozott "gyakorló feladatokban" találnak:
IV.
XV.
XXI.
39.
A Unix fájlrendszer készítõi oldalról nézve. (BSD-Unix "fast filesystem", ill. Linux "ext2" fájlrendszer alapján.)
boot szektor | boot program | (pl. 8 MB-os) cilinder-csoportok | |
szuperblokk | cilinder-csoport blokk | i-node tábla | adatblokkok |
blokkméret (1/2, 1, 2, 4... KB) fragment méret (1/2, 1/4... blokk) | fájlrendszer méret (blokk) | i-node száma adatblokkok száma | cilinder-csoport felépítését leíró adatok |
használt i-node száma használt adatblokkok száma | szabad blokkok száma és helye(bittérkép) szabad i-node-ok száma és helye(bittérkép) | szabad fragmentek száma és helye(bittérkép) | |
A fájl tipusa (reg., dir., dev, sym.link, mount, stb.) | user, group, rwx bitek "link"-ek száma | utolsó módosítás, elérés, i-node mód. (32bit = Y2038!) | A fájl hossza (byte-okban) 10+1+1+1 adatblokk-cím |
Fájlnév (max. 14-255 jel) Pl: . .. igen.hosszu.nevu.file | A fájl i-node-jának száma | ||
10 adatblokk címe | egy indirekt cím | egy duplán indirekt cím | egy triplán indirekt cím |
Oldja meg a fentiek alapján az alábbi - múlt félévi ZH - feladatot:
Ilyen fájlt gyorsan elõállíthat pl. a
yes | head -250880 >file501760
paranccsal, figyelembevéve, hogy a paraméter nélküli "yes" végtelen sok 2 jelbõl (y+CR) álló sort "termel".
A kapott fájlon az
ls -ls file501760
paranccsal ellenõrízheti számítása helyességét.
Igen nagyméretû, sok bináris nullával kezdõdõ fájl létrehozása igen kevés diszk-helyen:
dd of=nagy_file seek=999999
# 999999 db, bináris nulla blokkal kezdõdik a fájl.
alma
Ctrl+D
ls -ls nagy_file
4 -rw-rw-rw- 1 root root 511999493 Oct 27 19:01 nagy_file
Az eredménybõl látszik, hogy 3 adatblokk lett lefoglalva a 3-szoros indirekt címzésnek és egy további az "alma"-nak.
(A fájl mérete viszont 511999493 byte, amibõl 999999*512=511999488, ehhez jön még az alma 4 byte-ja és egy sorvége jel.)
A Unix fájl jogosultságok
Környezetváltozók. (PATH, PS1, PS2, TERM, $?, $$ (=processzNr), $! (last backgr. processzNr, ...). A set, export, env, unset parancsok.
A parancsfájl paraméterek ($#, $0, $1, ..., ${10}, ..., $*). A shift és break parancs.
Az eddig szerepeltek közül sok mindenre példa a következõ parancsfájl, ami
"Fenykep" Subject-tel levelet ír mindenkinek, aki a "Progkörnyezet" tárgyra jelentkezett:
Az itt kékkel írt levélbe egyedi megszólítások és fényképnevek kerülnek.
A cmp, wc, diff parancsok.
Reguláris kifejezések. (rugalmas string megadásra)
Az fgrep, grep, egrep parancsok.
Reguláris kifejezések használatára - és más dolgokra is - nagyobb lélegzetû, Linux X-Windows-ban futtatandó
kidolgozott gyakorló feladatot is talál.
A lehetséges parancs-indítások: Példa "$HOME/.profile" fájlra:
A ps parancs eredménye: (STAT: R=fut(running), S=vár(sleeping))
A trap -l parancs eredménye:
A shutdown, init 0 és haltsys parancsok. Mi van a "CtrlAltDel" mögött a Linuxban ?
A /etc/inittab konfig. fájl:
A /etc/rc... boot-scriptek. (részletek)
A program 1, 2, 3 részei közül egyet is elég megadni. "awk" programokra különbözõ nehézségû példákat az alábbi, kidolgozott "gyakorló feladatokban" talál:
XXIII.
37.
38.
40.
Egy további példa: Az "env" (vagy "set") parancs awk-val megvalósítva (az ENVIRON - elõredefiniált - tömbre):
awk 'BEGIN { for (x in ENVIRON) printf "%s=%s\n", x, ENVIRON[x] }'
Egy másik példa, aminek az a külön nehézsége, hogy hogyan lehet egy parancsfájl
paramétereit az awk-nak átadni (vigyázat: a $1 scriptparaméter nem keverendõ az awk-beli - az aktuális sor elsõ "mezõ"-jét jelölõ - $1-el !) :
awk "{ printf \"%s#%s\n\", \$$1, \$$2 }" $3
Megjegyzések:
További részleteket - mint mindig - a man paranccsal (Linuxban man gawk) tudhat meg.
A /etc/mtab fájl az alábbi "mount"-olások után:
A df parancs eredménye (fájlrendszer infó):
A more /proc/filesystems Linux parancs eredménye (a Linux által "ismert" fájlrendszerek):
minix fájlrendszer létrehozása floppyn:
A minix fájlrendszer fel-mountolása "readonly" módon, majd ezt követõ mount eredménye:
A crontab parancs.
A cron daemon és a crontab táblázat (user-enként). (pl. /var/spool/cron/crontabs/csa)
Néhány eddig nem vagy alig érintett Unix ismeretre utalok röviden az alábbiakban.
Ez legfeljebb arra elég, hogy tudják, minek kell bizonyos problémák, feladatok esetén részletesebben utánanézni.
setuid bit setgid bit sticky bit
programfájl a fájl jogaival fut (nem a futtató jogaival!)
programfájl a fájl csoportjának jogaival fut(program)fájl: a memóriában marad directory: új fájl csoportja a dir. csoportja lesz (nem a fájl tulajdonosának csoportja !)
tulajdonos (owner) a tulajdonos csoportja (group) mindenki (all) r: olvasás w: írás (módosítás) x: végrehajtás r: olvasás w: írás (módosítás)
(új fájl felvétele a directoryba, fájl törlése a directorybólx: a directory alatti "részfa" elérése
Egyes Unixokban (pl. IBM AIX) acl kezdetû parancsokkal egy-egy fájlra user-enként szabályozhatók a jogosultságok.
bit beállítás binárisan chmod (ls -l: rwsr-x--x) umask (pl. a $HOME/.profile fájlba téve)
i-node blokk tipus + rwx link tulaj. csop. byte ut. mód. dát. fájlnév 18484 0 lrwxrwxrwx 1 root root 4 Mar 29 1997 /usr/bin/egrep -> grep 18483 0 lrwxrwxrwx 1 root root 4 Mar 29 1997 /usr/bin/fgrep -> grep 18482 64 -rwxr-xr-x 1 root bin 64161 Aug 17 1995 /usr/bin/grep 18537 2 -rwxr-xr-x 1 root bin 1331 May 19 1994 /usr/bin/zgrep 18442 2 -rwxr-xr-x 1 root bin 1203 Sep 25 1994 /usr/bin/zipgrep
A Unix parancsok status kimenete. A test parancs fontosabb opciói (man test részletek):
A test helyett a [ test-opció ] belsõ parancs is írható.
(Fontos, hogy a szögletes zárójeleket helyközök vegyék körül!)
for i in $*
do
echo $i
done
Ugyanezt megteszi a következõ is:
while [ $# != 0 ]
do
echo $1
shift
done
Az alábbi változatok mindegyike abbahagyja a listázást, ha "alma" nevû paramétert talál:
for i in $*
do
case $i in
alma) echo "Ilyen buta paraméterrel nem foglalkozom"
break;;
*) echo $i;;
esac
done
while [ $# != 0 ]
do
if [ $1 = "alma" ]
then echo "Ilyen buta paraméterrel nem foglalkozom"; break
fi
echo $1
shift
done
VALASZ="X"
while [ $VALASZ = "X" ]
do
echo -n $KERDES" "; read valasz
case $valasz in
i*|I*) VALASZ="I";exit 0;;
n*|N*) VALASZ="N";exit 1;;
*) echo Valaszoljon IGENnel vagy NEMmel !;;
esac
done
Hívás (pl:)KERDES="Szereti Ön a Unixot ?"
. IGEN_NEM # "." azért, hogy a választ is megkapjuk !
echo $VALASZ
KERDES="Szereti Ön a Unixot ?"; export KERDES
if IGEN_NEM
then VALASZ="I"
else VALASZ="N"
fi
echo $VALASZ
case $# in
1) cd $1;;
0) ;;
*) echo Legfeljebb egy parametere lehet a parancsnak !; exit;;
esac
( for i in *
do
echo "`echo $i | wc -c` $i" # " nélkül elvesznek a vezetõ helyközök !
done ) | sort >/tmp/xyz
for i in `cut -c9- /tmp/xyz` # már csak a nevek kellenek
do
if [ -d $i ] # ha directory
then ls -ld $i # nem kell a directoryk belseje
else ls -l $i
fi
done
rm /tmp/xyz
Kérdés: Mit csinál az alábbi parancs ?. DILIS log out
chmod 711 $1
cd $1
for i in *
do
if [ -d $i ]
then $0 $i
else chmod 644 $i
fi
done
Nagy struktúrára idõigényes az ilyen fájlonkénti beállítás. Az alábbi "csúnyább" megoldás elõször
az egész struktúrára (rekurzív chmod-dal) 644-es jogokat állít be, aztán a directoryra és az aldirectorykra a "find"-ot használva 711-et.
(Ez a megoldás nagyságrenddel - sok fájl, kevés directory esetén nagyságrendekkel - gyorsabb lehet a megelõzõnél.)
chmod -R 644 $1
chmod 711 $1
find $1 -type d -exec chmod 711 {} \;
Megjegyzés: A "find"-ban a "-exec" utáni utasítás minden, a find által talált fájlra/directoryra végrehajtódik. Mivel itt két utasítás
(a "find" és a "-exec" utáni) keveredik, az utóbbinak a végét egy olyan pontosvesszõvel kell jelezni, amit a shell továbbad a "find"-nak. A "-exec" utáni utasítás
másik különlegessége az, hogy benne a "find" által talált fájlnévre kapcsos zárójelpárral hivatkozhatunk.
niscat passwd >~/niscat # a niscat lassú, így csak egyszer kell lefutnia
# Linuxban a /etc/passwd fájlban van a felhasználónkénti 1 sor.
# A ~csa/public/jelentkezes/progkor fájlban a "Progkornyezet"-re
# jelentkezettek user_id-i vannak felsorolva
for i in `cat ~/public/jelentkezes/progkor`
do
# A köv. grep sor elején álló (^) user_id-hez nevet keres,
# ami a niscat sor 5. mezõje (mezõk között ":" áll.)
NEV=`grep "^$i:" ~/niscat|cut -d: -f5`
echo "$NEV" # így látom, hol tart a levélküldés
# Ha a köv. parancsban az ITTAVEGE "" jelek között állna,
# akkor a levélszövegbe nem lenne a $NEV és $i aktuális
# értéke behelyettesítve
# Ha az ITTAVEGE elõtt - jel állna, akkor az ITTAVEGE sor
# kezdõdhetne tabulátorjelekkel is, így viszont az
# ITTAVEGE szövegnek sor elején kell állnia
mailx -s "Fenykep" $i@valerie.inf.elte.hu <<ITTAVEGE
Kedves $NEV !
Ha a fenykepe be lett szkennelve, akkor a kovetkezo parancsokkal
masolhatja a kisebb es nagyobb fenykepet a honlapja melle:
cd ~/public/public_html
cp /public/h/teacher/csa/public_html/kjpg/$i.jpg kiskep.jpg
cp /public/h/teacher/csa/public_html/jpg/$i.jpg kep.jpg
chmod 644 *
Csizmazia Albert
ITTAVEGE
sleep 1 # hogy a mailx gyõzze a munkát
done
* # akárhány (0,1,2...) megelõzõ jel
. # egy akármilyen jel
.* # akárhány (0,1,2...) akármilyen jel
[aeiouAEIOU] # egy jel a felsoroltak közül (magánhangzó)
[^a-z] # egy jel a fel nem soroltak közül (nem kisbetû)
^reg_kif # reg. kifejezés a sor elején
reg_kif$ # reg. kifejezés a sor végén
\(reg_kif\) # kijelölt reg. kif. (\1 \2 ...)
Példák:
grep "procedure.*proc1" # korábbi példa egyetlen paranccsal
sed "s/<[^>]*>//g
s/<[^>]*$//
s/^[^<]*>//
s/á/á/g
s/Á/Á/g
s/é/é/g
s/É/É/g
s/í/í/g
s/Í/Í/g
s/ó/ó/g
s/Ó/Ó/g
s/ú/ú/g
s/Ú/Ú/g
s/ö/ö/g
s/Ö/Ö/g
s/ü/ü/g
s/Ü/Ü/g
s/õ/õ/g
s/Õ/Õ/g
s/û/û/g
s/Û/Û/g
s/&/\&/g
s/</</g
s/>/>/g" $1 | more # a param. html-fájlt mutatja
Fontos, hogy a paramétersorok végén ne maradjon helyköz!
cat <<ITT_A_VEGE >/tmp/sedparam
s/<[^>]*>//g
s/<[^>]*$//
s/^[^<]*>//
s/á/á/g
s/Á/Á/g
s/é/é/g
s/É/É/g
s/í/í/g
s/Í/Í/g
s/ó/ó/g
s/Ó/Ó/g
s/ú/ú/g
s/Ú/Ú/g
s/ö/ö/g
s/Ö/Ö/g
s/ü/ü/g
s/Ü/Ü/g
s/õ/õ/g
s/Õ/Õ/g
s/û/û/g
s/Û/Û/g
s/&/\&/g
s/</</g
s/>/>/g
ITT_A_VEGE
sed -f /tmp/sedparam $1 | more # Ugyanaz, mint az elõzõ
sed "s/\([^ ]*\) \(.*\)/\2 \1/" # vezetéknév - keresztnév csere
man test | sed "s/.^H//g" >man.test # "man" lap editorfájlba, olvashatóan
# backspace
stty erase ^H
#
# prompt
PS1="# "; export PS1
#
# alias-ok
alias l="ls -ls"
alias lc="ls -Ca"
#
# term
TERM=linux; export TERM
#
# default: rwxrwxrwx
umask 000
#
# saját könyvtár
case `echo $PATH|fgrep -c sajatbin` in
0) PATH=$HOME/sajatbin:$PATH ; export PATH ;;
esac
#
# Képernyõ beállítások
A=`tty`
Display=`basename $A`; export Display
Inverz=`tput rev`
Bold=`tput bold`
Normal=`tput sgr0`
Del=`tput clear`
Home=`tput home`
# Pl: echo $Del$Home${Inverz}inverz${Normal}normál
#
# History beállítás képernyõnként, és mentés
HISTFILE=$HOME/hist/his$Display; export HISTFILE
trap "echo 'exit at '`date`' ---***--- elõtte:' >$HISTFILE;exit" TERM
parancs1 && parancs2 = if parancs1; then parancs2; fi parancs1 || parancs2 = if parancs1; then :; else parancs2; fi
PID TTY STAT TIME COMMAND
1 ? S 0:01 init [3]
...
79 1 S 0:00 -bash
80 2 S 0:00 -bash
81 3 S 0:00 -bash
83 5 S 0:00 -bash
84 6 S 0:00 /sbin/agetty 38400 tty6 linux
85 7 S 0:00 /sbin/agetty 38400 tty7 linux
86 8 S 0:00 -bash
225 8 S 0:00 xinit /root/.xinitrc.w95
...
855 4 S 0:00 -bash
923 3 S 0:00 vi floppy_u.html
926 4 R 0:00 ps
0) EXIT 1) SIGHUP 2) SIGINT 3) SIGQUIT
4) SIGILL 5) SIGTRAP 6) SIGIOT 7) SIGBUS
8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV
12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
16) SIGJUNK(16) 17) SIGCHLD 18) SIGCONT 19) SIGSTOP
20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG
24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF
28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGJUNK(31)
...
trap INT # eredeti állapot
...
trap "" INT # letiltja a Ctrl+C-t
trap "echo Ne felejtsd el ...;read" EXIT
ps -x | head -2:
PID TTY STAT TIME COMMAND
1 ? SW 0:02 (init)
init 0, init 1, init 6
)
# id:runlevels:action:process
# azonosító:futási szint:mikor/hogyan:parancs
#
# Default runlevel.
id:3:initdefault:
# System initialization (runs when system boots).
si:S:sysinit:/etc/rc.d/rc.S
# Script to run when going single user (runlevel 1).
su:1S:wait:/etc/rc.d/rc.K
# Script to run when going multi user.
rc:23456:wait:/etc/rc.d/rc.M
# What to do at the "Three Finger Salute".
ca::ctrlaltdel:/sbin/shutdown -t5 -rfn now
# Runlevel 0 halts the system.
l0:0:wait:/etc/rc.d/rc.0
# Runlevel 6 reboots the system.
l6:6:wait:/etc/rc.d/rc.6
# What to do when power fails (shutdown to single user).
pf::powerfail:/sbin/shutdown -f +5 "THE POWER IS FAILING"
# If power is back before shutdown, cancel the running shutdown.
pg:0123456:powerokwait:/sbin/shutdown -c "THE POWER IS BACK"
# If power comes back in single user mode, return to multi user mode.
ps:S:powerokwait:/sbin/init 5
# The getties in multi user mode on consoles an serial lines.
#
# NOTE NOTE NOTE adjust this to your getty or you will not be
# able to login !!
#
# Note: for 'agetty' you use linespeed, line.
# for 'getty_ps' you use line, linespeed and also use 'gettydefs'
c1:1235:respawn:/sbin/agetty 38400 tty1 linux
c2:1235:respawn:/sbin/agetty 38400 tty2 linux
c3:1235:respawn:/sbin/agetty 38400 tty3 linux
c4:1235:respawn:/sbin/agetty 38400 tty4 linux
c5:1235:respawn:/sbin/agetty 38400 tty5 linux
c6:12345:respawn:/sbin/agetty 38400 tty6 linux
# Next 2 lines are new:
c7:1235:respawn:/sbin/agetty 38400 tty7 linux
c8:1235:respawn:/sbin/agetty 38400 tty8 linux
# End of /etc/inittab
#! /bin/sh
#
# /etc/rc.d/rc.S: System initialization script.
...
# enable swapping
/sbin/swapon -a
/sbin/swapon /PAFE
...
# mount file systems in fstab (and create an e>
Átvitel megszakítva!
P/IP is not yet configured
/sbin/mount -avt nonfs
# rc.K This file is executed by init when it goes into runlevel
# 1, which is the administrative state. It kills all
# deamons and then puts the system into single user mode.
# Note that the file systems are kept mounted.
...
# Kill all processes.
echo
echo "Sending all processes the TERM signal."
kill -15 -1
echo -n "Waiting for processes to terminate"
for loop in 0 1 2 3 4 5 6 7 ; do
sleep 1
echo -n "."
done
echo
...
echo "Sending all processes the KILL signal."
kill -9 -1
# rc.M This file is executed by init(8) when the system is being
# initialized for one of the "multi user" run levels (i.e.
# levels 1 through 6). It usually does mounting of file
# systems et al.
...
# Screen blanks after 15 minutes idle time.
/bin/setterm -blank 15
...
# Ensure basic filesystem permissions sanity.
chmod 755 /
chmod 1777 /tmp /var/tmp
...
# Start the sendmail daemon:
if [ -x /usr/sbin/sendmail ]; then
echo "Starting sendmail daemon (/usr/sbin/sendmail -bd -q15m)..."
/usr/sbin/sendmail -bd -q15m
fi
...
# Load a custom screen font if the user has an rc.font script.
if [ -x /etc/rc.d/rc.font ]; then
. /etc/rc.d/rc.font
fi
...
# Start Web server:
# = /var/lib/apache/sbin/apachectl start
if [ -x /etc/rc.d/rc.httpd ]; then
. /etc/rc.d/rc.httpd
fi
...
# Load a custom keymap if the user has an rc.keymap script.
if [ -x /etc/rc.d/rc.keymap ]; then
. /etc/rc.d/rc.keymap
fi
...
# Start the local setup procedure.
if [ -x /etc/rc.d/rc.local ]; then
. /etc/rc.d/rc.local
fi
lrwxrwxrwx 1 root root 4 Apr 7 1999 rc.0 -> rc.6
-rwxr-xr-x 1 root root 2376 May 26 1998 rc.6
# rc.6 This file is executed by init when it goes into runlevel
# 0 (halt) or runlevel 6 (reboot). It kills all processes,
# unmounts file systems and then either halts or reboots.
# Find out how we were called.
case "$0" in
*0) message="The system is halted."
command="halt" ;;
*6) message="Rebooting."
command=reboot ;;
*) echo "$0: call me as \"rc.0\" or \"rc.6\" please!"
exit 1 ;;
esac
# Kill all processes.
# killall5 -- send a signal to all processes.
if [ "$1" != "fast" ]; then # shutdown did not already kill all processes
killall5 -15
killall5 -9
fi
...
# Now halt or reboot.
echo "$message"
[ ! -f /etc/fastboot ] && echo "On the next boot fsck will be FORCED."
$command -f
awk -f awk_programot_tartalmazó_fájl input_fájl(ok)
Egy awk program struktogramja és kódja.
Kódolási szabályok
Néhány további szabály
$1, $2, ... $NF : az aktuális input rekord mezõi.
FS : mezõelválasztó (default: helyköz)
FNR : a feldolgozott rekord sorszáma
ugyanaz, mint:
x["A B C"]="alma dio"
$3=$1-($2+3*$4)
ezer=10E2
darab["szeptember"]=darab["szeptember"]+1
string3="alma" "dio" "mogyoro"; string3="alma dio mogyoro"
Pl.(utolsó szó): print $NF
printf "formátum_és_konstansok_keverten", kifejezések
(minden kifejezéshez 1 formátum)
Pl(nl): printf "%6d %s\n", FNR, $0
Ha a % és a formátum jel között "-" jel áll, balra illesztés történik.
A % és a formátum jel között hosszmegadás is állhat: pl. %30s, %6d, %9.2f (9 hosszban, 2 tizedesre).
gsub(reg_kifejezés, helyettesítõ_string, string) = string-ben reg.kifejezés elõfordulásait helyettesítõ stringre cseréli
length(string) = string hosszát adja (a szélén levõ helyközökkel együtt)
substr(string, kezdõindex, jelek_száma) = string kezdõindextõl kezdõdõ (adott hosszúságú) részét adja
tolower(string) = string-et kisbetûsre konvertál
Az alábbi 3 script mindegyike kiirja a 3. paraméterként (vagy a standard inputról) kapott fájl 1. és 2. paraméterként kapott (sorszámú) oszlopait,
egymástól egy # jellel elválasztva:
cat <<EDDIG >/tmp/awk1
{ printf "%s#%s\n", \$$1, \$$2 }
EDDIG
awk -f /tmp/awk1 $3
p1=$1; export p1
p2=$2; export p2
awk '{ printf "%s#%s\n", $ENVIRON["p1"], $ENVIRON["p2"] }' $3
niscat passwd | sed "s/:/ /g" | OSZLOPOK 1 5
parancs a valerie userek azonosítóját és nevét listázza.
niscat passwd | awk 'BEGIN {FS=":"} { printf "%s#%s\n", $1, $5 }'
Mivel ebben az esetben nem akarjuk, hogy a shell helyettesítéseket
végezzen az awk programban, sima aposztróf(') jelek közé írtuk azt.
(Az utóbbi sor példa awk-beli BEGIN használatára is.)
device mount_point type mount_options dump? fsck? (1=yes)
/dev/hda2 / ext2 defaults 1 1
/dev/hdb2 /u sysv defaults 1 1
/dev/hdb4 /u2 ext2 defaults 1 1
/dev/hdb1 /j ext2 defaults 1 1
/dev/hda3 /dosc msdos defaults 1 1
/dev/hdb3 /dosd vfat defaults 1 1
/dev/hda1 /w95 vfat defaults 1 1
none /proc proc defaults 1 1
mount -t vfat /dev/hdc4 /zip # ZIP drive
mount -t msdos /dev/fd0 /mnt # DOS floppy
more /etc/mtab
/dev/hda2 / ext2 rw 1 1
/dev/hdb2 /u sysv rw 1 1
/dev/hdb4 /u2 ext2 rw 1 1
/dev/hdb1 /j ext2 rw 1 1
/dev/hda3 /dosc msdos rw 1 1
/dev/hdb3 /dosd vfat rw 1 1
/dev/hda1 /w95 vfat rw 1 1
none /proc proc rw 1 1
/dev/hdc4 /zip vfat rw 0 0
/dev/fd0 /mnt msdos rw 0 0
Filesystem 1024-blocks Used Available Capacity Mounted on
/dev/hda2 546401 477596 40581 92% /
/dev/hdb2 354745 339972 14773 96% /u
/dev/hdb4 446453 349570 73825 83% /u2
/dev/hdb1 321516 287286 17624 94% /j
/dev/hda3 320368 318800 1568 100% /dosc
/dev/hdb3 515288 511160 4128 99% /dosd
/dev/hda1 451344 444432 6912 98% /w95
/dev/hdc4 98078 70878 27200 72% /zip
/dev/fd0 1423 531 892 37% /mnt
ext2
minix
msdos
vfat
nodev proc
nodev nfs
iso9660
xenix
sysv
coherent
mkfs -t minix /dev/fd0H1440 1440
mount -r /dev/fd0 /mnt
mount
/dev/hda2 on / type ext2 (rw)
/dev/hdb2 on /u type sysv (rw)
/dev/hdb4 on /u2 type ext2 (rw)
/dev/hdb1 on /j type ext2 (rw)
/dev/hda3 on /dosc type msdos (rw)
/dev/hdb3 on /dosd type vfat (rw)
/dev/hda1 on /w95 type vfat (rw)
none on /proc type proc (rw)
/dev/fd0 on /mnt type minix (ro)
-rws--x--x 1 root bin 9236 May 23 1996 /usr/bin/crontab
#perc óra nap hónap hét_napja parancs
0,10,20,30,40,50 * * * * /usr/lib/atrun >/dev/null 2>&1 # 10 percenként
0 0 1 * mon-fri /home/lajos/ment # munkanapokon és minden 1-én, éjfélkor
0 23-7/2,12 * * * /home/lajos/p1 # 23-tól reggel 7-ig 2 óránként és délben
* * * * * touch $HOME/na_latod_fut_a_cron # teszt
("sed" használatára példákat az alábbi, kidolgozott "gyakorló feladatokban" találnak:
37.
39.
40.)
A termcap csak "source" formában létezik, a terminfo-hoz is tartozik olvasható "source", de azt a "tic" paranccsal le kell fordítani.
A fordításnak a (többnyire a /usr/lib/terminfo aldirectoryjaiban tárolt). eredményét használják a Unix alatt futó programok.
A terminfo ill. termcap "source" fájlok megértése és készítése fáradságos, idõigényes feladat.
(A termcap "source" a captoinfo paranccsal alakítható át terminfo "source" formába.)
Néhány példa a tput használatára:
tput clear # törli a képernyõt
tput bold # fényesebb betûket ír
tput rev # inverzbe megy át
tput blink # villogó betûket ír
tput setb n # háttérszín legyen "n" (n=0,1,2,3,4,5,6,7; csak Linux)
tput setf n # betûszín legyen "n" (n=0,1,2,3,4,5,6,7; csak Linux)
tput sgr0 # újra normál betûket és színeket ír
tput bel # sípoló hangot ad
tput cup 12 40 # a 12. sor 40. oszlopára pozícionál
tput reset # esetleg visszaállítható vele az "elrontott képernyõ"
Csizmazia Albert csa@valerie.inf.elte.hu