2. Alapok

Egy linuxos gépen paranccsoros környezetben dolgozol. Ahhoz, hogy hatékonyan használd, érdemes megtanulnod a parancsok bevitelének szabályait. Először ehhez persze be kell jelentkezned a gépbe.

2.1. A bejelentkezésről

Egy unixos gépen alapvetően két módon juthatsz el odáig, hogy parancsokat adhass ki.

  • Ha van ilyen rendszerű géped, esetleg virtuális géped, pl. telepítettek neked egyet, vagy odaülhetsz valaki gépéhez, amin Linux van, tehát annak billentyűzetét és monitorát használod, közvetlenül bejelentkezhetsz a rendszerbe. Azt mondjuk, hoyg ebben az esetben a számítógép konzolját használod.
  • Távoli bejelentkezéssel. Ekkor a gép valahol a hálózaton (interneten) érhető el, és távoli kapcsolatot kell kiépítened vele. Ennek népszerű eszköze Windows rendszereken a Putty, MacOS-en és Linuxon ehhez nincs szükség egyéb programra, az operációs rendszer parancssorából is megteheted.

A távoli bejelentkezést, és beállításait részletesen tárgyaljuk a A Putty c. fejezetben, a távoli bejelentkezés mögötti mechanizmusokat pedig az Az ssh fejelezetben.

Note

Ha az EKE hallgatója vagy, az operációs rendszerek kurzushoz már készítettem neked egy hozzáférést. A bejelentkezési neved és a jelszavad is a neptun kódod (nagybetűkkel), a columbo.uni-eszterhazy.hu gépen. Ne felejtsd el az első bejelentkezés során megváltoztatni a passwd parancs segítségével.

Ha parancssorból jelentkezel be (eleve Linuxon vagy MacOS-en dolgozol), használhatod az ssh parancsot, ahogyan az alábbi példa mutatja. A sikeres bejelentkezést követően különféle tájékoztató szövegek jelenhetnek meg, ezek javarészét a példából kivágtam, hogy most ne zavarjon. Azüdvözlő üzenet után látható sor szerint szerint új levelem van a rendszerben, valamint kiírja azt is, hogy utoljára mikor jelentkeztem be. Ezt érdemes lehet összevetni az emlékeimmel, hátha esetleg ebből derül ki, hogy más is használja a felhasználói fiókomat.

Koczkas-iMac:~ koczka.ferenc$ ssh feri@columbo.ektf.hu
feri@columbo.uni-eszterhazy.hu's password:
Welcome to Ubuntu 14.04.5 LTS (GNU/Linux 3.13.0-77-generic x86_64)
You have new mail.
Last login: Sat Jul  8 11:30:28 2017 from catv-89-134-252-27.catv.broadband.hu
feri@columbo:~$

2.2. A kijelentkezés

A munkád végeztével ki kell jelentkezned a távoli gépből. Erre az egyes rendszerek esetében több parancs is használható, a mi Linuxunkban a logout vagy az azzal egyenértékű exit parancs vagy a Ctrl-d billentyűkombináció ad erre lehetőséget.

feri@columbo:~$ logout
Connection to columbo.uni-eszterhazy.hu closed.
Koczkas-iMac:~ koczka.ferenc$

