Linux kezdőknek

Ez a gyűjtemény azért született, hogy alap információkkal szolgáljon neked. Feltételezzük, hogy elkötelezted magad a Linux használata mellett, ezáltal nem okoz gondot adott esetben a terminál, vagy a terminál emulátor használata. Nagyon fontos, hogy megérts bizonyos alap információkat, amelyek minden Linux disztribúcióban és minden Unixban ugyanazokat jelentik és ugyanúgy működnek. Lássunk néhányat ezek közül.

sudo
Az egyik leggyakoribb parancs, amit használni fogsz. (Ez azt jelenti, hogy nem adtál a root accountnak jelszót és nem rootként használod a rendszert.) A parancs a 'super user do' akronimja, azaz az utána írt parancsok root szintű jogosultsággal hajtódnak végre. A rendszer nem fog rákérdezni, hogy biztosan végre akarod-e hajtani a 'sudo' utáni parancsot, hanem végrehajtja, ha helyesen írtad be - feltételezi, hogy tudod, mit csinálsz. Tehát azt is végre fogja hajtani, ami veszélyes (direkt nem írok példát, nehogy kísértésbe essél).
Nade ki az a root? Ő a rendszerben a valaki. Ő bármibe bele tud nyúlni, konfigurációkba, logokba, szolgáltatásokba, mindenbe.
Amikor a rendszer megkapja a 'sudo' parancsot, akkor bekéri a jelszavadat. A tiedet, nem a rootét, nem a másik felhasználóét, vagy a szomszéd Pistikéét. Amikor elkezded gépelni a jelszavadat, nem fogod látni, úgy tűnhet, hogy nem történik semmi. Valójában de és ha helyes a jelszavad, akkor a 'sudo' után írt parancsot megprobálja lefuttatni a rendszer (helyesebben: a shell) - ha szintaktikailag helyes, le is fog futni, aminek lesz valamilyen eredménye.

Hirdetés

Értem én, de hiába papolod, hogy írjam be a jelszavam, mindig azt kapom, hogy nem vagyok benne a sudoers file-ban!
Ez esetben - hacsak nem ment valami nagyon félre telepítéskor; nem szokott - adtál a root accountnak jelszót. Két irány lehetséges: a 'su' parancs használatával átváltasz a root felhasználóra, vagy beleteszed magad a sudoers file-ba. Utóbbit a visudo paranccsal teheted meg. NEM szerkesztjük a sudoers file-t direktben, mert ha elgépelsz valamit, SOHA többet nem tudsz root jogosultságokat biztosítani magadnak. Ellenben ha a 'visudo' parancsot használod, akkor kilépés előtt szintaktikai ellenőrzésre kerül sor és ha valamit elrontottál, kijavíthatod.

Bemenet, kimenet, pipeline
Minden ámítástechnikai rendszernek van be- és kimenete. Bemenetek alatt azokat a csatornákat értjük, amelyeken keresztül információkat adunk a használni kívánt programnak. A program végrehajtja a feladatát, majd valamelyik kimeneti csatornán szolgáltatja a végeredményt. Ezeket kockául STDIN, STDOUT néven emlegetik, illetve van egy harmadik is: ha a program valamilyen hibát észlel futás közben, akkor nem az STDOUT-ra kerül a kimenet, hanem az STDERR-re. Persze az STDOUT és az STDERR igen gyakran azonos, de nem mindig. Nade miért beszélek én erről? Azért, mert kezdőknél igen gyakori, hogy vakon másolják be az Interneten talált parancsokat a terminálba. Ezekben igen gyakran szerepelnek ehhez hasonlók: <username>.
Nos, mi is történik ekkor? A shellben a ki- és bemeneti csatornák átirányítása a '<', '>', '|' (pipeline - mindjárt részletezem) karakterekkel történhet. Alapértelmezett esetben az STDOUT és STDERR csatornája a képernyő, az STDIN pedig a billentyűzet. Ha a shell azzal találkozik, hogy '<username>', akkor értelmezése szerint az STDIN-t ('<') a 'username' nevű file jelenti, majd az STDOUT kerül átirányításra ('>') - sehová. Íme a titok, ami nem is annyira titok, miközben te végiganyáztad az elmúlt fél órát...
Nem beszéltem még a '|' karakterről. Ő jelenti a pipeline-t. Szó szerint vedd, hogy csővezeték, több parancsot lehet összefúzni vele és a jeltől balra álló parancs kimenete kerül a jeltől jobbra lévő bemenetére. Nem csak két parancsot lehet így összefűzni, hanem többet is akár.
Lássuk a teljes listát ezekről az átirányításokról:

> - STDOUT átirányítása felülírással
>> - STDOUT átirányítása hozzáfűzéssel
< - STDIN átirányítása
<< - STDIN átirányítása, amíg...

Utolsóra példa:
$ cat << EOF > garbage.txt
> bla
> blabla
> blablabla
> EOF
$ ls -ltr
...
-rw-r--r-- 1 xxxxxxx xxxxxxx        21 Dec  7 19:12 garbage.txt

Felettébb jó példa - mi is történik? A cat parancs ("concatenate") azt várja, hogy az STDIN-ről jöjjön információ, egészen addig, amíg nem találkozik az 'EOF' szöveggel. Amint találkozik az 'EOF'-fel, kilistázza, amit addig neki beírtam. Alapesetben ugye a képernyő az STDOUT és ott kellett volna megjelennie a beírt szövegnek. Én azonban ezt átirányítottam (">") egy lokális állományba, a garbage.txt-be, így az létrejött a fenti tartalommal. Ez a shell egyik nagyon erőteljes mechanizmusa és nagy odafigyelést igényel, mert ha csak vaktában másolunk az internetről, felülírhatunk valamit, amit nem kellene - adott esetben nagyon nem kellene.

Mutatok egy egyszerű példát a | használatára is.
Az ls parancs nálam a .bashrc állományból alias-szal rendelkezik, ilyenkor valójában az 'ls -l' parancs fut le. Ez természetesen senkinek nem kötelező, én így szoktam meg. Ennek természetesen következményei vannak, ahogy a narancsfejű mondaná: deal. A következménye a fenti aliasnak az, hogy minden alkalommal a fenti formában kapom a könyvtárlistát, viszont néha csak a file nevekre van szükségem, semmi másra. A megoldáshoz fogom használni a pipeline karaktert:
$ ls | awk '{print $9}'
...
garbage.txt
A fenti parancs lefuttatja az 'ls' parancsot, ami lefut a .bashrc-ben megfogalmazottak szerint és az STDOUT-ra tenné az információkat. Én azonban ezt átirányítom az awk program bemenetére, majd kérem a 9. oszlop "kinyomtatását" az STDOUT-ra, így megkapom csak a file neveket és mást nem. (Nem fogom részletezni az awk-t itt, ha mélyebben érdekel, mit lehet vele kezdeni, kutasd fel az Interneten.)