Unix 4.

6.11 File tartalma típusának meghatározása: file

A parancs legfontosabb opciói: -f ánév hatására a vizsgálandó file
neveket az ánév állományból veszi, -L hatására soft link esetén magát
a file-t vizsgálja, -mmáll esetén az /etc/magic állomány helyett a máll
állományt használja.

Példa : file abc.c # Kiirja, hogy : c program text



6.12 File-ok rendezése: sort


A sort egy állomány sorait rendezi. Alapértelmezésben a sorokat a
standard inputról várja és az eredményt standard outputra küldi. A sort
szintaktikája a következô:

sort [-cmu][-ooutput] [-y[kmem]] [-dfiMnr] [-btx] [+-m[.n] [bdfinr ]] [file]

A legfontosabb opciók jelentése a következô :

-c ellenôrzi, hogy az állományok már rendezve vannak-e.
-m a már külön-külön rendezett állományokat összefésüli
-u az egyenlônek talált sorokból csak egyet ír ki
-output a standard output helyett az output-ba írja ki az eredményt
-d szótári sorrend : csak a nagy- és kisbetûk, ill. az elválasztó
karakterek számítanak
-f a kisbetûk nagybetûknek számítanak
-i az ASCII tartományon kívüli karakterek nem számítanak
-M hónapok szerinti hasonlítás ( három nagybetûs név )
-n aritmetikai értékek szerinti hasonlítás
-r fordított sorrendû rendezés
-b a rendezési kulcsból elmaradnak az elválasztó karakterek
+m[.n][bdfinr] a rendezési kulcs elsô pozícióját adja meg. A +m.n az
m-edik mezô n-edik karakterét adja meg. Több kulcsot is megad-
hatunk, ilyenkor a rendezés hierarchikus lesz. Az opciók
lehetnek globálisak, de kulcsonként is adhatunk meg opciókat.
tx az x lesz a mezôelválasztó karakter
+m[.n][bdfinr] a rendezési kulcs utolsó karakterének pozíciója

Példa : Hozzunk létre egy ftc2 nevû file-t : lipcsei
simon
albert

Rendezés az rftc2 nevû file-ba : sort -orftc2 < ftc2


További példák a fejezet végén !


6.13 Megegyezô sorok szûrése : uniq

A parancs arra a célra szolgál, hogy az egymásután következô azonos
sorokat kiszûrje az inputból és így minden sort csak egyszer jelenítsen
meg a kimeneten. Éppen ezért, ha az állományunkban több helyen - szét-
szórva - fordul elô ugyanaz a sor, és nem egymásután, akkor a uniq
használata elôtt célszerû sorba rendezni az állományt. Szintaktikája a
következô :

uniq [ - [udc] ] [-n] [+n] [ infile [outfile] ]

Az opciók jelentése a következô :

-u csak az egyedi sorokat jeleníti meg a kimeneten
-d csak a többszörösen elôforduló sorok egy példányát jeleníti meg
-c minden sor elé kiirja, hogy hányszor szerepel a szövegben
-n az elsô n mezôt figyelmen kívül hagyja az összehasonlításnál
+n az elsô n karaktert figyelmen kívül hagyja az összehasonlításnál

Példa : cat uniqtext # ezt az állományt fogjuk szûrni
aaa
bbb
aaa
aaa
ccc
xyy
zyy



uniq -c uniqtext # egymásutáni azonos sorok számlálása
1 aaa
1 bbb
2 aaa
1 ccc
1 xyy
1 zyy


6.14 Szövegminta keresése file-ban : grep

A keresett mintát az ún. reguláris kifejezések felhasználásával lehet
megadni.
A grep szintaktikája :

grep [ -cilnv ] < minta > [file]


Az opciók jelentése a következô :

-c csak a mintát tartalmazó sorok számát írja ki
-i a nagy és kisbetûket azonosként kezeli
-l csak azon állományok nevét írja ki, ahol a minta szerepel
-n a talált sorokat sorszámukkal együtt írja ki
-v azokat a sorokat írja ki, amelyek nem tartalmazzák a mintát

A grep parancsot gyakran használjuk pipeok - ban !

Példák: grep lipcsei ftc1 # Kiírja az ftc1 azon sorait, ahol a
# lipcsei minta szerepel

users | grep zsuzsi # Megnézi, hogy a zsuzsi nevû fel-
# használó bejelentkezett-e?


6.15 Ållományok mezôinek kivágása: cut

Az elôzôekben ismertetett grep parancs segítségével sorokat tudunk
kiválasztani egy szöveges állományból. A cut parancs arra használható,
hogy az állomány soraiból bizonyos mezôket (oszlopokat) tudjunk kivá-
lasztani. Ezt kétféleképpen tehetjük meg: vagy karakter-, vagy mezôpozí-
ció(ka)t adunk meg.

A karakterpozíciós megadás szintaktikája a következô :

cut -clista [állomány ... ]

A karakterpozíciós megadás szintaktikája a következô :

cut -flista [-dkarakter] [-s] [állomány ... ]

A fôbb opciók jelentése a következô :

-clista a lista mondja meg, hogy mely karakterpozíciókat kell
kivágni - azaz megjeleníteni - az állományból.
-flista a lista mondja meg, hogy mely mezôket kell kivágni
-dkarakter a karakter lesz a mezôelválasztó. Az alapértelmezés a
szóköz, vagy a tabulátor
-s a mezôelválasztó nélküli sorokat nem engedi outputra

A -c ill. a -f közül valamelyiknek szerepelnie kell! A lista lehet
vesszôvel elválasztott felsorolás, kötôjellel elválasztott tartomány-
megadás, vagy a kettô kombinációja.

