5,461 pregleda

Hack the shell prvi dio – Napad na shell

5

Što je to shell?
Shell je poseban interaktivan alat koji omogućava pokretanje programa, obradu teksta, manipulaciju datotekama, manipulaciju datotečnim sustavima, upravljanje procesima, nadzor sustva i još puno toga. Ukratko, glavni posao shella je pretvoriti korisnikove naredbe u jezik razumljiv sustavu.
Npr, razmotrimo liniju sort -n anime_list > anime_list.sorted
Što ovo radi? Kaže sustavu sortiraj linije u datoteci anime_list numeričkim redoslijedom te rezultat stavi u anime_list.sorted. Evo što i shell radi sa ovom naredbom

  1. naredbu rastavlja na više dijelova; sort, n, anime_list, >, anime_list.sorted.
  2. ovi dijelovi se nazivaju words.
  3. detektira značenje za svaki dio
  4. postavlja I/0  traži naredbu sort te je pokreće u numeričkom redoslijedu (-n)
  5. rezultat zapisuje u anime_list.sorted

Naravno, svaki od ovih koraka poziva još i međukorake od kojih svaki daje određenu naredbu sustavu. Važno je, također, napomenuti da shell nije sustav već je korisničko sučelje za sustav.

Namjera mi je upoznati korisnika sa bashom koji je najkorišteniji od shellova ( I samim time će se korisnik najčešće sa njime susresti ). Postoje dva načina na koja se bash može koristiti. Kao shell i kao programski jezik. Radi lakoće praćenja “Napad na bash” će biti podijeljen na više cjelina koje će se periodički nadopunjivati.

 

Kratka povijest Unix shella

Neovisnost Unix shella je kroz povijest rezultirala stvaranjem brojnih shellova od čega mnogih i za posebne namjene. Prvi značajan shell je bio Bourne shell (sh), nazvan prema svom autoru, Steaven Bourne te je bio uključen u prvi popularan Unix, Unix ver 7 iz 1979. godine.
Prva šire korištena alternative je bio C shell (CSH) kojeg je napisao Bill Joy kao dio BSD sustava.
Tijekom zadnjih godina mnogi novonastali shellovi su postali poprilično popularni. Tu svakako valja izdvojiti Korn Shell (KSH). Ksh je komercijalan produkt koji spaja najbolje od Bourn shella I C shella. No, kako je na većini sustava ipak bash nativna ljuska i kako je ovdje ipak riječ upravo o napadu na bash, nekoliko riječi o bashu.

Bourne Again Shell

Bourne Again Shell, čije je ime stavljeno u čast Bournea, kreiran je unutar GNU Projekta, kojeg je započeo Richard Stallman, sa namjerom zamjene svih komercijalnih Unix alata za slobodne, otvorena koda I dostupne svima uz u potpuno slobodan I otvoren operacijski sustav.
Bash, koji je trebao biti standardan shell za GNU, je rođen 10.siječnja 1988.godine te ga je napisao Brian Fox prema uzoru na sh. Ubrzo je pronašao svoj put kao najkorišteniji shell u svim većim Unix i unixoidnim sustavima, a najviše zahvaljujući Linuxu koji je najrašireniji i najkorišteniji unixoidan sustav. Iako je bash poznat još kao i “nativna” ljuska, bash nije i jedina ljuska. Uz kompatibilnost sa Bourne shellom kombinira i najbolje funkcije iz csh i ksh ljusaka te donosi mnoga svoja riješenja.

Karakteristike bash ljuske

Sposobnost editiranja naredbi u naredbenom retku je jedna od karekteristika koja je najzaslužnija za popularnost ove ljuske. Uz ovu karakteristiku je mnogo lakše vratiti se natrag te ispraviti greške ili pak nadopuniti naredbu. Tu je još i csh-ov management povijesti. Također, jedna od vrlo korisnih karakteristika basha je što osim interaktivne uporabe pruža i programersko okruženje te samim tim i kontrolu poslova preko korisničkih skripti. Ova karakteristika je također posuđena iz C shella.
Ostale napredne mogućnosti su većinom bitnije programerima te ćemo njih kasnije obraditi zasebno (definicija funkcije, kontrola struktura, aritmetika, napredna I/0 kontrola i mnoge druge).

