Tizedik lecke

"A Unix az az operációs rendszer, melyet buherátorok írtak saját maguk és más buherátorok számára. Ezért a Unix jelszava: Az amatőrök dögöljenek meg!"

Tippek és trükkök

Ez a lecke azok számára készült, akik már egy kissé otthonosak a Unixban, ismerik a fontosabb parancsokat és kapcsolóikat, de tanácstalanok, hogy tulajdonképpen hogyan és mire is használják őket. Bátorításul bemutatunk néhány tippet.

Megkapta-e a címzett a levelünket?

A Unix a beérkező leveleket egy fájlban tárolja, melynek neve egyezik a felhasználó accountjának nevével. Ezek az inbox fájlok* a legtöbb helyen a /usr/spool/mail alkönyvtárban vannak. (Kivétel a Silicon Graphics gépek, ahol a /usr/mail-ben. :-( A saját inboxunkon kívül természetesen senki másét nem tudjuk elolvasni, de az ls paranccsal meg tudjuk nézni, így látjatjuk, hogy levelezőpartnerünknek van-e levele a postaládájában. Ha ezt a vizsgálatot levelünk elküldése előtt és után is elvégezzük, meggyőződhetünk róla, hogy a levél valóban megérkezett. (Némely Unix rendszerek hajlamosak arra, hogy ha a címzett disk quota-ja kimerül, akkor a hozzá beérkező leveleket nyomtalanul eltüntetik.)

A Unix három különféle időpontot tárol a fájlokról, amelyet az ls parancs zárójelben megadott kapcsolóival lehet megtudni:

  1. Last Modificaton - utolsó módosítás (write) (ls -l)

  2. Last Access - utolsó művelet (írás, olvasás, másolás, stb.) (ls -lu)

  3. Last Inode Change - utolsó inode módosítás (create, chmod, stb.) (ls -lc)
E három időpont egymáshoz viszonyított értékéből levonhatók bizonyos -nem okvetlenül helytálló- következtetések. (Például: ha a Last Access későbbi, mint a Last Write, akkor levelünket valószínüleg elolvasták, stb.)

Parancsok végrehajtása bejelentkezés nélkül

Gyakori eset, hogy több gépre is van accountunk, be vagyunk jelentkezve az egyik helyen és valamiért szeretnénk egy parancsot végrehajtani a másik gépen. (Például szeretnénk kiadni egy w parancsot, hogy lássuk, ki milyen processzt futtat a másik gépen.) Ehhez be kellene jelentkeznünk a telnet vagy az rlogin segítségével, beírni a jelszavunkat, begépelni a parancsot és végül kilépni. Van azonban egy kényelmesebb megoldás, az rsh parancs (remote shell). Az rsh a neki megadott parancsot nem nálunk, hanem a távoli gépen hajtja végre. Tegyük fel, hogy az ind12 gépen vagyunk és meg akarjuk nézni, ki milyen processzt futtat az ind03-on. Íme:
ind12% rsh ind03 w
Feltesszük, hogy az ind03 gépen ugyanaz a username-ünk, mint az ind12-n. Ha ez nem így van, akkor a parancsnak meg kell adnunk azt az username-t, amelyiken a parancsot végre szeretnénk hajtani. Ha például a gold.uni-miskolc.hu gépen szeretnénk végrehajtani egy last parancsot és ott valamilyen szeszély folytán xkrm5687 a username-ünk, akkor a megfelelő parancs így néz ki:
ind12% rsh gold.uni-miskolc.hu -l xkrm5687 -n last
Megjegyzés: Sajnos az rsh parancs kapcsolóit a különféle Unix rendszerekben kicsit másképp hívják. A mi példáink Silicon Graphics gépekre vonatkoznak; aki ettől eltérő gépen próbálkozik, az nézzen utána az rsh parancs kapcsolóinak a man-ban!

Ahhoz, hogy az rsh parancs csakugyan végre is hajtsa a kívánt parancsot a távoli gépen és ne a "Permission denied" sztereotip üzenettel térjen vissza, kell, hogy a távoli gépen legyen egy .rhosts fájlunk a kiindulási könyvtárunkban (home directory). A .rhost fájl írja le, hogy mely hostokról milyen username-vel lehet rsh-val belépni. Nézzük az ind12 gépen található alábbi minta .rhosts fájlt:*

ind03
ind11
gold xkrm5687
suma1 stsmork
Ebből a következők derülnek ki. Az ind03 és ind11 gépekről be tudunk rsh-zni az ind12-re feltéve, hogy ugyanaz a username-ünk, mint az ind12-n. A gold-ról csak az xkrm5687 nevü user, a suma1-ről pedig csak stsmork tud távolról parancsokat végrehajtani az ind12-n lévő accountunkon, emennyiben ez a szándékuk.

VIGYÁZAT: Ha valakit felveszünk a .rhosts fájlba, akkor attól a rendszer -Unixban merőben szokatlan módon- nem fogja kérdezni a jelszót, ezért legyünk nagyon óvatosak, mikor .rhosts fájlt készítünk!

A .rhost fájl létrehozásának van egy további kényelmes következménye is: az rlogin parancs nem kérdezi meg a jelszót, mikor olyan gépre tépünk be, ahol a .rhosts fájlban meg van adva a gépünk neve. (Természetesen itt is feltétel, hogy a két gépen azonos legyen a username-ünk, vagy ha nem, akkor a másik username legyen feltüntetve a .rhosts fáljban.)

Talk beszélgetések logózása

A tee olyan Unix program, amely a bemenetére csövezett adatokat megjeleníti a képernyőn (standard kimeneten), és egyúttal a paraméterként megadott fájlba is kiírja. Ha például szeretnénk rögzíteni egy beszélgetés szövegét, amelyet a suma2 gépen bonyolítunk le, akkor a kapcsolat felvétele előtt tegyük a következőket:
suma1% telnet suma2 | tee duma.log
Ettől kezdve minden képernyőn megjelenő karakter egyúttal a duma.log fájlba is bekerül, egészen addig, míg a <Ctrl-d> leütésével ki nem lépünk a suma2 gépről. Miután így bejutottunk a suma2-re, a szokásos módon talkoljuk meg a beszélgetőpartnerünket és csevegjünk vele. Később bármikor visszajátszhatjuk a beszélgetés szövegét a duma.log fájlból a more vagy a cat segítségével.

Foto ftp

A "foto ftp"-nek csúfolt eljárással olyan gépekről hozhatunk el bináris fájlokat, ahová valamilyen okból nem tudunk ftp-vel bejutni.* (Ennek általában az az oka, hogy a két gép között annyira lassú a kapcsolat, hogy a hagyományos ftp program timeout hibával elakad.) A módszer a következő lépésekből áll:

  1. Jelentkezzünk be interaktívan a távoli gépre.

  2. A távoli gépen uuencode-oljuk be az áthozni kívánt fájlt.

  3. Kapcsoljuk be a logfájl szolgáltatást a lokális gépen. (Ha PC-ről jelentkeztünk be, akkor ez általában nem gond, mert minden terminál emulátor képes fájlba másolni a képernyőn megjelenő szöveget. Ha a lokális gép Unixos, akkor használhatjuk az előző pontban leírt módszert.)

  4. A cat segítségével írassuk ki a képernyőre a 2. pontban létre hozott uuencode-olt fájlt. (A 2. pont egyébként kihagyható, mert az uuencode program alapértelmezésben a képernyőre küldi kimenetét.)

  5. Lépjünk ki a távoli gépről és a lokális gépen keletkezett log fájlt uuedecode-oljuk ki.

Átjelentkezés egyik accountról a másikra

Előfordulhat, hogy valamilyen okból át akarunk jelentkezni egy másik accountra. (Pl. több accountunk is van ugyanazon a gépen). Ilyenkor elvileg újra be kellene telnet-elnünk, beírni a másik username-t, megadni a másik jelszót, stb. Van egyszerűbb út is; ha pl. éppen orlando vagyunk és stsmork szeretnénk lenni, akkor:
zeus% su - stsmork
A parancs megkérdezi stsmork jelszavát és -hacsak el nem gépeltük- átjelentkezik az stsmork accountra. A minusz jel és az username közé KELL a szóköz karakter!! Az su parancs használatát* a rendszer biztonsági okokból egy sulog nevű fájlban tárolja.

FIGYELEM! Soha ne adjuk ki paraméterek nélkül az su parancsot! Ez ugyanis a su root-nak felel meg, ami betörési kísérletnek számít, amit a rendszeradminisztrátorok rossznéven szoktak venni!


*************************************************************************
*=                                                                     =*
*=                           SZERZOI JOGOK                             =*
*=                                                                     =*
*=   Ez  a dokumentum a Unix  operacios  rendszer  es a szamitogepes   =*
*=   halozatok elterjedeset  kivanja  elosegiteni, ezert dijmentesen   =*
*=   terjesztheto.  Nem szabad azonban a terjesztes soran a szoveget   =*
*=   megvaltoztatni,  barmilyen  modon  megcsonkitani  es a  szerzoi   =*
*=   jogokra vonatkozo megjegyzest eltavolitani!  Sem  a dokumentum,   =*
*=   sem annak barmely resze nem hasznalhato fel segedanyagkent vagy   =*
*=   tankonyvkent profitorientalt intezmenyekben vagy tanfolyamokon,   =*
*=   a szerzok elozetes irasbeli engedelye nelkul!                     =*
*=                                                                     =*
*=   (C) Csaky Istvan es Mork Peter         Miskolc, 1994. januar 19   =*
*=                                                                     =*
*************************************************************************