Példa : cat szov # Megtekintjük a szov tartalmát
aaa bbb ccc
ddd eee fff
xxx yyy zzz
cut -c1,5,9-11 szov # Kivágjuk az 1., az 5. ill. a 9-tôl
abccc # 11.-ig terjedô karaktereket
defff
xyzzz


6.16 Két file összehasonlítása : cmp

Csak akkor ad outputot, ha különbséget talál. Ebben az esetben az eltérés
helyének byte és sorszámát is kijelzi. Szintaktikája :

cmp [-s] file1 file2

A visszatérési értékek jelentése :
0 ha a két file azonos
1 ha különböznek
2 ha a parancsargumentum hibás vagy nem érhetô el.

A -s opció hatására csak a visszatérési értéket írja ki.

Példa : Hozzuk létre az ftc1 nevû file -t : lipcsei
lisztes
albert

Összehasonlítás : cmp ftc1 ftc2

Üzenet : ftc1 ftc2 differ : char 9, line 2


6.17 Két ASCII file összehasonlítása : comm

Kezdôbetûik szerint alfabetikus sorrendbe rendezett ASCII file-ok eseté-
ben külön-külön oszlopokban kiírja, a csak az elsô, csak a második ill.
mindkét fileban szereplô sorokat. Szintaktikája :

comm [ - [123] ] file1 file2

Mindegyik szám a megfelelô oszlop kiírását tiltja le. Kombinálhatók !

Példa : A 6.11-ben leírtak szerint rendezzük az ftc1 nevû file-t az
ftc1 nevû file-ba. Ezekután tekintsük meg mindkét rendezett
file-t :

cat rftc1
albert
lipcsei
lisztes
cat rftc2
albert
lipcsei
simon

Majd végezzük el az összehasonlítást a comm - mal :

comm rftc1 rftc2



Az eredmény :
albert
lisztes lipcsei
simon

6.18 Két ASCII file különbsége : diff

Szintaktikája : diff [ -efbh ] file1 file2

A visszatérési értékek jelentése megegyezik a 6.13-ban leírtakéval.
A fontosabb opciók jelentése :
-e az ed szövegszerkesztô által végrehajtható script-et generál
-b a sorkezdô és egyéb blank karaktereket nem veszi figyelembe az
összehasonlításnál
-h nagy méretû állományok gyors összehasonlítására szolgál, de
csak kis változásokat tud nyomonkövetni. Az -e nem érvényes
ilyenkor !

Példa: Hasonlítsuk össze az ftc1 és az ftc2 filok-at :

diff ftc1 ftc2
Üzenet : 2c2
< lisztes
---
> simon
Ez az üzenet azt jelenti, hogy az elsônek megadott file második
sora (lisztes) megváltozik a második file második sorában
(simon).


6.19 Karakterkonverzió: tr

A parancs szintaktikája :

tr [ -cds ] [string1] [string2]

Az inputbeli és a string1-ben - adott pozíción - megtalálható karaktert
kicseréli a srting2 azonos pozícióján lévô karakterrrel. Ha string2
rövidebb mint string1, akkor az utolsó karakter többszörözôdik. Az op-
ciók jelentése a következô :

-c azok a karakterek vesznek részt a cserében amelyek nem
szerepelnek a string1-ben
-d a string1-ben szereplô karaktereket törli az inputból
-s a string2-ben többször szereplô karaktereket egyszer írja ki

Példa: tr -s " " "\t" < szov
# A szov file-ban a szóközöket tabulátorokra cseréljük, ha
# több tabulátor fordul elô egymásután, akkor csak egyet
# iratunk ki az outputra.


6.20 File keresése: find

Az elsô arumentumban megadott katalógusból kiindulva rekurzív módon
végigjárva a katalógusokat, megkeresi az adott attribútumu file-t.

Szintaktikája : find útvonal kifejezés[ek]

A find-nak rengeteg opciója van, melyek az adott rendszer man-jában
megtalálhatók. A név szerinti keresés opciója : -namefile. Akkor igaz,
ha a file ráilik az aktuális állománynévre. A metakarakterek hasz-
nálhatók !

Példák: find * -inum 159695 # Az 159696-ös inode számú file
# keresése az aktuális könyvtárban
find * -links 3 # Azon file-ok keresése amelyek
# link száma 3
find *.c -name proba* # C kiterjesztésû fileok keresése,
# melyek nevében szerepel a proba
find * -perm 664 # Az rw-rw-r-- jogokkal rendelkezô
# file-ok keresése

6.21 Csövek (pipe-ok) elágaztatása : tee

Szintaktikája a következô : tee [-a] állománynév

A tee a bemenetét a standard inputról veszi, de kimenetét két helyre
küldi: egyrészt a standard outputra, másrészt a paramétereként meg-
nevezett állományba. A -a opció hatására a kimeneti állományt nem írja
felül, hanem hozzáfûzi az újabb kimeneti adatokat.

Példa: ls -l | tee temp # Az alkönyvtár listája megjelenik a kép-
# ernyôn ill. kiíródik a temp nevû file-ba


6.22 Parancs végrehajtás késleltetése : sleep

Szintaktikája : sleep szám[smhd]

Alapértelmezés szerint annyi másodpercig szünetelteti a parancs végre-
hajtást, amennyit a szám-ban megadunk. Az s másodpercben, az m percben,
a h órában, ill. a d napban jelenti a késleltetést.

Példa: ls -l ; sleep 30 ; users # Katalóguslista, majd 30 mp után a
# bejelentkezett személyek listája

A Dune-News szerkesztôsége köszönetet mond Bodlaki Tamás tanárúrnak a
segítségéért, és a jegyzet rendelkezésünkre bocsájtásáért.