Bolee polnye svedeniya o UNIXe
|tot tekst podgotovlen NPO "KLOTO"
1. Svedeniya o processah i sistemnyh vyzovah . . . . . . . .
2. Atributy processov . . . . . . . . . . . . . . . . . . .
2.1. Nasleduemye fajly . . . . . . . . . . . . . .
2.2. Identifikator pol'zovatelya (UID) i identifi-
kator gruppy (GID) . . . . . . . . . . . . . .
3. Komandy UNIXa . . . . . . . . . . . . . . . . . . . . .
3.1. Kontekstnyj poisk i preobrazovanie teksta . .
3.2. Arifmeticheskij yazyk dlya vychislenij s proiz-
vol'noj tochnost'yu . . . . . . . . . . . . . .
3.3. Izmenenie prav dostupa k fajlam . . . . . . .
3.4. Sravnenie soderzhimogo dvuh fajlov . . . . . .
3.5. Postrochnoe sravnenie dvuh tekstovyh fajlov . .
3.6. Prostye arifmeticheskie vychisleniya s proizvol'-
noj tochnost'yu . . . . . . . . . . . . . . . .
3.7. Vyvesti argumenty komandnoj stroki na stan-
dartnyj vyvod . . . . . . . . . . . . . . . .
3.8. Razlozhenie celogo chisla na prostye somnozhiteli
3.9. Opredelenie tipa fajla . . . . . . . . . . . .
3.10. Poisk fajlov . . . . . . . . . . . . . . . .
3.11. Kontekstnyj poisk v tekstovom fajle . . . . .
3.12. Opredelenie identifikatora pol'zovatelya i
identifikatora gruppy . . . . . . . . . . . .
3.13. Avarijnoe zavershenie processa . . . . . . . .
3.14. Informaciya o sostoyanii processov . . . . . .
3.15. Sortirovka i/ili sliyanie fajlov . . . . . . .
3.16 Podschet kolichestva simvolov, slov i strok v
fajle . . . . . . . . . . . . . . . . . . . .
* 1. Svedeniya o processah i sistemnyh vyzovah *
Sistemnye vyzovy - eto interfejs mezhdu programmami i yadrom
UNIXa. YAdro UNIXa obespechivaet razdelenie processora mezhdu vy-
polnyayushchimisya programmami, osushchestvlyaet upravlenie pamyat'yu i
drugimi ustrojstvami, realizuet fajlovuyu sistemu. Sistemnye vy-
zovy mogut ispol'zovat'sya vsemi bez isklyucheniya programmami.
Programma, nahodyashchayasya v stadii vypolneniya, nazyvaetsya
processom. Tak, shell, ozhidayushchij vvoda komandy, yavlyaetsya pro-
cessom.
Vse komandy UNIXa (krome vstroennyh komand shella) yavlyayut-
sya obychnymi programmami. Poetomu, poluchiv komandu, ne yavlyayushchuyu-
sya vstroennoj, shell dolzhen vyzvat' na vypolnenie programmu i
peredat' ej argumenty iz komandnoj stroki. Dlya etogo shell de-
laet sleduyushchee: on razdelyaetsya na dve kopii (ispol'zuya sistem-
nyj vyzov fork), otlichayushchiesya lish' tem, chto kazhdaya mozhet opre-
delit', kem ona yavlyaetsya: processom-predkom ili processom-po-
tomkom. Pri etom processu-potomku dostayutsya po nasledstvu vse
atributy processa-predka: otkrytye fajly, peremennye okruzheniya,
tekushchaya direktoriya i dr. Zatem process-predok perehodit v sos-
toyanie ozhidaniya zaversheniya processa-potomka (ispol'zuya sistem-
nyj vyzov wait), esli tol'ko process-potomok ne byl zapushchen
asinhronno. Process-potomok izdaet sistemnyj vyzov exec, po ko-
toromu yadro UNIXa podmenyaet programmu, opredelyayushchuyu povedenie
processa, i peredaet ej upravlenie i spisok argumentov.
Nasledovanie atributov ob®yasnyaet, pochemu tak legko mozhno
perenaznachit' standatnyj vvod-vyvod. Pered tem, kak peredat'
upravlenie novoj programme, shell (process-predok) perenaznacha-
et svoj standartnyj vvod-vyvod, kotoryj i dostanetsya novoj
programme.
Zavershiv vypolnenie, process-potomok proizvedet "samoubij-
stvo" (izdav dlya etogo sistemnyj vyzov exit). Pri etom vse otk-
rytye v nem fajly budut zakryty i sam on prekratit sushchestvova-
nie. Esli zavershilsya process, u kotorogo byli potomki, to eti
potomki stanut potomkami "vseobshchego predka", t.e. processa, za-
pushchennogo pri vhode v sistemu. Zavershenie processa-potomka pri-
vodit k probuzhdeniyu processa-predka, kotoryj poluchaet informa-
ciyu o tom, kotoryj iz processov-potomkov zavershil svoe sushchest-
vovanie i kod ego zaversheniya. Posle etogo process-predok unich-
tozhit vse sledy sushchestvovaniya processa-potomka i prodolzhit vy-
polnenie svoej programmy.
Kazhdyj process pri ego porozhdenii poluchaet unikal'nyj no-
mer, nazyvaemyj PID (process ID). Nomer ego processa-predka -
PPID (parent PID). |ti nomera mozhno poluchit', vospol'zovavshis'
komandoj ps (sm. 3.14).
* 2. Atributy processov *
Pri porozhdenii novogo processa, poslednij nasleduet ot
processa-predka bol'shinstvo atributov. K nim otnosyatsya otkrytye
fajly, peremennye okruzheniya, tekushchaya direktoriya, identifikator
pol'zovatelya i identifikator gruppy i t.d.
Vse fajly, kotorye byli otkryty v processe, izdavshem sis-
temnyj vyzov fork, budut unasledovany potomkom. Esli kakoj-li-
bo iz etih processov reshit zakryt' odin iz takih fajlov, to
dostupa k fajlu lishitsya tol'ko on sam. Fajl mozhet byt' dostup-
nym i bolee chem dvum processam-rodstvennikam, esli porozhdeno
bolee odnogo processa-potomka. Pri etom vse oni razdelyayut
edinstvennyj ukazatel' na fajl.
2.2. Identifikator pol'zovatelya (UID)
i identifikator gruppy (GID)
Dlya kazhdogo processa opredeleny prava dostupa k razlichnym
fajlam s pomoshch'yu identifikatora pol'zovatelya i identifikatora
gruppy, kotorye imeet pol'zovatel', zapustivshij process (uznat'
ih mozhno komandoj id (sm. 3.12)). |ti identifikatory yavlyayutsya
celymi chislami i ih ustanovka proizvoditsya v moment vhoda v
sistemu. Identifikator pol'zovatelya i identifikator gruppy, us-
tanovlennye dlya processa, peredayutsya im po nasledstvu vsem po-
tomkam.
Na samom dele s kazhdym processom, krome dejstvuyushchego iden-
tifikatora pol'zovatelya i dejstvuyushchego identifikatora gruppy,
svyazany eshche real'nyj identifikator pol'zovatelya i real'nyj
identifikator gruppy. Pervye dva ispol'zuyutsya pri proverke raz-
resheniya na dostup k fajlam, a vtorye dva opredelyayut pol'zovate-
lya, ot imeni kotorogo vystupaet process.
V bol'shinstve sluchaev eti identifikatory sovpadayut. Odnako
mogut byt' ustanovleny takie kody zashchity fajla, chto pri obrashche-
nii k nemu (napr. mail, rmdir) pereustanavlivaetsya libo real'-
nyj identifikator pol'zovatelya, libo real'nyj identifikator
gruppy, libo i tot i drugoj, i, takim obrazom, pol'zovatel' po-
luchaet vozmozhnost' proizvodit' dejstviya ot imeni pol'zovatelya s
bol'shimi pravami.
awk - kontekstnyj poisk i preobrazovanie teksta
bc - arifmeticheskij yazyk dlya vychislenij s proizvol'noj
tochnost'yu
chmod - izmenenie prav dostupa k fajlam
cmp - sravnenie soderzhimogo dvuh fajlov
comm - postrochnoe sravnenie dvuh tekstovyh fajlov
dc - prostye arifmeticheskie vychisleniya s proizvol'noj toch-
nost'yu
echo - vyvesti argumenty komandnoj stroki na standartnyj vy-
vod
factor - razlozhenie celogo chisla na prostye somnozhiteli
file - opredelenie tipa fajla
find - poisk fajlov
grep - kontekstnyj poisk v tekstovom fajle
id - opredelenie identifikatora pol'zovatelya i identifika-
tora gruppy
kill - avarijnoe zavershenie processa
ps - informaciya o sostoyanii processov
sort - sortirovka i/ili sliyanie fajlov
wc - podschet kolichestva simvolov, slov i strok v fajle
3.1. awk - Kontekstnyj poisk i preobrazovanie teksta
Format komandy: awk [ -Fc ] [ -f ] [ ] [ ]
[ ]
awk skaniruet kazhdyj vhodnoj fajl v poiske strok, udovlet-
voryayushchih kakomu-libo iz shablonov, opredelennyh v . SHablo-
ny mogut libo byt' zadany neposredstvenno v kachestve ,
libo byt' zapisany v fajl progfile i obrabotany komandoj
awk -f progfile [ ]
Esli shablony ukazany v komandnoj stroke, to oni dolzhny byt'
zaklyucheny v odinarnye kavychki ('). awk mogut byt' peredany pa-
rametry v forme x=... y=... i t.d. Primery sm. v konce opisa-
niya.
Fajly chitayutsya v ukazannom poryadke. Esli ne ukazano ni od-
nogo fajla, to stroki vvodyatsya iz standartnogo vvoda. Fajl s
imenem "-" oboznachaet standartnyj vvod.
Vvod dlya awk delitsya na zapisi, razdelyaemye special'nym
razdelitelem. Po umolchaniyu eto , i togda awk obraba-
tyvaet vvod postrochno. Razdelitel' zapisej mozhno izmenit', pe-
reopredeliv peremennuyu RS.
Kazhdaya zapis' delitsya na polya, ogranichennye razdelitelyami
polej. Po umolchaniyu eto probely. |tot razdelitel' mozhno izme-
nit', ustanoviv peremennuyu FS ravnoj simvolu c ili ukazav flag
-Fc. SHablony komandnoj stroki dostupny po imenam $1, $2, ...;
$0 - vsya vhodnaya stroka. Esli razdelitel' zapisej nulevoj, to
na samom dele im yavlyaetsya pustaya stroka.
Dlya kazhdogo obrazca, ukazannogo v , opredelyaetsya
dejstvie. Ukazannoe dejstvie budet proizvedeno s kazhdoj stro-
koj, ili polem vnutri nee, kotoraya udovletvoryaet etomu shablonu.
Operator imeet vid:
{ }
Kazhdaya stroka proveryaetsya na sovpadenie s kazhdym shablonom.
Pri kazhdom sovpadenii vypolnyayutsya vse ukazannye dejstviya. Posle
sravneniya so vsemi obrazcami vvoditsya sleduyushchaya stroka i pro-
cess sravneniya povtoryaetsya. Mozhet byt' opushchen libo shablon, libo
dejstvie, no ne oba vmeste. Esli dlya dannogo shablona ne ukazany
dejstviya, to stroka prosto kopiruetsya v vyvod. Esli dlya dejst-
viya ne opredelen shablon, to ono budet vypolnyat'sya dlya kazhdoj
vhodnoj stroki. Stroki, ne udovletvoryayushchie ni odnomu obrazcu,
ignoriruyutsya.
Dejstvie est' posledovatel'nost' operatorov. Tak kak shab-
lony i dejstviya mogut byt' opushcheny, to, chtoby razlichat' ih v
programme, poslednie nado brat' v figurnye skobki. Operator
est' odna iz konstrukcij:
if ( ) [ else ]
while ( )
for ( ; ; )
break
continue
[ ] ...
=
print [ ] [ > ]
printf [ , ]
[ > ]
next (propustit' ostavshiesya shablony i perejti k
sleduyushchej stroke)
exit (propustit' ostavshiesya stroki)
Operatory zavershayutsya tochkoj s zapyatoj, ili
pravoj skobkoj. Pustoj oznachaet vsyu stroku.
Vyrazheniya stroyatsya iz strokovyh ili chislovyh velichin s pomoshch'yu
operacij +, -, *, /, % i konkatenacii (oboznachaetsya probelom).
V vyrazheniyah takzhe mozhno ispol'zovat' operatory yazyka C: ++,
--, +=, -=, *=, /=, %=. Peremennye inicializiruyutsya pustoj
strokoj. Peremennye mogut takzhe byt' elementami massiva (oboz-
nachaetsya x[i]) ili polyami. Indeksy massiva ne obyazany byt' ce-
lymi. Konstantnye stroki dolzhny byt' zaklyucheny v dvojnye kavych-
ki (").
Operator print vyvodit svoi argumenty v standartnyj vyvod
(ili v fajl, esli opredelena chast' '> '), razdelyaya
ih tekushchim razdelitelem polej i zavershaya kazhduyu zapis' tekushchim
razdelitelem zapisej. Operator printf delaet to zhe samoe, no
pod upravleniem formata (format sovpadaet s formatom funkcii
printf yazyka C).
Vstroennaya funkciya length vozvrashchaet dlinu svoego argumen-
ta, rassmatrivaya ego kak stroku; esli argument opushchen, to vozv-
rashchaetsya dlina tekushchej stroki. Opredeleny takzhe sleduyushchie
vstroennye funkcii: exp, log, sqrt i int (int vozvrashchaet celuyu
chast' svoego argumenta). Funkciya substr(s, m, n) vozvrashchaet
n-simvol'nuyu podstroku stroki s, nachinaya s pozicii m. Funkciya
sprintf(, , , ...) preobrazuet
vyrazheniya v sootvetstvii s ukazannym formatom (sm. printf) i
vozvrashchaet poluchennuyu stroku.
SHablon - eto logicheskaya kombinaciya (s pomoshch'yu !, || ,&& i
skobok) regulyarnyh vyrazhenij (sm. grep (egrep)), zaklyuchennyh v
sleshi (/), i otnositel'nyh vyrazhenij (sm. nizhe). Otdel'noe re-
gulyarnoe vyrazhenie v shablone otnositsya ko vsej stroke. Regulyar-
nye vyrazheniya mogut byt' i v otnositel'nyh vyrazheniyah. SHablon
mozhet sostoyat' iz dvuh obrazcov, razdelennyh zapyatoj; pri etom
ukazannye dejstviya vypolnyayutsya dlya vseh strok mezhdu strokoj,
udovletvoryayushchej pervomu shablonu, i strokoj, udovletvoryayushchej
vtoromu shablonu.
Otnositel'noe vyrazhenie - eto odna iz sleduyushchih konstruk-
cij:
gde - lyubaya iz shesti operacij otnosheniya yazyka
C,
- eto ~ (soderzhitsya) ili !~ (ne soderzhitsya).
- eto arifmeticheskoe vyrazhenie, otnositel'noe
vyrazhenie ili ih logicheskaya kombinaciya.
Dlya vypolneniya kakih-libo dejstvij pered pervoj ili posle
poslednej stroki opredeleny special'nye shablony BEGIN i END.
Naprimer, dlya ispol'zovaniya simvola c v kachestve razdelitelya
polej mozhno libo zapustit' programmu s flagom -Fc, libo ukazat'
BEGIN { FS = c }
Ostal'nye special'nye peremennye:
NF - kolichestvo polej v tekushchej zapisi
NR - poryadkovyj nomer tekushchej zapisi
FILENAME- imya fajla, iz kotorogo v dannyj moment proiz-
voditsya vvod
OFS - razdelitel' polej pri vyvode (po umolchaniyu -
probel)
ORS - razdelitel' zapisej pri vyvode (po umolchaniyu
)
OFMT - format vyvoda chisel (po umolchaniyu %.6g)
Primery.
1) Vyvesti stroki fajla first, v kotoryh bolee 72 simvolov
awk 'length > 72' first
2) Vyvesti pervye dva polya fajla second v obratnom poryadke
awk '{ print $2, $1 }' second
3) Slozhit' chisla, stoyashchie v pervom stolbce fajla third, i vy-
vesti summu i srednee
Pervyj variant:
V fajle prog:
{ s += $1 }
END { print "sum is", s, "average is", s/NR }
Komandnaya stroka:
awk -f prog third
Vtoroj variant:
awk '{ s += $1 } END { print "sum -",s,"average -",s/NR }' third
4) Vyvesti polya fajla fourth v obratnom poryadke
awk '{ for (i = NF; i > 0; --i) print $i }' fourth
5) Vyvesti vse stroki fajla fifth, nahodyashchiesya mezhdu parami
start/stop
awk '/start/,/stop/' fifth
6) Vyvesti te stroki fajla sixth, u kotoryh pervoe pole ne sov-
padaet s pervym polem predydushchej stroki
awk '$1 != prev { print; prev = $1 }' sixth
7) Raspechatat' fajl seventh, vstavlyaya nomer stranicy, nachinaya s
pyatoj, posle slova "Page"
V fajle program:
/Page/ { $2 = n++; }
{ print }
Komandnaya stroka:
awk -f program n=5 seventh
3.2. bc - Arifmeticheskij yazyk dlya vychislenij
s proizvol'noj tochnost'yu
Format komandy: bc [ -c ] [ -l ] [ ... ]
bc - interaktivnyj processor dlya C-podobnogo yazyka, pozvo-
lyayushchego proizvodit' arifmetiku neogranichennoj tochnosti. Vvod
proizvoditsya iz ukazannyh fajlov, a zatem so standartnogo vvo-
da. Flag -l oznachaet podklyuchenie matematicheskoj biblioteki dlya
operacij proizvol'noj tochnosti.
Nizhe opisyvaetsya sintaksis yazyka bc. L oznachaet lyubuyu iz
bukv [a-z], E - vyrazhenie, S - operator.
Kommentarii
stroki, zaklyuchennye v /* i */.
Imena
prostaya peremennaya: L
element massiva: L [ E ]
slova "ibase","obase","scale"
Drugie operandy
chisla proizvol'noj dliny, vozmozhno so znakom i desyatich-
noj tochkoj
( E )
sqrt ( E )
length ( E ) kolichestvo znachashchih desyatichnyh cifr
scale ( E ) kolichestvo desyatichnyh cifr posle zapya-
toj
L ( E, ..., E )
Operacii
+ - * / % ^ (% - ostatok, ^ - vozvedenie v stepen')
++ -- (uvelichenie i umen'shenie na 1; prefiks-
nye i postfiksnye)
== <= >= != <>
= =+ =- =* =/ =%
Operatory
E
{ S; ... ; S }
if ( E ) S
while ( E ) S
for ( E; E; E ) S
pustoj operator
break
quit
Opredelenie funkcii
define L ( L, ..., L ) {
auto L, ..., L
S; ...; S
return ( E )
}
Funkcii, opredelennye v -l biblioteke:
s(x) - sin(x)
c(x) - cos(x)
e(x) - exp(x)
l(x) - ln(x)
a(x) - arctan(x)
j(n,x) - funkciya Besselya
Vse argumenty funkciyam peredayutsya po znacheniyu.
Znachenie operatora, yavlyayushchegosya vyrazheniem, pechataetsya,
esli on ne yavlyaetsya chast'yu operatora prisvaivaniya. Operatory
mogut razdelyat'sya kak ; tak i . Prisvaivanie scale
opredelyaet tochnost' vypolneniya operacij. Prisvaivanie ibase i
obase opredelyaet sistemu schisleniya dlya vvoda i vyvoda soot-
vetstvenno.
Odna i ta zhe bukva mozhet byt' odnovremenno ispol'zovana
kak imya prostoj peremennoj, imya massiva i imya funkcii. Vse pe-
remennye yavlyayutsya global'nymi. Peremennye, opisannye kak
"auto", sozdayutsya pri vhode v funkciyu. Pri ispol'zovanii massi-
vov v kachestve argumentov funkcij ili pri opisanii ih kak avto-
maticheskih, za imenem massiva mogut sledovat' pustye kvadratnye
skobki.
bc - preprocessor dlya dc, kotoryj on zapuskaet avtomati-
cheski, esli tol'ko ne ukazan flag -c (tol'ko kompilyaciya).
Primer. Vyvesti sqrt(x) dlya pervyh 10 celyh chisel.
/* opredelyaetsya tochnost' vychislenij */
scale = 20
/* opredelyaetsya funkciya */
define r(a) {
auto x,y
y = a + 1
x = y + 1
while ( y < x ) {
x = y
y = 0.5 * ( x + a / x )
}
return (y)
}
/* vychislyaetsya znachenie */
for ( i = 1; i <= 10; i++ ) r(i)
/* vyhod */
quit
Zamechaniya.
Operator for dolzhen imet' vse tri E.
Quit interpretiruetsya pri vvode, a ne pri vypolnenii.
3.3. chmod - Izmenenie prav dostupa k fajlam
Format komandy: chmod prava fajly
Rezhim dostupa k ukazannym fajlam izmenyaetsya v sootvetstvii
s ukazannymi pravami. Prava mogut byt' ukazany v absolyutnom ili
v simvol'nom vide.
Absolyutnyj vid - vos'merichnoe chislo, yavlyayushcheesya logicheskim
ILI sleduyushchih rezhimov:
04000 - pri vypolnenii pereustanovit' UID pol'zovate-
lya na UID fajla
02000 - pri vypolnenii pereustanovit' GID pol'zovate-
lya na GID fajla
00400 - dostupen dlya chteniya vladel'cem
00200 - dostupen dlya zapisi vladel'cem
00100 - dostupen dlya vypolneniya vladel'cem
00040 - dostupen dlya chteniya chlenami gruppy
00020 - dostupen dlya zapisi chlenami gruppy
00010 - dostupen dlya vypolneniya chlenami gruppy
00004 - dostupen dlya chteniya prochimi pol'zovatelyami
00002 - dostupen dlya zapisi prochimi pol'zovatelyami
00001 - dostupen dlya vypolneniya prochimi pol'zovatelyami
Naprimer, chtoby ustanovit' prava, pozvolyayushchie vladel'cu
chitat' i pisat' v fajl, a chlenam gruppy i prochim pol'zovatelyam
tol'ko chitat', nado slozhit' 0400, 0200, 0040 i 0004. Takim ob-
razom komanda budet imet' vid:
chmod 644 file
Simvol'nyj vid:
[ ]
CHast' est' kombinaciya bukv u (vladelec), g (gruppa)
i o (prochie). Esli chast' opushchena ili ukazano a, to eto
ekvivalentno ugo.
mozhet byt': + - razreshit' pravo dostupa, - - zapre-
tit' pravo dostupa, = - zapretit' vse prava dostupa dlya ukazan-
nyh kategorij pol'zovatelej.
- lyubaya kombinaciya iz bukv r (chitat'), w (pisat'),
x (vypolnyat'), s (ustanavlivat' UID ili GID). Opustit' chast'
mozhno tol'ko esli est' = dlya zapreshcheniya vseh
prav.
Esli nado sdelat' bolee odnogo ukazaniya ob izmenenii prav,
to, pri ispol'zovanii simvol'nogo sposoba zadaniya prav dostupa,
v ne dolzhno byt' probelov, a ukazaniya dolzhny razdelyat'-
sya zapyatymi. Naprimer, komanda
chmod u+w,go+x file
dobavit dlya vladel'ca pravo pisat' v fajl, a dlya chlenov gruppy
i prochih pol'zovatelej - pravo vypolnyat' fajl. Prava ustanavli-
vayutsya v ukazannoj posledovatel'nosti (sleva napravo).
Izmenit' prava dostupa k fajlu mozhet tol'ko ego vladelec
(ili superpol'zovatel'). Dlya prosmotra prav dostupa i kontrolya
pri ih izmenenii ispol'zujte komandu
ls -l file
(prava pereustanovki UID i GID otmechayutsya bukvoj s na meste so-
otvetstvuyushchej bukvy x: malen'koj bukvoj s, esli sootvetstvuyushchaya
kategoriya pol'zovatelej imeet pravo x, i bol'shoj S - esli ne
imeet).
Primery. Pust' fajl file imeet prava: -rw-rw-rw-, to est'
dostupen vsem na chtenie i zapis'.
1) Zapretit' zapis' v fajl dlya prochih pol'zovatelej
chmod o-w file
( -rw-rw-r-- )
2) Sdelat' fajl vypolnyaemym
chmod +x file
( -rwxrwxr-x )
3) Lishit' chlenov gruppy vseh prav na dostup k fajlu, za isklyu-
cheniem chteniya
chmod g=+r file
( -rwx-w-r-x )
4) Razreshit' pereustanavlivat' UID pol'zovatelya na UID fajla
chmod u+s file
( -rws-w-r-x )
3.4. cmp - Sravnenie soderzhimogo dvuh fajlov
Format komandy: cmp [-l] [-s] file1 file2
Sravnivayutsya fajly file1 i file2 (esli file1 zamenen zna-
kom -, to ispol'zuetsya standartnyj vvod). Po umolchaniyu, cmp ne
daet nikakih soobshchenij, esli fajly sovpadayut; esli fajly otli-
chayutsya, to soobshchayutsya nomer stroki i poziciya v nej, v kotoroj
nahoditsya pervyj nesovpadayushchij simvol. Esli odin iz fajlov yav-
lyaetsya nachalom drugogo, to vydaetsya soobshchenie:
cmp: EOF on
gde - bolee korotkij fajl.
Naznachenie klyuchej:
-l - vyvesti nomer bajta (desyatichnoe) i razlichayushchiesya baj-
ty (vos'merichnoe) dlya kazhdogo nesootvetstviya
-s - nichego ne pechatat', a tol'ko vernut' kod vozvrata:
esli fajly sovpadayut - 0, esli razlichayutsya - 1, esli
propushchen argument ili dostup dlya chteniya k odnomu iz
fajlov zapreshchen - 2.
3.5. comm - Postrochnoe sravnenie dvuh tekstovyh fajlov
Format komandy: comm [ - [ 123 ] ] file1 file2
Comm chitaet fajly file1 i file2 i vyvodit rezul'taty v tri
kolonki:
1. Stroki, imeyushchiesya tol'ko v file1
2. Stroki, imeyushchiesya tol'ko v file2
3. Stroki, imeyushchiesya v oboih fajlah
Znak - na meste imeni fajla oznachaet standartnyj vvod.
Flagi 1,2 ili 3 podavlyayut vyvod sootvetstvuyushchih kolonok.
Tak, comm -12 vyvodit stroki, obshchie dlya dvuh fajlov; comm -23 -
imeyushchiesya tol'ko v file1, no otsutstvuyushchie v file2; comm -123
ne vyvodit nichego.
3.6. dc - Prostye arifmeticheskie vychisleniya s proizvol'noj tochnost'yu
Format komandy: dc [ fajl ]
dc - paket dlya arifmeticheskih vychislenij s proizvol'noj
tochnost'yu. Obychno on operiruet v desyatichnoj sisteme s celymi,
odnako mozhno zadat' sistemy schisleniya dlya vvoda, dlya vyvoda,
tochnost' vychislenij. Obshchaya struktura dc - stekovyj kal'kulyator,
ispol'zuyushchij obratnuyu pol'skuyu zapis'. Esli argument ukazan, to
snachala vvod proizvoditsya iz fajla, a potom iz standartnogo
vvoda.
bc, preprocessor dlya dc, podderzhivaet infiksnuyu notaciyu i
C-podobnyj sintaksis dlya opredeleniya funkcij i upravlyayushchih
struktur v programmah (sm. 3.2).
dc raspoznaet sleduyushchie konstrukcii:
- znachenie chisla pomeshchaetsya v stek. - nepreryv-
naya stroka cifr 0-9. V nachale ee mozhet stoyat' znak
podcherkivaniya (_) dlya vvoda otricatel'nogo chisla.
mozhet soderzhat' desyatichnuyu tochku.
+-/*%^ - verhnie dva chisla steka skladyvayutsya (+), vychitayutsya
(-), umnozhayutsya (*), beretsya ostatok (%) ili vtoroe
ot vershiny chislo vozvoditsya v stepen', opredelyaemuyu
chislom, nahodyashchimsya v vershine steka. Oba operanda
izvlekayutsya iz steka i rezul'tat pomeshchaetsya obratno v
stek. Pokazatel' stepeni dolzhen byt' celym chislom.
sx - izvlekaetsya vershina steka i pomeshchaetsya v registr s
imenem x, gde x - lyuboj simvol. Esli ukazano S, to x
rassmatrivaetsya kak stek i rezul'tat pomeshchaetsya v ego
vershinu.
lx - znachenie, hranyashcheesya v registre x, pomeshchaetsya v stek.
Registr x ne menyaetsya. Iznachal'no vse registry inici-
aliziruyutsya nulem. Esli ukazano L, to registr rass-
matrivaetsya kak stek i ego vershina izvlekaetsya i po-
meshchaetsya v glavnyj stek.
d - vershina steka udvaivaetsya
p - vyvoditsya vershina steka (ne izmenyayas'). P izvlekaet
vershinu steka i vyvodit ee kak stroku.
f - pechataet vse elementy steka.
q - zavershaet rabotu programmy.
x - vershina steka rassmatrivaetsya kak komanda dlya dc i
vypolnyaetsya
X - vershina steka zamenyaetsya kolichestvom cifr v nej posle
zapyatoj
[ ... ] - stroka, zaklyuchennaya v skobki, pomeshchaetsya v vershinu
steka.
x =x -dva verhnih elementa steka izvlekayutsya i sravnivayut-
sya. Esli oni udovletvoryayut ukazannomu usloviyu, to so-
derzhimoe registra x rassmatrivaetsya kak komanda dc i
vypolnyaetsya.
v - verhnij element steka zamenyaetsya kvadratnym kornem iz
nego. Esli on byl celym, to koren' takzhe okruglyaetsya.
! - ostal'naya chast' stroki interpretiruetsya kak komanda
shella
c - ochistit' stek
i - vershina steka izvlekaetsya i ispol'zuetsya kak osnova-
nie sistemy schisleniya pri vvode. I pomeshchaet ispol'zu-
emoe pri vvode osnovanie sistemy schisleniya v vershinu
steka.
o - vershina steka izvlekaetsya i ispol'zuetsya kak osnova-
nie sistemy schisleniya pri vyvode. O pomeshchaet ispol'-
zuemoe pri vyvode osnovanie sistemy schisleniya v ver-
shinu steka.
k - izvlekaetsya vershina steka i ispol'zuetsya kak neotri-
catel'nyj masshtabnyj mnozhitel': kolichestvo znakov
posle zapyatoj pri vyvode, pri umnozhenii, delenii i
vozvedenii v stepen'.
z - v stek pomeshchaetsya kolichestvo ego elementov
Z - chislo v vershine steka zamenyaetsya ego dlinoj (bez uche-
ta desyatichnoj tochki i znaka minus).
? - so standartnogo vvoda vvoditsya odna stroka i ispolnya-
etsya.
Primer. Vyvesti pervye 10 znachenij n!
[la1+dsa*pla10>y]sy
0sa1
lyx
Soobshcheniya
x is unimplemented - x - vos'merichnoe znachenie
stack empty - v steke men'she elementov, chem trebu-
etsya
Out of pushdown - stek perepolnen
Nesting Depth - slishkom bol'shoj uroven' vlozhennosti
3.7. echo - Vyvesti argumenty komandnoj stroki na standartnyj vyvod
Komanda echo vyvodit na standartnyj vyvod svoi argumenty,
razdelyaya ih probelami i zakanchivaya stroku . Krome to-
go, podderzhivayutsya sleduyushchie dogovorennosti:
\b - ustanovit' kursor v levyj verhnij ugol ekrana
\c - ne zakanchivat' stroku
\f - konec stranicy
\n - perevod stroki
\r - vozvrat karetki
\\ - bekslesh
\0xx - ot odnoj do treh vos'merichnyh cifr, s 0 v na-
chale, predstavlyayushchie kod ASCII simvola
3.8. Razlozhenie celogo chisla na prostye somnozhiteli
Format komandy: factor [ ]
Pri zapuske bez argumentov vvodit chisla iz standartnogo
vvoda. Maksimal'no dopustimoe chislo - 2ĵĦ (~ 7.2*10ıĦ). Vvod
otricatel'nyh chisel privodit k soobshcheniyu:
Ouch!
a nechislovyh simvolov k zaversheniyu programmy.
Vremya vychislenij proporcional'no kornyu iz chisla i maksi-
mal'no, esli chislo yavlyaetsya prostym ili kvadratom prostogo.
3.9. file - Opredelenie tipa fajla
Format komandy: file [ -f ffile ] ...
Komanda file provodit seriyu testov dlya kazhdogo argumenta,
schitaya ego imenem fajla, pytayas' klassificirovat' ego. Esli
fajl tekstovyj, to file pytaetsya po pervym 512 bajtam oprede-
lit' yazyk programmirovaniya.
Pri zadanii flaga -f sleduyushchij za nim fajl dolzhen soder-
zhat' spisok fajlov, podlezhashchih issledovaniyu.
3.10. find - Poisk fajlov
Format komandy: find
Find rekursivno prosmatrivaet direktorii dlya kazhdogo ele-
menta spiska poiska, otyskivaya fajly, udovletvoryayushchie logiches-
komu , zapisannomu s pomoshch'yu privedennyh nizhe primi-
tivov. V ih opisaniyah n ispol'zuetsya kak celoe desyatichnoe chis-
lo, +n oznachaet bol'she, chem n, -n - men'she, chem n.
-name istina, esli tekushchij fajl udovletvoryaet shablonu
-perm onum istina, esli kod zashchity fajla v tochnosti raven
onum (sm. chmod)
-type c istina, esli tip fajla c, gde c - b, c, d, p,
ili f - blok- ili simvol'noorientirovannyj spe-
cial'nyj fajl, direktoriya, kanal (pipe) ili
obychnyj fajl
-links n istina, esli fajl imeet n svyazej
-user uname istina, esli UID fajla sovpadaet s uname
-group gname istina, esli GID fajla sovpadaet s gname
-size n[c] istina, esli fajl zanimaet n blokov (po 512
bajt). Esli ukazana bukva c, to razmer fajla
zadaetsya v simvolah
-atime n istina, esli fajl ne chitalsya v poslednie n dnej
-mtime n istina, esli fajl ne modificirovalsya v posled-
nie n dnej
-ctime n istina, esli prava dostupa k fajlu ne menyalis'
v poslednie n dnej
-exec cmd istina, esli posle vypolneniya komandy cmd vozv-
rashchaetsya nulevoj kod vozvrata. Cmd mozhet zakan-
chivat'sya tochkoj s zapyatoj, kotoraya dolzhna byt'
ekranirovana. Argument komandy {} zamenyaetsya
imenem tekushchego fajla
-ok cmd to zhe, chto i exec, za isklyucheniem togo, chto
pered vypolneniem cmd zaprashivaetsya podtverzhde-
nie i cmd vypolnyaetsya tol'ko pri otvete y
-print vsegda istina; vyvodit imya fajla
(vyrazhenie) istina, esli istinno zaklyuchennoe v skobki vyra-
zhenie (skobki dolzhny byt' ekranirovany)
Primitivy mogut kombinirovat'sya s pomoshch'yu sleduyushchih opera-
cij (v poryadke umen'sheniya prioriteta):
1) Otricanie (! - unarnaya operaciya NOT)
2) Konkatenaciya (operaciya AND, oboznachaetsya probelom)
3) Vybor (-o - operaciya OR)
Primer. Udalit' vse fajly s imenami a.out ili *.o, kotorye
ne otkryvalis' v techenie nedeli:
find / \( -name a.out -o -name '*.o' \) -atime +7 -exec rm {} \;
3.11. grep - Kontekstnyj poisk v tekstovom fajle
Kontekstnyj poisk v tekstovom fajle vypolnyayut tri program-
my: grep, egrep i fgrep.
Format komand:
grep [ flagi ] vyrazhenie [ fajly ]
egrep [ flagi ] [ vyrazhenie ] [ fajly ]
fgrep [ flagi ] [ stroki ] [ fajly ]
Komandy prosmatrivayut vhodnye fajly (po umolchaniyu stan-
dartnyj vvod) v poiske strok, udovletvoryayushchih shablonu. Obychno,
kazhdaya najdennaya stroka kopiruetsya v standartnyj vyvod. SHablony
dlya grep mogut byt' tol'ko regulyarnymi vyrazheniyami (sm. "In-
terpretator komandnogo yazyka shell); on ispol'zuet kompaktnyj
nedeterminirovannyj algoritm. egrep ispol'zuet bystryj determi-
nirovannyj algoritm i podderzhivaet v kachestve shablonov bolee
sovershennye regulyarnye vyrazheniya. SHablony v smysle fgrep yavlya-
yutsya strokovymi konstantami; fgrep bystr i kompakten.
Programmami obrabatyvayutsya sleduyushchie flagi:
-v vyvodyatsya vse stroki, krome udovletvoryayushchih shablonu
-x vyvodyatsya tol'ko udovletvoryayushchie shablonu stroki (tol'ko
dlya fgrep)
-c vyvoditsya tol'ko kolichestvo udovletvoryayushchih shablonu
strok
-i pri sravnenii schitat' bol'shie i malen'kie bukvy sovpa-
dayushchimi
-l vyvodit' tol'ko imena fajlov, v kotoryh est' udovletvo-
ryayushchie shablonu stroki
-n pered kazhdoj strokoj stavit' ee nomer v fajle
-b pered kazhdoj strokoj stavit' nomer bloka, v kotorom ona
najdena. |to ispol'zuetsya dlya opredeleniya bloka na dis-
ke po kontekstu
-s podavlyat' soobshcheniya ob oshibkah, tipa "nesushchestvuyushchij"
ili "zakrytyj dlya chteniya fajl" (tol'ko dlya grep)
-e vyrazhenie
to zhe samoe, chto i odinochnyj argument , no
udobno, esli nachinaetsya so znaka - (ne ra-
botaet s grep)
-f fajl
regulyarnoe vyrazhenie (egrep) ili spisok strok (fgrep)
chitayutsya iz fajla
Vo vseh sluchayah, imya fajla, v kotorom est' udovletvoryayushchie
shablonu stroki, vyvoditsya. Dlya ekranirovaniya simvolov $, *, [,
^, |, (, ) i \ luchshe vsego zaklyuchat' v odinarnye
kavychki '...'.
fgrep ishchet stroki, soderzheshchie odnu iz .
egrep rassmatrivaet regulyarnye vyrazheniya tak zhe, kak i
shell (sm.) (krome \( i \) ), no, krome togo:
1. Regulyarnoe vyrazhenie, zakanchivayushcheesya znakom +, oznachaet od-
no ili bolee vhozhdenie ego v regulyarnoe vyrazhenie.
2. Regulyarnoe vyrazhenie, zakanchivayushcheesya znakom ?, oznachaet od-
no ili ni odnogo vhozhdenie ego v regulyarnoe vyrazhenie.
3. Dva regulyarnyh vyrazheniya, razdelennye znakom | ili , udovletvoryayut stroke, kotoroj udovletvoryaet odin iz nih.
4. Regulyarnoe vyrazhenie dlya gruppirovaniya mozhet zaklyuchat'sya v
skobki.
egrep ne obrabatyvaet konstrukcii tipa [a-z].
Esli byla poluchena hotya by odna stroka, udovletvoryayushchaya
shablonu, vozvrashchaetsya kod zaversheniya 0, esli ne najdeno ni od-
noj takoj stroki - 1, pri nalichii sintaksicheskih oshibok ili pri
nalichii fajla, nedostupnogo dlya chteniya, (dazhe esli byli najdeny
udovletvoryayushchie shablonu stroki) - 2.
3.12. id - Opredelenie identifikatora pol'zovatelya i
identifikatora gruppy
Format komandy: id
Komanda id vydaet na standartnyj vyvod soobshchenie, soderzha-
shchee UID, GID i sootvetstvuyushchie tekstovye imena dlya tekushchego
processa.
3.13. kill - Avarijnoe zavershenie processa
Format komandy: kill [ - ] pid ...
kill posylaet signal 15 ukazannomu processu. Takim sposo-
bom obychno mozhno zavershit' process, kotoryj ne otlavlivaet ili
ne ignoriruet signaly. Nomera processov mozhno uznat' po komande
ps (sm. 3.14). Nomer asinhronno zapushchennogo processa soobshchaetsya
shellom pri ego zapuske.
Process, kotoromu posylaetsya signal, dolzhen prinadlezhat'
pol'zovatelyu. Esli nomer signala ukazan yavno, to vmesto signala
15 posylaetsya on. Komanda
kill -9 ...
ubivaet process, esli, konechno, dlya ubijstva hvataet prav.
(O nomerah signalov sm. "Interpretator komandnogo yazyka shell")
3.14. ps - Informaciya o sostoyanii processov
Format komandy: ps [ flagi ]
ps vyvodit informaciyu ob aktivnyh processah. Po umolchaniyu,
informaciya daetsya tol'ko o processah, associirovannyh s dannym
terminalom. Komandoj ps obrabatyvayutsya sleduyushchie flagi:
-e vyvosti informaciyu obo vseh processah
-f generirovat' polnyj listing
-l generirovat' listing v dlinnom formate
-t
vyvodit' informaciyu tol'ko o processah, svyazannyh s
( , eto tty° ili console)
-p
vyvodit' informaciyu tol'ko ob ukazannom processe
-u
vyvodit' informaciyu tol'ko o processah, chej UID ili
vhodnoe imya pol'zovatelya ukazano
-g
vyvodit' informaciyu tol'ko o processah, GID kotoryh
ukazano
Nizhe privodyatsya zagolovki kolonok listinga i ob®yasnyaetsya
ih soderzhimoe; bukvy l i f oznachayut, poyavlyaetsya li eta kolonka
pri dlinnom ili polnom formate listinga; all oznachaet, chto dan-
naya kolonka vyvoditsya pri lyubyh znacheniyah klyuchej.
F (l) flagi (vos'merichnye), summa kotoryh daet sledu-
yushchie svedeniya o processe:
01 v pamyati
02 sistemnyj process
04 v ozhidanii zavershemiya vvoda-vyvoda
process fiksirovan v pamyati
10 svoppirovan
20 trassiruetsya drugim processom
40 drugie flagi trassirovki
S (l) Status processa:
0 ne sushchestvuet
S spyashchij process
W zhdushchij process
R vypolnyayushchijsya process
I vypolnyaetsya preryvaemyj sistemnyj
vyzov
Z zavershennyj process
T ostanovlennyj (stopped) process
X process zakachivaetsya v pamyat'
UID (f,l) UID vladel'ca processa; imya vhoda v sistemu vy-
voditsya pri ukazanii opcii -f
PID (all) nomer processa
PPID (f,l) nomer processa-predka
C (f,l) ispol'zovanie processora dlya planirovaniya
STIME (f) vremya zapuska processa
PRI (l) prioritet processa; bol'shee chislo oznachaet
men'shij prioritet
NI (l) popravka k prioritetu
ADDR (l) adres processa v pamyati (ukazatel' na tablicu
segmentov), esli programma rezidentnaya, inache
diskovyj adres
SZ (l) razmer obraza zadachi v blokah
WCHAN (l) sobytie, iz-za kotorogo ozhidaet process; dlya
vypolnyayushchihsya processov ne ukazyvaetsya
TTY (all) terminal, s kotorogo byl zapushchen process
TIME (all) vremya vypolneniya processa
CMD (all) imya programmy; esli ukazan flag -f, to vyvodit-
sya polnoe imya
Process imeyushchij predka i zavershivshijsya, no eshche ozhidaemyj
etim predkom, oboznachaetsya .
Pri ukazanii flaga -f ps pytaetsya opredelit' imya i argu-
menty, s kotorymi process byl sozdan v pamyati ili oblasti svop-
pinga. Esli eto ne udaetsya, imya processa zaklyuchaetsya v kvadrat-
nye skobki.
3.15. sort - Sortirovka i/ili sliyanie fajlov
Format komandy: sort [ - cmu ] [ -ooutput ] [ -ykmem ]
[ -zrecsz ] [ -dfiMnr ] [ -btx ] [ +pos1 [ -pos2 ]] [ files ]
Sort sortiruet stroki vseh ukazannyh fajlov odnovremenno i
vyvodit rezul'tat na standartnyj vyvod. Esli imena fajlov ne
ukazany, ili esli v kachestve imeni fajla ukazan -, informaciya
postupaet iz standartnogo vvoda.
Sravneniya proizvodyatsya na osnove odnogo ili bolee polej,
poluchaemyh iz kazhdoj vvodimoj stroki. Po umolchaniyu, takoe pole
odno i im yavlyaetsya sama stroka; stroki uporyadochivayutsya leksi-
kograficheski v sootvetstvii s kodami nabora simvolov ASCII.
Sleduyushchie flagi izmenyayut poryadok raboty:
-c proverit', yavlyaetsya li vhodnoj fajl uzhe otsortirovannym
soglasno zadannym pravilam
-m tol'ko slit' fajly; schitat' ih uzhe otsortirovannymi
-u iz vseh sovpadayushchih strok vyvodit' tol'ko odnu
-ooutput
ukazannoe imya