Uvod v Linux
Linux je brezplačni in odprtokodni operacijski sistem, ki ga lahko vsak uporablja, spreminja in deli. V primerjavi z Windowsi in macOS omogoča večjo svobodo in nadzor, zato se za vsakega računalniškega zanesenjaka spodobi, da se z njim spozna. Poleg osebnih računalnikov se uporablja marsikje - strežniki, pametne naprave (Android), routerji, superračunalniki...

Pingvin Tux, Linuxova maskota
Če smo natančni, je Linux zgolj jedro operacijskega sistema (kernel). To je sestavni del OS, ki skrbi za nizkonivojske naloge, kot so interakcija s strojno opremo, dodeljevanje spomina, razporejanje procesov, itd.

Komunikacija med različnimi nivoji v OS
Da dobimo "cel" operacijski sistem, se zraven jedra običajno zapakira še razne sistemske knjižnice, uporabniški vmesnik, ter programsko opremo in druga orodja. Takšen paket imenujemo Linuxova distribucija (distro) in predstavlja konkreten operacijski sistem, ki si ga lahko namestimo na računalnik.
Nekaj priljubljenih distrov: Mint, Ubuntu, Debian, Manjaro, Arch, Fedora, OpenSUSE ...
Uporabniki in datotečni sistem
Datotečni sistem je organiziran hierarhično (tako, kot smo vajeni od drugod). Najbolj zunanja mapa se imenuje korenski (root) direktorij, označuje ga /. Vsebuje vse ostale mape in datoteke, ki so na našem računalniku. Na Windowsih je C:\ nekaj podobnega.