Interaktivno korištenje

Kad shell koristite interaktivno, pristupate login sesiji te ona započinje kad se ulogirate a završava vašim izlaskom te ako unutar grafičkog korisničkog sučelja otvorite neki terminal emulator.

Naredbe, argumenti i opcije

Shell naredbe su, kao što je ranije rečeno, sastvaljene od riječi koje su odjeljene razmacima. Prva riječ je naredba a ostatak su argumenti naredbe. Na primjer, naredba lp myfiles sadržava naredbu lp te argument na kojeg se naredba odnosi (myfiles).
Opcija je specijalan argument koji se odnosi na samu naredbu. Npr. lp -h myfiles
sadržava opciju -h koja naredbi lp govori da prvo printa naslovnu stranicu a onda ostatak.

Datoteke

Iako datoteke nisu najčešći oblik argumenata naredbe, one su vrlo važne u radu Unixoidnih sustava. Datoteke mogu sadržavati različite vrste podataka pa su prema njima i tri najvažnije skupine:

  • regular files – regular files ili tekstualne datoteke sadrže čitljive podatke; npr. ova knjiga je nastala spajanjem više tekstualnih datoteka u jednu
  • executable files – također zvane i programi,skripte.
  • direktoriji – sadrže druge datoteke ali i direktorije ( poddirektoriji)

Direktoriji

Činjenica da direktorij može sadržavati i druge direktorije vodi do hijerarhijske strukture direktorija. Glavna značajke putanja direktorija i datoteka za linux su standardizirana struktura i imena prema kojima bi se isto trebali odnositi i razvojni programeri ali i korisnici.
Kako to ustvari izgleda unutar linux operativnog sustava? Sve počinje sa “/” – oznakom za korijen (root) strukture direktorija, neovisno o tome na kojem se on disku nalazio (nemamo oznaka C:, D: i sl. kao kod nekih operativnih sustava koje označavaju diskove; diskovna struktura je gurnuta u drugi plan). Svaki poddirektorij se označava ponovo znakom “/” čime ujedno pratimo i direktorijsko stablo. Sve, ali baš sve, je dostupno preko datoteka – uključujući i podatke o procesima, upravljanje uređajima ili direktan pristup diskovima.

/ korijen (root)
|—bin naredbe dostupne svima
|—boot direktorij korišten prilikom dizanja sustava
|—dev datoteke uređaja
|—etc konfiguracijske datoteke
| |—-rcX.d datoteke skripti servisa
|—home korisnički direktoriji
| |—-korisnik1 direktorij korisnika1
| |—-korisnik2 direktorij korisnika2
|—lib library datoteke korištene od strane sustava
| |—-modules moduli kernela
|—mnt direktorij za priključivanje vanjskih diskova
|—media direktorij za priključivanje privremenih diskova
|—proc virtualni direktorij, sadrži podatke o procesima
|—root direktorij root korisnika
|—sbin naredbe dostupne isključivo sustavu (i administratoru)
|—tmp privremene datoteke potrebne na kratko vrijeme
|—usr glavni direktorij za aplikacije
| |—-bin naredbe (programske datoteke)
| |—-sbin naredbe (programske datoteke) sustava
| |—-include direktorij za header datoteke programa
| |—-lib direktorij library-a datoteka za programe
| |—-local poddirektorij za lokalne programe
| |—-man stranice uputa (man datoteke)
| |—-doc dokumentacija
|—var promjenjive datoteke sustava (cache, baze…)
| |—-lib promjenjive library datoteke
| |—-lock lock datoteke za označavanje određenih programa
| |—-log datoteke dnevnika sustava, servisa i programa
| |—-run promjenjive datoteke potrebne u toku rada sustava
| |—-spool spool datoteke mail-a, pisača, news grupa

Jednom kad se stekne pregled, znate da će se konfiguracijska datoteka za npr. apache servis nalaziti unutar /etc/apache/ poddirektorija ili da se dnevnik istog servisa može naći pod /var/log/apache/.

Ulaz u shell

U starim danima, sve što je bilo dostupno za rad sa Linux sustavom bio je shell. Sistem administratori, programeri, korisnici, svi oni su sjedili pred računalom i sa njim komunicirali unoseći naredbe u shell. Danas, sa našim ušminkanim grafičkim okruženjima teško je naći odgovarajući propmt ili odakle uopće početi. U ovome poglavlju ću pokušati objasniti što je sve potrebno za rad sa shellom počevši od terminal emulatora.