2.3. Munka a parancssorral

  • A teljes operációs rendszerben, így a parancssorban és a fájlok, könyvtárak neveiben is a kis- és nagybetűk különbözők. Ezért azokat pontosan kell leírnod, a Windows parancssorban megszokott szabadságod itt nincs meg.
  • A szövegszerkesztőkben megszokott kurzor jobbra és kurzor balra, Home és End gombok az ott megszokott módon működnek.
  • Az egyes parancsok begépelését az Enter megnyomásával kell zárnod. A kurzornak nem kell a sor végén lenni, ha az egy javítás miatt a sor belsejében van, nem kell kivinned a sor végére.
  • A kurzor fel és kurzor le gombok a korábban bevitt parancsokat hozzák vissza szerkesztésre. Ezzel egyrészt visszanézheted a korábbi parancsaidat, másrészt az esetleg hibásan bevitteket nem kell teljes egészében újragépelned. Csak hozd vissza a hibás parancsot, javítsd és nyomd meg az Enter gombot.
  • A részlegesen begépelt parancsok és a fájlnevek a Tab billentyűvel befejezhetők. A parancs első néhány karakterének begépelése után nyomd le a Tab gombot! Ha egyértelmű, hogy melyik parancs vagy fájl kezdődik ezzel a karakterrel, akkor a parancsértelmező automatikusan befejezi azt, ha több lehetőség is van, akkor pedig felsorolja a lehetséges változatokat és folytathatod a pontosítást. Például a passwd parancs begépeléséhez elég a pass karaktereket begépelni, majd megnyomni a Tab gombot.
  • Sokkal régebben kiadott parancs visszahozásához először nyomd meg a Ctrl-r billentyűket, majd kezdd el begépelni a parancs egy jellegzetes részét! A karakterek begépelése során a parancsértelmező megkeresi azt a legkésőbb kiadott parancsot, amely tartalmazza a begépelt szöveget. Addig kell a szövegrészletet pontosítanod, amíg a keresett sort nem látod a szerkesztő sorban.
  • Ha elindítottál egy programot, amelyet szeretnél megszakítani, használd a Ctrl-c billentyűket. Ha ezt teszed, a futó program azonnal leáll, így a program esetleges adatai elvesznek. (Ezt egyébként a programok tilthatják, így találkozhatsz olyan esettel, amikor a Ctrl-c hatástalannak tűnik.)
  • A kiadott parancsok, elindított programok futása átmenetileg felfüggeszthető a Ctrl-s használatával. Ezt a felfüggesztett állapotot a Ctrl-q kapcsolja ki, ekkor a program folytatja futását. Ezeket akkor érdemes használnod, ha a program kimenete túl gyorsan jelenik meg ki, és időre van szükséged az átolvasásukhoz.

Tip

  • A Putty-ban kijelölt szöveg azonnal a Windows vágólapjára kerül, a jobb egérgomb (vagy a Shift-Insert) lenyomásakor pedig a vágólapon levő szöveget a kurzor helyére másolja a program. A menükben nem találsz majd Cut/Copy/Paste pontokat.
  • A parancsértelmező minden parancsot rögzít a home könyvtárad file:bash_history fájljában, a fent említett, a korábbi parancsokat kihasználó lehetőségek ezen alapulnak.

Próbáld ki a fentieket! Az egyik legegyszerűbb parancs a clear, ami a terminál képernyőjét törli. Használata nagyon egyszerű, nem lehet paraméterezni sem. Linuxon ugyanezt az eredményt éred el a Ctrl-L megnyomásával is.

2.4. Bővebben a shellről

A bejelentkezés során a rendszer bekéri a felhasználó nevét és a jelszavát, majd ez után egy fájlban leírak alapján elindítja azt a programot, amely fogadja és végrehajtja a parancsaidat. TODO: A passwd fájl Ez szinte minden esetben egy olyan program, ami képes parancsokat fogadni tőled, és azokat végrehajtani. Ennek neve parancsértelmező, vagy más néven shell. A shell a parancsaidat a sor elejére kiírt prompt-tal várja, ennek végén látható a kurzor. A prompt a legtöbb esetben felhasználó@gépnév:/könyvtár alakú, amelyet egy $ vagy egy # karakter zár. A # azt jelenti, hogy a felhasználó rendszergazdai jogkörrel rendelkezik, a $ pedig azt, hogy egy általános felhasználóként dolgozol a rendszerben. Ez azért fontos, mert a Unixok esetében nincs meg az az “önvédelmi mechanizmus” amelyet a Windows rendszerek esetében gyakran tapasztalunk, ezek a rendszerek a rendszergazda minden parancsát visszavonhatatlanul végrehajtják akkor is, ha az a rendszer teljes egészére nézve is végzetes.

A Unix rendszerek teljes jogkörrel rendelkező felhasználójának neve root, a Windowsoké nyelvi változattól függően Rendszergazda vagy Administrator.

A prompt egyszerű felhasználó esetén:

feri@columbo:~$

A prompt a rendszergazda esetén:

root@columbo:~#