Hierarhija map oz. direktorijev v Linuxu.
Vsak uporabnik ima dodeljen domač (home) direktorij v /home/uporabnik.
Vsaka datoteka ima dovoljenja, ki povedo, kateri uporabniki jo lahko berejo (read), spreminjajo (write), ali izvajajo (execute).
Obstaja superuporabnik (superuser, tudi root), ki ima vsa dovoljenja za urejanje datotek in izvajanje ukazov. Včasih moramo določene ukaze pognati kot superuporabnik (Windows: Zaženi kot skrbnik).
Ukazna lupina bash
Ukazna lupina (shell) je program, ki omogoča naprednejšo interakcijo z operacijskim sistemom. Za razliko od grafičnega vmesnika, kjer večino stvari počnemo z miško, je ukazna lupina tekstovni vmesnik - v njej izvajamo različne ukaze. V Windowsih poznamo PowerShell ali starejši Command Prompt, v Linuxu pa je najbolj razširjena lupina bash.
Ko odpremo konzolo oz. terminal (vmesnik za interakcijo z lupino), nas običajno pozdravi nekaj podobnega kot
Ta informativna vrstica se izpiše po vsakem izvedenem ukazu, pove pa nam
-
kateri uporabnik je prijavljen:
zen -
v kateri računalnik smo prijavljeni:
ZENBOOK -
v kateri mapi se trenutno nahajamo:
/usr/bin
Za znakom $ lahko začnemo tipkati ukaz. Pri tem lahko s tipko Tab avtomatsko dopolnimo dele ukaza (tab-completion). To je koristno predvsem za hitrejši vnos /dolgih/poti/do/datotek.
S puščicama gor-dol (arrow keys) se lahko premikamo naprej in nazaj po zgodovini nedavno izvedenih ukazov. S Ctrl + R lahko po tej zgodovini tudi iščemo.
Če smo pognali ukaz, ki se izvaja dlje časa, ga lahko s Ctrl + C ubijemo. Ctrl + D zapre terminal.
Osnovni navigacijski ukazi
cd - change directory
Prestavi se v drugo mapo. Pot do želene mape lahko (pri vseh ukazih!) podamo absolutno - glede na korenski direktorij, /mapa1/mapa2, - ali relativno - glede na trenutno mapo, mapa1/mapa2. Za lažjo uporabo imamo na voljo naslednje bližnjice:
-
/označuje korenski (root) direktorij. -
~označuje domačo mapo našega uporabnika (/home/uporabnik). -
.označuje trenutno mapo. -
..označuje prejšnjo (zunanjo) mapo.
zen@ZENBOOK:/usr/bin$ cd /home
zen@ZENBOOK:/home$ cd /
zen@ZENBOOK:/$ cd usr/bin
zen@ZENBOOK:/usr/bin$ cd .
zen@ZENBOOK:/usr/bin$ cd ..
zen@ZENBOOK:/usr$ cd bin
zen@ZENBOOK:/usr/bin$ cd ~
zen@ZENBOOK:~$
Če se poskušamo prestaviti v mapo, ki ne obstaja, lupina javi napako.
zen@ZENBOOK:/usr/bin$ cd home
-bash: cd: home: No such file or directory
zen@ZENBOOK:/usr/bin$ cd /home
zen@ZENBOOK:/home$ cd /home
ls - list
Izpiše, katere datoteke in mape se nahajajo v trenutni mapi.
Če mu podamo pot do mape, pa ls mapa izpiše vsebino mape mapa.
zen@ZENBOOK:/usr/bin$ ls /home
zen
zen@ZENBOOK:/usr/bin$ ls ..
bin games include java lib lib32 lib64 libexec libx32 local sbin share src
Pri večini ukazov lahko ob izvajanju izberemo dodatne opcije, rečemo jim tudi zastavice (flags, options), ki spremenijo delovanje ukaza. Na primer, zastavica -l pri ukazu ls vklopi natančnejši izpis, ki poleg imen datotek izpiše tudi dovoljenja, velikost, in datum spremembe.
zen@ZENBOOK:/home$ ls
zen
zen@ZENBOOK:/home$ ls -l
total 4
drwxr-x--- 15 zen zen 4096 Oct 15 08:33 zen
pwd - print working directory
Izpiše ime direktorija (mape), v katerem se lupina trenutno nahaja.
touch
Ustvari novo (prazno) datoteko.
mkdir - make directory
Ustvari novo mapo.
mv - move
Premakne datoteko drugam. Uporabno tudi za preimenovanje.
zen@ZENBOOK:~$ mv datoteka mapa
zen@ZENBOOK:~$ ls mapa
datoteka
zen@ZENBOOK:~$ mv mapa/datoteka mapa/keks
zen@ZENBOOK:~$ ls mapa
keks
cp - copy
Kopira datoteko.
Seveda lahko kopiramo tudi celotno mapo, z zastavico -r (recursive):
zen@ZENBOOK:~$ cp -r mapa napa
zen@ZENBOOK:~$ ls
mapa napa
zen@ZENBOOK:~$ ls mapa
keks piskot
zen@ZENBOOK:~$ ls napa
keks piskot
rm - remove
Izbriše datoteko.
Podobno kot pri cp, zastavica -r omogoča, da izbrišemo direktorij in vso njegovo vsebino. (Obstaja tudi ukaz rmdir, ki je namenjen brisanju praznih direktorijev.)
Pri uporabi rm -r je treba biti izredno pazljiv, saj za rm ne obstaja Recycle Bin, niti se ne da undo-jati ukaza. Zelo hitro si lahko po nesreči pobrišemo datoteke, ki jih nismo želeli.
Klasičen ukaz, ki se ga NE POŽENE, je sudo rm -rf / : z močjo superuporabnika zahtevamo, da se izbriše mapa / - čisto vse, kar je na računalniku, vključno z operacijskim sistemom.
Še nekaj raznih ukazov
man - manual
Ni nam treba znati vseh ukazov na pamet, saj je v lupini vgrajen priročnik - manual. Če nas zanima več o ukazu ukaz, napišemo man ukaz. Med drugim je man zelo koristen za pregled vseh zastavic in parametrov, ki jih lahko podamo ukazu.
Strani iz manuala so objavljene tudi na spletu, npr. tukaj.
Na ukaze v podnaslovih te docs strani je mogoče klikniti, povezava pelje na ustrezno man stran.
echo
Izpiše besedilo, ki mu ga podamo. Na prvi pogled ne izgleda preveč uporaben...
(...)
cat - concatenate
Izpiše vsebino datoteke.
zen@ZENBOOK:~$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
zen:x:1000:1000:,,,:/home/zen:/bin/bash
Za malo prijetnejše branje datotek v terminalu obstaja ukaz less, ki omogoča tudi premikanje naprej in nazaj po datoteki.
chmod - change mode
Spremeni dovoljenja za branje, spreminjanje ali izvajanje datoteke.
Ponavadi hočemo datotekam dodati dovoljenja, da lahko z njimi delamo, npr. želimo izvajati datoteke, prenesene s spleta, ki privzeto nimajo dovoljenja za izvajanje.
Za dovoljenje, ki ga želimo dodati, uporabimo znak + in ustrezno črko izmed rwx (po vrsti read, write, execute). Če želimo dovoljenje odstraniti, uporabimo -.
zen@ZENBOOK:~$ cat datoteka
To je datoteka z vsebino.
zen@ZENBOOK:~$ chmod -r datoteka
zen@ZENBOOK:~$ cat datoteka
cat: datoteka: Permission denied
zen@ZENBOOK:~$ chmod +r datoteka
zen@ZENBOOK:~$ cat datoteka
To je datoteka z vsebino.
V bash-u se datoteke (npr. programe), ki so v trenutni mapi, izvaja (požene) z ./ime-datoteke.
zen@ZENBOOK:~$ ./hello-world
-bash: ./hello-world: Permission denied
zen@ZENBOOK:~$ chmod +x hello-world
zen@ZENBOOK:~$ ./hello-world
Hello world!
sudo - superuser do
Napišemo pred ukaz, ki ga želimo izvajati kot superuporabnik (s povišanimi dovoljenji). Ob prvem klicu sudo moramo vnesti svoje geslo (poleg tega pa moramo biti uporabnik, ki sme uporabljati sudo).
Tako lahko npr. delamo z vsemi datotekami, ne glede na dovoljenja:
zen@ZENBOOK:~$ cat datoteka
cat: datoteka: Permission denied
zen@ZENBOOK:~$ sudo cat datoteka
[sudo] password for zen:
To je datoteka z vsebino.
To je uporabno predvsem, ko delamo s kakimi sistemskimi datotekami, ki morajo imeti stroga dovoljenja (npr. /etc/shadow). Poleg tega rabimo sudo tudi za razne namestitvene skripte, posodobitve in druge stvari, ki spreminjajo sistem.
V lupini obstaja bližnjica za zadnji ukaz, ki se je izvedel - !!, zato pogosto kričimo na svoj računalnik takole:
zen@ZENBOOK:~$ cat /etc/shadow
cat: /etc/shadow: Permission denied
zen@ZENBOOK:~$ sudo !! // pomeni sudo cat /etc/shadow
root:*:19683:0:99999:7:::
daemon:*:19683:0:99999:7:::
bin:*:19683:0:99999:7:::
...
sudo je treba uporabljati odgovorno. Veliko lažje je napisati sudo !!, kot pa eksplicitno nastavljati dovoljenja množici raznih datotek in uporabnikov, a v tem je past. Ena najhujših napak je, da iz lenobe s sudo poganjamo kake spletne aplikacije, ki nikoli ne potrebujejo tako splošnih pravic. Če Ko napadalec zlorabi ranljivost v taki aplikaciji, dobi popoln nadzor nad sistemom, saj je aplikacija tekla z root pravicami. Pravilno je, da spletne aplikacije zažene namenski uporabnik z minimalnimi možnimi dovoljenji - če napadalec prek take aplikacije dobi dostop do sistema, ne more narediti toliko škode.
nano
Preprost urejevalnik besedila, ki teče v terminalu. Z nano datoteka lahko pišemo v datoteko datoteka, oziroma jo prej še ustvarimo, če še ni obstajala. S Ctrl + O shranimo spremembe, s Ctrl + X pa zapremo datoteko.
Obstaja tudi vim, ki je manj preprost. Povejmo raje samo, kako se ga zapre: Esc :q! Enter.