Terminal emulacija

Kako u tim starim danima nije bilo grafičkog korisničkog sučelja, jedini način za komunikaciju sa sustavom bilo je upravo konzolno korisničko sučelje koje je omogućio shell. Upravo radi te restrikcije izlazne jedinice nisu trebale biti previše zahtjevne. Tipičan desktop se svodio na najobičniji monitor i tipkovnicu. Na računalo su bilo povezani sa najobičnijim kablom, tzv multi-wire serijskim kablom. Ovaj način je ipak pružao dovoljno za osnovan rad, manipulaciju datotekama, obradu teksta, programiranje. Kao što znate, danas su stvari znatno drugačije. Skoro svaka distribucija pruža neko od grafičkih korisničkih sučelja ili više njih na odabir. No, kako bilo, za rad sa ljuskom i dalje je potreban terminal no kroz svu silinu modernih desktopa sad je problem doći do ljuske. Jedan od naćina je ugasiti GUI te se prebaciti u tekst mod kao što je bio i prije svih modernih desktop i window managera. Drugi način je korištenjem terminal emulatora. Skoro svaki desktop manager nudi neki svoj terminal emulator pa čak i X.org nudi svoj terminal emulator, xterm. Terminal emulator simulira rad u golome terminalu unutar grafičkog korisničkog sučelja. Svaki terminal emulator ima mogućnost emulirati jedan ili više specifičnih terminala.

Poznavanje svojstva terminala olakšava korisniku odabir terminal emulatora za svoj sustav.
Osnova svojstva terminala se mogu ugrubo podjeliti na dvije skupine; grafička svojstva i tipkovnicu. U nastavku ćemo objasniti svaku od ove dvije skupine i kako se ponašaju za različitim terminal emulatorima.

Grafičke sposobnosti

Najvažnije kod terminal emulatora je kako on prikazuje informacije na zaslonu. Obično kad korisnici čuju text mod misle kako ovdje najmanje treba brinuti o grafici no to nije tako. U nastavku slijede neke od važnijih stvari o kojima treba voditi računa i koje treba poznavati.

Setovi znakova
Svi terminali moraju prikazivati znakove na zaslonu, u suprotnom tekst mod ne bi imao smisla.
Set znakova je set binarnih naredbi koje Linux šalje prema zaslonu a govore kako da se nešto ispiše. Nekoliko je raznih setova no ovdje ćemo obraditi samo one osnovne koji dolaze sa konzolom.

  • ASCII The American Standard Code for Information Interchange – Ovaj jet sadrži sve engleske znakove pohranjene u 7bitnom zapisu, ukupno njih 128 (slova, brojke i specijalni znakovi)
  • ISO-8859-1 poznatiji kao latin1 – Ovaj set je nadopuna za ASCII set raznim znakovima i slovima većinom iz jezika zapadno europskih zamalja
  • ISO-8859-2 poznatiji kao latin2 – Ovaj set je također nadopuna za ASCII set znakovim i slovima istočno europskih zemalja uključujući hrvatski jezik i ćirilicu
  • ISO-8859-6 set arapskih znakova
  • ISO-8859-7 set grčkih znakova
  • ISO-8859-8 set znakova za hebrejski jezik
  • ISO-10646 set poznatiji pod nazivom UNI code

Latin1 set je danas standard ne samo u engleskom govornom području već širom svijeta a kod nas je standard latn2 no lagano radi svoje popularnosti i UNI code postaje standard.

Kontrolni kodovi

Osim što moraju ispravno ispisivati znakove na zaslonu, terminal emulatori moraju voditi računa i o posebnim funkcijama tipkovnice i i pokazivaču miša. To se postiže korištenjem kontrolnih kodova.
Kontrolni kodovi su kodovi koji se ne nalaze u setovima a služe kako bi teminalu signalizirali da se izvršava operacija čiji ishod se ne ispisuje. Tipične funkcije kontrolnih kodova su vraćanje kurzora na početak ili kraj reda ili pak pomicanje tekstom služeći se strelicama, ulazak u novi red pritiskom na tipku enter, tabulatorske radnje, brisanje znakova,…

