UNIX, Alaptanfolyam, Audi AG Győr, 1999. Bevezetés --------- 1969 volt, amikor a UNIX első prototípusát elkészítették, azóta már az operációs rendszer több száz verziója látott napvilágot. Ma a nagyobb cégek az egységes UNIX elkészítését szorgalmazzák, mely rendszer, az összes főbb UNIX változatot tartalmazni fogja. Manapság az Internet rohamos terjeszkedésének köszönhetően mi magunk is a UNIX felhasználók táborába léptünk. De mi is ez a UNIX? A UNIX egy számítógépes operációs rendszer, az operációs rendszer pedig a számítógép lelke, ettől válik "élővé" a hardver. A UNIX történetének főbb állomásai ---------------------------------- A 60-as évek végén Dennis Richie és Ken Thompson fejlesztette ki a UNIX első változatát az AT&T Bell Laboratóriumában New Jersey-ben. 1973-ban átírják a UNIX-ot Assembly-ből C-be, ezzel könnyen hordozhatóvá válik az operációs rendszer. Közben az AT&T kiszáll a szoftverpiacról, így a UNIX nagyon olcsóvá válik és hamarosan a piac 80%-kát uralja. A fejlesztés két nagy ágra szakad, az egyik az eredeti ún. System V. vonal, (az IBM AIX is ide tartozik), a másik a Berkley egyetem indította BSD (Berkley Software Distribution) család. 1986-ban készíti el az IBM az RT néven közismert IBM 6150 számítógépét, amit az AIX operációs rendszer első változataival szállítottak (AIX 1.0 - AIX 2.1). 1990-ben készültek el a RISC6000-es család első számítógépei ezek újabb és újabb AIX verziókkal kerültek forgalomba (AIX 3.1 - AIX 3.2.5 - AIX 4.1). Linus Torvards diplomamunkájaként elkészítette a Linux első változatát. Ez a munka a GNU (GNU = Gnu is Not Unix) projekt keretében történt, így a GPL-nek (Általános Közengedélynek) köszönhetően az új operációs rendszer jószerint ingyenesen terjeszthető és használható. UNIX változatai --------------- A különböző cégek mind elkészítették a saját UNIX verzióikat, ezek közül személyi számítógépre készültek a következők: - SCO (Santa Cruz Operation) - UnixWare (NOVELL) - Interactive (KODAK) - Linux (GNU) - Xenix Munkaállomás (terminál) - nagygépes rendszerre készült UNIX verziók: - AIX (IBM, RS/6000) - SUNOS: Solaris (Sun Microsystem) - ULTRIX - OSF/1 (DEC) - HP/UX (Hewlet Packard) - IRIX (Silicon Graphics) - UNICOS (Cray) A UNIX jellemzői ---------------- - hordozhatóság - multitasking - multiuser - rugalmasság - modulrendszerű - eszköz független fájlrendszer - redundancia A UNIX egy többfeladatos-többfelhasználós (multitasking-multiuser) operációs rendszer. Összehasonlításképpen az MS-DOS esetén egyszerre csak egy feladaton és egy felhasználó dolgozhat, a Windows esetén szintén egy felhasználó dolgozhat, bár ő egyszerre több feladatot is képes végrehajtani (bizonyos korlátokkal), a NOVELL Netware pedig több felhasználót szolgál ki, de egyszerre csak egy-egy feladattal. A nagy fokú hordozhatóságot a Dennis Richie által írt C nyelv biztosítja. A rugalmasság a különféle shellek különféle beállításai lehetőségeinek köszönhető. A modulrendszerű felépítés már a kernelben is tetten érhető. Az eszköz független állományrendszer a logikai és a fizikai szint teljes szétválását jelenti, például az egyes hardver eszközöket mint, egy-egy fájlt tudjuk kezelni. A redundancia itt a parancsok sokféleségére és sokszor azonos funkciójukra utal, ami a szerteágazó fejlődésnek tudható be. A UNIX felépítése ----------------- A UNIX legbelső magja a kernel, amely a rendszer erőforrásainak szétosztását, és a futó folyamatok ütemezését végzi. A kernel köré épülnek a különböző programok, melyek közül legfontosabb a shell. Ez felelős a begépelt parancsok értelmezéséért és a programok meghívásáért. De a shell több mint egyszerű parancsértelmező, mert a bonyolult scriptek megírásának lehetősége miatt egy egyszerű programozási nyelvnek is tekinthetjük. Általában a UNIX verziói tartalmazzák a legelterjedtebb és a UNIX kialakulásával együtt született három shellt. Ezek a Bourne shell, a C shell és a Korn shell. A UNIX-ban minden program indításával egy folyamat (process) indul el. Ezek lehetnek a felhasználótól függetlenül a háttérben működő folyamatok is (background process). Azokat a speciális háttérfolyamatokat pedig, amelyek állandóan futnak és valamilyen felügyeleti szerepet látnak el, démonoknak (daemon) hívjuk. A démonoknak átadott kérelmek (pl. nyomtatási kérelem) neve a munka (job). A démon a munkákat különböző szempontok szerint sorba (queue) állítja és egyenként végrehajtja őket. Belépés a rendszerbe -------------------- Mivel ez egy többfelhasználós rendszer, ezért a UNIX operációs rendszer felállása és a felhasználók belépése nem esik egy időbe. A felhasználók (user) a rendszer feléledését követően soros vonali vagy hálózati terminálokon léphetnek be. (Pl. A PC-énken futó terminál emulátor program segítségével egy Novell hálózaton is csatlakozhatunk a UNIX rendszerhez). A terminálok között mindig létezik egy kitüntetett rendszerterminál vagy másképpen konzol (console), ezen egy kitüntetett user, a rendszergazda (root) különböző kritikus akciókat hajthat végre. Nézzük, hogy is történik a rendszerbelépés? Először minden felhasználó a login: promptnál az azonosítóját gépeli be, majd a password: promptnál a jelszavát (ez a képernyőn biztonsági okokból nem látható). A kezdőjelszót, ugyanúgy mint az azonosítót, a rendszergazda adja minden felhasználónak, amikor az adott felhasználót létrehozza a rendszerben. Az első belépéskor ezt a jelszót illik lecserélni és ajánlatos a későbbiek során is folyamatosan váltogatni. A belépéskor a rendszer kiír pár információt a képernyőre (pl. jött-e levelünk) aztán a saját, a felhasználó számára kijelölt (home) könyvtárunkban állva megkapjuk a promptot, ami általában egy $ vagy egy % jel vagy esetleg, ahogy a DOS-ban már megszoktuk, az aktuális könyvtár neve. A belépési környezetet mi magunk is befolyásolhatjuk (pl. .profile fájlunk átírásával). A jelszó -------- A jelszavunk a passwd paranccsal tudjuk lecserélni. Bevitelkor a kis és nagy betűk különbözőeknek számítanak. Ha véletlenül elhibáztuk a gépelést, akkor a CTRL+u segítségével célszerű törölni az addigi teljes gépelést és újra beírni az egész jelszavunk. A jelszó lehetőleg soha ne legyen személyes, továbbá általánosan kerülendőek az értelmes szavak. A nagyobb biztonság érdekében használjuk kis/nagy betűket és számokat is egyaránt. Például biztonságos a jelszó, ha egy értelmes szót megtoldunk még pár betűvel és pár számmal, továbbá egyes betűit nagybetűkkel írjuk a többit pedig kicsivel. Pl. walkman, walkmano, walkmano123, WALkmano123. Utolsó tippem, hogy kerüljük az Y és a Z betűk valamint a 0 számjegy jelszóbéli használatát, mert ezek elhelyezkedése a billentyűzeteken nem mindig kézenfekvő. A rendszergazda beállíthat néhány biztonsági szolgáltatást a jelszónkra nézve, ilyenek pl. a jelszó minimális hossza és a jelszó lejárati ideje. Ha esetleg elfelejtjük saját jelszónkat, akkor a rendszergazda segíthet, bár a jelszónkat ő se tudhatja, de adhat helyette másik, új jelszót. passwd (password) - jelszó megváltoztatása Formája: passwd [opciók] [lgnév] Loginnév hiányában a parancs kiadójának jelszavát változtathatjuk meg. Opciók: -d Törli a felhasználó jelszavát. -s Megmutatja a jelszó attribútumát. Kijelentkezés ------------- Erre jók a logout és az exit parancsok. A különbség, hogy az exit elsőre kilépés helyett csak figyelmeztet, ha van a háttérben futó folyamatunk. Kilépésre használhatjuk még a shell CTRL+d bezárás forróbillentyűjét is. A Shell változatai ------------------ A shell (burok v. héj) több változata is elterjedt: - bsh: Bourne shell: írta Steve Bourne. - csh: C shell: a C nyelvre hasonlító shell. - ksh: Korn shell: írta David Korn, a Bourne és a C shell keveréke. - bash: Bourne Again Shell: Bourne shell továbbfejlesztett változata. - tcsh: A C shell továbbfejlesztett változata. A shell üzeneteinél láthatjuk, hogy itt az AIX-nél mi most a ksh-val állunk szemben. A Shell forróbillentyűi ----------------------- - CTRL+u Sor törlése. - CTRL+l Képernyő újrarajzoltatása. - CTRL+d Bevitel befejezése. - CTRL+c Parancs megszakítása. - CTRL+s Folyamat felfüggesztése billentyű nyomásáig. - CTRL+q Folyamat felfüggesztése billentyű nyomásáig. - CTRL+z Folyamat felfüggesztése (suspend mód). (A folyamat folytatható fg paranccsal vagy háttérbe küldhető a bg paranccsal). Nagyon kellemetlen tud lenni, ha nem működik a terminálunkon a visszatörlés (backspace). Ilyenkor meg lehet próbálni helyette a CTRL+backspace ill. a CTRL+h billentyű kombinációkat. Parancsok és korábbi parancsok editálása ---------------------------------------- A UNIX a korábbi parancsokat az .sh_history fájlba gyűjtögeti. Ezeket a beállított szövegszerkesztővel editálhatjuk. Tehát például, ha set -o vi paranccsal a vi a beállított, akkor egy ESC után j és k betűvel válogathatunk a korábbi parancsok között (ugyanúgy mintha fel-le haladnánk egy text fájlban), ha viszont a set -o emacs parancs volt kiadva, akkor a CTRL+p és CTRL+n billentyű kombinációkkal juthatunk a korábbi parancsokhoz. Minden editálási funkció az adott szerkesztőben megszokottal azonosan működik. (Pl. a törlés és a balra mozgás: vi - x és h, emacs - BACKSPACE és CTRL+b). Tippek a .profile feltöltéséhez ------------------------------- set -o emacs export TMOUT=0 export ENV='$HOME/.kshrc' alias md='mkdir' PS1='$PWD>' Ki vagyok én? Kik vannak itt? ----------------------------- Saját magamról adnak információt az id, a whoami és a who am i parancsok. Hogy kik dolgoznak még éppen a gépen arról a who, a w és a finger parancsok segítségével győződhetünk meg. A who parancs arra is jó, hogy megtudjuk mikor kapcsolták be utoljára a rendszert: who -b A finger és a who paranccsal az egyes felhasználókról külön-külön is kérhetünk információkat. Pl. finger vigh Gyakorlás --------- mkdir WWW bin mail trash ls passwd chfn nev,osztaly,telefon echo UNIX alaptanfolyam >.plan finger On-line segítség ---------------- A legtöbb parancs megfelelő argumentumok hiányában vagy a -? opcióra pár angol sorban tájékoztat a parancs használatáról. Bővebb információt a man (manual) parancs segítségével kaphatunk. A man parancs argumentumaként adjuk meg a megismerni kívánt parancs nevét! A UNIX fájlrendszere -------------------- A fájlok hierarchikus könyvtárszerkezetbe szervezettek, ez előnyös a többfelhasználós rendszerben, hiszen minden felhasználó külön jogokat kaphat a saját kis ágára a teljes fában. A könyvtárszerkezetben kitüntetünk négy pontot: az aktuális könyvtárat (.), az aktuális könyvtár szülőkönyvtárát (..), a felhasználó saját könyvtárát, ahol a saját kis ága kezdődik az egész könyvtárszerkezetben (~), valamint a főkönyvtárat (/). Itt felhívnám a figyelmet, hogy csakúgy mint a főkönyvtár jele, a könyvtárakat elválasztó jel is a per (és nem a backslash). Minden fájlhoz tartozik egy tulajdonos (felhasználói azonosító: uid) és a tulajdonos csoportja (csoport azonosító: gid). Ez biztosítja az egyes felhasználók munkájának védelmét és ugyanakkor rugalmas lehetőséget ad a közös munkákra. A UNIX fájlelnevezési konvenciói sokkal lazábbak az eddig megismert operációs rendszerekéhez képest. A fájlok hossza általában maximum 14 karakter lehet, bár ez a korlát kiterjeszthető 255 karakterre is. A fájlnév nem bomlik külön névre és kiterjesztésre és a névben tetszőleges számú szeparátor jel (.) is szerepelhet. Ha a szeparátor jel a fájlnév elején szerepel, akkor a fájl rejtett fájl (hidden file). Az ilyen fájlok általában adminisztrációs és konfigurációs célokat szolgálnak és egy normál fájllistában megjelenítésük nem szükséges. Bár elvileg a fájlnév bármely karakterekből állhat (ma már a 128-nál nagyobb ASCII kódú karaktereket, így az ékezetes betűket is támogatja némely UNIX verzió), de egyelőre mégsem ajánlatos a magyar ékezetes betűkkel kisérletezni, valamint lehetőleg a speciális jeleket (*?@#$!&) se használjuk a fájlnevekben. Nagyon fontos dolog, hogy a korábbi operációs rendszerekben megszokott-tal ellentétben a UNIX megkülönbözteti a kis és a nagy betűket, vagyis a UNIX esetérzékeny (case sensitive). Például a readme.txt, a Readme.txt és a README.TXT fájlnevek mind különböző fájlokat azonosíthatnak. Könyvtárkezelés --------------- cd (change directory) - könyvtárváltás Formája: cd [út] Egyetlen opcionális argumentuma az a könyvtárnév, ahová szeretnénk belépni. Ezt megadhatjuk, mint mindig, abszolút vagy relatív úttal, ha pedig nem adunk meg könyvtárat, akkor a saját ($HOME) könyvtárunkba juthatunk. Speciális jelek jelentése: . az aktuális könyvtár .. a szülő könyvtár ( a saját könyvtár - az előző könyvtár Példák: cd cd .. cd / cd ../.. cd ../../usr cd ( cd (/WWW ls (list) - könyvtár fájljainak listázása (azonos a li paranccsal) Formája: ls [opciók] [út] Az út a listázandó könyvtárat jelöli, ha ez nincs megadva, akkor az aktuális könyvtár listázódik. A legfontosabb opciók: -a A ponttal kezdődő (rejtett) fájlokat is kilistázza. -A Mint az előző, de még a . és a .. is fog szerepelni a listában. -C Oszlop folytonosan listáz. -F A fájl típusára utalva listáz (*/() -i Az inode értékekkel együtt listáz. -Ic A fájl méretét is listázza. -Io A fájl tulajdonosát is listázza. -Ic A fájl utolsó módosításának idejét is listázza. -l Részletes listát kapunk (ld. lentebb). -r A lista fordított sorrendben jelenik meg. -R Rekurzívan az adott könyvtár alkönyvtárainak tartalmát is kilistázza. -s A könyvtárnak csak a nevét írja ki, a tartalmát nem. -t Idősorrendi listát kapunk. -x Sorfolytonosan listáz. Lássunk egy példát a részletes lista egy bejegyzésére: -rw-rw-rw 1 users guest 80 May 19 20:23 Readme.text Az oszlopok sorban a következő adatokat tartalmazzák: hozzáférési jogok, láncszám, az állomány tulajdonosának neve és csoportja, a fájl mérete bájtokban, az utolsó módosítás ideje és végül a fájl neve. pwd (print working directory) - az aktuális könyvtár kiírása Formája: pwd Amennyiben a promptban (PS1) nincs beállítva a $PWD változó, akkor ezzel a paranccsal győződhetünk meg arról, hogy melyik is az aktuális munkakönyvtár. mkdir (make directory) - könyvtár létrehozása Formája: mkdir [opciók] út Az út a létrehozandó könyvtárat jelöli. Az opciók pedig a következők: -m Az új könyvtár hozzáférési joga a értéke lesz (ld. chmod). -p Ha az útban nem létező könyvtárak is szerepelnek, a végrehajtás mégis sikeres lesz, mert a hiányzó könyvtárakat is létrehozza. rmdir (remove directory) - könyvtár törlése Formája: rmdir [opciók] út Az út a törlendő könyvtárat adja meg. Az opciók pedig a következők: -p A könyvtárnak a szülő könyvtárait is törli rekurzívan mindaddig, amíg a szülőkönyvtárak üresek. A megmaradt utat pedig kiírja. -s A -p opció üzenetét tiltja le. Fájlkezelés ----------- cat - fájl megjelenítése Formája: cat [opciók] fájl1...fájlN Az adott fájl(oka)t karakterenként a képernyőre listázza. Ha a fájlunk hosszú és szeretnénk laponként olvasni, akkor használjuk inkább a pg vagy a more parancsokat. Mint a többi fájlparancsnál, ennél is, a fájl megadásakor használhatunk joker karaktereket (*,?). A ? egy, * pedig több, de véges számú karaktert helyettesíthet. A fontosabb opciók: -s Ha valamelyik fájl hiányzik, akkor sem kapunk hibaüzenetet. cp (copy) - fájl másolása Formája: cp [opciók] fájl1 fájl2 vagy cp [opciók] fájl1...fájlN út Az adott fájlt más néven vagy az adott fájl(oka)t egy másik könyvtárba másolja. A fontosabb opciók: -i Felülírás előtt jóváhagyást kér. -p Örökíti az eredeti fájl hozzáférési jogait. -r Ha a fájl1 könyvtár, akkor az alkönyvtáraival együtt másol. ln (link) - fájl linkelése Formája: ln [opciók] fájl1 fájl2 A adott fájl1-hez hozzákapcsol egy új fájl2 bejegyzést. Ezután már ilyen néven is hivatkozunk az eredeti fájlunkra. Fontosabb opciók: -s Hatására szimbolikus lánc keletkezik. mv (move) - fájl mozgatása és átnevezése Formája: mv [opciók] fájl1 fájl2 vagy mv [opciók] fájl1...fájlN út Az adott fájlt átnevezi vagy az adott fájl(oka)t egy másik könyvtárba mozgatja. A fontosabb opciók: -f Az írásvédett állományok is automatikusan felülíródnak. -i Felülírás előtt jóváhagyást kér. rm (remove) - fájl törlése Formája: rm [opciók] fájl1...fájlN Az adott fájl(oka)t letörli. Figyelem: a törölt fájlok visszaállítására nincs mód! A fontosabb opciók: -f Az írásvédett állományok is automatikusan letörlődnek. -i Törlés előtt jóváhagyást kér. -r Ha a fájl1 könyvtár, akkor az alkönyvtáraival együtt töröl. chmod (change mode) - hozzáférési jogok megváltoztatása Formája: chmod mód név vagy chmod [kinek]operátor engedélyek név A mód három darab oktális számjegyet (ugo) jelent. Ahol az első szám a tulajdonos jogait állítja, a második szám a tulajdonossal azonos csoportban lévő felhasználók jogait állítja, az utolsó szám pedig a többiekét. A hozzáférési jogokat az oktális számjegy egyes bitjei adják meg: 0. bit - a fájl végrehajtható, 1. bit - a fájl írható, 2. bit - a fájl olvasható. A szimbolikus megadási formánál a kinek u, g vagy o betű lehet. Ha nincs megadva, akkor az összes számjegyre vonatkozik. Az operátor plusz vagy mínusz lehet, amely a bit be- vagy kikapcsolását jelzi. Az engedélyek pedig a bit sorszámát határozzák meg: x - 0. bit, w - 1. bit és r - 2. bit. -R Rekurzívan az alkönyvtárainak tartalmát is beállítja. Példák: chmod 600 .netrc chmod u+x bin/run.bat chmod 444 myfile.txt chmod g+rw kozos chmod -R 644 *.html További parancsok: del Az rm parancshoz hasonlóan töröl, de együttes megerősítést kér. head Egy fájl elejéről adott számú sor kiírása. tail Egy fájl végéről adott számú sor kiírása. Átirányítási példák ------------------- ls >directory_listing.txt (set -o noclobber) ls -l >>directory_listing.txt ls -lR /home >teljes_lista.txt export export P1='$PWD>' >>.profile pg export P1='$PWD>' >>.profile ls -U >error.txt ls -U 2>error.txt sort echo gabi >>unsorted.txt; echo peter >>unsorted.txt pg >unsorted.txt sort sorted.txt cat unsorted.txt | sort cat teljes_lista.txt | sort | pg cat sorted.txt unsorted.txt >vegyes.txt wc -w <.plan who | wc -l Fájl transzfer -------------- Az FTP (File Transzfer Protocol) fájlok gyors átvitelét teszi lehetővé az Interneten. Léteznek úgynevezett Anonymous ftp-szerverek (pl. ftp.szif.hu), melyek rendelkeznek egy anonymous (vagy ftp) felhasználónévvel. Ez az account mindenki számára publikus és belépéskor a jelszó helyett a saját E-mail címünket illik megadni. Ezt követően az ftp programunk parancsainak segítségével válogathatunk a szerveren megtalálható fájlok között. (Az FTP programnak létezik DOS platformra írt verziója is, amivel pl. a unix és a DOS területünk között is cserélgethetjük a fájljainkat). Ftp parancsok ------------- Néhány már ismerős parancson kívül (cd, pwd, ls, mkdir, rmdir, !) használhatók: ascii Szöveges fájlok átvitele előtt érdemes kiadni (7-bites átvitel). bin Bináris fájlok átvitele előtt kell kiadni (8-bites átvitel). by Kilépés (bye). dir Az ls -l szinonimája. Második argumentumnak megadható egy fájlnév is, ha a listát nem a képernyőre szeretnénk lekérni. get A távoli gépről tölthető le egy adott fájl. Ha a fájl szöveges és még egy - jelet is megadunk argumentumnak, akkor a fájl a képernyőre íródik. mget A joker karakterek használhatók és így több fájl is letölthető egyszere a távoli gépről. put Egy adott fájl feltöltése a távoli gépre. mput A joker karakterek használhatók és így több fájl is feltölthető. lcd A lokális gépen válthatunk könyvtárat. hash Hatására a fájl átvitele közben 1 Kbájtonként kiír egy # karaktert. proxy Segítségével használható egy másodlagos távoli gép is. prompt Hatására a program mindenféle kérdésen átlép igenleges válasszal. A .netrc fájl használata ------------------------ A hálózat terheltsége miatt a hosszabb fájlokat célszerű éjjel vagy a hétvégén letölteni. Ehhez nyújt segítséget az at parancs és a .netrc fájl. Az at parancsnak argumentuma egy időpont (pl. at 2359) és azokat a parancsokat pedig, amelyeket majd az adott időpontban a shell lefuttat, a standard inputon kell megadni (Pl. ftp x2ftp.oulu.fi és CTRL+d). Az ftp parancsok a .netrc fájl init makrók definícióiba kerülhetnek. Egy-egy makrót legalább két üres sornak kell lezárnia. íme egy példa egy .netrc fájl tartalmára: machine x2ftp.oulu.fi login anonymous password kovacsb@rs3.szif.hu macdef init prompt cd /pub/msdos/programming get 00index.all by Adatok kezelése --------------- sort - fájl sorainak rendezése Formája: sort [opciók] fájl1...fájlN Sorba rendezi adott fájl vagy adott fájlok sorait, a sorrend az ASCII számoknak megfelelően alakul ki, ill. a sorrendet a $LANG környezeti változó befolyásolhatja. A fontosabb opciók: -o A rendezett lista a kimeneti fájlba íródik. -r Rendezés fordított sorrendben. -d Rendezéskor a jeleket figyelmen kívül hagyja. -f Rendezéskor a kis és nagy betűket azonosnak tekinti. -u Az azonos sorok csak egyszer szerepelnek a kimenetben. -i A nem printelhető karakterek figyelmen kivül hagyása. -c A rendezettség ellenőrzése, rendezett fájlnál az eredmény semmi. + Rendezés adott oszlop alapján (pl. +1 a 2. oszlop). +. Rendezés az n. oszlop m. karaktere alapján (pl. +1.2). -t Az oszlopelválasztó jel megadása (pl. -t: v. -t':'). -n Számok rendezése helyi értékesen (pl. a 9 kisebb mint a 11), -r Rendezés fordított sorrendben. Példák: sort -dfb fruits.txt sort -r fruits.txt |sort -rc sort +1 -t: -n members.txt cut - fájl oszlopainak kivágása Formája: cut [opciók] fájl1...fájlN Adott fájl vagy adott fájlok megadott oszlopait kivágja. Fontosabb opciók: -c- Karakterekben adjuk meg a kivágandó oszlopot (n-től m-ig). -f A kivágandó oszlopok sorszáma vesszővel elválasztva. -d Oszlop elválasztó jel megadása. -s Ha nincs elválasztó jel a sorban, akkor az nem kerül bele a kimenetbe. Példák: ps | cut -c9-15 cut -f1,5 -d: /etc/passwd cut -f2 -d: members.txt >szamok.txt ls -d /home/t* | cut -f3 -d/ >tuser.txt paste - fájlok oszlopainak összefésülése Formája: paste [opciók] fájl1...fájlN Az adott fájlok oszlopait egymás mellé illeszti vagy egy oszlopot több oszlopra tördel. A fontosabb opciók: -d Oszlopelválasztók felsorolása. -s A fájlokat sorban összekapcsolva egy fájlnak tekinti. Példák: paste -d: tuser.txt szamok.txt paste -s -d, tuser.txt ls ~ | paste -d'/t/t/t/n' -s (Ez a könyvtárlistát négy oszlopba rendezi, ennek rövidebb alakja:) ls ~ | paste - - - - diff - fájlok tartalmának összehasonlítása Formája: diff [opciók] fájl1 fájl2 vagy diff [opciók] könyvtár1 könyvtár2 Két fájl vagy két könyvtár tartalmának összehasonlítása. Különbségek jelzése arra utal, hogy mit kell csinálni az első fájllal, hogy olyan legyen mint a második: 2c2: A két fájl 2. sorát meg kell cserélni. 4d3: A 4. sort törölni kell. 3a4: A 3. sor után be kell szúrni a másik fájl 4. sorát. Fontosabb opciók: -i Kis és nagy betűk azonosnak tekintése. -w Az üres karakterek (SPACE, TAB) figyelmen kívül hagyása. -c Más formában jeleníti meg a különbséget, a +!- jelekkel. -e A különbség megszüntetésre szolgáló ed parancsot adja eredményül. -r Az alkönyvtárakban is, rekurzívan hasonlítgat. Megjegyzés: Létezik egy bdiff parancs, ami hosszabb fájlokkal is elboldogul és egy diff3 parancs, ami egyszerre 3 fájlt hasonlít össze. Példák: diff nevek1.txt nevek2.txt diff -c nevek1.txt nevek2.txt diff dir1 dir2 diff -r dir1 dir2 diff -riwc dir1 dir2 comm - rendezett fájlok tartalmának összehasonlítása Formája: comm [opciók] fájl1 fájl2 Két rendezett fájl összehasonlítása, melynek eredménye három oszlop: 1. oszlop: csak az 1. fájlban található sorok. 2. oszlop: csak az 2. fájlban található sorok. 3. oszlop: mindkét fájlban megtalálható sorok. A fontosabb opciók: -1 az első oszlop letiltása. -2 a második oszlop letiltása. -3 a harmadik oszlop letiltása. Példák: comm nevsor1.txt nevsor2.txt cmp - fájlok tartalmának összehasonlítása Formája: cmp [opciók] fájl1 fájl2 Két fájl tartalmának összehasonlítása (a DOS-os FC-hez hasonló). Kiírja a két fájl első eltérő bájtjának a helyét és a két bájt értékét is. Fontosabb opciók: -l Minden különbséget kiír, nem csak az elsőt. -s Az egyezőségről árulkodó, csak lekérdezhető értékkel tér vissza. Példák: cmp nevek1.txt nevek2.txt cmp -l nevek1.txt nevek2.txt whereis - programkönyvtár megkeresése Formája: whereis [opciók] fájl1...fájlN A bin, a man és a forrás könyvtárakban keresi a megadott programot. Példa: whereis vi find - fájl megkeresése Formája: find Az adott könyvtárban lévő összes alkönyvtárban keresi az opciók által kiválasztott fájlokat. Nagyobb könyvtárstruktúra végigkeresése több percig is eltarthat, közben gyakran hozzáférés megtagadva hibaüzeneteket is kaphatunk, ezért a hibákat célszerű a kukába dobni (>/dev/null). Fontosabb opciók: -name A keresendő fájlok megadása. -print A megtalált fájlok nevei kiíródnak a képernyőre. -user A tulajdonos nevének megadása. -perm A hozzáférési jogok megadása. -atime + A hozzáférés óta eltelt napok. -mtime + A módosítás óta eltelt napok. -exec {} \; A megtalált fájlokra futtatott parancs megadása. -ok {} \; Mint az előző, de minden fájlnál visszakérdez. Példák: find / -name vi -print find / -name vi -print >/dev/null find /home -user tanf0 -print find ~ -perm 644 -print find ~ -atime +6 -print find ~ -name '*.bak' -ok rm {} \; cp `find ~ -name '*.txt' -print` text grep - fájl oszlopainak kivágása Formája: grep [opciók] [-e] [fájl1...fájlN] Reguláris kifejezéssel (minta) lehet megszűrni az adott fájlok sorait. Fontosabb opciók: -i Kis és nagy betűk azonosnak számítanak. -l Több fájl esetén csak a nevét írja ki azoknak, melyekben szerepel a minta. -c Megszámolja a minta előfordulásait. -n A megtalált soroknak a sorszámát is kiírja. -v A szűrő fordítva működik: azokat a sorokat írja ki, amikben nincs minta. Megjegyzés: Az egrep és az fgrep parancsok a grep paranccsal is kiválthatók a -E és a -F opciókkal. Minták a reguláris kifejezésre: . \. ^ $ [a-zA-Z] [!a]* [0-9]* Példák: grep mailto *.html last | grep tanf0 grep -l Nicole text/* ps -ef | grep -v root history | grep 'grep' wc - szöveg statisztika Formája: wc [opciók] [fájl1...fájlN] Adott fájl vagy fájlok sorainak, szavainak és karaktereinek megszámlálása. Ha a bemenet a pipe, akkor csak egy számot ír ki (pl. wc -l <.profile). Fontosabb opciók: -l csak a sorokat számolja meg. -w csak a szavakat számolja meg. -c csak a karaktereket számolja meg. Példák: wc unix12.txt expr `wc -l G Ugrás az adott sorba. CTRL+F Lapozás előre egy képernyőoldalt. CTRL+B Lapozás vissza egy képernyőoldalt. CTRL+D Lapozás előre egy fél képernyőoldalt. CTRL+H Lapozás vissza egy fél képernyőoldalt. f Lépés az adott betű következő előfordulására a sorban. F Lépés az adott betű előző előfordulására a sorban. ; Az előző f v. F parancs ismétlése előre. , Az előző f v. F parancs ismétlése vissza. Törlés a szövegben ------------------ x Töröl egy karaktert. d Töröl adott pontig (dd egy sort, dw egy szót, d$ a sor végéig stb.) D Töröl a sor végéig. J A sorvégjel törlése (két sor összefűzése). :,d Sorok törlése (n-től m-ig). u Az utolsó művelet visszavonása. Másolás, mozgatás ----------------- yy Sorok másolása a törlés pufferbe. p Szöveg beillesztése az első pufferből a sor után. P Szöveg beillesztése az első pufferből a sor elé. "p Szöveg beillesztése az adott pufferből. (Az utoljára törölt szöveg mindig az 1. pufferba kerül). :,t Sorok másolása (n-től m-ig az x. sorba). :,m Sorok mozgatása (n-től m-ig az x. sorba). Keres, cserél ------------- / Egy beírt mintára állítja a kurzort (ismétlés n,N betűkkel). ? Mint az előbbi, de visszafelé keresi a mintát. :s// Az aktuális sorban az első minta1-t minta2-re cseréli. :s///g Az aktuális sorban az összes minta1-t minta2-re cseréli. :,s///g Az előző parancsot végzi n és m sorok között. ://s///g Azokban a sorokban, melyekben megtalálható a minta1, lecseréli a minta2-ket minta3-ra. Fájlműveletek ------------- :w [file] Mentés, esetleg fájlnév is megadható. :w! [file] Mentés felülírással, esetleg fájlnév is megadható. :e! Az aktuális fájl eredeti állapotának újratöltés. :r Egy megadott fájl beszúrása. :r ! A shell-ben futtatott parancs eredményét tölti be. Kilépés ------- :wq Kilépés mentéssel (azonos a ZZ paranccsal). :q! Kilépés mentés nélkül. :! Adott shell parancs végrehajtása. :!! Utolsó shell parancs ismétlése. :sh Kilépés a shellbe. Egyéb ----- . Utolsó parancs ismétlése. CTRL+L A képernyő újra rajzoltatása. z. A képernyő újra rajzoltatása, az aktuális sor középen lesz. :ab Adott rövidítésre a teljes szöveg kerül a fájlba. :una Adott rövidítés törlése. < Indentál balra (<< egy sort, Indentál jobbra (>> egy sort, >G a fájl végéig stb.). Szövegbeviteli üzemmódba lépő parancsok --------------------------------------- a A kurzor után (append). A A sor vége után. i A kurzor helyére (insert). I A sor eleje elé. o Egy új sorba, ami a következő sor lesz. O Egy új sorba, ami az előző sor lesz. s Törli a kurzor alatti karaktert és beszúródik a szöveg. S Törli a kurzor sorát és beszúródik a szöveg. c Töröl mint a d parancs és beszúródik a szöveg. C Töröl a sorvégéig és beszúródik a szöveg. R Ráíródik az aktuális sorra (replace). r Egy karakter felülíródik a többi beszúródik. Kommunikáció (on-line) ---------------------- Ugyanazon a gépen dolgozva, legkönnyebben a write paranccsal írhatunk egymásnak. A címzettre a felhasználói nevével hivatkozunk, ha esetleg többször is be van jelentkezve az illető (több ablakban is dolgozik), akkor a -n kapcsoló segítségével irányíthatjuk a megfelelő ablakba az üzenetünket. Ha kapcsolat létrejött, akkor minden sor amit beírunk az enter leütése után, a címzett ablakában is rögtön meg fog jelenni. Ha így szeretnénk egymással beszélgetni, akkor célszerű megvárni, amíg az egyik fél befejezi mondandóját és csak utána kezdhetünk mi is gépelésbe, különben össze fognak keveredni az üzenetek. Ezért elterjedt jelölés, hogyha végeztünk mondandónkkal és választ várunk, akkor egy 'o' jellel fejezzük be a sort. Ha pedig az egész társalgást szeretnénk befejezni, akkor két o betűt illik írni a sor végére. A befejezéshez a Ctrl+D billentyűt kell leütni. Ha hosszabb üzenetet szeretnénk átküldeni, akkor azt egy fájlból irányítsuk bele a write parancsba. Példák: write tanf0 [@] [terminál] Először egy finger paranccsal győződjünk meg arról, hogy a kiszemelt beszélgető partnerünk be van-e jelentkezve éppen. Példa: finger @d6.szif.hu Ha igen, akkor próbáljunk meg vele beszélgetni. Példa: talk bcsabi@d6.szif.hu console Talk parancs olyan, mint egy telefon hívás. A másik fél képernyőjén jelez a számítógép, a válaszra történő felhívást ismételgeti időnként a képernyőn. A válasz nem más, mint ugyanaz a parancs, amit a hívásnál is használtunk, csak éppen a másik fél címével. Amikor létre jön a kapcsolat, akkor a terminál ablakunk kétfelé osztódik, a felső részen látszik az, amit mi gépelünk és az alsó részen látszik az, amit a másik fél gépel. Ha szeretnénk megszakítani a beszélgetés, akkor azt a Ctrl-C billentyűvel tehetjük meg. Gyakran előfordulhat, hogy éppen valamilyen programmal dolgozunk és nem a parancssorban állunk amikor valaki keres a talk paranccsal, ilyenkor a legegyszerűbb, ha az aktuális programunk a háttérbe küldjük a Ctrl-Z billentyűvel és a beszélgetés után térünk csak vissza a korábbi munkánkhoz egy fg paranccsal. Elképzelhető, hogy olyan fontos munkán dolgozunk, hogy szeretnénk 'félre tenni a telefont'. Erre a mesg parancs használatos mesg n vagy mesg no. Ilyenkor csak a root tud üzenni nekünk. Ha újból szeretnénk fogadni a hívásokat, akkor jöhet egy mesg y vagy mesg yes parancs. Elképzelhető, hogy valakit annyira zavarnak ezek az üzenetek, hogy mindig szeretné kitiltani ezeket a hívásokat. Ilyenkor a mesg n parancsot célszerű a .profile-ba elhelyezni. Levelezés --------- Az elektronikus levelezés (E-mail) az Internet legalapvetőbb és legnépszerűbb szolgáltatása. Mindenki, akinek van accountja (belépési lehetősége) egy Iternetre kapcsolt gépen, az rendelkezik egy elektronikus levélcímmel is. A cím a usernévből (felhasználó azonosítója) és a gép címéből áll, amit egy @ karakter választ el (pl. kovacsb@rs3.szif.hu). Egy levél elküldésekor meg kell adnunk a címzett E-mail címét, a feladóhoz pedig a mi E-mail címünk kerül. A levélnek címet is adhatunk, ami a levél tárgyára utal (subject) valamint magát az üzenetet kell begépelnünk, ami a levél teste lesz (body). A levelezés 7-bites átvitellel működik, vagyis a levél csak 128-nál kisebb ASCII kódú karaktereket tartalmazhat. Ezért ha ékezetes betűket tartalmazó levelet vagy egy bináris fájl szeretnénk elpostázni, akkor azt előbb 7-bitesre kell kódolnunk. Erre a feladatra való az uuencode parancs és az ilyen levelet pedig az uudecode paranccsal állíthatjuk vissza az eredeti formájába. Az Internetről lehet levelet küldeni megfelelő átjárókon keresztül (gateway) másik hálózatokba is. (Pl. egy Compuserve hálózatos címminta: 100063.1257@compuserve.com). A mail levelezőrendszerek ------------------------- Ez a parancs minden UNIX-ban megtalálható. Segítségével leveleket küldhetünk illetve olvashatunk. Amennyiben egy E-mail címet is megadunk a parancs indításakor, akkor az adott E-mail címre írhatunk levelet, egyébként pedig az érkezett leveleinket olvashatjuk el. Levél írásakor a subject a -s opció után adható meg a levél testét pedig a a standard inputról várja a parancs. Amennyiben ez a beviteli eszköz a billentyűzet, úgy az üzenetünket egy CTRL+z lenyomásával fejezhetjük be. Ekkor a képernyőn egy Cc: prompt jelenik meg (carbon copy), ahová további E-mail címeket sorolhatnánk fel, ha azt szeretnénk, hogy a levélből más is kapjon másolatot. Levél olvasásakor a mail kiírja érkezett levelek fejlécét, melyekből a > karakter jelzi az aktuálisat. Ekkor a mail a & promptnál parancsokat vár. A kiadható fontosabb parancsok: ? Lekérdezhetjük a használható parancsokat. f Kilistázza a leveleket. p Kiírja az aktuális levelet. n Kiírja a következő levelet. - Kiírja az előző levelet. d Törli a levelet és a következőre lép. u Visszaállítja a törölt levelet. r Válaszol a levél küldőjének és a többi olvasónak majd törli a levelet. R Válaszol a levél küldőjének és törli a levelet. s Elmenti a levelet egy adott fájlba a fejléccel együtt. w Elmenti a levelet egy adott fájlba a fejléc nélkül. q Kilépés (CTRL+d). x Gyors kilépés minden változtatás nélkül. A levelezéssel kapcsolatos speciális fájlok: /var/spool/mail/tanf0 - itt tárolódnak beérkező leveleink (inbox). dead.letter - ha valamiért félbeszakad a levélírásunk, akkor a rendszer ebbe a fájlba menti el az addigi irományunk .forward - ebben a fájlban megadhatjuk, hogy hova továbbítsa tovább a beérkező leveleket a sendmail. .subscribe - minden levél végén megjelenő aláírásunk készíthető el ebbe a fájlba (max. 4 sor és illik -- sorral kezdeni). Multitaszk ---------- & Figyelem, ezt a jelet mindig a parancssor legvégére kell írni! Az igy indított parancs a folyamatokat a háttérben fogja indítani. Amennyiben valamelyik user megszakítja a kapcsolatát a szerverrel, akkor az így indított folyamatok megszakadnak. Példa: find / -name 'named*' -print 2>/dev/null >result.txt & Ez a hosszú folyamat a háttérben fog lefutni és a befejezésről értesít minket a kernel. Látható, hogy a menet közben megjelenő üzeneteket célszerű egy külön fájlba gyűjteni és figyeljünk a hibaüzenetekre is, mert különben az is belekeveredhet az előtérben normálisan érkező üzenetek közé. nohup A parancs feladata azonos az & parancs feladatával, különbség csak az, hogy ez nem szakad meg, hanem fut tovább a háttérben egy SIGTERM szignál esetén (tehát kilépésünk után is fut). Eközben a consolra írandó dolgokat összegyűjti és alapban egy a.out nevű fájlba írja ki. jobb A különböző folyamatban lévő munkákat listázza ki (a munka számát, megnevezését és státuszát). Az aktuális (utolsó) munka meg van jelölve. ps A folyamatokról (processz) kaphatunk információkat. Ezek alap esetben: PID - a folyamat azonosító száma TT - a terminál típusa, amiről a folyamatot indították STAT - a folyamat státuszának kezdőbetűje TIME - a folyamat által eddig elhasznált CPU idő COMMAND - a folyamatot indukáló parancs A fontosabb opciók: -A - az összes processz információt kilistázza nem csak a userét -f - más, több információt ad a folyamatokról -l - más, több információt ad a folyamatokról -u - adott felhasználóhoz tartozó processzeket listázzuk ki kill A folyamat azonosítójával (pid) vagy a munkaszámmal (%sorszám) megadott folyamatnak egy szignált küld a kernel. Ez a szignál megadható a nevével vagy a számával (pl. a SIGKILL az a -9). Ha nem adjuk meg a szignált, akkor az alap a SIGTERM (-15). Hogy milyen szignálokat támogat a rendszerünk azt a kill -l paranccsal tudhatjuk meg. A 'legdurvább' leállító szignál így küldhető: kill -9 -1 fg A folyamat azonosítójával (pid) vagy a munkaszámmal (%sorszám) megadott folyamat háttérbe küldése, ha nem adunk meg semmit, akkor az utolsó munka kerül a hátérbe. Általában a megállított folyamatot (Ctrl+Z) szokás ilyen módon a háttérbe küldeni. bg A folyamat azonosítójával (pid) vagy a munkaszámmal (%sorszám) megadott folyamat előtérbe helyezése. at Adott parancso(ka)t időzítve lehet indítani. A parancsokat a standard inputon várja az at. Az időpont sokféleképpen megadható, pl. at now + 2 houres [:] Látható, hogy a tulajdonos váltáson túl ezzel a paranccsal is van lehetőség a tulajdonosi csoport megváltoztatására is. (Sőt egy mezei user csak a csoportot változtathatja meg). Ha a fájlainkat át szeretnénk adni másnak, akkor a root jelszavára lesz szükség, ha ez megvan, akkor a leggyorsabban a su parancs segítségével juthatunk eredményre: su - chown quota - fejkvota Megnézhetjük, hogy a szerveren felhasználható háttértár kapacitásból mennyi jut nekünk mint felhasználónak vagy a csoportunknak. Láthatjuk, hogy mi az a maximum, amit még használhatunk, és azt átlépve az írási jogunk egy napon belül megszűnik, ezt követően csak törölni tudunk fájlainkból amíg ezen ajánlott minimum alá nem érünk újra. Látszik még az éppen aktuális fájlaink mennyisége és az abszolút maximum, amit semmiképpen nem léphet át a user. Könnyen előfordulhat, hogy nincs beállítva quotánk, ilyenkor a teljes logikai meghajtó (volume) kapacitása a rendelkezésünkre áll. Opciók: -u - a felhasználó limitje (default) -g - a csoport limitje df - Az eszközök (meghajtók) teljes kapacitásáról és azok kihasználtságáról kaphatunk információkat. du - Egy-egy könyvtár által foglalt terület kiíratása. Opciók: -a - nemcsak a könyvtárakat, de minden fájl méretét is kiírja -k - foglalt terület nagyságát kbájtokban adja meg, nem fél kbájtokban -s - csak a végösszeg lesz az eredménye a parancsnak -l - a kapcsolatokat többször is (duplán) beleszámolja az eredménybe Archiválás ---------- Archiválás alatt a fájlok egybefűzését, tömörítését és kódolását értem. Tömörítés előtt a fájlokat össze kell fűzni egy fájlba. Ezt megtehetjük a sima cat paranccsal is, de ha még valaha később szeretnénk újra külön látni az eredeti fájljaink, akkor használjuk a shar, cpio, tar programok egyikét. A tar program fontosabb kapcsolói: -f - az archívum nevének megadása -c - új archívum készítése -x - archívum kibontása -t - az archívumban található fájlok neveinek kilistázása -r - hozzáfűzés az archívumhoz -d - az archívum tartalmának adott könyvtárhoz való hasonlítása -u - adott könyvtárból az archívum frissítése -X - adott fájl kihagyása az archiválás során -v - -t esetén bővebb információ a fájlokról Összefűzés után jöhet a tömörítés, ehhez használhatjuk a Huffman kódolással dolgozó pack parancsot vagy az LZW kódot használó compress parancsot is. A pack .z kiterjesztést illeszt a tömörített állományhoz. A tömörített fájl kilistázására szolgál a pcat parancs, a teljes kitömörítéshez pedig az unpack parancs használatos. A pack parancs paraméterei a a külön-külön tömörítendő fájlok listája, illetve a fájlnevek között a '-' jel segítségével a kiegészítő információk kiírását kapcsolgathatjuk ki/be. A compress parancs .Z kiterjesztést illeszt a tömörített állományhoz. A tömörített fájl kilistázására szolgál a zcat parancs, a teljes kitömörítéshez pedig az uncompress parancs használatos vagy a compress parancs -d kapcsolója. Még hasznos opciók: -f - felülírja a már meglévő fájlokat -v - a tömörítés hatékonyságát jelző százalékos érték megjelenítése. (A fenti két tömörítés közül általában a compress parancsé a hatékonyabb). Tömörítéshez használhatunk más programokat is, hiszen egyre újabb és újabb programok jelennek meg (pl. gzip, dzip), ezek megpróbálják kihasználni a korszerű tömörítési algoritmusok (pl. aritmetikai kódolás) nagyobb hatékonyságát. Amennyiben a már kicsire összenyomott fájljainkat szeretnénk valaki másnak is elküldeni, akkor lehet hasznos a kódolás-dekódolás művelete. Az elektronikus levélforgalom 7 bitesen bonyolódik, ezért a bináris (8 bites) fájlok postázás előtt kódolásra, utána dekódolásra szorulnak. Elképzelhető, hogy ezt a kódolást a levelezőrendszerünk automatikusan a háttérben elvégzi (pl. a pine mime kódolást használ). De amennyiben ezt nekünk kell manuálisan elvégezni (pl. a mail esetén), akkor az uuencode és uudecode kódoló és dekódoló programok ajánlottak. Az uuencode szintaktikája: uuencode fájlnév1 fájlnév2 >fájlnév3.uue fájlnév1: az a fájl amit kódolni készülünk fájlnév2: az a név amit a fájl kapni fog a dekódolás után fájlnév3: az elkódolt fájl neve. (A fájlnév1 és fájlnév2 általában ugyanaz). Az uuencode szintaktikája: uudecode fájlnév1.uue Dekódolás után olyan fájlnévvel fog megjelenni a küldemény, ahogy azt a küldő beállította. Vizsga ------ 1. Derítsük ki, mit csinál a yes parancs? 2. Kérjünk részletes könyvtárlistát (ls -l) a fájlhossz és fájlnév sorrendekben! 3. Készítsen egy nevsor.txt fájlt az összes felhasználó teljes nevével! 4. Készítsünk egy dir parancsot (alias), ami a DOS-os dir parancsnál megjelenő információkat listázza csak ki! 5. Derítsük, hogy ki szokott belépni egy adott gépről (ip-ről)! (pl. 10.197.249.232). 6. Mikor lépett be a tanf9 nevű felhasználó utoljára? 7. Készítsünk listát a tanfolyami felhasználók utolsó belépéseiről! 8. Postázzuk el a tanf0 felhasználónak a grep parancs manuálját tömörítve! 9. Készítsünk toplistát: az összes felhasználó közül az első 10-et írjuk egy fájlba, aki a legtöbb helyet foglalja el a háttértáron. 10. Nevezzük át a unix könyvtár összes fájlbejegyzését nagybetűsre! 11. Készítsen egy könyvtárat amibe saját magán kivül csak a tanf0 user tud írni! 12. Tömörítsük össze a saját könyvtárunk teljes tartalmát mind a három tömörítővel (pack, compress, gzip), nézzük meg melyik tömörített a legjobban!