Informacijski sistemi in odprta koda koljka in skripte

  • Slides: 40
Download presentation
Informacijski sistemi in odprta koda Školjka in skripte v školjki doc. dr. Anton Biasizzo,

Informacijski sistemi in odprta koda Školjka in skripte v školjki doc. dr. Anton Biasizzo, univ. dipl. inž. Institut Jozef Stefan anton. biasizzo@ijs. si Informacijski sistemi in odprta koda Univerza v Novi Gorici, Poslovno-tehniška fakulteta

Datotečni sistemi v Linux OS Drevesna struktura Koren / Sistemske mape (direktoriji): /boot #

Datotečni sistemi v Linux OS Drevesna struktura Koren / Sistemske mape (direktoriji): /boot # zagonske datoteke /etc # nastavitve /bin # sistemski programi /lib # sistemske knjižnice /usr {bin, lib, …} # programi /proc # pregled sistema /dev # gonilniki /var # sistemsk /tmp # začasne datoteke in mape

Datotečni sistemi v Linux OS /home # uporabniški prostor datoteke pripadajo uporabniku in grupi

Datotečni sistemi v Linux OS /home # uporabniški prostor datoteke pripadajo uporabniku in grupi privilegiji datotek (v obliki zastavic) uporabnik (read / write / execute) grupa (read / write / execute) ostali (read / write / execute) dodatne nastavitve (setuid, setgid, . . . ) črka označuje, da je opcija omogočena, - pa da ni, npr: -rwxrw-r-- toni: wheel stej. sh: (0764 – številčen zapis) rwx : uporabnik toni (branje, pisanje in izvajajanje: 7) rw- : grupa wheel (branje in pisanje: 6) r-- : ostali (branje: 4)

Datotečni sistemi v Linux OS Trenutno delovno mapo označimo s piko: ”. ” Starševsko

Datotečni sistemi v Linux OS Trenutno delovno mapo označimo s piko: ”. ” Starševsko mapo trenutne delovne mape označimo z dvemi pikami: ”. . ” Koren / nima starša oz. je sam svoj starš Poti do datotek Absolutna pot – pot od korena do datoteke: /usr/bin/test Relativna pot – pot od trenutne delovne mape do datoteke: . . /usr/bin/gcc vaje/passwd