Ha kilépsz a shellből a logout vagy az exit paranccsal, esetleg a Ctrl-d lenyomásával, akkor a bejelentkezésed folyamata is véget ér, távoli géppel fennállt kapcsolat a is lebomlik.

feri@columbo:~$ logout
Connection to columbo.uni-eszterhazy.hu closed.

Danger

Fontos szabály, hogy soha ne hagyd a gépedet őrizetlenül úgy, hogy abba be vagy jelentkezve! Ha lehetőséget adsz bárki számára, hogy parancsokat adjon ki az engedélyed nélkül, hamar elvesztheted a kontrollt a géped felett. Mindig jelentkezz ki, vagy zárold a számítógépedet, ha magára hagyod!

Note

Miért root a rendszergazda neve a Unixokon? Azért, mert minden felhasználónak van a rendszerben egy home könyvtára, az a könyvtár, amelyben tárolhatja a fájljait. Ez a rendszergazda esetében a gyökérkönyvtár, angolul root.

2.5. Első lépések Linuxban

Van pár parancsot, amelyekre hamar szükséged lesz. A rendszerrel való ismerkedésünket ezekkel kezdjük, így egy kis gyakorlatot szerezhetsz a parancsok kiadásában, és megtudsz néhány hasznos dolgot a rendszerről is.

2.5.1. A jelszavakról

Note

Ha az EKE hallgatója vagy, és első alkalmmal jelentkezel be a columbo.uni-eszterhazy.hu szerverbe, az első feladatod a jelszavad cseréje legyen. Ezzel biztosítod, hogy a felhasználói hozzáférésedet senki más ne tudja használni helyetted.

A jelszavadat a passwd paranccsal cserélheted le. A program először bekéri az aktuális (current) jelszót (így az őrizetlenül hagyott terminálhoz hozzáférő személy nem tudja lecserélni a jelszavadat). Ezt követően kétszer kell megadnod az új jelszót. Ezek begépelését vakon kell végezned, a képernyőn a jelszavak nem fognak megjelenni.

feri@columbo:~$ passwd
feri jelszavának megváltoztatása.
A (jelenlegi) UNIX jelszó:
Adja meg az új UNIX jelszót:
Írja be újra a UNIX jelszót:
passwd: password updated successfully

A jelszavak bonyolultságára a rendszergazda (a cég szabályzata, ahol dolgozol) különféle megkötéseket írhat elő, az egyszerű jelszavakat a passwd nem fogadja el. A saját érdeked, hogy a jelszavad kellően biztonságos legyen, ezért azt javaslom, hogy az mindig tartalmazzon számjegyet és nagybetűt is! Legyen természetes, hogy a jelszavadat ne add meg másnak!

Ha elfelejted a jelszavadat, a rendszergazda tud másikat adni neked. Valószínű, hogy ezért szermélyesen meg kell keresned, egy e-mailre vagy telefonhívásra nem fognak hinni neked. Mivel a jelszót kódolt formában tárolja a rendszer, ő sem tudja, annak idején mit állítottál be, ezért nem is tudja megmondani neked. Ilyen esetben a rendszergazda is a passwd parancsot használja, de a parancs paramétereként megadja a felhasználó nevedet is. A passwd parancs a rendszergazdától nem kéri a régi jelszót.

root@columbo:~# passwd koczka.ferenc
Adja meg az új UNIX jelszót:
Írja be újra a UNIX jelszót:
passwd: password updated successfully

Note

  • A jelszavakkal kapcsolatos policy előírhatja, hogy azt rendszeresen cserélned kelljen, vagy ha adott ideig nem jelentkezel be, akkor felfüggessze a hozzáférésedet.
  • A jelszavak működéséről, előállításáról a A shadow fájl fejezetben bővebben lesz szó. Most dióhéjban annyit, hogy ha elfelejted a jelszavadat, a rendszergazdától kell kérned a cseréjét.

