Sažetak radionice “Linux terminal” održane 29.9.2011. u prostorijama Hacklaba01 u AKC Medika.
Da biste počeli s tutorialom najbolje je da pripremite sustav tako da bez greške možete završiti tutorial.
Polaznicima smo dali live distribuciju Linuxa grml koja se boot-a u root account. Priprema je sljedeća:
Postavite root password koji želite i koji ćete koristiti kad ćete trebati postati root korisnik:
# passwd
Ako volite hrvatsku tipokovnicu pokrenite:
# loadkeys croat
Dodajte novog usera ‘korisnik’:
# adduser korisnik
…postavite mu password koji želite i Full Name, a ostale informacije koje vas pita slobodno možete preskočiti pritišćući tipku Enter dok vas ne vrati u osnovnu komandnu liniju
Postanite user korisnik:
# su – korisnik
Kreirajte direktorij radionica:
# mkdir radionica
Uđite u direktorij radionica:
# cd radionica
Spremni ste za odrađivanje ovog tutoriala :)
Za sve naredbe postoji Manual stranica ili Help u kojem možemo pročitati sve što ta naredba može i sve njene opcije. Npr.:
Manuali za sve naredbe
# man man
dat će nam objašnjenje man naredbe i njenih opcija
ili
# man pwd
dat će nam objašnjenje pwd naredbe i njenih opcija
Operacije s file-ovima / direktorijima
pwd – komanda koja ispisuje trenutačni direktorij/folder u kojem se nalazimo
ls – komanda koja ispisuje sadržaj direktorija (korisno je napisati -al switcheve, -a kojim se prikazuju svi file-ovi i direktoriji, -l izlistava potpuni pregled sadržaja direktorija sa svim pravima i atributima)
mkdir – naredba kojom kreiramo direktorij/folder
Provjerite manual svake od ovih naredbi, npr: “man ls” ili “man mkdir”.
kreirajmo dva direktorija:
# mkdir prvidir
# mkdir drugidir
rmdir – naredba kojom brišemo direktorij/folder (remove directory)
# rmdir drugidir
cd – naredba kojom mijenjamo trenutni direktorij (change directory)
# cd prvidir
Provjerite sadržaj
# ls -al
Prebacite se u direktorij iznad
# cd ..
Provjerite sadržaj direktorija prvidir:
# ls -ald prvidir
Provjerite sadržaj trenutnog direktorija:
# ls -al
touch – naredba kojom kreiramo file, npr. file nazvan 0byte
# touch 0byte
echo – naredba kojom ispisujemo tekst koji (joj – naredbi) navedemo kao argument; u slučaju sprecijalnih znakova (special characters) potrebno je navesti jednostruke navodnike;
# echo hacklab01
# echo hacklab01 ne radi
# echo hacklab ne$radi
Primijetite da se nakon ove naredbe neće ispisati znak $ niti išta iza njega, jer shell interpretira $ kao poseban znak za postavljanje varijabli.
No, postavljajući string koji želimo ispisati u navodnike, kažemo shellu da ne interpretira $ znak kao početak varijable već da ga doslovno ispisuje:
# echo ‘hacklab ne$radi’
Unesimo string koji inače ispisujemo na ekran u file nazvan mali_file
# echo ‘hacklab ne$radi’ > mali_file
cat – ispisuje sadržaj datoteke/file-a
Provjerimo sadržaj trenutnog direktorija kako bismo se uvjerili da je novokreirani file u njemu te ispišemo ono što je u file-u:
# ls -l
# cat mali_file
cp – kopira/duplicira datoteku/file u drugu datoteku/file
Kopirajte mali_file u novi file nazvan kopija:
# cp -a mali_file kopija
Kopirajte kopiju nazvanu kopija u kopiju nazvanu kopija2
# cp -a kopija kopija2
Kopirajte file nazvan kopija2 u direktorij prvidir, nazivajući ga isto kao i originalni file kopija2
# cp -a kopija2 prvidir
Kopirajte file nazvan kopija2 u direktorij privdir, ali ovaj put nazivajući ga kopija3
# cp -a kopija2 prvidir/kopija3
rm – briše datoteku/file
!!!Pažljivo s ovom naredbom jer na linuxu nema recycle bina. Sto je jednom obrisano zauvijek je obrisano. Može se napraviti Recycle bin ali ga nema po defaultu na sustavu!!!
Izbrišite file mali_file:
# rm mali_file
Izbrišite file kopija2 iz direktorija prvidir:
# rm prvidir/kopija2
# cat kopija
mv – premješta/rename-a datoteku ili direktorij u drugi
Premjestite file kopija u file kopija4:
# mv kopija kopija4
ln – linka file, ne kopira ga nego samo radi pokazatelj na originalni file
Kreirajmo link:
# ln -s kopija2 prvidir/link
Provjerimo sadržaj trenutačnog direktorija u kojem se nalazimo:
# ls -la
Provjerimo sadržaj direktorija prvidir i veličinu linka kojeg smo napravili:
# ls -la prvidir
Dodajmo još jedan string u file nazvan kopija2. Obratite pažnju da sada koristimo dva znaka veće od “>>”, što znači dodaj u file. Gore smo koristili jedan znak veće od “>”, kada smo upisivali prvi string u file. Jednim znakom > poništavamo sve što je prije bilo u file-u i stavljamo u njega samo ono što navedemo. Koristeći dva znaka >> dodajemo u file s već postojećim tekstom novi komad teksta, pritom ne dirajući uopće ono što je od prije u file-u:
# echo gringo >> kopija2
Ispišite novi sadržaj file-a kopija2:
# cat kopija2
Provjerite sadržaj trenutnog direktorija:
# ls -al
Provjerite sadržaj direktorija prvidir:
# ls -al prvidir
(primijetite da se veličina linka nije promijenila, a veličina samog file-a u trenutačnom direktoriju je)
stat – naredba koja ispisuje status file-a ili direktorija
# stat kopija2
# stat prvidir
# stat prvidir/link
more – naredba kojom pregledavamo file ali ne možemo scrollati red po red nego samo stranicu po stranicu i to koristeći space i b tipke za prebacivanje stranica naprijed-nazad
less – proširena naredba more sa scrollanjem red po red i mogućnošću korištenja specijalnih tipki sa strelicama, pgup, pgdn
grep – naredba za pretraživanje datoteka i ispisivanje linija koje se podudaraju s uzorkom koji pretražujemo
Dodajte još jednu liniju u file kopija2
# echo jos jedna linija >> kopija2
Pretražite file kopija2 sadrži li string “jos”
# grep jos kopija2
Pretražite file kopija2 sadrži li string “hacklab”
# grep hacklab kopija2
Arhiviranje
tar – naredba za arhiviranje fileova
Kreirajte tar arhivu i nazovite je arhiva.tar i u nju spremite sve fileove čije ime započinje stringom kopija i nastavlja s nijednim ili bilo kojim drugim znakom
# tar -cf arhiva.tar kopija*
Izlistajte file-ove koji se nalaze u arhivi arhiva.tar koju smo kreirali
# tar -tf arhiva.tar
Napravite direktorij untar, u koji ćemo otpakirati arhivu arhiva.tar:
# mkdir untar
Kopirajte arhiva.tar arhivski file u kreirani direktorij untar:
# cp -a arhiva.tar untar
Uđite u direktorij untar:
# cd untar
Otpakirajte arhiva.tar arhivu:
# tar -xvf arhiva.tar
gzip – naredba za komprimiranje datoteka
Vratite se u početni direktorij:
# cd ..
Zazipajte (komprimirajte) sve u direktoriju untar s najvećim nivoom kompresije:
# gzip -9 untar/*
Izlistajte sadržaj direktorija untar:
# ls -al untar
Odzipajte (odkomprimirajte) sve u direktoriju untar:
# gzip -d untar/*
Izlistajte sadržaj direktorija untar:
# ls -al untar
Zazipajte sve unutar direktorija untar s malim nivoom kompresije:
# gzip -2 untar/*
Izlistajte ponovno sadržaj direktorija i primijetite kako su file-ovi veći nego u prvom pokušaju kompresije gdje smo koristili najveći stupanj kompresije:
# ls -al untar
Procesi
top – ispisuje procese operativnog sustava
ps – ispisuje report o trenutačnom procesu
kill – šalje signal procesu, najčešće se koristi da zaustavi proces
Provjerite tablicu s procesima na računalu koji oduzimaju najviše procesorske snage računala:
# top
Iz top naredbe izađite pritiskom na tipku Q i zatim izlistajte sve procese koji se trenutačno odrađuju na računalu sljedećom naredbom:
# ps -fe
Vidjet ćete puno procesa koji vam ne stanu na ekran. Kako biste ih sve mogli provjeriti pokrenite naredbu na sljedeći način:
# ps -fe | less
Poseban znak | engleskog imena pipe (na hrvatskom layoutu tipkovnice AltGR+W, na engleskom Shift+Ž) prebacuje output jedne naredbe u drugu.
Ovdje to znači da ćemo onaj dugački output na ekranu proslijediti naredbi less za gledanje teksta stranicu po stranicu i sad ćemo moći vidjeti ispis stranicu po stranicu. Izlazimo tipkom Q.
Otvorite najdraži text editor i upišite sljedeći kod kako biste napravili skriptu koja se vrti u beskonačnost:
#!/bin/bash
while true
do
echo “” > /dev/null
done
Spremite file nazivajući ga beskonacna_skripta i izađite iz editora.
Donjom naredbom ćemo reći sustavu da se skripta može pokretati, tj. da dobije executable prava (nešto više o chmod naredbi niže u tutorialu)
# chmod 755 ./beskonacna skipta
# ./beskonacna_skripta
… primijetit ćete da se skripta izvršava i ne da vam da išta pišete po svom shellu jer je preuzela vaš shell. Pritisnite +C kako bi je prekinuli.
Ponovo je pokrenite, ali sa znakom & na kraju jer tako kažemo shellu da skripta koju će izvršiti uzme svoj shell a nama vrati naš. To se inače zove postavljanje skripte (ili nekog drugog programa) u background ili hrvatski u pozadinu.
# bash ./beskonacna_skripta &
# top
Primijetimo kako naša skripta zauzima većinu procesorske snage. Izađimo iz top naredbe pritiskom na tipku Q.
Pošto smo već koristili grep i znamo što radi sada ćemo cijeli ispis naredbe “ps -fe” proslijediti (opet specijalnim znakom |) naredbi grep koja pretražuje string besk, kako bi se na ekranu ispisao samo proces od pokrenute skripte ./beskonacna_skripta
# ps -fe | grep besk
Ispis će biti nešto poput:
korisnik 17519 2582 0 17:30 pts/4 00:00:00 bash ./beskonacna skripta
Ovdje trebamo upamtiti drugi stupac po redu, u ovom primjeru broj 17519. Vama će to biti drugačiji broj. To je PID (process ID) koji identificira svaki pokrenuti proces na računalu. Svaki pid je različit i jedinstven za proces.
Sad zelimo prekinuti nasu beskonacnu skriptu. To radimo kill naredbom i iza nje navedemo pid procesa kojeg zelimo ubiti, npr.:
# kill 17519
Ponovo provjerimo da li je proces jos aktivan:
# ps -fe | grep besk
Ako nema takvih procesa, sve je ok, ubili smo proces. Ako je jos uvijek tu, mozemo forsirati ubijanje procesa:
# kill -9 17519
Ovaj -9 kaze racunalu da ubije proces bez ikakvih pogovora i odustajanja.
su –
preuzimanje kontrole nad root userom (su = SuperUser)
# su –
Bolje je korisiti “su -” jer on preuzima sve postavke koje ste postavili za root korisnika. Inace samo “su” pokrece defaultni shell root korisnika s defaultnim postavkama.
sudo – dopusta izvrsavanje jedne komande kao root korisnik
Samo za vjezbu mozete u /etc/sudoers dodati pomocu svojeg najdrazeg editora (vim, nano), npr:
# nano /etc/sudoers
i zatim u taj file dodajte donju liniju:
korisnik ALL=(ALL) ALL
.. time ste korisniku “korisnik” dali da izvrsava sve naredbe pomocu svojeg passworda i da ne mora znati root password. Inace ova tehnika nije ohrabrujuca i ne radite ju na sustavima na kojima zelite sigurnost jer je ovo jedan od vecih sigurnosnih rupa na sustavu da obican korisnik ima sva root prava. Ovo je ovdje napravljeno tako samo za vjezbu da bude lako shvatljivo.
Vratite se na korisnika “korisnik” upisuci samo exit:
# exit
Probajte dodati jednog usera na sustav i javit ce vam gresku da ne mozete:
# adduser hacker
Sad pomocu sudo naredbe mozete izvrsavati naredbe koje inace moze samo root korisnik:
# sudo adduser hacker
# sudo userdel hacker
Useri (korisnici), grupe, vlasnistva i prava
user (korisnik) je account na sustavu na koji se mozete ulogirati sa usernameom i passwordom
groups (grupe) su grupe u koje se mogu svrstavati korisnici
Svaki file i direktorij ima usera za vlasnika i group vlasnistvo. Svaki file ima postavljena user, group i other users prava. Prava mogu biti r (read), w (write) i x (execute)
Read – znaci da korisnik koji ima postavljena ta prava moze procitati file ili sadrzaj direktorija
Write – znaci da smije mijenjati sadrzaj file-ova, snimiti ih ili izbrisati, te za direktorije da smije kreirati nove file-ove i direktorije unutar direktorija za koja ima postavljena write prava, te pobrisati file-ove unutar tog direktorija
eXecute – znaci da smije execute-ati (pokretati) fileove za koje ima execute prava (npr. skripte ili binary) te za direktorije da smije ulaziti u njih
Sada cemo pojasniti detaljni ispis ls naredbi:
# ls -al kopija2
-rw-r–r– 1 hacklab01 hacklab01 4841 Jun 29 15:30 kopija2
# ls -ald privdir
drwxr-xr-x 5 hacklab01 hacklab01 4096 Jun 2 2010 prvidir
prvi ispis su prava: d kao oznaka za direktorij tj. tu se ispisuje vrsta file-a ili direktorij, rw za vlasnika file-a, r za group vlasnika i r za other users
drugi ispis je broj linkova
treci ispis su vlasnik te group vlasnik
cetvrti ispis je velicina
peti ispis je datum i vrijeme modifikacije sadrzaja file-a ili direktorija
sesti ispis je ime datoteke ili direktorija
Sljedecim naredbama mijenjamo vlasnika, group vlasnika ili prava nad file-om/direktorijem:
chown – mijenja user i group vlasnistvo nad file-ovima/datotekama i direktorijima
chgrp – mijenje group vlasnistvo nad file-om ili direktorijem
chmod – mijenja prava vlasnika, grupa i drugih korisnika nad fileovima i direktorijima
Postanite root korisnik
# su –
Provjerite u kojem ste direktoriju:
# pwd
Ako niste u /home/korisnik/radionica, udjite u taj direktorij:
# cd ~korisnik/radionica
Promijenite vlasnika file-a kopija2 na root korisnika:
# chown root kopija2
# ls -al kopija2
Promijenite group vlasnika file-a kopija2 na root korisnika:
# chgrp root kopija2
# ls -al kopija2
Promijenite odjednom vlasnika i group vlasnika file-a kopija2 natrag na usera “korisnik”
# chown korisnik.korisnik kopija2
# ls -al kopija2
Vratite nazad oba vlasnista na root korisnika:
# chown root.root kopija2
# ls -al kopija2
Maknite read prava za other users
# chmod o-r kopija2
# ls -al kopija2
..primjetite kako je zadnje r nestalo iz ispisa
Promijenite oba vlasnistava direktorija prvidir na root korisnika i maknite execution dozvolu za other users
# chown root.root prvidir
# chmod o-x prvidir
Vratite se na korisnik korisnika
# exit
# ls -al
# cd prvidir
.. primjetite kako vam je onemogucen ulazak (execution) direktorija prvidir
Vratite se na root korisnika
# su –
# cd ~korisnik/radionica
Promijenite oba vlasnistva beskonacne skripte na root korisnika i maknite execute prava za nju za other users
# chown root.root beskonacna_skripta
# chmod o-x beskonacna_skripta
Vratite se na korisnik korisnika i probajte pokrenuti skriptu
# exit
# ./beskonacna_skripta
To vam je onemoguceno jer ste naknuli execution prava za nju za other users koji ukljucuje korisnik usera.
Instalacija programa (ovdje je specificno obradjena instalacija programa za Debian i debian-based distribucije koje podrzavaju apt kao instalacijski framework)
apt-get, apt-cache ili aptitude – naredbe za trazenje, instaliranje, deinstaliranje programa tj. programskih pakete s repozitorija (download lokacija) koje su javno dostupne svim korisnicima distribucije linuxa koja je instalirana na sustavu
aptitude update – naredba kojom se sa repozitorija skidaju popisi programa koji su dostupni za download i instalaciju na nas sustav, dobro ju je pokrenuti prije svake provjere programa koji trazimo ili instalacije kako bi uvijek bili sigurni da imamo popis najnovijih verzija programa za instalaciju
Postanimo root korisnik iako sve ovo mozete i pomocu sudo naredbe:
# su –
Provjerimo koji su nam repozitoriji ukljuceni:
# less /etc/apt/sources
# aptitude update
aptitude search
apt-cache search – s njima trazimo program na repozitoriju
Potrazimo program audacious (music player)
# apt-cache search audacious
ili
# aptitude search audacious
Instalirajte program audacious:
# apt-get install audacious
ili
# aptitude install audacious
U vise slucajeva ce nas aptitude pitati da li zelimo instalirati dodatne pakete koji su mu potrebni da bi ispravno instalriao program koji zelimo. U vecini slucajeva ako zelimo da sve radi odgovorimpo sa y (yes)
Deinstalirajte program audacious
# apt-get remove audacious
ili
# apt-get purge audacious
s ovom naredbom purge uklanjamo i konfiguracijske file-ove programa
ili
# aptitude remove audacious
ili
# aptitude purge audacious
dpkg – Debianov (Ubuntu) alat kojim instaliramo .deb pakete u kojima se takodjer nalaze programi koje mozemo instalirati na sustav, te datoteke skidamo s interneta, a ne s repozitorija
Da bi nam primjer radio moramo instalirati python-gnome paket
# aptitude install python-pygame (da bi nam igrice radile :/)
Skinite .deb paket: http://www.mediafire.com/?x1e8487audza8ba
# dpkg -i yayact_0.95-1_i386.deb
Da bi igrica radila najvjerojatnije morate biti u grafickom sucelju:
# startx
U meniju potrazite yayact i probajte pokrenuti igricu, trebala bi raditi.
Skripte
Skripte su file-ovi ispisani naredbama u odredjenom redoslijedu kako bi automatizirano i brze mogli izvrsiti operacije i obrade podataka koje inace cinimo pojedinacnim naredbama; pogotovo su korisne kod operacija koje se moraju ili zele odradjivati periodicki.
Skripta moze biti pisana (poput programskih jezika) u nekoliko formata. Najpoznatiji formati tj. programski jezici pisanja skripti na Unix/Linux sustavima su shell skripte (sh, bash, zsh) i perl skripte. Shell skirpte su nesto jednostavnije i puno blize Unix/Linux korisnicima posto je sintaksa naredbi gotovo ista kao ona koju upotrebljavamo u terminalu pisuci naredbu jednu za drugom. Perl skripte su nesto teze sintakse i kompliciranije ali zato s njima imamo puno siri spektar mogucnosti, nacina obrade podataka i primjenjivije su na teze zadatke.
Skripte pokrecemo tako da posto smo napisali kod u file, u terminalu napisemo:
# /bin/bash ./skripta
Ili unutar skripte navedemo interpreter tako sto cemo za prvu liniju koda staviti:
#!/bin/bash
..ili koji god drugi shell zelimo iskoristiti, npr:
#!/bin/sh
..dakle nakon znakova #! upisujemo put do programa kojim cemo obraditi podatke u skripi. Sa /bin/sh necemo pogrijesiti posto svi danasnji Unix bazirani sustavi imaju osnovni shell ciji je pokretacki program /bin/sh tako da je skoro nevjerojatna situacija u kojoj nam na racunalu na kojem pokrecemeo skriptu nece postojati /bin/sh. /bin/bash je takodjer zastupljena na skoro svim sustavima (ja osobno nisam naletio ni na jedan na kojem nema bash, no zato /bin/zsh je na rijetkim sustavima instaliran u osnovnom programskom paketu koji dolazi sa sustavom tako da ukoliko zelimo pokretati /bin/zsh skriptu na racunalu na kojem program /bin/zsh nije prisutan, morat cemo ga instalirati prije nego cemo moci korisniti skriptu. Ako skripta sadrzi neke naredbe koje su osnovne, mozda ce nam skripta raditi samo tako da promijenimo ime interpretera na shell koji je zastupljen na kompjutoru, a ukoliko nece onda cemo morati prepraviti kod tako da radi sa shell interpreterom koji imamo na sustavu. Npr.
for i in {1..5}
do
- echo -n “$i “
done
..nece isto raditi s /bin/sh i /bin/bash jer razlicito interpretiraju for naredbu, za /bin/sh skriptu cemo morati koristiti ovakvu sintaksu:
for i in 1 2 3 4 5
do* - echo -n “$i “
done*
Dakle cijela skripta ce izgledati otprilike ovako:
#!/bin/sh
for i in 1 2 3 4 5
do
- echo -n “$i “
done*
Spremimo (save-amo) u file npr. nazivajuci ga moja_prva_skripta.
Moramo joj postaviti execute prava kako bi je mogli pokretati bez prethodnog poszivanja interpretera:
# chmod 755 moja_prva_skripta
i pokrenemo ju:
# ./moja_prva_skripta
Ukoliko nismo postavili execute prava na skripu, pokrecemo ju na sljedeci nacin:
# /bin/sh ./moja_prva_skripta
Sve prijedloge, pohvale i primjedbe slobodno mozete postaviti u clanak na forumu:
http://hacklab01.org/forum/8-tutoriali/913-linux-terminal-termlab.html#913