Uporabniki v Linux OS Sezname uporabnikov v /etc/passwd Uporabniško ime Uporabniški ID (številka, nižje

Uporabniki v Linux OS Sezname uporabnikov v /etc/passwd Uporabniško ime Uporabniški ID (številka, nižje so rezervirane za sistemske upor. ) ID uporabniške osnovne grupe Osnovna mapa uporabnika (home directory) Osnovna školjka uporabnika V ločeni datoteki se nahaja hash gesla in ostale nastavitve gesla (staranje, . . . ) omejen dostop le na administratorja Uporabnik lahko zamenja grupo

Osnovni ukazi v Linux OS Osnovni ukazi za delo z datotekami ls : seznam

Osnovni ukazi v Linux OS Osnovni ukazi za delo z datotekami ls : seznam datotek v mapi cat : izpis datoteke na terminal (zaslon) cp : kopiranje datoteke mv : premik ali preimenovanje datoteke rm : brisanje datoteke cmp : binarno primerjanje datoteke diff : tekstovno primerjanje datoteke head : izpis začetnega dela datoteke tail : izpis končnega dela datoteke touch : dostop do (dotik) datoteke chmod : sprememba privilegijev datoteke

Osnovni ukazi v Linux OS Ukazi za delo z tokovi podatkov cut : rezanje

Osnovni ukazi v Linux OS Ukazi za delo z tokovi podatkov cut : rezanje in izpis izbora polj v vrstici tr : zamenjava znakov wc : štetje znakov, besed in vrstic grep : iskanje vsebine po datoteki tee : kopiranje vhodnega toka na datoteko sed : urejevalnik toka podatkov awk : programski jezik za procesiranje podatkov sort : sortiranje tekstovne datoteke uniq : izpis različnih vrstic datoteke (podvojitve vrstic se ne izpišejo)

Osnovni ukazi v Linux OS Osnovni ukazi za delo z mapami pwd : izpis

Osnovni ukazi v Linux OS Osnovni ukazi za delo z mapami pwd : izpis trenutne mape cd : sprememba trenutne mape mkdir : kreiranje mape rmdir : brisanje mape (prazne) find : iskanje datotek po mapah Ostali osnovni ukazi echo : izpis niza whoami : izpis uporabnika who : izpis seznama trenutno prijavljenih uporabnikov ps : izpis seznama procesov kill : prekinitev izvajanja procesa env : izpis spremenljivk okolja

Primeri uporabe ukazov izpis seznama datotek v mapi /boot ls /boot izpis vsebine datoteke

Primeri uporabe ukazov izpis seznama datotek v mapi /boot ls /boot izpis vsebine datoteke /etc/group cat /etc/group kreiranje mape vaje v uporabnikovi osnovni mapi mkdir vaje kopiranje datoteke /etc/passwd v mapo vaje cp /etc/passwd vaje izpis začetka datoteke passwd v mapi vaje head vaje/passwd izpis konca datoteke passwd v mapi vaje tail vaje/passwd

Primeri uporabe ukazov preštej vrstice v datoteki passwd wc vaje/passwd poišči vse datoteke s

Primeri uporabe ukazov preštej vrstice v datoteki passwd wc vaje/passwd poišči vse datoteke s podaljškom. txt v mapi /usr/share find /usr/share “*. txt” izpis uporabnikov, ki imajo školjko /bin/bash (izpis vrstic datoteke passwd, ki vsebujejo /bin/bash) grep “/bin/bash” vaje/passwd izpis vseh školjk uporabnikov (iz datoteke passwd) (7. polje v datoteki passwd , ločilo je “: “) cut –d: -f 7 vaje/passwd

Procesi v Linux OS Delujoča instanca programa Program je binarna datoteka v ustreznem formatu

Procesi v Linux OS Delujoča instanca programa Program je binarna datoteka v ustreznem formatu v datotečnem sistemu Ima svoj ID (pid) ID starša (ppid) Pripada uporabniku in grupi (uid, gid) Se izvaja na določeni mapi (trenutna delovna mapa) V osnovi ima „pripete“ tri datoteke stdin : standardni vhod stdout : standardni izhod stderr : izhod za napake

Procesi v Linux OS Delovanje procesa Ustavljen V ospredju: proces je povezan s terminalom

Procesi v Linux OS Delovanje procesa Ustavljen V ospredju: proces je povezan s terminalom V ozadju: proces ni povezan s terminalom in deluje neodvisno Kontrola delovanja procesov: ctrl-Z: proces ustavimo (ne prekinemo!) & : če ukazu sledi znak &, se proces začne izvajati v ozadju fg : ustavljen proces se nadaljuje v ospredju bg : ustavljen proces se nadaljuje v ozadju

Školjke v LINUX OS Školjka je uporabniški vmesnik do operacijskega sistema Program (interaktivna uporaba):

Školjke v LINUX OS Školjka je uporabniški vmesnik do operacijskega sistema Program (interaktivna uporaba): Vhodni podatkovni tok povezan s tipkovnico Izhodni podatkovni tok in tok napak je povezan na prikazovalnik Funkcionalnost: Izvede druge programe Upravlja s procesi Upravlja z datotekami Veliko vrst, ki se delijo na dve skupini: Bourne shell (sh, ksh, bash, . . . ) C shell (csh, tcsh, . . . )

Školjke v LINUX OS Izvede se prijavi v sistem (interaktivna uporaba) Izvede se pri

Školjke v LINUX OS Izvede se prijavi v sistem (interaktivna uporaba) Izvede se pri kreiranju terminala (npr. xterm, konsole, . . . ) Spremenljivke (lokalne za instanco školjke) ime=”Moje. Ime” # brez presledkov okoli = ! echo ${ime} echo $ime echo ”$ime” Okolje (environment) se podeduje od starša env export ime=”Moje. Ime”

Školjke v LINUX OS Spremenljivke okolja: USER : uporabniško ime HOME : absolutna pot

Školjke v LINUX OS Spremenljivke okolja: USER : uporabniško ime HOME : absolutna pot uporabniškega direktorija PATH : seznam iskalnih poti za programe SHELL : absolutna pot školjke TERM : tip terminala PS 1 : prompt

Školjke v LINUX OS Nadomenstni znaki za datoteke in mape ”*” ustreza nobenemu ali

Školjke v LINUX OS Nadomenstni znaki za datoteke in mape ”*” ustreza nobenemu ali več poljubnim znakom ls /bin/p* # izpis vseh ukazov v /bin mapi, ki se začnejo s p ”? ” ustreza enemu poljubnemu znaku ls /bin/p? # izpis ukaza v mapi /bin, ki se začne s p in ima v # imenu za p-jem še en znak V školjki lahko hkrati uporabimo več nadomestnih znakov ls /*bin/p* ”[seznam]” ustreza kateremukoli znaku s seznama ”[!seznam]” ustreza kateremukoli znaku, ki ni na seznamu Školjka določi vse datoteke, ki ustrezajo danemu vzorcu

Školjke v LINUX OS Preprosti ukazi Seznam argumentov, ki jih ločijo presledki ali tabulatorji

Školjke v LINUX OS Preprosti ukazi Seznam argumentov, ki jih ločijo presledki ali tabulatorji Prvi argument je ime programa, ki se izvede (arg[0]). Vsi argumenti se prenesejo programu. Program deduje okolje Uporabnost školjk razširja povezovanje več ukazov: Izhod enega programa s cevjo poveže z vhodom drugega (|) cut –d: -f 7 /etc/passwd | sort | uniq

Školjke v LINUX OS Preusmeritev vhoda/izhoda | preusmeritev izhoda programa na pipo, ki je

Školjke v LINUX OS Preusmeritev vhoda/izhoda | preusmeritev izhoda programa na pipo, ki je povezana na vhod naslednjega programa $ cat /etc/passwd | tr ”a–z” ”A–Z” > preusmeritev izhoda na datoteko $ ls –l > moje_datoteke. txt < preusmeritev vhod iz datoteke $ cat < moje_datoteke. txt >> preusmeritev z dodajanjem na datoteko $ date >> logfile fd> preusmeritev izbranega podatkovnega toka $ ls –l 2> error. log

Školjke v LINUX OS Parametri školjke oziroma skript: Spremenljivke (lahko jih dodamo v okolje)

Školjke v LINUX OS Parametri školjke oziroma skript: Spremenljivke (lahko jih dodamo v okolje) pozicijski parameteri (argumenti programa), začenši z 1 $1, $2, $3, . . . $0 je ime programa (ukaz) shift n : premakne parametre za n mest posebni parametri: $# : število pozicijskih parametrov $? : izhodna vrednost zadnjega ukaza $* : ukazna vrstica (kot en niz) $@ : vsi argumenti ukazne vrstice (ločeni) $$ : ID procesa (pid školjke)

Primeri sestavljene uporabe ukazov štartaj program firefox štartaj program loffice v ozadju loffice &

Primeri sestavljene uporabe ukazov štartaj program firefox štartaj program loffice v ozadju loffice & izpiši vsebino datoteke passwd z velikimi črkami cat /etc/passwd | tr ”a-z” ”A-Z” izpis samo uporabnikov, ki imajo školjko /bin/bash (izpis 1. polja datoteke passwd, kjer vrstica vsebujejo /bin/bash) grep /bin/bash /etc/passwd | cut –d: –f 1

Primeri sestavljene uporabe ukazov preštej različne školjke uporabnikov (iz datoteke passwd) (7. polje v

Primeri sestavljene uporabe ukazov preštej različne školjke uporabnikov (iz datoteke passwd) (7. polje v datoteki passwd , ločilo je “: “) cut –d: –f 7 /etc/passwd | sort | uniq v datoteko uporabniki. txt zapiši uporabnike, ki imajo osnovne mape pod mapo /home (6. polje v datoteki passwd je osnovna mapa, ločilo je “: “) grep /home /etc/passwd | cut –d: –f 1 > uporabniki. txt

Skripte v školjki Skripta je tekstovna datoteka, ki vsebuje ukaze. Imeti mora ustrezne privilegije

Skripte v školjki Skripta je tekstovna datoteka, ki vsebuje ukaze. Imeti mora ustrezne privilegije za izvajanje (execute) Izvede se lahko z: sh ime [ argumenti ] sh < ime [ argumenti ] skripta se mora pričeti z: #!pot-do-školjke source ime [ argumenti ] # v isti školjki

Skripte v školjki Zakaj so skripte uporabne: da se izognemu ponavljanju ukazov; če ponavljamo

Skripte v školjki Zakaj so skripte uporabne: da se izognemu ponavljanju ukazov; če ponavljamo isto zaporedje ukazov, jih lahko združimo v skripto, ki jo zaženemo z enim ukazom za avtomatizacijo opravil; veliko ukazov ima zapletene opcije, ki jih običajno pozabimo, v skripti lahko zapišemo ukaze z opcijami in na njih „pozabimo“

Skripte v školjki Znak ”#” označuje komentar, ki ne vpliva na izvajanje skripte. Skripte

Skripte v školjki Znak ”#” označuje komentar, ki ne vpliva na izvajanje skripte. Skripte običajno kreirajo začasne datoteke na /tmp ali /var/tmp Nezaželene izhode ukazov običajno preusmerijo na /dev/null grep apache /etc/passwd > /dev/null && echo ”Apache” cmp file 1 file 2 > /dev/null && echo ”Identical files” Nezaželene napake ukazov običajno preusmerijo na /dev/null find /proc –maxdepth 1 –name ”[1 -9]*” 2>/dev/null

Primer skripte v školjki Skripta hello. sh, ki izpiše “Hello World”: #!/bin/bash echo “Hello

Primer skripte v školjki Skripta hello. sh, ki izpiše “Hello World”: #!/bin/bash echo “Hello World” Skripto zapišemo z urejevalnikom besedil Za skripto moramo nastaviti privilegije: $ chmod +x hello. sh

Primer skripte s parametri Skripta params. sh, ki izpiše parametre: #!/bin/bash echo “parameter 0:

Primer skripte s parametri Skripta params. sh, ki izpiše parametre: #!/bin/bash echo “parameter 0: $0” echo “parameter 1: $1” echo “parameter 2: $2” echo “vsi parametri kot en niz: $*” echo “vsi ločeni parametri: $@”

Združevanje ukazov Več ukazov ločimo s ”; ” ali novo vrstico: echo –n ”Danes

Združevanje ukazov Več ukazov ločimo s ”; ” ali novo vrstico: echo –n ”Danes je ”; date Vhode in izhode ukazov lahko povežemo s cevjo (pipo) cat /etc/passwd | tr ”a-z” ”A-Z” Ukaze lahko zaženemo v novi, podrejeni školjki ( ls -1 /boot ; ls -1 /var ) > mapi. lst

Logični operatorji Proces oz. program vrne izhodno vrednost 0 pomeni uspešen zaključek Ostale vrednosti

Logični operatorji Proces oz. program vrne izhodno vrednost 0 pomeni uspešen zaključek Ostale vrednosti pomenijo napako ali neuspešen zaključek Logični operator AND Naslednji ukaz se izvede le, če je bil prvi uspešen grep –s apache /etc/passwd && echo ”Apache user” Logični operator OR Naslednji ukaz se izvede le, če je bil prvi neuspešen test –d vaje || echo ”mkdir vaje”

Spremenljivke v skriptah Spremenljivka ime, vrednost ji priredimo z uporabo = $ ime=”Moje. Ime”

Spremenljivke v skriptah Spremenljivka ime, vrednost ji priredimo z uporabo = $ ime=”Moje. Ime” # brez presledkov okoli = ! $ echo ${ime} Izhod programa lahko priredimo spremenljivki z uporabo `: $ files=`ls` $ vsota=`expr 123 + 432` Aritmetične operacije zapišemo z dvojnimi oklepaji: $ n=1 $ n=$((n+1))

Kontrolni ukazi v školjki Brez kontrolnih ukazov se izvaja le v zaporedju. Kontrolni ukazi

Kontrolni ukazi v školjki Brez kontrolnih ukazov se izvaja le v zaporedju. Kontrolni ukazi spremenijo tok izvajanja v programskem jeziku. Najpomembnejše skupine kontrolnih ukazov: Pogojni stavki: if/then/else, case, . . . Zanke: while, for, until, do Skoki: Klici funkcije (izboljšujejo strukturirano programiranje) Skoki (običajno so nezaželeni)

Pogojni stavki v školjki Pogojni stavki izvedejo test nečesa Pogoj je uspešen zaključek programa

Pogojni stavki v školjki Pogojni stavki izvedejo test nečesa Pogoj je uspešen zaključek programa (vrnjena vrednost 0) grep apache /etc/passwd test –f /etc/shadow [ $n –lt 10 ] Vrednost 0 označuje izpolnjen pogoj Ostale vrednosti označujejo napačen pogoj Program test je namenjen preverjanju pogojev: test znakovnih nizov (==, !=, . . . ) aritmetičnih pogoji (-lt, -gt, -eq, …) test v datotečnem sistemu (-f, -d, …)

If stavek Pogoj je ukaz, ki vrne rezultat: 0 – pravilno Vse ostalo –

If stavek Pogoj je ukaz, ki vrne rezultat: 0 – pravilno Vse ostalo – napačno Osnovna oblika if pogoja then ukaz_1 ukaz_2. . . fi

If stavek Splošna oblika if pogoj then ukaz_1_1 ukaz_1_2 else ukaz_2_1 ukaz_2_2 fi

If stavek Splošna oblika if pogoj then ukaz_1_1 ukaz_1_2 else ukaz_2_1 ukaz_2_2 fi

Primeri pogojnih stavkov Preverimo, če obstaja uporabnik na Linux sistemu Naredimo skripto user. sh:

Primeri pogojnih stavkov Preverimo, če obstaja uporabnik na Linux sistemu Naredimo skripto user. sh: #!/bin/bash if grep –q ”$1” /etc/passwd then echo ”Uporabnik $1 obstaja” fi Nastavimo privilegije chmod a+x user. sh Izvedemo skripto. /user. sh apache

Primeri pogojnih stavkov Izpis v obeh primerih #!/bin/bash if grep –q ”$1” /etc/passwd then

Primeri pogojnih stavkov Izpis v obeh primerih #!/bin/bash if grep –q ”$1” /etc/passwd then echo ”Uporabnik $1 obstaja” else echo ”Uporabnik $1 ne obstaja” fi

Zanka for Splošna oblika for spremenljivka in seznam do ukaz_1_1 ukaz_1_2 done Zanka se

Zanka for Splošna oblika for spremenljivka in seznam do ukaz_1_1 ukaz_1_2 done Zanka se izvede za vsako vrednost iz seznama Seznam so lahko argumenti skripte ($@) Seznam je lahko seznam datotek (*) Seznam je lahko tudi konstanten (” 1 2 3 4 5 6 7 8”)

Primer zanke for Seštej vse argumente, posredovane skripti Naredimo skripto add. sh #!/bin/bash sum=0

Primer zanke for Seštej vse argumente, posredovane skripti Naredimo skripto add. sh #!/bin/bash sum=0 for var in ”$@” do sum=`expr $sum + $var` done echo ”Vsota je $sum” Nastavimo privilegije (chmod a+x add. sh) Izvedemo skripto

Primer zanke for Preštejemo vrstice vseh datotek v trenutni mapi Naredimo skripto lines. sh

Primer zanke for Preštejemo vrstice vseh datotek v trenutni mapi Naredimo skripto lines. sh #!/bin/bash for file in * do vrstice=`cat $file|wc –l` echo ”Datoteka $file ima $vrstice vrstic” done Nastavimo privilegije (chmod a+x lines. sh) Izvedemo skripto

Skripte v školjki V skriptah v školjki lahko uporabljamo tudi druge konstrukte: Vgrajeni ukazi

Skripte v školjki V skriptah v školjki lahko uporabljamo tudi druge konstrukte: Vgrajeni ukazi So vgrajeni v školjko in se izvedejo hitreje Funkcije Omogočajo strukturirano programiranje Vzdevke (alias) Zahtevnejše ukaze, ki jih pogosto uporabljamo, lahko predstavimo krajšim vzdevkom Uporabljajo se v školjkah, redkeje v skriptah

Naloge s skriptami Izpiši ”Pozdravljen uporabnik …”, kjer je na mestu … uporabnik Izpiši

Naloge s skriptami Izpiši ”Pozdravljen uporabnik …”, kjer je na mestu … uporabnik Izpiši število argumentov Izpiše ali uporabnik (argument) obstaja in ali je prijavljen ali ne Za vsak argument izpiše število znakov Za datoteke v dani mapi (argument) preštej vrstice npr. count. sh /etc/sshd Spremeni imena datotek v male (ali velike) črke Preštej vrstice in znake txt datotek in izpiši po datotekah: tekst. txt 12 vrstic 543 znakov besede. txt 432 vrstic 4590 znakov Izpiši vse uporabnike, ki imajo delujoče procese, z njim pripadajoče uporabniške direktorije