Ha biztonságos jelszót szeretnél generáltatni, használd a pwgen parancsot! Ez alapértelmezésben 8 karakter hosszú jelszavakat generál, amiből választhatsz kedvedre valót. Fontos, hogy a pwgen nem cseréli le a jelszót, csak ajánl, a jelszócserét továbbra is a passwd paranccsal kell elvégezned. A pwgen parancsnak van néhány jól használható paramétere. A parancs után megadott szám a generált jelszavak hosszát, a -n után megadott szám a generált jelszavak számát határozza meg.

feri@columbo:~$ pwgen 8 -n 24
ohnie4iP phiSh0wo fi7veeSh see9yahM mee2PiFe xar2AeVi sa1oeThe Chee5lah
ai7ahT7O Reiy4riv aeph0eeY ea2Ohr2v Oedai7ye ib5shahH bonoo6Th AhY8ooru
agheuCh0 heoPohh6 aaf3eiFo Ro9uWooy OhheeG9k eTh0ThiJ sooPh5Ph aixoh1We

2.5.2. A kézikönyv

A legtöbb parancs számára meg kell határozni, hogy pontosan mit is csináljon, ezt a paraméterezésével érjük el. A fenti példában a pwgen két paramétert is kapott, a jelszó hosszára és a darabszámára vonatkozókat. Azt, hogy megtanuld, melyik parancsnak milyen paraméterei vannak, a teljes rendszerre nézve szinte lehetetlen feladat, ezért az egyes parancsok képesek kiírni a használatuk módját, de a Linuxok tartalmazzák az egyes parancsok kézikönyvszerű leírását is, info page-eket és egyéb dokumentációkat is. A legtöbb parancsnak van egy –help paramétere, amely használatakor a lehetséges paramétereket és azok rövid lírását szokták megjeleníteni. Nézzük meg ezeket az imént tanult pwgen esetén! Először lássuk a parancs saját helpjét!

feri@columbo:~$ pwgen --help
Usage: pwgen [ OPTIONS ] [ pw_length ] [ num_pw ]

