Informatika1-2015/Gyakorlat2
106. sor: | 106. sor: | ||
=== Pipe, redirect === | === Pipe, redirect === | ||
Minden program írhat a konzolra, vagy az <tt>stderr</tt>-re, ez az, amit a konzolon szoktunk látni. Azonban ezeket a képernyő helyett fájlba is írhatjuk. | Minden program írhat a konzolra, vagy az <tt>stderr</tt>-re, ez az, amit a konzolon szoktunk látni. Azonban ezeket a képernyő helyett fájlba is írhatjuk. | ||
− | < | + | |
− | $ ls -l ~ | + | <code> |
− | drwxr-xr-x 8 borbely student 4096 Aug 30 23:24 Desktop | + | $ <strong>ls -l ~</strong><br> |
− | drwxr-xr-x 2 borbely student 4096 Mar 27 2012 Downloads | + | drwxr-xr-x 8 borbely student 4096 Aug 30 23:24 Desktop<br> |
− | drwxr-xr-x 2 borbely student 4096 Oct 20 2009 Drives | + | drwxr-xr-x 2 borbely student 4096 Mar 27 2012 Downloads<br> |
− | drwx------ 2 borbely student 4096 Apr 20 10:42 mail | + | drwxr-xr-x 2 borbely student 4096 Oct 20 2009 Drives<br> |
− | drwxr-xr-x 7 borbely student 4096 Sep 6 13:01 public_html | + | drwx------ 2 borbely student 4096 Apr 20 10:42 mail<br> |
− | $ ls -l ~ > folder.txt | + | drwxr-xr-x 7 borbely student 4096 Sep 6 13:01 public_html<br> |
− | $ cat folders.txt | + | $ <strong>ls -l ~ > folder.txt</strong><br> |
− | drwxr-xr-x 8 borbely student 4096 Aug 30 23:24 Desktop | + | $ cat folders.txt<br> |
− | drwxr-xr-x 2 borbely student 4096 Mar 27 2012 Downloads | + | drwxr-xr-x 8 borbely student 4096 Aug 30 23:24 Desktop<br> |
− | drwxr-xr-x 2 borbely student 4096 Oct 20 2009 Drives | + | drwxr-xr-x 2 borbely student 4096 Mar 27 2012 Downloads<br> |
− | drwx------ 2 borbely student 4096 Apr 20 10:42 mail | + | drwxr-xr-x 2 borbely student 4096 Oct 20 2009 Drives<br> |
− | drwxr-xr-x 7 borbely student 4096 Sep 6 13:01 public_html | + | drwx------ 2 borbely student 4096 Apr 20 10:42 mail<br> |
+ | drwxr-xr-x 7 borbely student 4096 Sep 6 13:01 public_html<br> | ||
$ _ | $ _ | ||
− | </ | + | </code> |
+ | |||
A '''>''' jellel egy parancs kimenetét egy fájlba irányítjuk át. Ugyanakkor figyeljük meg a következőt: | A '''>''' jellel egy parancs kimenetét egy fájlba irányítjuk át. Ugyanakkor figyeljük meg a következőt: | ||
<pre> | <pre> | ||
130. sor: | 132. sor: | ||
</pre> | </pre> | ||
A '''myfile.txt''' üresen maradt, de a konzolon hibaüzenet jelent meg (nem volt jogunk a mappa listázására). | A '''myfile.txt''' üresen maradt, de a konzolon hibaüzenet jelent meg (nem volt jogunk a mappa listázására). | ||
− | Ez azért van, mert az utóbbi '''ls''' parancs nem a standard kimenetre, hanem a hiba-kimenetre '''stderr''' írt. | + | Ez azért van, mert az utóbbi '''ls''' parancs nem a standard kimenetre, hanem a hiba-kimenetre, azaz '''stderr'''-re írt. |
Az '''stderr'''-t a <tt>2></tt> jelel irányíthatjuk át: | Az '''stderr'''-t a <tt>2></tt> jelel irányíthatjuk át: | ||
<pre> | <pre> | ||
139. sor: | 141. sor: | ||
$ _ | $ _ | ||
</pre> | </pre> | ||
+ | Így az egyik fájlba a standard kimenet ('''stdout'''), a másikban az '''stderr''' került bele. | ||
+ | |||
+ | Az egyes programok olvashatnak a standard bemenetükről: '''stdin'''. | ||
+ | Az ú.n. nem-interaktív parancsok olyanok, hogy a parancs kiadása után a befejezéséig nem nyúlunk a billentyűzethez. Ezekkel csak az argumentumaikon keresztül kommunikálhatunk. Interaktív parancsok a futásuk közben olvasnak a standard bemenetükről: '''stdin''' | ||
+ | * nem-interaktív parancs: <tt>grep "needle" haystack.txt</tt> | ||
+ | * interaktív parancs: <tt>grep "needle"</tt> | ||
+ | Előbbi esetben a '''grep''' egy megadott fájlban keresi a ''needle'' kifejezést. | ||
+ | Az utóbbi esetben a beírt szövegben keresi ugyanazt. | ||
+ | <pre> | ||
+ | $ grep "needle" | ||
+ | I hate this | ||
+ | why can't I find anything | ||
+ | why can't I find a needle | ||
+ | why can't I find a needle | ||
+ | oh, a needle | ||
+ | oh, a needle | ||
+ | again | ||
+ | $ _ | ||
+ | </pre> | ||
+ | A Ctrl+D billentyű-kombinációval megszakítjuk a futást. | ||
+ | A ''needle''-t tartalmazó sorok duplán vannak, mert azokat a '''grep''' kérésemre kiírta. | ||
+ | |||
+ | Próbáljuk ki így: | ||
+ | <pre> | ||
+ | $ grep "needle" > needle.txt | ||
+ | I hate this | ||
+ | why can't I find anything | ||
+ | why can't I find a needle | ||
+ | oh, a needle | ||
+ | again | ||
+ | $ cat needle.txt | ||
+ | why can't I find a needle | ||
+ | oh, a needle | ||
+ | $ _ | ||
+ | </pre> | ||
+ | Ezzel kiválasztottuk a bemenetről a ''needle''-t tartalmazó sorokat. | ||
=== Shell script === | === Shell script === |
A lap 2015. szeptember 6., 17:02-kori változata
Előző gyakorlat - Fel - Következő gyakorlat
Tartalomjegyzék |
Linux jogok
- Jogosultsági körök
- speruser (su) felhasználók, pl. rendszergazdák
- owner, egy adott fájl tulajdonosa, aki létrehozta, pl kispista
- group, felhasználóknak egy részhalmaza, amelybe az owner is beletartozik, pl. student
- others, mindenki más, nyilvános, guest vagy egyéb nem megbízható felhasználó
- Jogosultsági típusok
- w: Write, írhatja, olvashatja a fájlt
- r: Read, olvashatja a fájl vagy könyvtár tartalmát
- x: eXecute, futtathatja a fájlt (programok, script-ek), vagy listázhatja a könyvtárat
- -: semmi
Ezekből a lehetőségekből válogathatunk, vagyis megadhatjuk, hogy egy adott kör, mely jogokkal rendelkezzen. Például
- a tulajdonos írhatja, olvashatja, futtathatja
- a csoportja olvashatja, futtathatja
- mások semmit
A superuser-ek (su) mindig mindent csinálhatnak, azt nem tudjuk korlátozni, su jogot csak su adhat vagy vehet el.
Ezekre van karakteres és numerikus kód, a tömörebb olvashatóság kedvéért:
- u: user, owner
- g: group
- o: others
- a: mindenki: a fájl tulajdonosa, annak csoportja és mindenki más is.
- olvasás: r vagy 4
- írás: w vagy 2
- execute: x vagy 1
- semmi: 0
Az a nem ugyan az, mint az o, mert elképzelhető, hogy a group-nak nem adok jogot valamire, de a csoporton kívüli embereknek igen.
Karakteresen a jogokat egy 10 karakterből álló sztring tartalmazza:
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
típus | owner jogok | group jogok | others | ||||||
read | write | execute | read | write | execute | read | write | execute |
$ ls -l ~ drwxr-xr-x 8 borbely student 4096 Aug 30 23:24 Desktop drwxr-xr-x 2 borbely student 4096 Mar 27 2012 Downloads drwxr-xr-x 2 borbely student 4096 Oct 20 2009 Drives drwx------ 2 borbely student 4096 Apr 20 10:42 mail drwxr-xr-x 7 borbely student 4096 Sep 6 13:01 public_html $ _
A public_html mappámnak a tulajdonosa: borbely, csoportja student, azonosító: drwxr-xr-x, vagyis:
- típusa d: könyvtár
- saját jogaim rwx, vagyis minden (hál' Istennek)
- diáktársaim jogai r-x, vagyis írni nem írhatják, de minden mást szabad
- mindenki másnak r-x, vagyis más is olvashatja és futtathatja
Numerikusan egy 3 számból álló érték határozza meg a jogokat. Balról az első szám az owner jogok, aztán group majd others. A számok 4: olvasás, 2: írás, 1: execute. Ezek összeadódhatnak. Pl /home/student/borbely/public_html jogai: 755 azaz
- owner (borbely) 7=4+2+1: írás, olvasás és futtatás
- group (student) 5=4+1: olvasás és futtatás
- other 5=4+1: olvasás és futtatás
chmod
A jogokat a chmod paranccsal változtathatjuk meg. Néhány példa:
- chmod 700 ~/info_hazi: elrejtem az info_hazi mappámat rajtam kívül mindenki elől (nem tudnak belelépni, sem listázni a tartalmát), persze a superuser-ek láthatják.
- chmod 750 ~/important_work: ebben a mappában egy group-al együtt dolgozok valamin, a group olvashatja és futtathatja, én írhatom is, senki más nem láthatja.
- chmod 750 -R ~/public_html: az -R kapcsoló rekurzívan alkalmazza a beállításokat a mappa tartalmára.
Bővebben
- man chmod
- leírás
Bash
Alapvető parancsok
- pwd: aktuális könyvtár kiíratása.
- cd: könyvtárváltás. Ha paraméter nélkül hívjuk meg, akkor a saját mappánkba visz. Pl cd /mnt, cd, cd ..
- ls: könyvtár tartalmának listázása. Pl: ls, ls -h, ls /dev, ls -h -l ~
- mkdir: könyvtár létrehozása. mkdir NewFolder
- cp: másolás. cp mit.txt hova.txt
- mv: mozgatás/átnevezés (az eredeti nem marad meg). mv mit.txt hova.txt
- rm: törlés, Pl: rm alma.txt, rekurzívan töröl minent a mappával együtt: rm -r NewFolder
- quota: A felhasznált/megmaradt helyet írja ki. Ha a kvótánk betelik, akkor nem kapjuk meg a nekünk címzett leveleket és a grafikus terminálra sem tudunk belépni; ilyenkor a parancssoros terminálra belépve tudjuk kitakarítani a home-unkat.
- df, du: lemezen szabad / felhasznált helyet írja ki. A -h kapcsolóval olvasható GB, MB, kB értékeket kapunk, de lehet fix byte-okban is kiírni. Pl: df -h ~
- mc: midnight commander fájlböngésző.
- man: az adott parancsról leírást ad. A leírásban navigálni a 'fel', illetve a 'le' billentyűkkel, továbbá a 'PageUp', 'PageDown'-nal lehet. Kereséshez '/' jel után kell beírni a kifejezést. Kilépés 'q'-val. man ls
- history: parancs történet lekérdezése.
- apropos: parancs/program nevek keresése. apropos vi
- top: futó alkalmazások.
- kill, killall, xkill: folyamatok leállítása. Egy adott felhasználó összes folyamatának leállítása: killall -u username
- cat: fájl tartalmának kiíratása. Pl: cat .forward
- echo: kiírja az argumentumait, Pl: echo Hello World.
- grep: szöveg mintázatok keresése állományokban. grep "tű" szénakazal.txt
- less: szöveges állományok megjelenítése, könnyebb olvashatóság nagy fájloknál, Pl less valami.txt
- head (-n ), tail (-n ): fájl elejének és végének a kiiratása. head -n 100 valami.txt
- sort (-g -k): szövegállomány rendezése.
- wc (-l): byte/karakterek/sorok számolás adott fájlra.
- ssh: távoli gépre való bejelentkezést teszi lehetővé. Mat Intézetből egyszerűen: ssh leibniz
- scp: távoli gépre/gépről való másolás. scp felhasznalo@leibniz.math.bme.hu/home/stu_bme/felhasznalo/dokumentum.txt ./dokumentum.txt
- wget: file-ok letöltése internetről, HTTP, HTTPS és FTP használatával.
- exit: kilépés terminálból (vagy ctrl+d).
- sudo: programok futtatása superuserként. (Mat intézetben erre nem lesz lehetőségünk) Pl. sudo rm file_of_someone_I_hate.txt
- halt, reboot: kikapcsol, újraindít (Mat intézetben erre sem lesz lehetőségünk)
Pipe, redirect
Minden program írhat a konzolra, vagy az stderr-re, ez az, amit a konzolon szoktunk látni. Azonban ezeket a képernyő helyett fájlba is írhatjuk.
$ ls -l ~
drwxr-xr-x 8 borbely student 4096 Aug 30 23:24 Desktop
drwxr-xr-x 2 borbely student 4096 Mar 27 2012 Downloads
drwxr-xr-x 2 borbely student 4096 Oct 20 2009 Drives
drwx------ 2 borbely student 4096 Apr 20 10:42 mail
drwxr-xr-x 7 borbely student 4096 Sep 6 13:01 public_html
$ ls -l ~ > folder.txt
$ cat folders.txt
drwxr-xr-x 8 borbely student 4096 Aug 30 23:24 Desktop
drwxr-xr-x 2 borbely student 4096 Mar 27 2012 Downloads
drwxr-xr-x 2 borbely student 4096 Oct 20 2009 Drives
drwx------ 2 borbely student 4096 Apr 20 10:42 mail
drwxr-xr-x 7 borbely student 4096 Sep 6 13:01 public_html
$ _
A > jellel egy parancs kimenetét egy fájlba irányítjuk át. Ugyanakkor figyeljük meg a következőt:
$ ls -l /home/algebra/wettl/ > myfile.txt ls: cannot open directory /home/algebra/wettl/: Permission denied $ cat myfile.txt $ _
A myfile.txt üresen maradt, de a konzolon hibaüzenet jelent meg (nem volt jogunk a mappa listázására). Ez azért van, mert az utóbbi ls parancs nem a standard kimenetre, hanem a hiba-kimenetre, azaz stderr-re írt. Az stderr-t a 2> jelel irányíthatjuk át:
$ ls -l /home/algebra/wettl/ > myfile.txt 2> error.log $ cat myfile.txt $ cat error.log ls: cannot open directory /home/algebra/wettl/: Permission denied $ _
Így az egyik fájlba a standard kimenet (stdout), a másikban az stderr került bele.
Az egyes programok olvashatnak a standard bemenetükről: stdin. Az ú.n. nem-interaktív parancsok olyanok, hogy a parancs kiadása után a befejezéséig nem nyúlunk a billentyűzethez. Ezekkel csak az argumentumaikon keresztül kommunikálhatunk. Interaktív parancsok a futásuk közben olvasnak a standard bemenetükről: stdin
- nem-interaktív parancs: grep "needle" haystack.txt
- interaktív parancs: grep "needle"
Előbbi esetben a grep egy megadott fájlban keresi a needle kifejezést. Az utóbbi esetben a beírt szövegben keresi ugyanazt.
$ grep "needle" I hate this why can't I find anything why can't I find a needle why can't I find a needle oh, a needle oh, a needle again $ _
A Ctrl+D billentyű-kombinációval megszakítjuk a futást. A needle-t tartalmazó sorok duplán vannak, mert azokat a grep kérésemre kiírta.
Próbáljuk ki így:
$ grep "needle" > needle.txt I hate this why can't I find anything why can't I find a needle oh, a needle again $ cat needle.txt why can't I find a needle oh, a needle $ _
Ezzel kiválasztottuk a bemenetről a needle-t tartalmazó sorokat.