Grafika blokova

Kako su operacijski sustavi napredovali, a računala postajala pristupačnija kućanstvima, programeri su počinjali eksperimentirati sa grafikom u terminalu. Najpopularniji “grafički” terminal u Unix svijetu je bila DEC VT serija terminala. DEC VT100 je bio prvi terminal kompitabilan sa cijelim setom ANSI znakova i koji je podržavao blok grafiku.

Vektorska grafika

Tvrtka Tektronix razvila je seriju vrlo popularnih terminala koji znakove nisu prikazivali kao djelove blokova već su ih prikazivali kao serije segmenata linije. Tektronix 4010 je bio njihov najpopularniji terminal.
Današnji terminal emulatori koriste softverska riješenja za emuliranje vektorske grafike po uzoru na Tektronixove terminale. Ovakvo iscrtavanje znakova je vrlo popularno u akademskim krugovima radi preciznosti, posebice kod ispisa grafova raznih mjerenja.

Međupohrana podataka

DEC VT serija je bila prva serija terminala koja je omogućavala međupoharnu podataka.
Međupohrana podataka zahtijeva dodatnu memoriju, unutar samog terminala, za pohranu znakova koji se trenutno ne prikazuju na zaslonu. DEC VT serija je međupohranu svela na dva tipa

  • pohranu znakova kad se više ne prikazuju na zaslonu (povijest)
  • međupohranu u zaseban prozor

Boje
Boje su vrlo važne za rad u terminalu posebno za programere. Već i u vrijeme monokromatskih zaslona pokušavalo se prikazivati znakove u raznim nijansama i na različite načine.
Pa su se tako razvili sljedeći načini prikazivanja znakova

  • podebljani znakovi
  • podvučeni znakovi
  • znakovi pisani kurzivom
  • crni znakovi na bijeloj podlozi
  • titrajući znakovi
  • kombinacija svih prije navedenih

U ono doba, ako se željelo privući nečiju pažnju, koristila su se podebljana crna slova na bijeloj podlozi koja su titrala. Danas ovakav način uz moderne zaslone samo uništava oči.
U današnje doba, uz grafičke terminale, koristi se bojanje koda odnosno syntax highlighting.

Tipkovnica