Options supported by pwgen:
  -c or --capitalize
        Include at least one capital letter in the password
  -A or --no-capitalize
        Don't include capital letters in the password
  -n or --numerals
        Include at least one number in the password
  -0 or --no-numerals
        Don't include numbers in the password
  -y or --symbols
        Include at least one special symbol in the password
  -s or --secure
        Generate completely random passwords
  -B or --ambiguous
        Don't include ambiguous characters in the password
  -h or --help
        Print a help message
  -H or --sha1=path/to/file[#seed]
        Use sha1 hash of given file as a (not so) random generator
  -C
        Print the generated passwords in columns
  -1
        Don't print the generated passwords in columns
  -v or --no-vowels
        Do not use any vowels so as to avoid accidental nasty words

A parancsok paramétereinek leírásakor használt legfontosabb jelölések a következők:

  • Egy paraméter általában megadható rövid és hosszú formában is. A -l a rövid, a –lock a hosszú formája, mindkettő ugyanazt jelenti. A gyakran használt paraméterek esetén a rövidet, a ritkábban használtaknál a hosszút szoktuk megjegyezni.
  • A parancs leírásában a szögletes zárójelpárban levő paraméterek megadása nem kötelező. A pwgen esetében a [pw_length] ilyen. Ha nem adod meg, akkor 8 karakter hosszú jelszavakat fog generálni a parancs.
  • A | karakter konkrét paraméter értékek megadásakor használható. Pl. ha ezt látod: on|off akkor paraméterként csak az on vagy az off szó szerepelhet.
  • Az egyes jelölések összevonhatók, a [on|off] jelentése tehát az, hogy a paraméter megadása nem kötelező, de ha megadod, akkor csak az csak on vagy off lehet.
  • Azok a paraméterek, amelyek semmilyen jelöléssel nincsenek ellátva, kötelezők.

A másik lehetőség a kézikönyv (manual) megfelelő részeinek átolvasása, ehhez a man parancsot kell használni. Paraméterként annak a parancsnak a nevét kell megadni, amelyről olvasni szeretnénk. A kézikönyv olvasásakor általában működnek a phUp, pgDn, kurzor fel és kurzor le gombok. Kilépni a q lenyomásával, keresni a / billentyűvel lehet. Az alábbi példa a pwgen kézikönyvét jeleníti meg (mivel ez hosszú, az alábbi példa csak egy részletet mutat ebből).

feri@columbo:~$ man pwgen

File: *manpages*,  Node: pwgen,  Up: (dir)

PWGEN(1)                    General Commands Manual                   PWGEN(1)

NAME
       pwgen - generate pronounceable passwords

SYNOPSIS
       pwgen [ OPTION ] [ pw_length ] [ num_pw ]

DESCRIPTION
       The  pwgen  program generates passwords which are designed to be easily
       memorized by humans, while being as secure  as  possible.   Human-memo‐
       rable  passwords  are  never  going  to be as secure as completely com‐
       pletely random passwords.  In particular, passwords generated by  pwgen

Note

  • Azt, hogy a kézikönyv megjelenítője mennyire “intelligens”, attól függ, hogy a rendszer melyik programmal mutatja azt meg neked. Több ilyen közül is lehet választani, a leggyakoribban a more, a less és a most. A more a legszegényesebb, már visszafelé lapozni sem tud. A leggazdagabb szolgáltatáskészlete a most parancsnak van. Azt, hogy ezt hogyan lehet beállítani, később mutatom meg, TODO Környezeti változók részben, a lapozó programokról a TODO a lapozóprogramoknál részben olvashatsz.
  • Ha kíváncsi vagy, hogy melyik lapozó van beállítva, használd a set | grep PAGER parancsot. Nem baj, ha most nem érted, mit jelent, a szűrőknél majd megtanulod, ez mit jelent.
  • A lapozó beállítása az export PAGER=<lapozónév> paranccsal történik.

2.6. A felhasználókról

A gépen nem csak te dolgozhatsz. A Unixok multiuser operációs rendszerek, így veled egy időben, tőled függetlenül más felhasználókat is ki tudnak szolgálni. Van néhány parancs, ami a bejelentkezett felhasználókról ad információkat, nézzük át őket!

2.6.1. w

Az éppen bejelentkezett felhasználók listázhatók a w paranccsal. Egy példa a w kimentére:

feri@columbo:~$ w
 21:02:39 up  5:54,  2 users,  load average: 0,00, 0,01, 0,05
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    catv-89-134-246- 20:49    1:19   0.44s  0.21s bash
feri     pts/1    catv-89-134-246- 20:51    7.00s  0.50s  0.00s w

A válasz első sora nem a felhasználókról, hanem a rendszer állapotáról ad információkat. Az első adat az aktuális időt mutatja (21:02:39) amit a rendszer ún. uptime-ja, azaz a bekapcsolás óta eltelt idő követ (ez most csak 5 perc 54 másodperc, nemrég indítottam újra). A 2 users jelentése értelemszerű, két felhasználó van bejelentkezve. A load average a rendszer átlagos terhelését mutatja: a három szám az elmúlt 1 percre, az elmúlt 5 percre és az elmúlt negyedórára vonatkozó adat. Az 1 jelentése 100%, ekkor a rendszerben még nincs olyan program, amely valamilyen erőforrásra várna. Ennél magasabb terhelés azt jelenti, hogy a rendszer működése már nem optimális, vannak olyan processzek, amelyeknek valamilyen erőforrásra várniuk kell. (Ez a gyakorlatban sokszor a diszk túlterhelése miatt következik be.) Többrocesszoros gép esetén ezek a számok osztódnak, egy négyprocesszoros gép esetén a 4-es load érték jelenti azt, hogy éppen minden processzt ki tud szolgálni a rendszer.

A további sorok a bejelentkezett felhasználóról adnak információkat. A sor elején a felhasználó bejelentkezési neve látható, a From oszlopban annak a gépnek a neve vagy IP címe, ahonnan bejelentkezett. A Login@ a bejelentkezés időpontját, az Idle a tétlenség idejét mutatja, vagyis azt az időt, ami a felhasználó utolsó tevékenysége óta eltelt. A JCpu és a PCpu a processzor használatára vonatkozó adat, számunkra most nem fontosak. A What oszlopban a felhasználó által éppen futtatott program neve és paraméterei láthatók.

Note

Az, hogy a w parancs bárki számára láthatóvá teszi, hogy az egyes felhasználók éppen milyen parancsot futtatnak, felvet egy biztonsági problémát. Ebben ugyanis a parancs kiadásának pillanatában minden felhasználó parancsai és azok paraméterei is láthatók. Emiatt tervezték úgy a passwd parancsot úgy, hogy a jelszavak megváltoztatása csak interaktív módon történhet, ezért hogy nem adható meg paramétereként az új jelszó. Ha ez nem így lenne, a felhasználók egy alkalmas időpontban kiadott w paranccsal látnák, hogy egy másik felhasználó épp milyen új jelszót állít be magának.

2.6.2. last

Az egyes felhasználók bejelentkezéseit a rendszer logolja (rögzíti), erről részletesen lesz szó a Logok fejezetben. A last paranccsal megtekinthetők a korábbi bejelentkezések adatai. Lássuk ezt egy példán!

feri@columbo:~$ last
feri     pts/0        54005096.dsl.poo Sat Jul  8 08:35   still logged in
root     pts/0        catv-89-134-252- Sat Jul  8 00:06 - 02:13  (02:07)
koczka.f pts/0        catv-89-134-252- Sat Jul  8 00:06 - 00:06  (00:00)
root     pts/2        backup.ektf.hu   Fri Jul  7 13:08 - 13:08  (00:00)
feri     pts/0        catv-89-134-252- Wed Jul  5 01:45 - 16:45 (2+14:59)
koczka.f pts/0        catv-89-134-252- Tue Jul  4 17:18 - 17:42  (00:24)
reboot   system boot  3.13.0-77-generi Tue Jul  4 14:30 - 08:43 (3+18:12)
koczka.f pts/1        catv-89-134-252- Tue Jul  4 14:23 - down   (00:06)
root     pts/1        redax-desktop.ek Tue Jul  4 07:23 - 07:24  (00:00)
feri     pts/0        catv-89-134-252- Mon Jul  3 21:51 - down   (16:38)
feri     pts/1        catv-89-134-252- Sun Jul  2 20:08 - 01:14  (05:06)
feri     pts/3        catv-89-134-252- Sun Jul  2 15:29 - 16:55  (01:26)
feri     pts/1        catv-89-134-252- Sun Jul  2 12:37 - 16:04  (03:27)
feri     pts/1        catv-89-134-252- Sun Jul  2 12:34 - 12:36  (00:01)
feri     pts/1        91ecd2c2.dsl.poo Sun Jul  2 10:27 - 10:36  (00:09)
feri     pts/0        catv-89-134-252- Sat Jul  1 11:59 - 14:14 (2+02:14)
wtmp begins Sat Jul  1 11:59:37 2017

A parancs kimenete a felhasználó bejelentkezési nevével kezdődik (feri, root, koczka.ferenc, reboot). A második oszlopban levő adattal most nem foglalkozunk, a harmadikban annak a gépnek a neve vagy IP címe látható, ahonnan bejelentkezett (catv kezdetű sorok a UPC, a dsl.pool tartalmú helyek a Telekom ADSL vonalaira szoktak utalni). A következő oszlopok a bejelentkezés kezdetét és végét mutatják (a still logged in azt jelenti, hogy a felhasználó még mindig itt van). A last paraméterezés nélkül csak az aktuális hónap bejelentkezési eseményeit mutatja.

Note

A Linuxok különböző fájlokba sok eseményt logolnak, a bejelentkezésekkel kapcsolatos eseményeket pl. a /var/log/wtmp nevű fájlba írják. Más eseményeket más fájlokban rögzítenek, pl. minden egyes e-mail küldését és fogadását. A logok nagyban megkönnyítik a rendszergazdák munkáját, ezekre alapozva visszakereshető, hogy mikor mi történt a rendszeben, és azonosíthatók korábban bekövetkezett hibák is. Biztosan feltűnt, hogy a last fenti kimenetében kétszer is bejelentkezett a reboot nevű felhasználó. Ez a gép újraindítását jelenti. A logrotate-reference-label fejelezetben maj látni fogod, hogy miért nem nőhetnek ezek a logfájlok a végtelenségig, teljesen teleírva a merevlemezt.