# 1. videó segédlet ## Mi is a Linux ## CLI, terminál, shell <Note type="tip" label> Ez a fejezet sok fogalmat tartalmaz, kérlek **_ne_** magold be ezeket. Csupán annyi a célja a fejezetnek, hogy akik nemigazán használtak CLI-t, azoknak bemutasson pár alapelemet. A fő cél, hogy értsd, tudd használni; nem az, hogy tudd a definíciókat. </Note> ### CLI **C**ommand **L**ine **I**nterface, egy felhasználói felület, ami alapvetően szövegesen kommunikál a userrel. Szöveg be → szöveg ki. Ennél sokkal bővebben nem hiszem, hogy bárkinek is be kell mutatni, hogy mit jelent. ### Terminál Ez jeleníti meg a karaktereket és adja meg a programnak a beírt karaktereket. Régebben külön céleszközök voltak, ma már programok. Miki: ide rizsa pls ### Shell Egy olyan CLI program, amibe parancsokat lehet bepötyögni és a shell a megfelelő programokat elindítva és összekapcsolva<sup>(erről később lesz szó)</sup> lefuttatja azt. Miki: ide is ### Pár ismertebb shell #### `sh` [Bourne shell](https://en.wikipedia.org/wiki/Bourne_shell) (a készítőjének neve után) vagy [POSIX shell](https://en.wikipedia.org/wiki/Unix_shell) Egy butább shell, ami megtalálható minden UNIX-szerű számítógépen. Jó régen, az eredeti UNIX-hoz hozták létre a Bourne shell-t, ami később [bővítve](https://en.wikipedia.org/wiki/KornShell), majd specifikálva lett a [POSIX](https://en.wikipedia.org/wiki/POSIX) szabványban. #### `bash` **B**ourne-**a**gain **sh**ell, dupla szójáték. 😉 A [bash](https://en.wikipedia.org/wiki/Bash_(Unix_shell)) az alapértelmezett shell a Linux disztribúciók túlnyomó többségén. Később ezzel fogunk dolgozni. Kellően okos és többnyire elvárható, hogy ott legyen mindenhol, ahova beléptek. A hatalmas elterjedtsége (és nagy kompatibilitása) miatt esett erre a választás. #### `zsh` [zsh](https://en.wikipedia.org/wiki/Z_shell) vagy Z shell. Gyakorlatilag a bash kibővítése, a legtöbb Linuxos disztrón csomagkezelővel telepíthető, emellett macOS-en alap shell. Minden bash parancs működik itt is, de nem minden zsh parancs működik bash-ben. #### `fish` [fish](https://en.wikipedia.org/wiki/Fish_(Unix_shell)), **f**riendly **i**nteractive **sh**ell. Különlegessége, hogy kifejezetten felhasználóbarátnak van tervezve, alapbeállításokkal is nagyon kényelmes használni. Azonban *nem* POSIX shell, vagyis a következőekben bemutatott parancsok nem feltétlenül működnek benne. <Note type="warning" label> Innentől bash-ről lesz szó. Ha olyat olvasol, hogy "írjuk be a shellünkbe", akkor ott a "bashünkre" gondolunk. </Note> ### Hogy is néz ki? TL;DR: sokféleképpen. Például sok helyen így néz ki az alap beállításokkal: ``` [mike@thinkyboi ~]$ ls *.pdf mozilla.pdf [mike@thinkyboi ~]$ ls *.txt asd.txt ize.txt metrics.txt pcr2.txt pcrtouse.txt pcr.txt [mike@thinkyboi ~]$ ls *.txt | grep rt pcrtouse.txt [mike@thinkyboi ~]$ ``` Ez mit is mutat? - `[mike@thinkyboi ~]$`: a prompt - mutatja, hogy a `mike` user van belépve - a `thinkyboi` nevű számítógépre - éppen a `~` mappában vagyunk - sima user jogosultságokkal `$` - `ls *.pdf`: egy parancs, ami minden .pdf végű fájlt kilistáz - `ls *.txt`: egy parancs, ami minden .txt végű fájlt kilistáz - `ls *.txt | grep rt`: egy parancs, ami minden .txt végű fájlt kilistáz, mely nevében megtalálható az "rt" Ne ijedjünk meg az ismeretlen fogalmaktól, erről mind lesz szó bővebben. ### Pár shelles fogalom #### Mi a parancs? #### Redirekció `>` #### Pipe `|` #### Shell execution #### Manual page `man` #### [Egyéb hasznos shell cuccok](https://devhints.io/bash) ### Szövegszerkesztők #### Nano #### Egyebek # Csomagkezelés ### Mi a csomag? A különböző programokat nevezzük csomagoknak (package), melyek a bináris fájlon kívül különböző konfigurációs fájlokat és a program más programoktól való függőségeit is tartalmazza. ### Hogyan telepítsünk csomagokat? A programok telepíthetjük [kézzel](http://www.linuxfromscratch.org/lfs/downloads/stable/LFS-BOOK-10.1.pdf) (8.2-es fejezet), de ez általában nehézkes művelet és nem valami hatékony, ezért csomagkezelőt (package maganer) szoktunk használni a csomagok telepítéséhez. A csomagkezelő egy egyszerű program, mellyel telepíthetünk, frissíthetünk, eltávolíthatunk és kereshetünk csomagokat. Mi az apt nevű csomagkezelőt fogjuk használni a továbbiakban. ``` [patrik@patrik-laptop ~]$ sudo apt update [patrik@patrik-laptop ~]$ sudo apt search cowsay [patrik@patrik-laptop ~]$ sudo apt install cowsay [patrik@patrik-laptop ~]$ sudo apt upgrade [patrik@patrik-laptop ~]$ sudo apt remove cowsay ``` Az `apt update` paranccsal frissíthetjük az apt adatbázisát, mely a csomagok elérhetőségéről tárol adatokat. Az `apt search a_csomag_neve` paranccsal a csomagkezelő megkeresi a hasonló nevű csomagokat és kilistázza azokat. Az `apt install a_csomag_neve` paranccsal a megadott csomagot telepíti a csomagkezelő, ha azt megtalálja. Az `apt upgrade` paranccsal a telepített csomagokhoz elérhető frissítéseket telepíti a csomagkezelő. Az `apt remove a_csomag_neve` paranccsal a megadott csomag távolítható el. ### Különböző csomagkezelők A különböző Linux disztribúciók különböző csomagkezelőket használnak, ilyenek például az alábbi táblázatban található csomagkezelők is. Néhány csomagkezelő disztribúcióhoz van kötve, azonban egyre jobban kezdenek elterjedni a disztribúcióktól független csomagkezelők is. - `apt` Debian és Ubuntu alapú disztrókon - `dnf` Fedora - `pacman` Arch Linux - `flatpak` és `snap` disztrófüggetlen | parancs | apt | dnf | pacman | snap | flatpak | |---|---|---|---|---|---| | telepítés | install | install | -S | install | install | | adatbázis frissítése | update | check-update | -Sy | automatikus | a frissítéssel együtt ez is megtörténik (update) | | frissítés | upgrade | upgrade | -Syu | automatikus (ha kézzel akarod: refresh) | update | | törlés | remove | remove | -R | nincs ilyen | nincs ilyen | | törlés beállításokkal | purge | nincs ilyen | -Rn | remove | uninstall | | keresés | search | search | -Ss | find | search | ## Hogyan néz ki a Linux fájlrendszere? ### [Könyvtárak](https://www.linux.com/training-tutorials/linux-filesystem-explained/) ``` [patrik@patrik-laptop ~]$ tree -L 1 / / ├── bin -> usr/bin ├── boot ├── dev ├── etc ├── home ├── lib -> usr/lib ├── lib64 -> usr/lib ├── lost+found ├── mnt ├── opt ├── proc ├── root ├── run ├── sbin -> usr/bin ├── srv ├── sys ├── tmp ├── usr └── var ``` #### root `/` #### home `/home` #### konfigurációs fájlok `/etc` #### `/var` #### `/usr` #### `/lib` ## Jogosultságkezelés A UNIX permission rendszer elemei: - user-ek - group-ok - módok Mindezek számok alapján vannak tárolva, de a programok okosan feloldják nevekre ezeket. ### User-ek és groupok Egy user az pont ugyanaz, mint aminek elképzelted, egy felhasználó, aki tud programokat futtatni. Egy különleges felhasználó a `root`, ő a főfelhasználó, az ő nevében lehet csak a rendszerbeállításokat módosítani. Minden userhez tartozik egy ugyanolyan nevű group is, azonban egy user több groupban is benne lehet. ### Jogosultságok ### Speciális jogosultságok