Skip to content

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...

tux

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.

app-kernel-hardware-diagram

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.

linux-filesystem

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

zen@ZENBOOK:/usr/bin$ 

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.

zen@ZENBOOK:/home$ ls
zen

Č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.

zen@ZENBOOK:~$ pwd
/home/zen

touch

Ustvari novo (prazno) datoteko.

zen@ZENBOOK:~$ touch datoteka
zen@ZENBOOK:~$ ls
datoteka

mkdir - make directory

Ustvari novo mapo.

zen@ZENBOOK:~$ mkdir mapa
zen@ZENBOOK:~$ cd mapa
zen@ZENBOOK:~/mapa$

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.

zen@ZENBOOK:~$ cp mapa/keks mapa/piskot
zen@ZENBOOK:~$ ls mapa
keks  piskot

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.

zen@ZENBOOK:~$ rm napa/keks
zen@ZENBOOK:~$ ls napa
piskot

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.)

zen@ZENBOOK:~$ rm -r napa
zen@ZENBOOK:~$ ls
mapa

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...

zen@ZENBOOK:~$ echo Hello World!
Hello World!

(...)

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.

Made with ❤️ by DragonSec SI