Dobra tipkovnica je za rad sa terminalom skoro važnija nego kvalitetan zaslon. Ako ste ikada radili sa različitim terminalima sigurno ste primjetili kako sadržavaju različite funkcijske tipke. Emulirati posebne funkcijske tipke različitih tipkovnica je bilo poprilično teško izvesti za različite terminale, no i proizvođačima računala je bilo poprilično teško, gotovo nemoguće napraviti tipkovnicu koja bi sadržavala funkcijske tipke za sve terminale te se stoga uz drugačije računalo isporučivao i operacijski sustav napravljen za njega sa svojim terminalom. Danas je to zahvaljujući IBMu i njihovom PC projektu znatno drugačije.
Neke od najkorištenijih funkcijskih tipki u radu sa terminalom su

  • break – šalje niz od 0 računalu, obično se koristi za ometanje trenutno aktivnog programa u terminalu
  • scroll lock – zaustavlja ispis na terminal
  • repeat – ako se pritisne u kombinaciji sa drugom tipkom govori terminalu da njenu funkciju ponavlja sve dok se tipka repeat ne pusti
  • return – (tipka enter) označava kraj naredbe i odlazak u novu redak
  • delete – briše znak na trenutnom položaju kurzora
  • strelice – služe za kretanje tekstom
  • funkcijske tipke (F1 – F12) – posebne tipke za koje se mogu vezati različite radnje ( DEC VT serija terminala i računala na kojima su se isporučivali su imala tipke od F1 do F20 i od PF1 do PF20

Terminfo baza podataka

Kad imamo terminal emulator trebamo nekako Linuxu reći koji terminal želimo emulirati.
Linux sustav mora znati koje kontrolne kodove koristiti kad komunicira sa terminal emulatorom, a to se postiže korištenjem enivorment varijable i seta datoteka zvanog terminfo.
Set terminfo se nalazi unutar /etc/terminfo datoteke. Linux unutra pohranjuje podatke za svaki tip terminala u zasebne datoteke.

Linux konzola

U počecima Linux sustava nakon boot procesa dočekao bi vas login prompt i ništa osim toga.
Kao što je ranije spomenuto, to je Linux konzola, jedino mjesto u kojem se tada moglo raditi.
Danas, kod modernih Linux sustava, kad se sustav pokrene automatski stvara više virtualnih konzola.
Virtualna konzola je terminal sesija koja se odvija na memoriji sustava. Umjesto da je na računalo priključeno više zaslona, za svaku konzolu po jedan, Linux kreira više virtualnih, obično 7, a ponekad i više, kojima se može prići preko tipkovnice. Kod većine distribucija pristup virtualnim konzolama se odvija pritiskom na kombinaciju tipaka Ctrl+Alt+ broj konzole kojoj se želi pristupiti.
Broj konzole se bira preko F tipaka.

Xterm

Najstariji terminal emulator za X je xterm, a pruža emulaciju i za VT102/220 i za Tektronix 4014. Ne zahtjeva puno resursa te je stoga vrlo popularan kod korisnika sa starijim računalima i kod korisnika škrtih na resursima dok ga neka okruženja kao FluxBox koriste kao nativni terminal emulator. Iako ne nudi neke posebne i napredne funkcije, xterm radi jednu stvar daleko bolje nego bilo koj drugi terminal emulator, emuliranje VT220 terminala. Novije inačice xterma te terminala proizašlih iz njega kao urxvt nude i korištenje boja preko korisničkih skripta.

Konsole terminal

KDE projekt je kreirao svoj vlastiti terminal emulator nazvan jednostavno Konsole.
Konsole terminal emulator je baziran na xterm emulatoru te uz njegove funkcije nude i funkcije koje se danas očekuju od tipične Windows aplikacije.

GNOME terminal

Kao što ste sigurno i pretpostavili, i GNOME projekt ima svoj vlastiti terminal emulator.
Pruža iste funkcije kao i xterm uz proširenja kao i Konsole uz razliku što je pisan u GTK.

Kako bi krenuli učiti naredbeni redak trebate imati pristup nekome terminal emulatoru. U svijetu modernih grafičkih sučelja naći odgovarajući terminal zna biti poprilično izazovno. Ovo poglavlje je obradilo razne terminale, njihove funkcije te njihovu povijest. U zadnjem djelu upoznali smo tri najkorištenija i time tri najčešća emulatora s kojima će se korisnici najčešće susretati. U sljedećem dijelu idemo dublje u sam naredbeni redak te ćemo upoznati neke osnovne naredbe koje će nam omogućiti kretanje po datotečnom sustavu i manipuliranje datoteka dok ćemo u kasnijim djelovima upoznati i neke konzolne aplikacije koje znatno olakšavaju život, bilo da se radi o multimediji ili obradi teksta.

 

Autor: Velimir B.

VN:F [1.9.22_1171]
Rating: 3.5/5 (4 votes cast)
Hack the shell prvi dio - Napad na shell, 3.5 out of 5 based on 4 ratings

Povezani članci:

Alias iliti kako skratiti...
App Inventor ponovo zaživ...
LFS - Tvoja distra, tvoja...
Googleov Android napokon ...
Postavljanje i3wm uz Xfce...

5 Responses

  1. calisto053 kaže:

    A kad ćemo učit hakiranje??? :D

    Podsjećam na odličan prošli članak:
    http://www.linuxzasve.com/naucite-raditi-u-naredbenom-retku

    … te vrhunsku knjigu za učenje shell-a prilagođenu upravo početnicima:
    The Linux® Command Line, autora Williama E. Shotts, Jr.

    Uz ove alate je samo nebo granica! Hvala, ekipa!

  2. Boris kaže:

    Mozete li ovaj i naredne tutoriale stavit u pdf za skidanje?

  3. googleman kaže:

    Odlično! Nadam se da će u narednim tekstovima biti o awk-u i sed-u.

  4. Shicy kaže:

    Velimirovi radovi su remek-djela. Amen.

Ostavi komentar

© 2014 Linux Za Sve. | Impressum | Sadržaj je licenciran pod CC-SA-3.0 ako nije drugačije naznačeno.
Proudly designed by Theme Junkie.