Unix Samenvatting
Lennart Martens
Unix: Samenvatting Het filesystem: logische structuur en commando’s Files en directories -
Bestand: Opeenvolging van 0 of meer bytes, die willekeurige informatie bevat o Naam: oorspr. Max 14 tekens, BSD UNIX verhoogde het naar 255 Map: Bestand dat voor BS speciale betekenis heeft. Bevat lijst met namen van andere fileobj. met telkens een plaatsaanduiding waar de overige informatie van dat fileobject gevonden kan worden: nummer van de inode van dat fileobject.
Filesystem lay-out -
-
-
-
-
-
/ of root directory o Basis van de structuur van het bestandssysteem. Elke andere file/directory maakt er logisch bekeken deel van uit, ook al bevindt die zich fysisch op andere partitie/medium/computer => mounten van fileobjecten. /bin o De plaats van de uitvoerbare(binaire) files voor vele UNIX-commando’s en utilities o Op bepaalde systemen: sommige files in de /bin symbolische verb. naar files in usr/bin. /dev o Device-dir (device = middel, instrument) o Bevat device files: m.b.v. deze gebeurt de I/O met de periferie (tape/disk/terminal/…) o Onderverdeeld in subdirs: bevatten speciale bestanden van één enkele categorie devices. dsk en rdsk: Disk-devicefiles ( dsk: karaktergeoriënteerde toegang, rdsk voor raw of blokgeoriënteerde toegang) mt en rmt: magnetische tape-drives term: terminals o Linux en BSD: meestal /dev dir die niet is onderverdeeld /etc o Bevat administratieve bestanden en de meeste configuratiefiles (opstartscripts, netwerkconfigbestanden) o Bevat de uitvoerbare versies van de systeem- en administratieve commando’s In meer recente UNIX-versies: in /sbin, soms ook wel in /usr/sbin /sbin o Bevat de uitvoerbare versies van de systeem- en administratieve commando’s die niet door de gewone users worden gebruikt o Soms gelinkt met /usr/sbin /home o Standaard plaats voor homedirs van de gebruikers van het systeem (bvb /home/Lennart) 1
Unix Samenvatting
Lennart Martens
o o
-
-
-
-
-
-
-
-
Werkdir eenmaal user is ingelogd Systeemadmin: controle over de gebruikersnamen toe te wijzen en de plaats van de homedirs toe te wijzen. \lost+found o Verloren bestanden gaan hierheen (door incorrect afsluiten of fouten op disk) Verloren: refereren naar plaatsen op de schijf die aangeduid staan als ‘in gebruik’ maar waar in geen enkele dir wordt nr verwezen. o Map op elke fysische diskpartitie o fsck(file system check): prog dat draait bij opstarten -> vindt dergelijke files /mnt o Op de subdirs worden al dan niet tijdelijk, niet-lokale bestandssysteem gemonteerd Bv. Op /mnt/cdrom kunnen de files teruggevonden worden van de cd-rom. /proc o Bevat processinfo o Elke file/dir komt overeen met een actief proces o Linux: ook files met extra info over de systeemconfiguratie: Gebruik van interrupts I/O-poorten DMA-kanalen … o Wordt niet weggeschreven op een disk, maar wordt in het geheugen bewaard Een bestandssysteem dat gemount wordt bij het opstarten /tcb o HP-UX versie 10 en Digital-UNIX: hieraan staan de extra voorziene beveiligingsfaciliteiten /tmp o Tijdelijke bestanden, dir is beschikbaar voor iedereen o Occasioneel verwijderen van bestanden in /tmp, iedereen kan enkel zijn eigen fileobj. verwijderen. /var o Dir met varying data o /var/spool: dirs voor diensten zoals afdrukken (lp), mail (mail), uitvoeren van progs op geregelde tijdstippen (cron) o Bestaat op oudere systemen niet en de subdirs zitten onder /usr /stand o Bevat een beeld van de keren van het OS op SystemV versie 4 machines /usr o Subdirs voor lokaal geplaatste / uitvoerbare versies van users- en admin commando’s, programmabiblioth. gebruikt door meerdere toepassingen, andere delen van het OS. Ook hier meestal bestanden van speciale toepassingsprogs zoals databankprog. /usr/adm o Administratieve dir en vaak de homedir van de speciale gebruiker adm o Bevat ook de bestanden die met accounting te maken hebben: logs bijhouden van gebeurtenissen op computersysteem 2
Unix Samenvatting
-
-
-
Lennart Martens
o Vaak gelinkt met /var/adm /usr/bin o Vergelijkbaar met /bin /usr/include o Bevat include files: Bestanden tijdens het compileren van C/C++ worden ingeladen door compiler /usr/lib o Library-dir voor public access libraryfiles: iostream, math, … /usr/local o Subdirs voor lokaal door de systeemadmin geïnstalleerde software /usr/share o Recente systeme: bestanden die door verschillende apps worden gedeeld: spellingscontrole, fonts, documentatie, … /usr/man of /usr/share/man o Bevat de manpages van UNIX
Directory’s en padnamen Padnamen - Elk fileobject is voor het OS identificeerbaar door de volledige padnaam - Relatieve padnamen: ten overstaan van een welbepaalde dir - Absolute padnaam: ook relatief t.o.v. de rootdir. De directory’s . en .. - . : In elke dir is via . de dir zelf bereikbaar - .. : De ouderdir waarbinnen de werkdir zich bevindt. Werkdirectory - Waar de activiteiten worden verricht door welk computerprog dan ook - Relatieve padnamen tov de werkdir - In shell werkdir opvragen m.b.v. commando pwd (print working directory) Home-directory - Werkdir van de shell eenmaal de gebruiker is ingelogd - Naam van dir staat in het wachtwoordenbestand (opgelegd door systemadmin)
Commando’s De werkdirectory veranderen - cd directorynaam - dirnaam absoluut of relatief - wanneer enkel cd : terug naar de homedir Informatie over fileobjecten tonen - ls [opties] bestandenlijst - Opties: o –l : Alle beschikbare info op 1 lijn voor elk fileobject.
3
Unix Samenvatting o o o
Lennart Martens
–a : Ook onzichtbare/verborgen files (waarvan naam begint met een .) worden getoond –d : Toont alleen de naam ( en eventueel de info) van de directory i.p.v. zijn inhoud –s : Toont van elke file de omvang die het bestand op disk in beslag neemt, getoond per kb. Niet hetzelfde als de optie –l, want AANVULLING.
Omvang van een bestand bekijken - du o Gelijkaardig aan ls –s o Verschil: per directory wordt aangegeven hoeveel diskruimte de onderliggende gegevens in beslag nemen o Sommige Unix-systemen: du loopt gehele onderliggende dirstructuur af o Opties: -a : toont ook files (ipv enkel dirs) -b : toont de hoeveelheden in bytes - Wc bestandsnaam(en) o Gelijkaardig o Opties: -l : telt het aantal lijnen in elk bestand -w : telt het aantal woorden in elk bestand -c : toont het aantal bytes Directory’s aanmaken en verwijderen - mkdir dirnaam : Make Directory - rmdir dirnaam: Remove directory o Enkel als dir leeg is!! Fileobjecten kopiëren - cp : copy-commando o cp [opties] bronbestand doelbestand of cp [opties] bronbestandenlijst doeldirectory o Opties: -p : preserve : Modificatietijd en toegangsrechten van bronfile wordt overgenomen voor de kopie. Anders krijgt kopie als kenmerken de huidige tijd, gebruiker, groep en umask -R: bronbestandenlijst kan ook dirnaam bevatten: Alle onderliggende fileobjecten (zowel bestanden als dirs) worden van de brondir naar de doeldir gekopieerd. -i : Als een bestaand bestand zou worden overschreven, wordt er eerst bevestiging gevraagd. Files verwijderen - rm [opties] bestandenlijst o opties: -f : (force) rm verwijdert bestanden waarvoor je geen schrijfrecht hebt zonder je te verwittigen. -i : (interactive) voor elk bestand wordt je gevraagd of het mag verwijderd worden. 4
Unix Samenvatting
Lennart Martens -R : (recursive) rm verwijdert een gegeven dir inclusief subdirs en dir zelf.
Fileobjecten een andere naam geven of verplaatsen - mv : move commando o mv [opties] bestaand-bestand nieuwe-filenaam o mv [opties] lijst-met-bestaande-files doeldir o mv [opties] bestaande-dir nieuwe-dir o mv [opties] bestaande-dir andere-bestaande-dir o Opties: -f, -i Kop en staart van een teksbestand bekijken - Head en tail o –n: aantal lijnen dat moet worden getoond (standaard 10) o tail –f : (follows) er wordt continu op het scherm getoond hoe het bestand achteraan aangroeit en verandert. Stoppen met q Tekstbestanden sorteren - sort [opties] bestandenlijst o Kan input krijgen van pipe o Zonder opties: Sorteert alfabetisch o Opties: -r : omgekeerde sortering (reverse) -n : sorteert numeriek Een bestand afdrukken - lpr bestandenlijst => lineprinter commando Verschillen tussen tekstbestanden bekijken - diff file1 file2 o Toont verschillen tussen twee tekstbestanden op een lijn-per-lijn basis o Uitvoer: 2a3: Voegt de 3de lijn van file2 toe na 2de lijn van file1 4c5: wijzig de lijn 4 van de 1ste file in de lijn met nummer 5 in het tweede bestand (beide lijnen kunnen ook een bereik zijn) Oorspronkelijke ( <) en nieuwe (: >) 3d2: verwijder lijn 3 in het eerste bestand. De 2 wijst op het lijnnummer in het tweede bestand waar de verwijderde lijn zou voorkomen indien ze niet zou zijn uitgewist. Het eerste nummer kan ook een bereik zijn. Bestandsobjecten zoeken met find - find padnaam(en) optie(s) o Zonder opties: uitvoer = al de namen van files en dirs in de werkdir. o Opties: -size +nk : zoekt alle files groter dan n kb -maxdepth level: zoeken beperken tot level dirniveaus onder de dirs die opgegeven zijn op de commandline -type f : enkel files, -type d = enkel dirs 5
Unix Samenvatting
Lennart Martens -user username: vind alle files in de opgeven dir van de gebruiker username Find / -user gast: vind alle bestanden van gast in het filesystem - name “pattern” -exec: de verkregen bestandsnamen worden meteen gebruikt in het command erna. find . –exec ls –l {} \; o {} is de in te vullen naam o \; => afsluiten van het command
Cat -
Meerdere bestanden aaneenschakelen, wordt op het scherm getoond Cat file1 file2 file3 Wordt ook vaak gebruikt om tekstbestand op het scherm te tonen Als er enkel cat wordt getypt: cat neemt invoer van toetsenbord (output kan je eventueel omleiden naar een file, standaard op het scherm getoond)
Date -
Datum van het systeem Date : toont datum in vorm: Tue Dec 28 21:48:25 CET 2010 Opties: zie manpages
Who -
Geeft info over de actieve gebruikers who : geeft alle actieve gebruikers + info who am i : geeft info over jezelf haalt info uit /var/log/wtmp
Echo -
Kopieert alle argumenten die op de commandline vermeld staan naar de terminal Echo *opties+ *string…+ Opties: o –n : de newline op het einde van de uitvoer wordt niet getaand o –e : laat toe dat speciale tekens worden geïnterpreteerd door echo, anders leest echo ze als gewone tekens. \a : belsignaal van de terminal \c de newline op het einde van de lijn wordt onderdrukt \n: er wordt een extra newline afgedrukt \\ backslash Deze tekens moeten tussen “ “ of ‘’ staan omdat de shell aan deze tekens ook een speciale betekenis hecht en ze niet doorgeeft aan echo
6
Unix Samenvatting
Lennart Martens
De unix-shell Inleiding -
Shell: programma dat voor de gebruiker opgestart wordt door het loginprogramma of door het X-Windows systeem. o Het laatste veld in de gebruikerslijn van de textfile /etc/passwd vermeldt welke shell wordt opgestart. o Prompt teken: $ voor gewone user, # voor root (instelbaar). o Zowel een interpreter (commandovertolker) als een programmeertaal
Soorten shells -
Oershell: sh: standaard aanwezig onder SystemV evenals de nieuwere ksh (Korn-shell) C-shell csh: onder BSD-UNIX o tcsh : uitbreiding van csh (TENEX) op Linux: bash of Bourne-again shell. IEEE-POSIX compatible en bevat elementen van sh, de beste elementen van csh en ksh, plus een heleboel extra. Type shell afhankelijk van de constructeur en/of de systeembeheerder
Structuur van de commandolijn Woorden op de commandolijn De shell extraheert het eerste woord op de commandolijn en neemt aan dat het om de naam van een commando gaat dat moet worden uitgevoerd. Commando’s: intern of extern - intern: de code van een intern ingebouwd prog die moet worden uitgevoerd is een onderdeel van het shellproces. - extern: De uit te voeren code van een extern commando resideert in een bestand in de vorm van een binair uitvoerbaar prog of van een shellscript o naam bestand = naam commando - Eerste woord op commandolijn : o Eerst opzoeken in tabel interne commando’s o Indien daar niet gevonden: Shell overloopt stuk voor stuk alle dirs uit de variabele $PATH o Indien nog niet gevonden: foutmelding command not found Opties en argumenten - Alles na het eerste woord wordt beschouwd als argumenten. - Soorten argumenten: o Opties o Optiespecificaties o Bestandsnamen o … Bash: command completion en command history - Begin van een commando typen en door de tab toets te drukken. Werkt ook bij bestandsnamen 7
Unix Samenvatting -
Lennart Martens
.bash_history: Bestand in de homedir van elke gebruiker, alle gebruikte commando’s worden bijgehouden.
Gereserveerde woorden - Woorden die voor de shell een speciale betekenis hebben, indien ze niet tussen aanhalingstekens staan en als ze als eerste woord op de commandline staan of als derde woord in de case of een for-statement voorkomen. - Vb: ! case do done elif else esac fi for function if in select then until [[ ]] while { } Metatekens
8
Unix Samenvatting
Lennart Martens
Commandovoorbeelden Meer commando’s op één lijn - Commando eindigt met een newline-teken of een ; Commando-pipes - Met behulp van een pipe (|) kan je de output van het ene command gebruiken als standaardinvoer van het volgende command. - Commando tee na een pipe: leidt uitvoer naar bestand (tee bestandsnaam) Uitvoer naar een bestand omleiden (redirection) - Door het “>” teken gevolgd door de padnaam van het bestand waarin we de output willen opslaan. o Géén waarschuwing als bestand al bestaat: wordt gewoon overschreven! o Toevoegen aan een bestand = “>>” Commando’s groeperen - Door middel van de ronde haakjes - Om uitvoer van twee commando’s te koppelen tot één stroom. o Bv. (date;who)|wc
9
Unix Samenvatting
Lennart Martens
Invoer uit een bestand omleiden - Door middel van het “<” teken - Bv. wc
pr formatteert tekst en lpr print het af. Alles gebeurt op de achtergrond -
Met behulp van sleep: proces wacht n seconden o Bv. (sleep 300; echo –e “Wakker worden \a” )& Proces slaapt 5 minuten, dan gaat er bel met de boodschap
De uitvoering van een commando onderbreken - Door middel van de break-toets. Meestal is dit Ctrl-C Wildcards - * = willekeurig aantal karakters o Echo * is zo equivalent aan ls o Uitsluiten de verborgen bestandsobjecten bekomen, zonder de 2 speciale dirs: Echo .?* - ? = Juist één teken Betekenis van metatekens ongedaan maken - Door ze tussen enkele aanhalingstekens te zetten: ‘**’ - Dubbele kan ook, maar daartussen zal de shell blijven kijken naar $, ‘’ en \. o Als verwerking van de tekens tussen de “ “ gewenst is - Gebruik van het escape-teken => \ -
-
-
Aanhalingstekens van de ene soort kunnen aanhalingstekens van de andere soort ‘beschermen’ Ze moeten niet rond het gehele argument staan. Rij tekens tussen aanhalingstekens mag newline bevatten o Shell geeft dan secundaire prompt, standaard een “>”, wordt bepaald door de shellvariabele PS2 (en dus wijzigbaar) Echo x*y o Geeft alle bestanden die beginnen met x en eindigen met y o Indien niet gevonden: Shell doet alsof de rij tekens tussen aanhalingstekens stond Een newline wordt gegenereerd als er een \ voor staat, maar niet wanneer die tussen aanhalingstekens gaat. # = begin van commentaar, tenzij in midden van een woord (dan niet geïnterpreteerd)
10
Unix Samenvatting
Lennart Martens
Meer over alternatieve I/O Standaard I/O en file-descriptoren - Standaardinvoer: toetsenbord : 0 - Standaarduitvoer: scherm : 1 - Standaardfoutenuitvoer of standarderror: verschijnt op de terminal : 2 - Filedescriptoren: drie standaard bestanden gekoppeld aan ieder opgestart programma, waarvan de namen kleine getallen (zie cijfers hierboven - Soms produceren programma’s uitvoer via de standaardfoutenuitvoer, zelfs als ze goed werken. Bv /usr/bin/time (time is ook intern bash-commando) o Optie –p: Uitvoer in POSIX format - 2>bestandnaam : Standaardfoutenuitvoer wordt naar een bestand gestuurd.
Standaard I/O samenvoegen - 2>&1 : standaardfouteninvoer op dezelfde file als standaarduitvoer - 1>&2: omgekeerde van hierboven - Vuilbak: 2>/dev/null Find: optie -o => expr1 -o expr2 Or; expr2 is not evaluated if expr1 is true. Here document - Mechanisme om de standaardinvoer voor een commando direct achter dat commando te zetten in plaats van die uit een apart bestand te halen. - Vb bij ftp: o ftp -n computernaam <<EOF user gast wachtwoordvangast dir put filex delete filex dir EOF - De symbolen << geven deze constructie aan. - Het afsluitende woord dat erop volgt geeft het einde van de invoer aan o Enkel als het verderop alleen en op het begin van een regel staat - Shell interpreteert de $, ‘ ‘ en \, tenzij het afsluitende woord tussen aanhalingstekens staat of wordt voorafgegaan door een \
11
Unix Samenvatting
Lennart Martens
Overzicht van de omleidingen
Nieuwe commando’s maken Om een reeks commando’s makkelijk meerdere keren te laten uitvoeren Aliassen - Met een alias kan men een tekenreeks vervangen door een woord dat als 1ste woord is gebruikt van een enkelvoudig commando - Lijst met aliassen op te vragen via het commando alias - unalias aliasnaam wordt de aliasnaam uit de tabel gehaald. Alle aliassen : unalias –a - Alias aanmaken: bv een ll commando: alias ll=’ls –l –color=tty’ - Complexe combinaties: functies of scripts Functies (sh, bash en ksh) function functienaam () { lijst; } - Function mag worden weggelaten - Functienaam is de naam die je aan de functie geeft - Lijst is een lijst van commando’s ingesloten tussen accolades - Let op de spaties!
-
Wanneer de naam van een functie wordt gebruikt als naam van een commando, worden alle opdrachten uitgevoerd die in de lijst staan. Functies bedoeld om reeks terugkerende commando’s binnen een shell en/of zijn kindshells te vervangen door één commando Niet bedoeld om samengestelde commando’s te maken en die beschikbaar te stellen voor andere gebruikers. 12
Unix Samenvatting -
Lennart Martens
Ook recursieve functies mogelijk declare –F of typeset –F : bekijken van de namen van de gedefinieerde functies o Indien –f : ook de definities van de functies zichtbaar Functie wordt uitgevoerd in dezelfde omgeving van de shell waar ze werd opgestart (bij een script wordt er een nieuw proces gestart, hier niet!)
Scripts - Tekstbestand dat een reeks van shellcommando’s bevat - Kan ook voor andere gebruikers in willekeurige, onafhankelijke shells ter beschikking worden gesteld. - Om bestand uitvoerbaar te maken (hier ag): chmod u+x ag o Nu kan je ag intypen, in plaats van bash ag ! - Om ag van overal te kunnen uitvoeren: verplaatsen naar bin dir! o Bin in je variabele $PATH steken (normaal gezien zit ze eral in) o mv ag bin Een eigengemaakt binair programma - c++ programma o noem het ix.cc o dan make ix.cc o en dan in terminal: ix - Staat het prog niet in het zoekpad maar wel in de werkdir, dan doe je ./ix
Argumenten en parameters van commando’s Algemeen principe - $1 - $9 : Argumenten achter de commandonaam (vb eigen shellscript), die je kan gebruiken in je script = positionele parameters - ${10} en niet $10! - $* : Alle argumenten - $#: het aantal argumenten Argumenten en aanhalingstekens - “$1” gebruiken in script als er spaties kunnen zijn in argument op commandolijn (vb ‘lennart martens’ - Opgelet! “$*” wordt één enkele string en geeft foutmeldingen!! o Beter “$@”, want shell expandeert automatisch tot “$1””$2”…
Uitvoer van programma’s als argumenten -
Een commando’s standaarduitvoer kan je als argument gebruiken bij een ander commando door het te plaatsen tussen ‘ ‘ ‘ ‘ wordt ook geïnterpreteerd binnen de “” ! Buiten aanhalingstekens: \\a (voor bel), anders ‘\’a of alles tussen “…”
13
Unix Samenvatting
Lennart Martens
Shellvariabelen Gewone variabelen - Naam begint met letter of _ - Inhoud is altijd een tekenstring, geen theoretische beperking op de lengte - Wordt geëxpandeerd tot zijn waarde door de shell, door de variabelenaam te laten voorafgaan door een $. - Omgevingsvariabelen: zitten in de shell, worden gebruikt om vast te leggen op welke manier de shell wordt uitgevoerd en hoe hij reageert op bepaalde situaties o Elk van deze variabelen wordt gekopieerd naar elke kindshell o Naam bevat uitsluitend hoofdletters o Overzicht krijg je dmv ingebouwde commando set o Vb PATH, HOME, … Toekennen van variabelen - Vb PATH=/bin:/usr/bin - Aan beide kanten één woord(waarde kan tussen “” of ‘’ staan) - ${a} = $a - ${!a} -> 1 niveau van indirectie De commando’s set en unset en de variabele IFS - Ingebouwd commando set: de waarden van alle gedefinieerde variabelen - Geen gebruik meer maken van var: unset var - Set voor positionele parameters : set argumenten argumenten kunnen variabelen zijn of een command. Elk deel wordt in een positionele parameter gestoken - IFS: (Internal Field Separator) bepaalt de scheiding tussen de woorden bij standaard input (hier bij set om in positionele para’s te kunnen steken) (vb IFS=: ) - Set--: positionele para’s niet meer gedefinieerd Array’s (bash) - Enkel ééndimensionale tabelvariabelen - Elke variabele kan als array worden gebruikt, - Geen maximumlimiet op omvang array, ook geen vereiste dat elementen opeenvolgend en/of aaneensluitend moeten geïndexeerd worden of een waarde moeten hebben gekregen. - Indices = gehele numerieke uitdrukkingen groter of =0 - Tabel aanmaken: o Declare –a tabel o Tabel*32+=”een tabelwaarde” o Tabel=(waarde1 waarde2 waarde3) o Tabel=(waarde1 [2]=waarde2 waarde3) => indice nul is dan waarde1, 2 waarde2 en 3 waarde3! - Element tabel= ${tabel[0]} - Alle waarden = ${tabel[*]} of ${tabel[@]} o Verschil: expandering tussen aanhalingstekens - ${#tabel[index]} geeft lengte weer van element of het aantal ingevulde elementen.
14
Unix Samenvatting
Lennart Martens
Extra: Expansion Expansion op commandolijn gebeurt na splitsing in woorden - Brace expansion o Echo a { b,c,d }e => abe ace ade - Tilde expansion o ~$ => HOME - Parameter Expansion - Variabele en arithmetic expansion - Commando substitutie - Woord splitsing volgens IFS - Padnaam expansie Speciale noteringen voor shell-variabelen
Bereik van variabelen Lokaal aan de shell - Waarde van een variabele behoort bij de shell waar de variabele is aangemaakt. De waarde wordt niet automatisch doorgegeven naar de kind-processen van de shell(subshells) - In een shellscript kan de waarde van een variabele niet veranderen omdat dat script door een sub-shell uitgevoerd wordt. Het commando . - Situaties waarbij het handig is om m.b.v. shellscript enkele shellvariabelen te kunnen veranderen. o Bv. Een script voor het toevoegen van een directory aan je PATH -
Het commando . o Zorgt ervoor dat de uitvoering van de commando’s in dat shellscript door de huidige shell wordt uitgevoerd. o Oorspronkelijk: Het .profile bestand nogmaals te kunnen uitvoeren, zonder opnieuw in te loggen. o Commando’s van het script worden verwerkt alsof je ze interactief via het toetsenbord invoerde. 15
Unix Samenvatting
Lennart Martens Standaardinvoer van shell tijdelijk uit bestand Bestand gelezen en niet uitgevoerd => geen uitvoeringsvergunning voor nodig.
Woorden doorgeven via commandolijn en export - Waarde aan variabele geven in een subshell -> expliciet doen via de commandoregel, vlak voor het commando zelf. o Vb. echo ‘echo $x’ >echox Chmod u+x echox x=hallo echox => leeg x=DgDag echox echox => DgDag !! - Indien in meerdere subshells = shellcommando export o Wordt in één enkele richting doorgegeven! (van ouder naar kind)
Speciale variabelen
Numerieke uitdrukkingen De expr-opdracht - Om te kunnen rekenen - Expr uitdrukking o Bv. expr 25 \* 6 => uitvoer is 150 o Numerieke operatoren zelfde als in C++ o Numerieke operatoren werken op gehele-getalstrings, relationele op numerieke en niet-numerieke argumenten o Logische operatoren zijn & en |
16
Unix Samenvatting
Lennart Martens
De numerieke uitdrukkingen in bash en ksh - Numerieke uitdrukkingen met gehele getallen kunnen geëvalueerd worden zonder rekening te houden met metatekens en woordafbakening - Commando let uitdrukking o let a=123*3 * wordt niet gezien als een wildcard Geen $ voor variabelen!! Echo $a => 369 - Gelijkwaardig = (( a=123*3 )) o Onmiddellijk expandeerbaar door $ voor de ronde haken te plaatsen!
Programmeren in de shell De while While commando;do Done Als commando exitstatus nul is wordt de opdracht herhaald $? Geeft exitstatus!! Invoer vanuit bestand: done extra functionaliteit
17
Unix Samenvatting
Lennart Martens
Inlezen met read read var1 [var2 va3 …] - Deze opdracht leest van standaardinvoer en slaat op in de variabelen achter de read - Indien één var erachter: alles komt erin terecht - Meerdere vars: invoer wordt gescheiden door IFS. Indien variabelen tekort, wordt de overschot in de laatste var geplaatst. - Kan ook uit file lezen via while (regel per regel) De for-opdracht for var in lijst-van woorden do commando’s done -
Er bestaat ook een for zoals in C++ ! (for ((tel=0;tel<5;tel++));do …. Ook uitvoer naar file mogelijk! Na done gewoon >file zetten.
18
Unix Samenvatting
Lennart Martens
De case-opdracht Case test-string in Patroon1) Commando’s ;; Patroon2) Commando’s ;; … esac
Voorbeelden Zie boek pagina 69 Bij vergelijking ** “$var” == ok ++ best de haken zetten! Anders: Indien $variabele leeg zou zijn valt de operand in de tweede vorm van de voorwaarde weg, omdat de shell een lege inhoud doorstuurt. Aangezien dan een operand ontbreekt, resulteert dit in een ongeldige uitdrukking [[ == ok ]], waarover de meeste shell versies vallen.
-
Shift : verwijdert de eerste positionele parameter en schuift al de rest één plaatsje op. $# vermindert dus elke keer met 1. Oneindige lus maken: while : o Zijn exit status is steeds 0 en zo voorwaarde steeds voldaan!
Het filesystem (bis) Toegang tot fileobjecten -
Verschillende spelers: Wie is de eigenaar van het fileobject Beschermingsinstellingen ervan Eigenschappen van de gebruikersinstellingen Groepsstructuur
Gebruikers en groepen Gebruikers: - Staan in password-file (tekstfile). Dit kan door iedereen gelezen worden die toegang heeft tot het systeem. Wachtwoord staat er evenwel geëncrypteerd. Het ingetypte ww bij inloggen wordt versleuteld en vergeleken met het opgeslagen wachtwoord in de file. o Voordeel van iedereen toegang tot dit bestand: elk proces of programma kan nagaan wat de naam is van de eigenaar van een bepaald bestand. Zo wordt er bij elk bestand eigenaar en rechten getoond (bij commando ls-l) => link met id en naam in passwdfile. o Nadeel: hackers kunnen wachtwoorden achterhalen a.d.h.v. woordenlijsten. o Oplossing: sommige systemen gebruiken een extra schaduw-bestand dat niet voor iedereen leesbaar is en waar de wachtwoorden in staan. 19
Unix Samenvatting -
Lennart Martens
Elke gebruiker met toegang tot het systeem heeft een user-account. De beschrijving staat in /etc/passwd en /etc/group
Het wachtwoordenbestand - Velden gescheiden door : - Username: wachtwoord(versleuteld):user-id:group-id:info-overgebruiker:homedir:programma-na-inloggen o Username:root is de supergebruiker. Kan ook een andere naam krijgen en verschillende gebruikers kunnen rootrechten krijgen als ze het user-id nul krijgen. o Wachtwoord is versleuteld. Staat er een sterretje -> gebruiker die niet als een gewone gebruiker interactief kan inloggen. Leeg = geen wachtwoord o User-id: bepaald door systeemadmin. o Group-id: elke gebruiker moet een primaire groep hebben. De naam van de groep staat in /etc/group. Ook dit wordt bepaald door de root. Bij elk bestand worden de nummers genoteerd. Om de namen van groepen en gebruikers te kennen, zal elk commando in deze twee bestanden kijken (/etc/group en passwd) o Veld 5 bevat naam, locatie,…. o Laatste veld: bevat meestal padnaam van de shell waarin hij na inloggen terecht komt. - Op system met een shadowbestand is voor alle gebruikers het password een sterretje en zitten username/encrypted password in het shadow dat alleen door root bereikbaar is. (/etc/shadow) Het groepenbestand - Naamgroep:versleuteld-wachtwoord(optioneel):nummergroep:namen-gebruikers(optioneel) o Alles wordt gekozen door de systeemadmin o Enkel de namen van gebruikers vermelden van wie de groep NIET de primaire is. Het commando passwd - Eigen wachtwoord veranderen of (als systeemadmin) van een andere gebruiker (passwd username) - Passwd -> oude wachtwoord -> twee keer nieuwe wachtwoord Het commando id Toont voor niet-systeemgebruikers het gebruikersnummer+naam, het nummer+naam van de primaire groep. Kan de gebruiker nog tot andere groepen behoren, dan staan die ook vermeld. Bestandseigendom - Elk bestand of directory heeft een gebruikerseigenaar en een groepseigenaar o Volledig onafhakelijk van elkaar - Others: alle andere gebruikers die niet tot de eerste twee eigenaars behoren o Men kan er ook toegangsrechten voor instellen Tonen van het bestandseigendom - ls –l laat zien welke gebruiker en welke groep eigenaar is van het fileobject.
20
Unix Samenvatting
Lennart Martens
Wie is de eigenaar van de nieuwe fileobjecten? - Bij een nieuwe file of directory is de maker van het fileobject de gebruikerseigenaar. - Groepseigenaar: verschil tussen SystemV en BSD o SystemV: de groepseigenaar is de huidige primaire groep van de gebruiker die de file aanmaakt. => Meest gangbare instelling op de meeste UNIX-platformen o BSD-UNIX: de groepseigenaar is de groep van de directory waarin de file wordt aangemaakt. Alleen Digital-UNIX doet dit bij verstek. Op de meeste UNIX-versies kan de BSD-aanpak meestal selectief ingesteld worden door het set-group-id (SGID) bit te plaatsen op de directory waarin de file werd aangemaakt. Het commando newgrp - Als een gebruiker tot meerdere groepen behoort en hij wil dat de groepseigenaar van de nieuw aangemaakte fileobjecten niet zijn primaire groep is => nieuwe shell opstarten => newgrp nieuwe-groep. Alle volgende acties die hij onderneemt behoren tot die groep. Shell verlaten => exit Bestandseigendom veranderen - Chown -R: alle onderliggende files en directory’s van eigenaar veranderern. o –R werkt ook bij chgrp - Groepseigenaar + gebruikerseigenaar aanpassen: chown –R user/groep file - Chown en chgrp kan je niet altijd toepassen als gebruiker, enkel wanneer je er nog zelf aankan. o chgrp (als je tot die groep kan behoren). Anders kan je je bestand wegschenken en kan je er niet meer aan! o chown en chgrp enkel volledig als root
Bestandsbescherming filemode of bestandsmodus -> instellen via change-mode commando (chmod) Toegangstypes voor files directory’s Files:
-
shellscript: zowel r als x nodig
21
Unix Samenvatting
-
-
Lennart Martens
x-recht: dan kan je hem tot je nieuwe werkdirectory maken (cd) o slechts toegang tot files indien je hun naam bent r-recht: noodzakelijk om het ls-commando nodig o directory is eigenlijk niet s anders dan een file waar de namen van andere files en directory’s staan, samen met verwijzing naar de eigenlijke disk-locaties o ook bestandsgroottes kennen: (ls –s) x-recht w-recht: ook files verwijderen waar je enkel read voor hebt
Directorybescherming:
22
Unix Samenvatting
Lennart Martens
Toegangsklassen - Gebruikerstoegang(u): Toegang die verleend wordt aan de gebruikerseigenaar van het fileobject - Groepstoegang(g): Toegang die alle gebruikers krijgen die behoren tot dezelfde groep als de groepseigenaar - Anderen (o): Toegang voor alle andere gebruikers die niet tot de eerste twee eigenaars behoren -
Tien lettertekens o Eerste teken: - is een file, d een directory o Volgende 9: groepen van drie: u g o
Instellen van de bestandsbescherming - Chmod toegangsstring bestandlijst - Ook –R mogelijk (recursief)
Specificatie van een numerieke file-modus - De 9 verdelen in groepen van 3. Elk recht stelt een 1 voor. Elke 3 zien als een bitgetal -> omzetten naar een numeriek getal (max 7). Bv. –rwxr—r-- =744 Specificatie van de default file-modus - Afhankelijk van instelling van umask o Met dit commando kan je ook zien wat de standaardinstelling is o Wat je te zien krijgt is de numerieke octale code die men wil verbieden! Men moet dus de drie octale cijfers aftrekken van 777
Speciale toegangsrechten Andere toegangstypes:
23
Unix Samenvatting
Lennart Martens
Save tekst toegang (sticky bit) - Formele naam: save text mode - Het zegt aan het OS een uitvoerbare kopie in het geheugen te houden, zelfs nadat het proces (waar deze sticky bit van toepassing was) is afgelopen o Oorspronkelijk: tijd van het laden van een frequent programma te minimaliseren o Nu: Indien gezet op een directory: Zelfs al heeft een gebruiker schrijfrecht op de bewuste directory, dan mag hij slechts bestanden verwijderen waarvan hij gebruikseigenaar is! Ontworpen voor dirs zoals /tmp Oudere OS: sticky bit geplaatst op u Meer recente: via de o Octale voorstelling = 1000, maar komt een t op de plek van de x van o SUID en SGID toegang op een uitvoerbaar bestand SUID=Set-user-id SGID=set-group-id -
Als SUID of SGID is gezet op een uitvoerbare file, dan zal het proces dat bij opstarten ervan wordt gecreëerd, toegang krijgen tot de systeembronnen op basis van de toegangsrechten die op de file staan (voor gebruiks-of groepseigenaar) en niet op basis van de identiteit van de gebruiker die het proces opstartte.
-
Bedoeling: Gewone gebruikers de mogelijkheid bieden om taken te verrichten die bepaalde privileges en toegangsrechten vereisen die ze normaal niet hebben. o Bv. op /etc/passwd staat alleen leesrecht voor iedereen, maar gebruikers kunnen hun wachtwoord veranderen, wat enkel kan met het commando /usr/bin/passwd van de gebruiker root. SUID bit is op de file gezet -> proces zal zich voordoen als de systeembeheerder root
SGID-bit op directory’s - Indien gezet betekent het dat bestanden die in deze dir worden aangemaakt van dezelfde groep zijn als de dir zelf, i.p.v. de primaire groep van de gebruiker die de file aanmaakt. o Interessant als vele groepen mensen dezelfde files moeten delen o Chmod g+s octaal:2000
24
Unix Samenvatting
Lennart Martens
Interne opbouw van het filesystem Disks en filesystemen Alle bestanden in een UNIX-systeem maken deel uit van boomstructuur die vertrekt vanaf de root-dir /. Bestanden kunnen wel verspreid zijn over verschillende fysische disks of diskpartities (devices) of andere computers Filesytem: - Kan overeenkomen met een fysische disk of een deel ervan (partitie) - Op grote systemen met logische volumes -> filesystem over meerdere fysische disks Voordeel meerdere filesystemen: Indien in één ervan een fout is niet alle data aangetast Nadeel: kleinere filesystems zijn moeilijker onderhoudbaar Reden om op te splitsen: een filesysteem kan slechts een beperkt aantal files bevatten. (recent opgetrokken) Mount-umount Mounten: koppelen van filesystemen die zich op verschillende devices bevinden aan de boomstructuur mbv mount-commando. - mount –t type device dir o Meestal enkel systeembeheerder o Vorige inhoud wordt onzichtbaar -> na unmounten opnieuw zichtbaar o Mount zonder opties : toont de gemonteerde filesystemen - Een filesystem dat op een uitneembare schijf staat mag maar verwijderd worden als het gedemonteerd is Anders gevaar dat OS nog info in het geheugen heeft dat nog niet is weggeschreven naar de schijf (alle I/O naar filesysteem gebeurt asynchroon) - Demonteren: unmount naamdevice/mounteddir De filesysteem configuratiefile: /etc/fstab - Tekstbestand - Één lijn per device - Elke lijn beschrijft welk device er waar kan gemonteerd worden en m.b.v. welke opties - Veld1: naam devicefile waarop filesyteem zich bevindt - Veld 2: plaats in dirstructuur waar filesysteem moet worden gemonteerd - Veld3: type filesysteem - Veld4: opties(zie volgend blad) - Voorlaatste veld: niet meer gebruikt om de hoeveel dagen er een dump van het filesysteem moet worden genomen. - Laatste veld: volgorde waarmee system-utility fsck de filesystemen moet controleren. Voor / moet dit altijd 1 zijn. 0 = nooit automatisch controleren.
25
Unix Samenvatting
Lennart Martens
Beschikbare ruimte op een filesysteem (df) Met df krijg je een overzicht van de bezettingsgraad van alle gemonteerde filesystemen. Filesystem blocks - Standaard maar 4 partities per disk mogelijk => systeem van logische partities! - Filesysteem bestaat uit opeenvolging van logische blokken, die elk passend veelvoud van 512 bytes bevatten. Hoeveelheid = hangt af van implementatie door systeem - Blok: een hoeveelheid bytes die in één toegang tot de schijf gelezen of weggeschreven wordt. o Grootte dezelfde in filesystem, kan verschillend zijn in verschillende filesystemen - Kleinere blokken => meer disk access => meer verspreid over file system - Grotere blokken => verhoogt snelheid (minder disk access disk<-> intern geheugen) , maar kleinere diskcapaciteit(één kleine file neemt de plaats van één logisch blok in beslag!) Lay-out filesystem:
+tekening p.92!! -
-
-
Bootblok: begin van het filesysteem, eerste sector diskpartitie o Er is maar één bootblok nodig om systeem op te starten, maar elk filesysteem bezit een bootblok dat leeg kan zijn. Verder geen betekenis Superblok: beschrijft de status van filesysteem en bevat volgend info: omvang(aantal blokken), naam filesysteem, naam volume, aantal files die het kan bevatten, tijdsaanduidingen over laatste update en backup, lijst met vrije data-blokken en een lijst met vrije inodes. Zonder dit is het filesysteem onbruikbaar! Lijst van inodes: aantal inodes wordt vastgelegd door systeemadmin en wordt opgeslagen in het superblok. Er is een enkele inode-entry voor elke file of directory in het filesystem. De eerste inode is de root-inode van het filesystem waarlangs de onderliggende directorystructuur logisch bereikbaar is. Inodes zijn verspreid over de schijf, net zoals data. Inodes verwijzen naar data in de buurt => sneller
26
Unix Samenvatting -
Lennart Martens
Datablokken: eigenlijke gegevens van de files. Een toegewezen datablok kan maar één enkel fileobject bevatten. Mkfs: maak unix filesysteem met standaard instellingen Fschck: datablokken die niet vrij zijn, wel degelijk bij een bestand horen, … => lost+found dir
Varianten Op HP en linux andere systemen: lezen p93-94 De inode Vul hier tek. P82
-
Samentrekking van index node Elke file/directory heeft één inode o Een fileobject kan wel meerdere namen hebben, die elk refereren naar die ene inode => link => Deze namen zitten opgeslagen in de dir waar het fileobject logisch toe behoort en niet in de inode van de file. - Bestaat in een statische vorm op disk. Disk inode bevat volgende velden:
-
Nummer inode opvragen m.b.v. ls –i stat vraagt de info van de file zelf op. Plaatsen van de datablokken krijg je niet te zien, maar het OS moet de adressen van die blokken weten: die zitten in de inode opgeslagen Om inodestructuur klein te houden en toch grote bestanden toe te laten: o Standaard UNIX systeem heeft 13 ingangen o Eerste 10 entry wijzen rechtstreeks naar datablok 27
Unix Samenvatting o
o o o
Lennart Martens
Entry 11 (index 10) verwijst naar single indirect blok: deze bevat lijst van adressen van direct toegankelijke blokken. Kernel moet dus eerst indirect blok lezen en dan pas de echte datablokken van de schijf Entry 12 (index 11) bevat een adres van een double indirect blok. Dit blok bevat een lijst met single-indirect bloknummers Entry 13 bevat het adres van triple indirect blok In principe meer dan 13 mogelijk, maar voldoende met deze (bij blokomvang van 1kb en blokadres van 32 bits (4bytes):met drie dubbel indirect met 256 dubbel-indirect geeft 16 GB, en maximale grootte is 4GB(veld inode bestrijkt 32 bits =>232))
Directory’s - Naam van bestandsobject zit in directory, niet in de inode - Directory is een bestand dat aan het filesysteem zijn hiërarchische structuur geeft o Speelt een belangrijke rol in de conversie van een bestandsnaam naar een inodenummer o Is een file waarvan de gegevens een opeenvolging zijn van tabelelementen die elk een naam en een inode-nummer bevatten - In Linux: Directory opgebouwd als een gelinkte lijst met entry’s van variabele grootte o Elke entry bevat nummer van de inode, lengte entry, lengte naam en bestandsnaam zelf. o Gegevens in een dir worden door de kernel op dezelfde manier opgeslagen als de data in een gewone file.
Soorten bestanden Eerste teken bij de toegangsrechten!! - - : echt bestand of regular file (is een hard link = in dir verwijzen naar inode, die wijst naar data) - d directory - l symbolische link - b block special file - c character special file - s socket - p named pipe Regular files Normale bestanden met normale gegevens (files). Directory’s Binaire file met een lijst van andere fileobjecten. Deze lijst bevat paren: naam van de file en nummer van bijhorende inode.
28
Unix Samenvatting
Lennart Martens
Links - is een mechanisme dat toelaat dat verschillende filenamen refereren naar een enkel bestand op de schijf. - 2 soorten links: hard links en symblolic links o Hard link: Associeert 2 of meer filenamen met dezelfde inode Delen dezelfde datablokken op de schijf, hoewel ze als onafhankelijke directory-entry’s functioneren (en dus in verschillende dirs kunnen staan) Kunnen niet gemaakt worden over verschillende fysische diskpartities (filesystemen), omdat het inodenummer enkel uniek is binnen hetzelfde filesysteem! o Symbolic (of soft) link: Pointer files die een ander bestand om het even waar in het logische filesystem een andere naam geven Eigen inode! Kunnen zich dus uitstrekken over verschillende fysische devices, vermits ze verwijzen naar een UNIX-padnaam Niet zomaar overschrijfbaar! Eerst wegdoen. Aanmaken: optie –s van het ln commando - Directory’s kan je alleen maar soft linken! o Anders: filesystem is een map Map verwijst naar map Oneindige cirkel, geraakt er niet uit - Zolang hard links bestaan -> bestand blijft bestaan (fysische files kan je niet deleten) o Indien aantal hard links=0 (door bvb rm file), dan worden inode en datablok vrijgegeven. - Zie figuur p98 verschil hard en soft link Special files - Ook wel device files, zorgen voor I/O met alle devices - Bevinden zich in /dev - Heeft geen size en dus geen blokdata (alleen een inode) - Worden ook gebruikt bij monteren filesystems (zie /etc/fstab). - 2 soorten o Character files: corresponderen met periferie waarvan I/O gebeurt met karakters of op een ruwe en niet –gebufferde basis vb toestenbord, scherm. o Block special files: corresponderen met devices waarvoor de I/O in blokken verloopt Vb disks o Meestal bestaan beide soorten devices voor dezelfde periferie (niet in Linux!) - Aanmaken met commando mknod [c/b] majornr minornr filenaam Sockets - Speciaal soort van file dat gebruikt wordt voor de communicatie tussen processen (programma’s) - Maken deel uit van de TCP/IP netwerkfunctionaliteit - Bvb socket /dev/printer op BSD gebruikt door processen die berichten willen sturen naar de daemon van de print-spooling, om te zeggen dat er werk is. 29
Unix Samenvatting
Lennart Martens
Named pipes - Pijplijnen geopend op naam - In de directory /dev - Andere manier voor communicatie tussen processen.
Processen Proces: Een enkelvoudig programma dat draait in zijn eigen virtuele adresruimte Verschillend van job of commando, omdat die op UNIX-systemen uit meerdere processen kunnen samengesteld zijn, die samenwerken om een specifieke taak af te handelen Eenvoudige commando’s (zoals ls), worden uitgevoerd als één proces. Samengesteld commando mbv pipes krijgt een proces per pipe-segment CPU gebruik op een UNIX-systeem wordt beheerd door het controleren van processen, omdat toewijzen van hulpmiddelen en uitvoering van batchprogramma’s weinig/niet voorzien zijn.
Soorten processen Interactieve processen Worden gestart en gecontroleerd door een terminal-sessie. - Voorgrondproces: o Blijft verbonden met de terminal, al dan niet virtueel. o Communiceert direct met terminal o Intypen van commando en wachten op zijn uitvoer. o Zolang hij actief is, kan het alleen directe invoer krijgen van de terminal o Geen ander commando laten uitvoeren tot het beëindigd is of zelf gestopt (ctrl-c) - Job Controle: o Laat toe processen te verplaatsen van voorgrand naar achtergrond en omgekeerd o Indien proces verplaatst van voor naar achter: proces tijdelijk stoppen, controle teruggeven aan het ouderproces(shell meestal), job op de achtergrond kan opnieuw worden opgestart en worden uitgevoerd, niet verbonden met terminalsessie die het heeft opgestart. Tabel met controlemogelijkheden voor processen:
30
Unix Samenvatting
Lennart Martens
Batch-processen Batch betekent groep - Programmajobs (die vaak zeer veel CPU-tijd vergen) die in een wachtrij worden geplaatst waar ze sequentieel worden afgehandeld - Niet geassocieerd met een terminal - Niet standaard voorzien in UNIX, maar grote constructeurs bouwen dit in in hun implementatie Daemons Daemons betekent demonen - Server-processen die vaak opgestart zijn bij booten van de computer - Draaien continu zolang systeem actief is en wachten in de achtergrond tot een of ander proces hun diensten nodig heeft - Bv netwerk-daemon blijft idle tot ander proces netwerktoegang heeft.
Procesattributen -
Process id (PID) o Uniek identificatienummer van elk proces Parent process id (PPID) o Het PID van de ouder van het proces, het proces waardoor het is opgestart. Nice number o Prioriteit waarmee het proces wordt behandeld. o Getal dat de relatieve belangrijkheid t.o.v. andere processen aanduidt. o ! onderscheid met actuele uitvoeringsprioriteit: deze wordt dynamisch aangepast aan het nice number en aan de recent gebruikte CPU-tijd. 31
Unix Samenvatting -
Lennart Martens
TTY o Naam van de device file van de (pseudo)terminal, die geassocieerd is met het proces. Real and Effective user ID (RUID, EUID) o RUID: het nummer van de gebruiker die het process heft gestart o EUID: het gebruikersnummer dat wordt gebruikt om te weten welke toegang het proces heeft tot de systeembronnen. o Normaal beiden gelijk (proces rechten van de gebruiker die het heeft opgestart), maar door SUID-bit te zetten op uitvoerbare file, krijgt het EUID de waarde van de gebruikerseigenaar van de file en dus ook zijn toegangsrechten.
Procesinformatie tonen M.b.v. het ps-commando! 1. Zonder opties: alleen info over eigen processen 2. ps ajfx: welke commandohiërarchie is er gebruikt en hoe hangen processen van elkaar af 3. top: hiermee krijg je systeem-en procesinformatie. Constant ververst, geeft idee hoe zwaar de pc is belast. Betekenis kolommen: - PRI: frequentie in HZ van de time slice waarmee het proces aan bod komt - NI: nice number - SIZE: omvang proces in virtueel geheugen - STAT: status: R=run, S=sleep, D=niet te onderbreken slaap, T=gestopt, Z=zombie
Levenscyclus van processen Aanmaken nieuw proces: - Bestaand proces maakt een exacte kopie van zichzelf met system-call fork() o Kindproces! o Zelfde omgeving als de ouder behalve het PID - Tweede stadium: zijn geheugen overschrijven door de code die moet worden uitgevoerd o D.m.v. system call exec() - Nieuwe programma vervangt alles dat overgeërfd is van de ouder, behalve de omgeving o Omgeving kan ook nog gewijzigd worden door kind-proces - Ouder proces kan al dan niet wachten op aflopen kindproces. Bij einde kindproces wordt de besturing terug gegeven aan de ouder o exec() geeft een signaal naar proces met een PID = PPID van eigenproces met melding dat proces afgelopen is Ultieme voorouder: proces met PID=1 : init. - Opgestart bij het booten - Creëert zelf een heleboel processen volgens instellingen in de file /etc/inittab
32
Unix Samenvatting
Lennart Martens
Voorbeeld: getty-proces - Toont de login prompt op de terminal en wacht op reactie. Gebeurt dit, dan start getty het login-programma via een exec (validatie uid en wachtwoord) - Indien alles in orde: login start een shell m.b.v. een exec-aanroep Tekening (rechts de Linux-variant)
Sequentiële commando’s Vb ls;date
33
Unix Samenvatting
Lennart Martens
Gegroepeerde commando’s Bv.(ls;date)
Een commando-pipe Bv. who|sort Wanneer een proces probeert te lezen van een pipe, dan zal het: - Ofwel gegevens lezen, as een ander proces naar het bestand heeft geschreven - Ofwel de voortgang van het proces uitstellen tot een ander proces gegevens naar het pijplijnbestand heeft geschreven - Ofwel met een EOF indicatie terugkeren, indien geen ander proces de pijplijnfile voor schrijven heeft geopend
Enkele bedenkingen over processen: - Shell-programma’s worden uitgevoerd door middel van fork en exec, die extra processen o Elk binnen de shell opgeroepen commando wordt ook via fork en exec uitgevoerd o Daarom: Opletten bij het schrijven van shell-programma’s die andere shellprogramma’s aanroepen dat je het maximum aantal gebruikers- of systeemprocessen niet overschrijdt Belangrijk bij schrijven van programma’s die door meerdere gebruikers tegelijk gebruikt kunnen worden
34
Unix Samenvatting
Lennart Martens
-
Eén programma zal misschien het max aantal gebruikersprocessen niet boven gaan, maar verscheidene kopieën van het programma zouden het maximum aantal systeemprocessen wel kunnen overschrijden. Gebruik waar mogelijk functies binnen shell-programma’s, want zij creëren geen nieuwe processen voor uitvoering. Hou bij aanroepen van achtergrondprocessen rekening met andere gebruikers o Hoe meer processen gelijktijdig draaien op UNIX-systeem, hoe trager het geheel zal zijn o Laat dus grote achtergrondtaken ’s nachts uitvoeren o Start grote achtergrondprocessen met nohup-commando. Dit commando activeert de job en zorgt ervoor dat tijdens de uitvoering de signalen hangup en quit worden genegeerd. Als uitvoer niet is omgeleid, worden standaarduitvoer als standaard foutenuitvoer naar een bestand gestuurd met naam nohup.out
Signalen en het verwijderen van processen kill-commando: kan algemeen gebruikt worden om signalen door te sturen naar processen. - Algemene vorm: kill [-signal+ PID’s Overzicht opties:
-
Kill -9 garandeert praktisch altijd de vernietiging van het proces o Nadeel: gestopt proces kan niet netjes afsluiten: Kind-processen kunnen nog actief zijn, files niet gesloten Kan leiden tot inconsistente staat van de gegevens. Soms kunnen processen zelfs niet met een KILL-signaal worden gestopt: - Zombies o Processen in zombie-status. Normaal verwittigt een kind zijn ouderproces dat het gestopt is. Indien het van de ouder een bevestiging heeft gekregen, zal het zijn PID uit de procestabel verwijderen. Een zombie-proces heeft die bevestiging niet gehad, maar hij zijn files en processen correct afgesloten (geen systeembronnen meer in beslag). Zombies staan alleen nog vermeld in de procestabel - Processen die wachten op niet-beschikbare NFS-bronnen (network file system; om files op andere computers over het netwerk beschikbaar te stellen) o Bv. als het proces wil schrijven naar een netwerkcomputer en die ligt stil o Gebruik signalen 2 of drie om ze te stoppen 35
Unix Samenvatting -
Lennart Martens
Processen die wachten tot een device klaar is, bv. tijdens het terugspelen van de band in de tape-drive.
Opvangen van signalen in de shell In een proces dat een shell-script is kunnen signalen ook worden opgevangen. - Met het trap commando: trap rij-van-commando’s lijst-van signaalnummers - Rij commando’s vormt één argument => tussen aanhalingstekens o Werken als de aanroep van een subroutine: na uitvoering van deze commando’s wordt het script hervat en gaat hij verder met de volgende opdrachten - Trap wordt ook gebruikt om te voorkomen dat programma wordt afgebroken o (Trap ‘’ 1; lang-lopend-prog) & Vb. zie p 113
Opstarten en afsluiten van UNIX Het opstartproces Bootstrapping is de volledige naam om een computersysteem tot leven te brengen en klaar te maken voor gebruik. Van power-on tot init: booten van UNIX op een PC 1. Uitvoeren van de instructies die zijn opgeslagen in het ROM-geheugen of firmware 2. Deze lokaliseren het bootprogramma dat het Unix OS zal starten a. Bootprogramma is opgeslagen op een vastgestelde plaats op een bootable device, dit is een apparaat vanaf waar er kan worden gelezen b. Meestal is dit bloknummer 0 op de rootdisk of een speciale partitie hierop 3. Dit bootprogramma laadt de kernel in het geheugen en geeft hieraan de controle door a. De kern is dat deel van het OS dat steeds actief blijft zolang het systeem niet wordt stilgelegd. b. Kernel is een file dat je terugvindt op het systeem! Unix op SystemV en op Linux vmlinux (of vmlinuz indien gecomprimeerd) c. Het bootprogramma is maar net slim genoeg om uit te maken of de benodigde devices toegankelijk zijn en om het bootprogramma te laden en op te starten. Het bootprogramma doet dikwijls nog extra controles (aanwezigheid van geheugen, periferie) 4. De kernel initialiseert zijn interne tabellen en eventueel nog extra hardwareconsoles door te voeren om zo de drivers te kunnen laden die hij nodig heeft . Na al deze voorbereidingen start hij met een fork-exec het initieel proces init met PID=1
36
Unix Samenvatting
Lennart Martens
Taak van init - Ultieme voorouder met PID=1 - Een van de eerste activiteiten: het testen van de integriteit van de verschillende filesystems op het systeem, starten met het root-filesysteem - Nadien de belangrijkste sub-taken geïnitialiseerd en worden interactieve logins toegelaten. Al deze activiteiten worden bestuurd door een aantal initialisatie-scripts (shellprogramma’s die zich bevinden in /etc of in /sbin en hun subdirs. Ze voorzien volgende taken:
Als dit allemaal gebeurt is, kunnen gebruikers inloggen (mulituser mode) Single-user mode: Systeem status die bestemd is om administratieve en onderhoudstaken ut te voeren: Nieuwe software installeren, backup nemen,… Deze taken vereisen dat alleen root gebruiker is op het systeem Hiertoe zal init een shell opstarten, uitgevoerd als root en met prompt Er draaien geen daemons, niet alle filesystemen werden gemonteerd, geen netwerktoegang mogelijk! Deze mode wordt opgestart als er bij controle van verschil. Diskpartities een fout optreedt die niet kan gefixt worden zonder hulp van de systeembeheerder. Homedir van root niet onder /home, maar onder /root zodat in SuM de root aan zijn files kan!!!
37
Unix Samenvatting
Lennart Martens
De verschillende run-levels Computer kan in drie toestanden zijn: uit, single user mode of multi user mode Verder doordrijven: runlevels: aangeduid met een karakter. Op elk moment bevindt het systeem zich in een van deze toestanden en kan het van niveau veranderen door administratieve commando’s Tabel run levels in SystemV:
-
Hoe het op jouw systeem is gedefinieerd, vind je in de file /etc/inittab
Meldingen bij het opstarten -
Worden bewaard in het bestand /usr/adm/message of in /var/adm/messages of /var/log/messages en wordt gedaan door de sslogd daemon en/of door de dmesg utility op SystemV
Opstart-scripts Commandoscripts die het meeste werk op zich nemen om het systeem in zijn normale multi-user status te brengen. Hiërarchie BSD: 2 tot 5 scripts in de dir /etc en naam begint of eindigt met rc SystemV: meer dan 40 indien van het ene naar een ander run level wordt overgeschakeld Files geordend in de dir /etc/rc.d. Bij het overschakelen naar een bepaald runlevel worden alle scripts in de overeenkomstige rc-dir uitgevoerd in alfabetische volgorde: Scripts met K zijn kill of stop, S is start Rc3.d: scripts maar het zijn links! Gelinkt naar de scripts in init.d
38
Unix Samenvatting
Lennart Martens
De /etc/inittab file Bepaalt voor een groot deel welke activiteiten het init-proces zal uitvoeren bij het overgaan van het ene run level naar het andere. Na het booten zal bij het opstarten van init dit proces deze file lezen Elke entry volgende layout:
-
-
Standaard systeemstaat is 3, multi-user met volledige netwerkcapaciteiten In elk runlevel moet het script /etc/rc.d/rc worden uitgevoerd met als argument de systeem status waarvoor hij gedraaid wordt. In e In elk runlevel moet /sbin/update worden gedraaid: het past de inhoud van het superblok van alle filesystems aan door het sync commando uit te voeren waardoor de buffer van de disk in het geheugen worden weggeschreven naar de schijf. Typisch voor linux: entry die Ctrl-alt-delete opvangt: start het systeem opnieuw op Specificatie voor de zes virtuele terminalsschermen te activeren : ctrl+Fx o Gettyprocessen worden bij het afsluiten telkens opnieuw opgestart (respawn) Level 5 : specifiek voor Linux om het Xwindows systeem te activeren
/etc/rc.d/rc.sysinit, filesystem check /etc/rc.d/rc.sysinit is het script dat uitsluitend bij de start wordt uitgevoerd. Hierna worden de swap-partities geactiveerd en wordt de computernaam geïnitialiseerd. Er wordt ook gezorgd dat het root-filesysteem wordt gecontroleerd met fsck fsck is een van de sleuteldelen om het filesysteem klaar te maken. Het verzekert dat de datastructuren in de superblokken van de diskpartities en inode-tabellen consistent zijn met datgene wat in de directory-entries en de bezette-diskblokken-tabel van het filesysteem terug te vinden is. Vindt inconsitenties en corrigeert Fsck controleert integriteit filesysteem, niet die van de gegevens in een bestand Gevonden files die hij niet kan plaatsen en dus verloren zijn => in /lost+found 39
Unix Samenvatting
Lennart Martens
Het script /etc/rc.d/rc -is eerder al uitgelegd, nummering van mappen = nummer levels Halt -
Script, zie pagina 125 -
Overzicht netwerk-daemons
Het afsluiten van een Unix-systeem
-
Met het commando shutdown o Optie –r = opnieuw opstarten o –h : volledig uit o Single user: zonder argument (klopt dit?) o –t tijd in seconden tussen stern van een TERM en een KILL signaal (default 30)
40
Unix Samenvatting
Lennart Martens
Enkele utilities Taken periodiek uitvoeren (cron) -
cron = UNIX faciliteit die gebruikers toelaat om programma’s te plannen die op welbepaalde tijdstippen (al dan niet herhaaldelijk) moeten worden uitgevoerd. o Bv. Elke nacht backup uit te voeren, grote bestanden opsporen,… o Mechanisme wordt beheerd door cron daemon. Dit proces kijkt periodiek in de crontabbestanden. Elke user kan daar een entry invoeren Te vinden in /var/spool/cron/crontabs of iets dergelijks Eén enkele file per user die als naam zijn username heeft. Gebruikt om aantal administratieve taken stil uit te voeren, zonder expliciete tussenkomst van de systeemadministrator. Resultaat kan bv. periodiek via mail naar root gestuurd worden. -
crontab –l: toont wat er actief is crontab –r: verwijdert een entry anacron: om het even wanneer je je machine opstart, het wordt uitgevoerd (bv elke week een logrotate doen) Meer info over crontab vorming vindt je in p128-129
Back-up en restore Back-upstrategie - Eenvoudigst en grondigst: kopie maken op tape van alle bestanden = full back-up o Nadeel: Kost elke keer veel tijd en het is niet altijd zo eenvoudig om een enkele file hiervan opnieuw te herstellen - Incrementele back-up: Kan men iets frequenter uitvoeren, omdat men enkel de files kopieert die zijn veranderd sinds het nemen van de vorige back-up. o Nadeel: Bij het terugzetten moet je de full back-up + alle incrementele back-ups terugzetten. o Voordeel: Sneller dan full, minder storage nodig. - Volgende versie back-up niet op dezelfde tape maken, maar vier versies in omloop houden - 2 Unix-commando’s: tar en cpio o Maken beiden één enkel bestand dat op om het even welk medium kan gezet worden, dus ook op een disk
Tar -
Tar archive Opties: o –c create o –f specifieert de filenaam die wordt aangemaakt of van waaruit er moet worden hersteld. o –v verbose: toont op standaarduitvoer welke fileobjecten worden gekopieerd, kan in een log-file worden opgeslagen 41
Unix Samenvatting
Lennart Martens
o o
Cpio -
–x extract: geeft aan dat een of meerdere files uit de tar-file moeten worden gehaald –p preserve permissions: behoudt de oorspronkelijke toegangsrechten van de fileobjecten bij het herstellen o –t toont alleen de inhoud van een tarfile, zonder extractie o –C: doet een cd vooraleer de files worden gekopieerd; de gestockeerde padnamen zijn dan relatief ten opzichte van deze directory, vlak na deze optie moet ook worden vermeld worden welke files of directory’s moeten worden gearchiveerd o –z : alleen bij Linux: de tar-file moet gezipt worden of is gezipt Deze opties kunnen zonder minteken allemaal na mekaar worden gezet.
Copy-input-output Je kan namen van files in een bestand zetten en hier wordt back-up van genomen door het op de standaard output te zetten. Wat je met die standaard output doet, kies je zelf. Makkelijk om een compleet arbitraire verzameling van files te kopiëren. o Tar: gemakkelijker om een volledige directory-structuur te behandelen. Het kan over meerdere tapes of disks zijn uitvoerfiles schrijven, waar tar dit niet steeds doet (tar op Linux wel) Opties: o –i zegt cpio dat er invoer komt van een cpio-file o –m is gelijk aan de optie –p bij tar o –d zorgt ervoor dat er automatisch subdirs worden aangemaakt (gebeurt automatisch bij tar)
Waarom geen absolute padnamen in archief? Op moment dat je kopie terugzet en staat absolute padnaam in wordt het origineel overschreven. Linux neemt default de leading slash weg.
Reguliere expressies en grep P132-136 en nota’s labo’s.
42
Unix Samenvatting
Lennart Martens
Extra: Examenvragen User toevoegen zonder hulpmiddelen 1. entry toevoegen in /etc/passwd: (als root) echo testusr:x:1024:1024::/home/testusr/:/bin/bash >> /etc/passwd 2. group entry toevoegen echo testgrp::1024:testusr >> /etc/group 3. shadow-bestand (wachtwoord) echo testusr:pwd:systeminfo >> /etc/shadow 4. secure shell om in te loggen als deze user ssh testusr@localhost 5. homedir aanmaken mkdir /home/testusr/ 6. structuur aanmaken van de home dir: cp -r /etc/skel/.??* /home/testusr 7. owner en group veranderen van de gekopieerde bestanden: chown -r testusr testgrp /home/testusr 9.mode van de homedirectory aanpassen: Chmod 700
8. We kunnen de administratie-rechten van hierboven doortrekken voor nieuwe bestanden die zullen aangemaakt worden. Hiertoe moeten we de default-instelling van 022 moeten overschrijven. We voegen in .bash_profile een extra regel toe van de vorm: umask 077
Vragen 2009-2010
Wat zijn wildcards, en hoe worden ze door de shell verwerkt? Beschrijf de standaarduitvoer, standaardinvoer, en standaardfoutuitvoer. Wat is een "here-document"? Beschrijf de werking van het filesystem fysisch (dus niet logisch, eg. hoe bestanden & directories werken). Hoe worden verschillende fysische media in het systeem beheerd? Wat zijn signalen? Hoe worden ze verwerkt, en hoe kan een applicatie er mee omgaan? Bespreek variabelen in een shell. Met welke acties (commando's) maak je als systeemadministrator een gebruiker en group aan zonder de adduser en addgroup commando's. Bespreek de cronutility van UNIX. Bespreek device files en geef een beknopt overzicht van de andere soorten files met hun functionaliteit. Bespreek de uitvoer van het ps-commando en bespreek de bijhorende procesattributen. 43
Unix Samenvatting
Lennart Martens
Bespreek logische en numerieke uitdrukkingen in de shell, herhaling, voorwaarde, selectie ... * Script: script_naam groepsnaam Het was de bedoeling om een script de schrijven met 1 argument namelijk de groepsnaam en om van elk lid van de groep de 5 grootste files te tonen samen met de totale grootte van die 5 files.
Vragen 2008-2009
Wildcards bespreken. Standaardinvoer en -uitvoer bespreken. (+doorsluizen, verschillende manieren) Standaarfoutenuitvoer en here-document bespreken. Basisbestandspermissies uitleggen en toelichten. Welke zijn nodig voor de basiscommando's. (hiermee bedoelde hij een lijstje geven van commando's op files en dirs en bijschrijven welke permissies je ervoor nodig had) Uitvoer van ps gegeven. Aan de hand hiervan procesattributen bespreken. Welke verschillende soorten processen kan je hieruit halen. (tip: de UID die weergegeven wordt op die uitvoer is de EUID (zie passwd)) Script: commando naam1 [naam2 naam3 ...] bestand Minstens één naam en een bestand. Controleren op aantal argumenten. Controleren op bestaan en mogelijkheid lezen bestand. Dan voor alle namen kijken in een bestand mailadressen.txt met bepaalde vorm. (bv.: naam:bla:iets:mailadres:nogiets) Controleren dat de naam op de juiste plaats voorkomt in het bestand (begin v/d lijn), zoniet fout, controleren indien er een mailadres bijstaat, indien niet, fout. Als het voorkomt, inhoud bestand sturen naar mailadres m.b.v. mail commando. Als er geen fouten zijn, aantal geslaagde verzendingen tonen, zoniet, exit status = aantal fouten. leg uit commandolijn, variabelen, metatekens, groeperen, omleiden... (zelfde vraag als vorige jaren) hoe interpreteert een filesystem een bestand of directory (inodes, heel die opbouw...) Bespreek ook het samenvoegen van bestandssystemen. (== mounten) (zelfde vraag als vorige jaren) wat gebeurt er bij het opstarten van een UNIX machine? runlevels? en bij het afsluiten ? (zelfde vraag als vorig jaren) bijvragen wat is het verschil tussen ; en & en wat voor invloed heeft het op de shell? leg de variabele PATH uit... hoe start de shell een commando? bij schijfindeling, wat moet er staan indien het de enige partitie op de schijf is? die tabel in de inode, wat staat daarin en naarwaar verwijzen ze? wat zijn die single, double.... (datablokken met adressen van andere datablokken) wat doet init? hard gecodeerd? sysinit? hardgecodeerd? altijd uitgevoerd? rc... files kort toelichten script: script schrijven dat als argument een groepsnaam krijgt... kijken of een argument is meegegeven... => error kijken of het een geldige naam is... => error groepsnummer... gebruikers in de groep (uit password file) indien geen gebruikers... => error zoek de 5 grootste bestanden waarvan elke gebruiker eigenaar is, toon deze files met grootte en toon totale grootte per gebruiker... programmeren in de shell, alles wat erbij komt kijken, expressies (logisch en numeriek), constructies, herhalingen, invoer, etc 44
Unix Samenvatting
Lennart Martens
signalen, waarvoor gebruikt men ze, wat komt erbij kijken, welke zijn er, hoe kan een proces ze opvangen, uitzonderingen? geef het fysisch bestandsysteem van Unix (lay-out van diskpartitie, beschrijving van blokken en hun inhoud, toelichting bij inodes, etc. script dat een filepatroon + minstens 1 dir als argument meekrijgt, schrijf alle files/dirs uit die voorkomen in die dir(s) en voldoen aan het patroon. Extra eisen: er mag geen foutenuitvoer in de shell verschijnen, dirs moeten eindigen met een "/".
45