|

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 |