Brukerkurs i UNIX
Trond Kandal
13. november 2020
2
Forord
Dette kurset starta p
˚
a mange m
˚
atar som eit “sideprosjekt” medan eg arbeidde
p
˚
a Institutt for Informatikk, AVH, UNIT. Mange studentar spurte meg om eit
introduksjonskurs til UNIX. Studentane hadde hørt om UNIX og verktøy un-
der UNIX som kunne betre produktiviteten. Eg fekk mange tilbakemeldingar
p
˚
a at dette kurset har hjelpt mange i gang. Bl.a vart det brukt i undervisninga
ved instituttet,— seinare ogs
˚
a i undervisning ved Høgskolen i Østfold. Mange
andre har ogs
˚
a bedt om
˚
a f
˚
a ein kopi.
Eg driv fortsatt og flikkar litt p
˚
a kurset i ledige stunder og tek gjerne imot
innspel p
˚
a ting som manglar, eller som kan gjerast betre.
For meg har det viktigaste vore at alle som har interesse for
˚
a lære seg UNIX
kan f
˚
a ein introduksjon,— og forh
˚
apentlegvis inspirere til
˚
a lære meir. Kurset
gir ikkje ein fullstendig introduksjon,— men ein smak p
˚
a kva UNIX kan tilby.
Eg starta
˚
a skrive p
˚
a i 1993 og fortsatt er det personar som spør meg om dei
kan f
˚
a ein kopi. Eg tek dette som ein indikasjon p
˚
a at UNIX er fortsatt like
aktuelt no idag som for 20
˚
ar sidan. UNIX har ofte blitt karakterisert som eit
døende system av s
˚
akalla bedrevitere,— men operativsystemet ser ut til
˚
a ha
ein betydleg “stayer”-evne. Pr. idag er UNIX
1
det operativsystemet som gir
best ytelse ved tunge oppg
˚
aver, gir best stabilitet og eit konsistent grensesnitt
sjølv om det har vore ein betydeleg utvikling.
For min eigen del starta mitt kjennskap til UNIX i 1987 og sidan det har eg
b
˚
ade vore systemadministrator og brukar av SunOS 4.x, Solaris, Interactive
UNIX, A/UX, SCO UNIX, Linux og MacOSX. Fortsatt drar eg stor nytte av alt
eg har tileigna meg av kunnskap til
˚
a jobbe fortare og enklare,— og eg h
˚
apar
at du som lesar vil gjere det same. Eg trur ikkje du vil angre deg dersom du
investerer litt tid p
˚
a
˚
a lære deg UNIX/Linux.
Lykke til.
Trond Kandal
Copyright ©1993 – 2020 Trond Kandal
1
N
˚
ar eg seier UNIX inkluderer det alle UNIX–system,– ogs
˚
a UNIX–liknande system som Linux
Innhald
1 Innledning 12
1.1 Skrivem
˚
ate i dette kurset . . . . . . . . . . . . . . . . . . . . . . . 12
2 Introduksjon 14
2.1 Sagnet og det kontroversielle rundt UNIX . . . . . . . . . . . . . 16
2.2 Filosofien bak UNIX . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3 Det moderne UNIX-systemet,- for og imot . . . . . . . . . . . . . 18
2.4 Litt historikk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3 Om UNIX som operativsystem 20
3.1 Kva skal eit operativsystem gjere ? . . . . . . . . . . . . . . . . . 20
3.2 Kva gjer UNIX ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.2.1 Kjernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.2 Skallet,— kommandotolkaren . . . . . . . . . . . . . . . . 21
3.2.3 Kommandoer . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.4 Prosessar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.5 Brukarar og grupper . . . . . . . . . . . . . . . . . . . . . 24
4 Grunnleggande kommandoar 25
4.1 Logge inn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.2 Logge ut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3 Liste filar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.4 Kikke p
˚
a innhold i filar . . . . . . . . . . . . . . . . . . . . . . . . 30
4.5 Slette filar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.6 Kven er innlogga ? . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.7 Forandre passord . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5 Skallet 33
5.1 Jokertegn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.2 Miljøvariable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
5.3 Standard inn og standard ut . . . . . . . . . . . . . . . . . . . . . 36
5.4 Returverdiar fr
˚
a kommandoar . . . . . . . . . . . . . . . . . . . . 38
6 Filsystemet 40
6.1 Filar i UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
6.2 Katalogstruktur og viktige katalogar . . . . . . . . . . . . . . . . 40
6.3 Filnamn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.4 Tilgangsrettighetar . . . . . . . . . . . . . . . . . . . . . . . . . . 42
3
4 INNHALD
6.5 Forandre eigar og gruppe p
˚
a filar . . . . . . . . . . . . . . . . . . 44
6.6 Forandre tilgangsrettighetar . . . . . . . . . . . . . . . . . . . . . 45
6.7 Sette standard tilgangsrettighetar . . . . . . . . . . . . . . . . . . 46
6.8 Navigering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.8.1 St
˚
aande katalog . . . . . . . . . . . . . . . . . . . . . . . . 48
6.8.2 Endre st
˚
aande katalog . . . . . . . . . . . . . . . . . . . . 48
6.9 Opprette og slette katalogar . . . . . . . . . . . . . . . . . . . . . 49
6.10 Kopiere og flytte filar . . . . . . . . . . . . . . . . . . . . . . . . . 49
7 VI 50
7.1 Introduksjon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7.1.1 Sette terminal-type . . . . . . . . . . . . . . . . . . . . . . 50
7.1.2 Oppstart av VI . . . . . . . . . . . . . . . . . . . . . . . . 51
7.1.3 Modus i VI . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
7.1.4 Skifting mellom modus . . . . . . . . . . . . . . . . . . . 53
7.1.5 Avslutte VI . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.1.6 Lagre filar . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.1.7 Lese inn filar . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.1.8 Viktige kommandoar . . . . . . . . . . . . . . . . . . . . . 54
7.1.9 Skifte mellom filar . . . . . . . . . . . . . . . . . . . . . . 54
7.1.10 Oppfrisking av skjerm . . . . . . . . . . . . . . . . . . . . 54
7.1.11 Utgang til skall . . . . . . . . . . . . . . . . . . . . . . . . 56
7.2 Redigering med VI . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.2.1 Angre siste kommando . . . . . . . . . . . . . . . . . . . 56
7.2.2 Skifte fr
˚
a kommandomodus til tekstmodus . . . . . . . . 56
7.2.3 Tekstmodus . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7.2.4 Flytting rundt i bufferet . . . . . . . . . . . . . . . . . . . 57
7.2.5 Søking etter tekst . . . . . . . . . . . . . . . . . . . . . . . 58
7.2.6 Forandre tekst . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.2.7 Slette tekst . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
7.2.8 Gjenta siste kommando . . . . . . . . . . . . . . . . . . . 59
7.2.9 Klipp, kopier og lim . . . . . . . . . . . . . . . . . . . . . 59
7.2.10 Klipp, kopier og lim ved hjelp av linjenummer . . . . . . 59
7.2.11 Konfigurering av vi . . . . . . . . . . . . . . . . . . . . . . 60
7.2.12 Filtrering av tekst inne i vi . . . . . . . . . . . . . . . . . . 60
8 Emacs 62
8.1 Fundamentale konsept for Emacs . . . . . . . . . . . . . . . . . . 62
8.2 Starte Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
8.3 Deling av vindu . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
8.4 Lagre buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
8.5 Avslutte Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.6 Hjelpsystemet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.7 Flytting rundt i bufferet . . . . . . . . . . . . . . . . . . . . . . . 65
8.8 Sletting av tekst . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.9 Merking i Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
8.10 Klipp og lim i Emacs . . . . . . . . . . . . . . . . . . . . . . . . . 67
8.11 Søk og erstatt i Emacs . . . . . . . . . . . . . . . . . . . . . . . . . 67
8.12 Utgang til skall . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
8.13 Modus i Emacs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
INNHALD 5
8.13.1 Modifikasjonar til modus . . . . . . . . . . . . . . . . . . 68
8.14 Oppstartfil for Emacs . . . . . . . . . . . . . . . . . . . . . . . . . 68
9 Regulære uttrykk og avansert redigering 70
9.1 Basiskonsept for regulære uttrykk . . . . . . . . . . . . . . . . . 70
9.2 Alle enkle tegn . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
9.2.1 Søking ved hjelp av mengder . . . . . . . . . . . . . . . . 70
9.2.2 Søking ved hjelp av rekkjer . . . . . . . . . . . . . . . . . 71
9.2.3 Unnta spesialteikn for
˚
a bli oppfatta som operatorar . . . 71
9.2.4 Spesialteikn for start og slutt p
˚
a linje . . . . . . . . . . . . 71
9.2.5 Bygging av komplekse regulære uttrykk . . . . . . . . . 72
9.2.6 Den lengste strengen som passar . . . . . . . . . . . . . . 72
9.3 Kommandoen grep . . . . . . . . . . . . . . . . . . . . . . . . . . 72
9.3.1 Kommandoane fgrep og egrep . . . . . . . . . . . . . . . . 73
9.4 Søking i vi ved hjelp av regulære uttrykk . . . . . . . . . . . . . 74
9.4.1 Substituering i vi . . . . . . . . . . . . . . . . . . . . . . . 74
9.4.2 Konkatenering av strengar i vi . . . . . . . . . . . . . . . 75
9.4.3 Substituering i eit omr
˚
ade av linjer . . . . . . . . . . . . . 75
9.4.4 Meir om linjeadressering . . . . . . . . . . . . . . . . . . 75
9.4.5 Kontekstadressering med regulære uttrykk . . . . . . . . 76
10 Fleire kommandoar til vanleg bruk 77
10.1 Bruk av miljøvariabelen PATH . . . . . . . . . . . . . . . . . . . 77
10.2 Kommandoen banner . . . . . . . . . . . . . . . . . . . . . . . . . 78
10.3 Blanke skjermen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
10.4 Kommandoen date . . . . . . . . . . . . . . . . . . . . . . . . . . 79
10.5 Kommandoen cal . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
10.6 Kommandoen calendar . . . . . . . . . . . . . . . . . . . . . . . . 79
10.7 Programmet more . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
10.8 Programmet tail . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
10.9 Kommandoen head . . . . . . . . . . . . . . . . . . . . . . . . . . 81
10.10Kommandoen cmp . . . . . . . . . . . . . . . . . . . . . . . . . . 81
10.11Kommandoen diff . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
10.12Kommandoen dircmp . . . . . . . . . . . . . . . . . . . . . . . . . 83
10.13Kommandoane sort og uniq . . . . . . . . . . . . . . . . . . . . . 83
10.14Kommandoane cut og paste . . . . . . . . . . . . . . . . . . . . . 86
10.15Kommandoen join . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
10.16Databaseoperasjonar p
˚
a tekstfilar . . . . . . . . . . . . . . . . . . 88
10.17Kommandoen sleep . . . . . . . . . . . . . . . . . . . . . . . . . . 90
10.18Kommandoen find . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
11 Skall-programmering 95
11.1 Lagre skallkommandoar i filar . . . . . . . . . . . . . . . . . . . . 95
11.2 Kommentarar i skallprogram . . . . . . . . . . . . . . . . . . . . 96
11.3 Operatoren if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
11.4 Kommandoen test . . . . . . . . . . . . . . . . . . . . . . . . . . . 98
11.5 Kommandoen exit . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
11.6 Kommandoen expr . . . . . . . . . . . . . . . . . . . . . . . . . . 101
11.7 Operatoren for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
11.8 Operatoren while . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6 INNHALD
11.9 Operatoren case . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
11.10Kommandoen printf og utskrifter fr
˚
a skallprogram . . . . . . . . 105
11.11Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
11.12Argument p
˚
a kommandolinja . . . . . . . . . . . . . . . . . . . . 106
11.13$#, $*, og posisjonsparametre . . . . . . . . . . . . . . . . . . . . 106
11.14Feil og feilmeldingar i skallprogram . . . . . . . . . . . . . . . . 107
11.15Kommandoen getopt(s) . . . . . . . . . . . . . . . . . . . . . . . . 108
11.16Kommandoen trap . . . . . . . . . . . . . . . . . . . . . . . . . . 110
11.17Kommandoen wait . . . . . . . . . . . . . . . . . . . . . . . . . . 110
11.18Skallfunksjonar . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
11.19Kommandosekvensar . . . . . . . . . . . . . . . . . . . . . . . . . 112
12 Prosesser 113
12.1 Tidsdeling i UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
12.2 Om prioritetsklasser . . . . . . . . . . . . . . . . . . . . . . . . . 114
12.3 Kontrollere prosessar i tidsdeling . . . . . . . . . . . . . . . . . . 114
12.4 Bakgrunnsprosessar . . . . . . . . . . . . . . . . . . . . . . . . . 115
12.5 Logge ut medan bakgrunnsprosessar kjører . . . . . . . . . . . . 116
12.6 Foreldre og barn . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
12.7 Kommandoen ps . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
12.7.1 Aktiviteten for andre brukarar . . . . . . . . . . . . . . . 118
12.7.2 Systemprosessar . . . . . . . . . . . . . . . . . . . . . . . 119
12.8 Drepe ein prosess . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
12.9 Signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
13 Utskrift til skrivar 123
13.1 Bruk av lp og lpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
13.2 Opsjonar til lp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
13.3 Opsjonar til lpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
13.4 Kanselere utskrifter . . . . . . . . . . . . . . . . . . . . . . . . . . 124
13.5 Sjekke status p
˚
a skrivar . . . . . . . . . . . . . . . . . . . . . . . . 125
14 Basiskommunikasjon 127
14.1 Kommandoen news . . . . . . . . . . . . . . . . . . . . . . . . . . 127
14.2 Dagens tekst . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
14.3 Kommandoen write . . . . . . . . . . . . . . . . . . . . . . . . . . 128
14.3.1 Interaktiv bruk av write . . . . . . . . . . . . . . . . . . . 129
14.4 Kommandoen wall . . . . . . . . . . . . . . . . . . . . . . . . . . 129
15 Korn– og C–skall 130
15.1 Korn–skallet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
15.1.1 Starte Korn skallet . . . . . . . . . . . . . . . . . . . . . . 131
15.1.2 Kommandohistorie med ksh . . . . . . . . . . . . . . . . . 132
15.1.3 Redigering p
˚
a kommandolinja . . . . . . . . . . . . . . . 133
15.1.4 Aliaser i ksh . . . . . . . . . . . . . . . . . . . . . . . . . . 133
15.1.5 Kommandoen whence . . . . . . . . . . . . . . . . . . . . 134
15.1.6 Thilde substitusjon . . . . . . . . . . . . . . . . . . . . . . 135
15.1.7 Forandre katalog under ksh . . . . . . . . . . . . . . . . . 135
15.1.8 Kommandoen set . . . . . . . . . . . . . . . . . . . . . . . 136
15.1.9 Forbetringar for skallprogrammering under ksh . . . . . 137
INNHALD 7
15.1.9.1 Aritmetriske operatorar . . . . . . . . . . . . . . 137
15.1.9.2 Tabellar . . . . . . . . . . . . . . . . . . . . . . . 138
15.1.9.3 Forbetra spørring, inn og ut . . . . . . . . . . . 138
15.1.9.4 Operasjonar p
˚
a miljøvariable . . . . . . . . . . . 139
15.2 C–skallet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
15.2.1 Kommandolinja . . . . . . . . . . . . . . . . . . . . . . . . 140
15.2.2 Setting av variable i csh . . . . . . . . . . . . . . . . . . . 140
15.2.3 Kommandohistorie og redigering av kommandoar i csh . 141
15.2.4 Hashing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
15.2.5 Aliaser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
15.2.6 Redirigering av I/O med csh . . . . . . . . . . . . . . . . 143
15.2.7 Skallprogrammering for csh . . . . . . . . . . . . . . . . . 143
15.2.8 Finne ein kommando med csh . . . . . . . . . . . . . . . . 146
15.3 Velge skall for skallprogram . . . . . . . . . . . . . . . . . . . . . 146
15.4 Valg av innloggingsskall . . . . . . . . . . . . . . . . . . . . . . . 147
15.5 Jobbkontroll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
16 Media 150
16.1 Diskblokker og i–noder . . . . . . . . . . . . . . . . . . . . . . . . 150
16.2 Filsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
16.3 Ledig disk plass,— kommandoen df . . . . . . . . . . . . . . . . 151
16.4 Brukt diskplass,— kommandoen du . . . . . . . . . . . . . . . . 152
16.5 Komprimering av filar . . . . . . . . . . . . . . . . . . . . . . . . 153
16.6 Kommandoen dd . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
16.6.1 dd,— kommandolinja . . . . . . . . . . . . . . . . . . . . 155
16.7 “R
˚
a” enhets aksess,— kommandoen cpio . . . . . . . . . . . . . 156
16.7.1 cpio og bruk av media . . . . . . . . . . . . . . . . . . . . 157
16.7.2 Lage cpio-arkiv . . . . . . . . . . . . . . . . . . . . . . . . 157
16.7.3 Lesing av cpio–arkiv . . . . . . . . . . . . . . . . . . . . . 157
16.7.4 Liste ut innholdet i eit arkiv . . . . . . . . . . . . . . . . . 158
16.7.5 Velge eit subsett av filar fr
˚
a arkiv . . . . . . . . . . . . . . 158
16.7.6 Flytting av katalogar . . . . . . . . . . . . . . . . . . . . . 158
16.8 Kommandoen tar . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
16.8.1 Kommandolinja for tar . . . . . . . . . . . . . . . . . . . . 159
17 Satsvis kjøring 161
17.1 Tidsdeling vs. sanntidsytelse . . . . . . . . . . . . . . . . . . . . 161
17.2 UNIX er laga for
˚
a kjøre heile tida . . . . . . . . . . . . . . . . . . 162
17.3 Utvidelse av kommandoen date . . . . . . . . . . . . . . . . . . . 162
17.4 Tidsstempling av filar . . . . . . . . . . . . . . . . . . . . . . . . . 163
17.5 Kommandoen touch . . . . . . . . . . . . . . . . . . . . . . . . . . 163
17.6 Kommandoen at . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
17.6.1 Spesifisere dato for at . . . . . . . . . . . . . . . . . . . . . 165
17.6.2 Vise jobbkøen for at . . . . . . . . . . . . . . . . . . . . . . 165
17.7 Kommandoen batch . . . . . . . . . . . . . . . . . . . . . . . . . . 166
17.8 Sikkerhetsvurderingar med at og batch . . . . . . . . . . . . . . . 167
17.9 Klokkefunksjonen i UNIX, cron . . . . . . . . . . . . . . . . . . . 168
17.9.1 Lage cron–jobbar . . . . . . . . . . . . . . . . . . . . . . . 168
18 Nettverkskommunikasjon 170
8 INNHALD
18.1 Aksess til andre maskiner . . . . . . . . . . . . . . . . . . . . . . 170
18.1.1 Kommandoen rlogin . . . . . . . . . . . . . . . . . . . . . 171
18.1.2 Kommandoen rcp . . . . . . . . . . . . . . . . . . . . . . . 172
18.1.3 Kommandoen rsh . . . . . . . . . . . . . . . . . . . . . . . 172
18.1.4 Kommandoen telnet . . . . . . . . . . . . . . . . . . . . . 174
18.2 Informasjonskommandoar . . . . . . . . . . . . . . . . . . . . . . 175
18.2.1 rusers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
18.2.2 Kommandoen finger . . . . . . . . . . . . . . . . . . . . . 176
18.2.3 Kommandoen ping . . . . . . . . . . . . . . . . . . . . . . 177
19 Secure Shell 178
19.1 Introduksjon til ssh . . . . . . . . . . . . . . . . . . . . . . . . . . 179
19.1.1 Lage nøklar for ssh . . . . . . . . . . . . . . . . . . . . . . 179
19.2 ssh . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
19.2.1 Opsjonar for ssh . . . . . . . . . . . . . . . . . . . . . . . . 182
19.2.2 Port–forwarding med ssh . . . . . . . . . . . . . . . . . . 183
19.3 ssh–agent . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
19.4 ssh–add . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
19.5 scp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
19.6 sftp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
20 Elektronisk post 192
20.1 Epost konseptet . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
20.1.1 Sende post . . . . . . . . . . . . . . . . . . . . . . . . . . . 193
20.1.2 Lese post med mail . . . . . . . . . . . . . . . . . . . . . . 193
20.1.3 Adressering av elektronisk post . . . . . . . . . . . . . . 195
21 Vindussystemet X Windows 198
21.1 Prinsippet for vindussystemet X Windows . . . . . . . . . . . . 199
21.1.1 Starte X Windows . . . . . . . . . . . . . . . . . . . . . . . 201
21.2 Miljøvariable under X Windows . . . . . . . . . . . . . . . . . . 202
21.3 “Skrivebordsmenyen” . . . . . . . . . . . . . . . . . . . . . . . . 203
21.4 Generiske X kommandolinje parametre . . . . . . . . . . . . . . 204
21.4.1 Geometry . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
21.4.2 Fontar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
21.4.3 Fargar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
21.4.4 Namn p
˚
a vindu . . . . . . . . . . . . . . . . . . . . . . . . 207
21.4.5 Opsjonen -help . . . . . . . . . . . . . . . . . . . . . . . . . 207
21.5 Nyttige program under X Windows . . . . . . . . . . . . . . . . 207
21.6 X Windows og sikkerhet . . . . . . . . . . . . . . . . . . . . . . . 209
21.6.1 Kommandoen xhost . . . . . . . . . . . . . . . . . . . . . 210
21.6.2 Protokollen MIT–MAGIC–COOKIE–1 . . . . . . . . . . . 210
21.7 Ressursdatabasen . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
22 Systemadministrasjon 215
23 Kjøyre-niv˚a 216
23.1 Initieringsfila for init,- /etc/inittab . . . . . . . . . . . . . . . . . . 217
23.2 K* og S* skript . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
INNHALD 9
24 DNS 223
24.1 Kvifor DNS? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
24.2 Hierarki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223
24.3 Interaksjon med /etc/hosts og /etc/resolv.conf . . . . . . . . . . . . 224
24.4 Konfigurasjon av DNS . . . . . . . . . . . . . . . . . . . . . . . . 224
24.5 Domene filane . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
24.6 Signal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
25 Opprette brukarar 230
25.1 NIS, NIS+ eller Yellow Pages . . . . . . . . . . . . . . . . . . . . 230
25.2 Formatet p
˚
a passordfila . . . . . . . . . . . . . . . . . . . . . . . 231
25.3 Formatet p
˚
a /etc/shadow . . . . . . . . . . . . . . . . . . . . . . . . 231
25.4 Formatet p
˚
a /etc/group . . . . . . . . . . . . . . . . . . . . . . . . 232
25.5 Brukaridentitet i UNIX . . . . . . . . . . . . . . . . . . . . . . . . 232
25.6 Opprette brukarar . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
25.6.1 Programmet vipw . . . . . . . . . . . . . . . . . . . . . . . 233
25.6.2 Admintool under SunOS 5.x . . . . . . . . . . . . . . . . 234
25.6.3 Kommandoane useradd, userdel og usermod for SunOS
5.x . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
25.6.4 Opprette brukarar under RedHat–Linux . . . . . . . . . 237
25.7 Spesielle triks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
26 Network File System, NFS 241
26.1 Formatet for /etc/exports under RedHat-Linux . . . . . . . . . 242
27 Secure Shell (sshd) 244
27.1 SSH protokoll 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
27.2 SSH protokoll 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
27.3 Kommando–eksekvering og vidaresending av data . . . . . . . 245
27.4 Autentiseringsmetodar . . . . . . . . . . . . . . . . . . . . . . . . 245
27.5 Opsjonar for sshd . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
Figurar
3.1 Skjematisk framstilling av funksjonen til kjernen . . . . . . . . . 21
3.2 Skallet er grensesnittet mot brukaren . . . . . . . . . . . . . . . . 22
3.3 Rundt skallet ligg alle kommandoane som utgjer UNIX . . . . . 23
5.1 Standard ut, inn og feilmelding . . . . . . . . . . . . . . . . . . . 36
5.2 Redirigering ut til fil . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.3 Standard inn fr
˚
a fil . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.4 Røyrlegging mellom prosessar . . . . . . . . . . . . . . . . . . . 37
6.1 Aksess-rettigheter p
˚
a filer under UNIX . . . . . . . . . . . . . . . 44
7.1 Ein opningsskjerm for VI . . . . . . . . . . . . . . . . . . . . . . . 52
8.1 Eit typisk vindu for Emacs . . . . . . . . . . . . . . . . . . . . . . 64
19.1 Portforwarding med SSH . . . . . . . . . . . . . . . . . . . . . . 183
20.1 Programmet de i aksjon . . . . . . . . . . . . . . . . . . . . . . . . 196
20.2 Det litt meir fancyprogrammet af under X Windows . . . . . . . 197
21.1 Tenar- og klient-prosessar . . . . . . . . . . . . . . . . . . . . . . 199
21.2 Eit “fancy” root-vindu under X Windows . . . . . . . . . . . . . . 200
21.3 Innloggingsskjerm for xdm . . . . . . . . . . . . . . . . . . . . . . 201
21.4 Bordplatemeny under ctwm . . . . . . . . . . . . . . . . . . . . . 203
21.5 Valg av fontar med xfd . . . . . . . . . . . . . . . . . . . . . . . . 206
21.6 Handtering av fleire skjermar . . . . . . . . . . . . . . . . . . . . 209
24.1 Eit dns hierarki . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
25.1 Admintool under SunOS 5.x. . . . . . . . . . . . . . . . . . . . . 235
25.2 Vinduet for
˚
a definere brukarar. . . . . . . . . . . . . . . . . . . . 236
25.3 Control-panel under RedHat-Linux . . . . . . . . . . . . . . . . . 237
25.4 Aministrere brukarar og grupper under RedHat-Linux . . . . . 238
25.5 Dialog-vindu for
˚
a opprette brukarar under RedHat-Linux. . . . 238
10
Tabellar
6.1 Rettighet og oktal verdi . . . . . . . . . . . . . . . . . . . . . . . . 45
6.2 Oktale verdiar for tilgangsrettighetar . . . . . . . . . . . . . . . . 45
6.3 Teiknsymbol for brukargrupper . . . . . . . . . . . . . . . . . . . 45
6.4 Teiknsymbol for rettighetar . . . . . . . . . . . . . . . . . . . . . 46
6.5 Operatorer for rettighetar . . . . . . . . . . . . . . . . . . . . . . 46
6.6 Sette umask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
6.7 umask–rettigheter . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
7.1 Viktige kommandoar i vi . . . . . . . . . . . . . . . . . . . . . . . 55
8.1 Viktige kommandoar i Emacs . . . . . . . . . . . . . . . . . . . . 66
8.2 .emacs eksempel . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
16.1 df for SunOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
16.2 df for System V Release 3 . . . . . . . . . . . . . . . . . . . . . . 152
16.3 dfspace for System V Release 3 . . . . . . . . . . . . . . . . . . . 152
11
Kapittel 1
Innledning
Dette kurset er meint til
˚
a vere eit brukerkurs i UNIX. Det forutset kjennskap
til basis–kunnskap som filbegrepet, katalogar og at ein har brukt enkle kom-
mandoar i f.eks MS–DOS/PC–DOS eller UNIX.
Først vil eg kommentere litt om historia til UNIX,— deretter gjennomg
˚
ar vi ein
del begrep, prosedyre for inn– og utlogging, ein del kommandoar, søking etter
data, utskrift av filer og til slutt litt om elektronisk post.
Skal ein lære UNIX skikkeleg s
˚
a vil dette kurset kome til kort,— UNIX er sa-
mansett av mange hundre kommandoar slik at det vil vere umulig
˚
a lære alle.
Til dagleg brukar ein relativt f
˚
a og det er desse vi skal lære i dette kurset.
Vil du lære alt skikkeleg er det viktig at du set deg ned p
˚
a eiga hand og øver
jamnt og trutt ogs
˚
a etter dette kurset.
Dei brukarane som vil lære meir enn dette kurset gjennomg
˚
ar vil eg henvise til
standard dokumentasjon under UNIX.
1.1 Skrivem˚ate i dette kurset
Følgende skrivem
˚
ate blir brukt i dette kurset:
Utskrift fr
˚
a program blir skreve med denne skrifttypen:
Utskrift fr˚a program ...
Det som skal skrivast inn av brukaren:
Dette skal skrivast inn ...
Dersom eit ord er ein fellesbetegnelse og skal erstattast av noko spesielt:
Dette skal erstattast . . .
Hakeparantes angir at det er valgfritt
˚
a skrive inn noko:
kill [-signal] prosessnr . . .
Ein vertikal strek ¨|¨ betyr eller:
12
1.1. SKRIVEM
˚
ATE I DETTE KURSET 13
P
˚
A|AV
Ei punktrekke betyr at ein kan angje fleire argument:
kill [-signal] prosessnr . . .
I sølve teksten er kommandoane skreve med kursiv skrift.
Kapittel 2
Introduksjon
Operativsystemet UNIX har iløpet av dei siste 50
˚
ara g
˚
att fr
˚
a
˚
a vere eit eks-
periment i datateknikk til
˚
a bli det mest innflytelsesrike og mest populære
datamaskinmiljøet i verda. Idag kjører fleire millionar datamaskiner UNIX som
operativsystem, ifr
˚
a sm
˚
a mikromaskiner til stormaskiner og superdatamaski-
ner. Veksten ser berre ut til
˚
a auke etter som brukarar og utviklarar blir klar
over UNIX sin fleksibilitet, kraft og eleganse. Det er fleire unike eigenskapar
med UNIX som har gjort dette:
Program verktøy UNIX introduserte ein ny ide innanfor databehandling: pro-
blem kan løysast og applikasjonar kan lagast ved
˚
a knytte saman sm
˚
a
enkle delar. Desse sm
˚
adelane er gjerne hyllevare som er laga for
˚
a gjere
ein liten jobb,— og gjere den skikkeleg. Store applikasjonar kan ein byg-
ge ut fr
˚
a enkle sekvensar av kommandoar. Denne filosofien har ogs
˚
a sine
greiner ut i utviklingsmijøet der mange bibliotek av subrutiner har vorte
laga, dermed forenklar det oppg
˚
avene med
˚
a utvikle nye applikasjonar.
Dette konseptet om gjenbruk av programvare er ein av dei mange grun-
nane til at UNIX er eit produktivt miljø
˚
a arbeide i.
Portabilitet UNIX kan kjørast p
˚
a nesten alle minimaskiner og større datama-
skiner som har blitt bygd. No n
˚
ar personlege billige datamaskiner har
f
˚
att den prosesseringskrafta som tidlegare var reservert for stormaskiner
vil UNIX vere ein naturleg valg. Berre sm
˚
a endringar og tilpasningar har
vorte gjort for
˚
a gjere UNIX tilgjengeleg p
˚
a personlege datamaskiner,—
og det er no alment godtatt at det finst ikkje eit like portabelt operativ-
system som UNIX. Verdien av denne portabiliteten kan ikkje overdrivast
fordi programvare utvikling er b
˚
ade dyrt og tidkrevande. Utviklinga av
større program kan spenne over fleire
˚
ar. Desse applikasjonane er gjerne
utvikla for eit spesifikt operativsystem,— dersom ikkje dette operativsys-
temet ikkje blir fulgt opp med maskinvare er investeringa bortkasta. Det
er alment godtatt at UNIX har det som skal til n
˚
ar det gjeld programvare-
mijlø,— det miljøet som gjer det lett
˚
a flytte applikasjonar mellom person-
lege datamaskiner til superdatamaskiner, mellom eldre og nyare maskin-
arkitekturar, og mellom forskjellige versjonar av UNIX.
Fleksibilitet Ein av grunnane til at UNIX er s
˚
a attraktivt for programvare og
14
15
maskinvare er fleksibiliteten. UNIX er blitt tilpassa til
˚
a vere prosess-
styringssystem i fabrikkar, automatiseringssystem i telefonsentralar og
personlege spel og leiketøy. Nye funksjonar og kommandoar vert stadig
lagt til,— og mange systemutviklarar foretrekkjer
˚
a bruke UNIX som ein
slags arbeidsbenk for applikasjonar. Eigentleg er det s
˚
a enkelt
˚
a utvikle
applikasjonar at det er vanskeleg
˚
a oppdage at det er UNIX som ligg i
botnen.
Kraft UNIX er kraftigaste operativsystemet som er tilgjengeleg uavhengig av
datamaskinarkitektur. Den reine og enkle kommadosyntaksen gjer at bru-
karar kan gjere mange operasjonar fort og enkelt som ikkje ein gong er
tilgjengeleg p
˚
a andre operativsystem. Brukarane kan ha stor fordel av
alle dei innebygde kommandoane som finst i UNIX, som oftast er dette
applikasjonar som ein m
˚
a kjøpe (dyrt!) p
˚
a andre plattformer (dersom dei
eksisterar). Ingen operativsystem er har større mulighetar enn UNIX.
Fleirbrukar og fleirprosess Sidan UNIX er eit tidsdelt fleirprosess miljø, kan det
gjere meir enn ein jobb om gongen. Det er vanleg for ein brukar i eit
UNIX–miljø
˚
a skrive til ei fil, skrive ut ei fil til skrivar, sende e–post til
ei anna maskin, og bruke eit elektronisk rekneark samstundes. UNIX er
bygdt for
˚
a utføre ein brukar sine krav med eit minimum av kraft. UNIX
er ogs
˚
a eit fleirbrukar miljø som undersøttar aktivitet fr
˚
a fleire brukarar
samstundes. Det er ikkje uvanleg at store stormaskinversjonar kan hand-
tere fleire hundre brukarar samstundes, og kvar av desse brukarane har
det same synsvinkelen av systemet som ein einsleg brukar har p
˚
a ei per-
sonleg datamaskin.
Eleganse I dei fleste kretsar er UNIX sett p
˚
a som eitt av dei mest elegante ope-
rativsystem. Med ein gong brukarar forst
˚
ar basisprinsippa i UNIX kan
dei gjere veldig mange ting p
˚
a ein lettvindt og enkel m
˚
ate. Brukarar som
kjem fr
˚
a UNIX til andre operativsystem oppdagar at det som s
˚
ag s
˚
a en-
kelt og greitt ut under UNIX ikkje ein gong er tilgjengeleg p
˚
a andre platt-
former. Utviklarar av andre system l
˚
aner ofte idear og tema fr
˚
a UNIX for
lage deira eigne system betre og større funksjonalitet.
Nettverksorienteringa Moderne versjonar av UNIX er organisert for enkel og
funksjonell bruk i nettverk. Systemet har innebygde kommunikasjons-
verktøy, enkel tilpasning av lavniv
˚
a drivarar for maskinvare og eit flek-
sibel organisering av filsystemet som er naturleg for dagens nettverks-
miljø, der brukarar p
˚
a personlege arbeidsstasjonar deler enkelte sentrali-
serte ressursar som data og kommunikasjonsenhetar. Etter at datamaski-
ner vart brukt i arbeidsgrupper, fekk nettverksmulighetane i UNIX større
og større betydning. Idag har vi alt fr
˚
a sm
˚
a lokale nettverk til verdensom-
spennande høghastighetsnett. UNIX med sine mulighetar for fleirproses-
sering og med ei rekkje av programvare for kommunikasjon gjer databe-
handling i nettverk enkelt og lett.
Desse punkta som eg har lista opp er det som gjer at UNIX har opplevd ein
stor popularitet, særleg dei siste
˚
ara. Det ser ut som UNIX fortsatt vil vekse og
vidareutvikla. De fleste vil før eller seinare kome bort i UNIX p
˚
a ein eller annan
m
˚
ate, og mange vil kome til
˚
a bruke UNIX p
˚
a personlege datamaskiner.
16 KAPITTEL 2. INTRODUKSJON
2.1 Sagnet og det kontroversielle rundt UNIX
UNIX er spesiell sidan den har ein evne til
˚
a trekke til seg veldig standhaf-
tige forsvarar og like standhaftige kritikarar. Alle som har brukt UNIX har ei
eller anna meining, for eller imot. Tilhengarskaren snakkar om eleganse, kraft
og fleksibilitet, medan mostandarane snakkar om knapp syntaks og rare kom-
mandonamn, den d
˚
arlege dokumentasjonen og kompleksiteten ved
˚
a admini-
strere eit UNIX–system. Vanlegvis finn ein dataekspertar i tilhengarskaren, me-
dan nybegynnarar fell i mostandsgruppa. Eg h
˚
apar med dette
˚
a f
˚
a fleire over
fr
˚
a mostandsgruppa til
˚
a bli tilhengarar. Akkurat som med lommekalkulatoren
vart det laga av ekspertar som skulle ha det til eige bruk, d
˚
a UNIX vart laga
vart det lagt vekt p
˚
a fart og nøyaktighet p
˚
a bekostning av nybegynnarar. P
˚
a
grunn av fordelane med UNIX vart det likevel flytta fr
˚
a ekspertniv
˚
a til vanlige
brukarar utan at ekspert funksjonane vart fjerna til fordel for uvante brukarar,
det vart ikkje gjort anstrengelsar for
˚
a gjere UNIX meir brukarvennleg. No i
seinare tid har ein starta
˚
a tenke litt p
˚
a “vanlege” brukarar, det vanskelege er
˚
a
lage eit brukarvennleg system utan
˚
a øydelgge alle dei gode eigenskapane ved
UNIX. Det som er nytt f.eks i System V release 4 fr
˚
a AT & T er dette.
Minimalisering UNIX har vorte “trimma” end
˚
a meir slik at det skal lite vedli-
kehold til for at det skal holde topp ytelse. Mange administrative rutiner
som f.eks
˚
a slette logg-filar og rebooting er har vorte automatisert eller
har vorte gjort overflødig.
Konsistens Dei fleste kommandoane har gjennomg
˚
att ein evolusjon iløpet dei
˚
ar som har g
˚
att og har vorte meir konsistente,— dette reduserer forvirrin-
ga rundt inkonsistente kommandosyntaks. End
˚
a finst det ei rekkje med
inkonsistente kommandoar,— men det g
˚
ar rett veg.
Brukerskall Dei fleste implementasjonar tilbyr skall eller forenkla verktøy for
˚
a
forenkle konfigurering og administrasjon av UNIX.
Nye funksjonar Mange nye funksjonar og kommandoar har vorte lagt inn i UNIX–
systemet i dei siste versjonane. Desse har vore lagt inn for
˚
a f
˚
a med ein
del av dei ideane som ligg bak BSD UNIX og XENIX. Av mange ting
kan eg nemne nye funksjonar og system konfigurasjon for
˚
a understøtte
nettverk, utviklingsmiljøet har vorte forbetra og støtte for prosessering i
nettverk for fleire maskiner er eit satsingsomr
˚
ade. Dette blir omtala som
DCE (Distributed Computing Enviroment).
Kompabilitet Den store fleksibiliteten i UNIX har no vorte formalisert til Ap-
plication Binary Interface(ABI) og the Applications Programming Interface
(API). Desse definisjonane for eit standard utviklingsmiljø sikrar at UNIX
vil vidareutvikle i forutseibar retning. I tillegg sikrar dette allereie eksis-
terande programvare ein verdi som UNIX– programvare gjennom API
og maskiner som brukar ABI vil bli utvikla i nær framtid. I større sa-
manheng betyr det at UNIX utviklar seg som ein gratis bieffekt mot den
internasjonale POSIX standarden for operativsystem. POSIX standarden
inneheld det som er eit minimum sett av funksjonar for UNIX–liknande
operativsystem. Store oppfinnelsar vil dukke opp i framtida,— men POSIX–
, API– og ABI–standarden vil hjelpe brukarar og utviklarar til
˚
a sikre ei
2.2. FILOSOFIEN BAK UNIX 17
fast plattform.
Integrering av operativsystem Implementasjonar for personlege datamaskiner gjer
at ein kan dele informasjon mellom UNIX, MS–DOS/PC–DOS og Ma-
cOS/System 7. Deling mellom operativsystem betyr at fleirprosess mu-
lighetane i UNIX kan brukast til
˚
a heile MS–DOS/PC–DOS systemet som
ein prosess under UNIX, og likevel kunne eksekvere UNIX funksjonar i
bakgrunnen samstundes med at prosessar kjører under eit anna opera-
tivsystem i framgrunnen.
Som eit resultat av desse og andre forandringar s
˚
a er ikkje lenger den gamle
kritikken p
˚
a sin plass. UNIX er framleis eit kraftfullt og komplekst operativ-
system, men over tid har det vorte meir vanleg, kontrollerbart og brukervenn-
leg. P
˚
a grunn av historien rundt UNIX som eit system for ekspertar og fordi
det har vokse opp eit form for sagn rundt UNIX. Ser ein tilbake i tida s
˚
a har
dei fleste guruane lært faget ved
˚
a lytte til ekspertar. Sjølv med dagens imple-
mentasjonar hjelper det
˚
a ha ein ekspert
˚
a spørje n
˚
ar ein kjem til dei innerste
hemmelighetane i UNIX.
2.2 Filosofien bak UNIX
UNIX vart laga som ein reaksjon p
˚
a dei store og klumsete operativsystema som
eksisterte p
˚
a slutten av 60–
˚
ara. Eit av dei største m
˚
ala var
˚
a gjere det s
˚
a vidtrek-
kande som mulig men
˚
a lage kommandoar som ikkje prøvde
˚
a løyse alle mu-
lige problem. Heller omvendt, i starten var det om
˚
a gjere
˚
a lage kommandoar
som berre gjorde ein jobb, men gjorde det enkelt, roleg og veldig godt. Eksem-
pel: eit program som vart laga til
˚
a konkatenere og vise innholdet i filar skulle
ikkje prøve
˚
a dele inn i sider eller sende sende filar til skrivar. Dei oppg
˚
avene
skulle eit anna program ta seg av utan
˚
a m
˚
atte bere vekta av
˚
a konkatenere
filar. Denne hangen til “lite er vakkert” filosofien hadde fleire gode effektar.
Først, eit nytt krav dukka opp som ikkje var klarlagt p
˚
a førehand, utdataene
fr
˚
a desse verktøya, ettersom desse ein–jobbskommandoane vart kalla, m
˚
atte
bli dirigert som inndata inn til andre verktøy. Fr
˚
a dette kom nødvendigheten
av røyrlegging mellom program og standard inn og standard ut (dette vil vi g
˚
a
igjennom seinare i kurset). For det andre, utviklinga av nye verktøy og applika-
sjonar var mykje enklare under UNIX enn andre operativsystem, dette førte til
ein formidabel vekst i utviklinga av nye kommandoar og vidareutvikling som
vi ogs
˚
a ser idag. Denne enkelheten i programvareutvikling og vedlikehold var
eit direkte resultat av filosofien bak UNIX. For det tredje: UNIX inneheld ei
heil rekke av ein–jobbskommandoar. Dette er ikkje alltid ei velsigning for bru-
karar fordi du gjerne m
˚
a lære deg ei heil rekkje med kommandoar for
˚
a utføre
ein funksjon som du berre treng ein kommando for i andre operativsystem.
Likevel vedg
˚
ar mange brukarar at vanskeligheten med
˚
a lære seg mange kom-
mandoar blir meir enn oppvegd av fleksibiliteten og styrken ein oppn
˚
ar med
verktøybegrepet.
18 KAPITTEL 2. INTRODUKSJON
2.3 Det moderne UNIX-systemet,- for og imot
UNIX vil alltid vere kontroversiell, sjølv om UNIX er meir eller mindre aksep-
tert av dei fleste idag. Samanliknar ein med andre populære operativsystem
som f.eks. MS–DOS/PC–DOS s
˚
a er UNIX mykje større og mykje meir kom-
pleks, istaden tilbyr den mange mulighetar som b
˚
ade MS–DOS/PC–DOS og
OS/2 kan skyte ei kvit pil etter. Den originale filosofien om
˚
a gjere ein liten
ting godt har meir eller mindre vorte modifisert litt i dei seinare utg
˚
avene,
og dagens kommandoar har f
˚
att eit stort antal opsjonar. Dette faktumet har
b
˚
ade fordelar og ulemper, sjølv om kommandoar blir vanskelegare
˚
a bruke,
kan dei ogs
˚
a bli tilpassa nye situasjonar utan for mykje bøy og tøy og inef-
fektivitet. I det store og det heile er det tidlegaste nøkkel-prinsippa til stades
(som f.eks røyrlegging), medan mulighetane til kommandoane har vorte ut-
vida for
˚
a møte nye krav. UNIX er i utgangspunktet orientert mot eit tegnba-
sert grensesnitt. Spesiell programvare som f.eks X Window system er p
˚
akrevd
dersom ein vil ha UNIX til
˚
a bruke bit–orienterte grafiske skjermar. Det histo-
riske avhengigheten og støtten for tekstterminalar betyr at dei fleste verktøy
og funksjonar er kommandolinjebaserte, og mus–og–meny verktøy som bru-
kar grafiske skjermar har vorte salgsvare i volum. P
˚
a den andre sida betyr
det det at ein brukar kan koble seg opp mot ei ekstern maskin med ein bil-
leg terminal, over f.eks telefonlinjer. UNIX er ideell for server–applikasjonar
der det primære brukergrensesnittet ikkje er assosiert med den sentrale UNIX–
maskina, men eksekverer direkte mot ein “tjukk” klient. Dette er den typiske
moderne arkitekturen for moderne lokale nettverk, her er det X windows kjem
inn, ein applikasjon eksekverer p
˚
a ei maskin i nettverket (vanlegvis ei kraf-
tig og dyr maskin) medan brukergrensesnittet blir besørga av billige maskiner
p
˚
a den enkeltes arbeidsplass. Denne løysinga reduserer kostnadane dramatisk
for datamaskininstallasjonar i nettverksmiljø. UNIX er ikkje eit operativsystem
som som prøvar
˚
a følge trenden med
˚
a gjere seg sjølv usynleg for brukarane.
Mange operativsystem har prøvt
˚
a lage grensesnitt som skal gjøyme detalja-
ne for brukarane. Vindus– og menyorienterte grensesnitt hjelper til
˚
a tilsløre
kommandoar, filsystem og administrative verktøy for brukarane. I UNIX er
det motsette tilfelle, til større kjennskap ein har til dei interne mekanismene til
større sjanse har ein til
˚
a kontrollere dei til eigen fordel og auke sin eigen pro-
duktivitet. Dette faktumet kjem av at UNIX i utgangspunktet var eit system for
ekspertar, der alle var klar over systemet sin interne oppbygging og funksjonar.
No n
˚
ar UNIX har vorte tilpassa eit større marked, har verktøy som brukerskall
vorte laga for
˚
a isolere brukarane fr
˚
a dei vanskelege og komplekse sidene ved
operativsystemet. Likevel, sjølv om ein no kan bruke systemt utan at ein har
ein grundig forst
˚
aelse, kan ein end
˚
a ha stor fordel av
˚
a vete kva UNIX gjer n
˚
ar
ein brukar ein kommando.
2.4 Litt historikk
Sjølve bakgrunnen for det som skulle bli UNIX var at AT & T Bell Labs had-
de ein stor stab med forskningsfolk som dreiv med utvikling av program og
oppfølging ved hjelp av dokumentasjon. Dei ville med andre ord utvikle eit
operativsystem som støtta programvareutvikling og handtering av tekst. Sys-
temet skulle ogs
˚
a vere s
˚
apass fleksibelt at det skulle tilby dei same tenestene
2.4. LITT HISTORIKK 19
uansett maskinvare. Systemet skulle ogs
˚
a ivareta sikkerhet og fordeling av res-
sursar.
I starten gjekk tre institusjonar saman om
˚
a lage eit eit skikkeleg operativsys-
tem. Dette var Massachusetts Institute of Technologic(MIT), General Electric
og AT & T Bell Laboratories. Tanken var
˚
a bygge eit operativsystem som skulle
kjøre p
˚
a ei sentral datamaskin og brukarane skulle logge seg inn ved hjelp av
terminalar. Prosjektet starta opp i 1965 og vart kalla for MULTICS (MULTIp-
lexed Information and Computing Service). I 1969 trekte AT & T og General
Electrics seg ut av prosjektet,- d
˚
a var allereie prosjektet blitt for stort og kom-
plisert til at det skulle bli brukbart. MIT fullførte prosjektet som seinare ogs
˚
a
viste seg til
˚
a bli ein gedigen fiasko.
Det er litt usikkert om kva det var som var den avgjerande spiren for at UNIX
vart laga,— det har g
˚
att rykter om at UNIX vart laga for
˚
a f
˚
a eit dataspel til
˚
a
g
˚
a p
˚
a ein PDP–7,— andre er at det skulle lages ein erstatning for MULTICS.
Iallefall s
˚
a sette Ken Thompson seg ned ved ein nærast kassert PDP–7 og laga
ein einbruker versjon av eit operativsystem som han kalla UNICS(UNIplexed
Information and Computing Service). Seinare vart namnet forandra til UNIX
(dette var vel nærast ein spøk og eit ordspel,— uttalen er jo den same !),—
seinare vart ogs
˚
a programmmeringsspr
˚
aket C laga for
˚
a utvide UNIX og for
˚
a gjere UNIX flyttbar til andre maskinplattformer. Første versjonen av UNIX
som var skreven i C var ferdig i 1973.
UNIX vart i starten utgitt til interesserte og utdanningsinstitusjonar med full
kjeldekode. Dermed vart UNIX flytta til fleire forskjellige maskinarkitekturar
og vart stadig utvikla og fekk nye funksjonar. Det er dette som gjer at UNIX
har blitt s
˚
apass komplisert og har eit utall av kommandoar og funksjonar. Dei
to retningsgjevande versjonane i verden idag er System V fr
˚
a AT & T Bell Labs
og Berkley BSD (Berkley Software Distribution) som er utvikla p
˚
a University
of California, Berkley.
I den seinare tid har ogs
˚
a maskinlevrandørar kome med sine eigne versjonar
som er tilpassa eigen maskinarkitektur,— desse er gjerne eit konglomerat av
System V og BSD UNIX. No har jo ogs
˚
a System V og BSD UNIX blitt ganske
like p
˚
a grunn av samarbeidet mellom SUN og AT & T. System V release 4 er ei
samanfletting av BSD UNIX og System V,— det vil seie at System V release 4
har teke opp i seg det meste som før begrensa seg til BSD UNIX.
Kapittel 3
Om UNIX som
operativsystem
3.1 Kva skal eit operativsystem gjere ?
Eit fleirbrukar operativsystem har mange oppg
˚
aver. Dei viktigaste er:
Fordele ressursar mellom brukarane.
Beskytte brukarane av systemet mot kvarandre,— og kanskje ogs
˚
a mot
seg sjølve?
Fordele ressursar.
Kontrollere tilgang og dataene i systemet.
Idealet er ogs
˚
a eit operativsystem som kan kjøre p
˚
a mange forskjellig maskin-
plattformar og likevel sj
˚
a likt ut b
˚
ade for dei som skal programmere og bruke
systemet.
Begrepet ressursar kan vere litt uklart og fortener kanskje ein utdjupande for-
klaring. Det ein primært tenkjer p
˚
a som ressursar er følgande:
Inn og ut enheter,— skrivar, modem, plotter, . . .
Lagringsmedium,— i første rekke diskplass.
Prosesseringskraft, alle brukarar brukar den same prosessoren og det
same internminnet slik at dei m
˚
a dele p
˚
a dette.
3.2 Kva gjer UNIX ?
UNIX har alle funksjonane som eg nemnde i forrige underkapittel (ref 3.1),
men det som gjer UNIX litt spesiell er at UNIX er eit fleirbrukar og fleirprosess
operativsystem, noko som gjer at den utnyttar maskinressursane maksimalt.
20
3.2. KVA GJER UNIX ? 21
I UNIX har alts
˚
a kvar bruker muligheten til
˚
a kjøre fleire prosessar eller pro-
gram samstundes,— det m˚a ein ogs
˚
a ha anledning til ellers ville ikkje UNIX ha
fungert !.
UNIX best
˚
ar av ein kjerne og eit stort antall program. Kvar av desse program-
ma utfører ein begrensa funksjon, men er laga for
˚
a fungere saman. Dette gjer
at ein kan utføre enkle sm
˚
a kommandoar, f.eks kjøre eit program om gongen,
eller bygge opp avanserte kommandoar med mange program som kjører sam-
stundes, dette siste kallast p
˚
a UNIX–terminologi for røyrlegging eller (p
˚
a en-
gelsk piping). I tillegg har ogs
˚
a UNIX veldig sterke sider n
˚
ar det gjeld nettverk
og kommunikasjon.
3.2.1 Kjernen
Funksjonar som stadig blir brukt, f.eks dei som byttar aktiv prosess, m
˚
a ligge i
minnet for at dei skal g
˚
a raskt.
Kjernen
Maskinvare Maskinvare
Kjernen
Figur 3.1: Skjematisk framstilling av funksjonen til kjernen
Desse mest brukte rutinene ligg i det vi kallar for kjernen. Kjernen bli lasta inn
i minnet ved oppstart og forblir der s
˚
a lenge maskina kjører. Kjernen kontrol-
lerer alle prosessane og bruken av tilgjengelege ressursar. N
˚
ar det gjeld kjerne
s
˚
a er det forskjellar ute og g
˚
ar her ogs
˚
a,— det spelar igrunn liten rolle s
˚
a lenge
dei forskjellige kjernane har dei same funksjonane.
3.2.2 Skallet,— kommandotolkaren
Som sagt tidligere s
˚
a best
˚
ar eit UNIX–system av en kjerne og en masse sm
˚
a-
program. Kommandotolkaren under UNIX er ogs
˚
a et slikt lite program p
˚
a linje
med alle andre program. Dette skallet er grensesnittet mot brukeren, det tar
imot kommandoar fr
˚
a kommandolinja, sjekker syntaks p
˚
a kommandoen og
dersom den har rett syntaks blir kommandoen sendt til kjernen for
˚
a bli utført.
Skallet blir starta opp ved innlogging og utlogging blir vanligvis gjort ved
˚
a
stoppe/avslutte skallet. Skallet under UNIX er ikkje standard og kan byttast
ut med ditt eige(!) dersom du har laget et slikt program. Adskilte brukerer kan
bruke forskjellige skall under same system, det vil ogs
˚
a seie at systemet kan
fortone seg forskjellig hos ulike brukarar. I UNIX–verden omtaler man gjerne
skallet som shell (engelsk for skall). Dei fleste UNIX–system har eit utvalg av
skall,— dei mest vanlege skall er:
22 KAPITTEL 3. OM UNIX SOM OPERATIVSYSTEM
Maskinvare
Kjernen
Skallet
Figur 3.2: Skallet er grensesnittet mot brukaren
Bourne shell (sh),— det første skallprogrammet som vart utvikla. Namnet
p
˚
a skallet kjem fr
˚
a opphavsmannen Stephen Richard Bourne.
C–Shell (csh),— utvikla p
˚
a University of California, Berkley av William
Nelson Joy (Bill Joy) for BSD UNIX.
Korn-Shell (ksh),— videreutvikling av Bourne–skallet,— har ogs
˚
a namn
etter personen som laga programmet, David Korn.
TENEX–C–Shell (tcsh),- videreutvikling av C–Shellet,— dette skallet har
oppst
˚
att som ein forbetring av csh og er inspirert av skallet i operativsys-
tem TENEX.
1
Bourne Again Shell (bash),— eit lite ordspel er med i namnet (born og
Bourne uttalast p
˚
a samme m
˚
ate), eit skall laga av Brian Fox for GNU pro-
sjektet(Gnu‘s Not Unix).
2
Grunnen til at eg g
˚
a s
˚
a nøye gjennom skall er at desse kan tilby veldig man-
ge og forskjellige funksjoner og kvart program kan ogs
˚
a konfigurerast veldig
forskjellig for ulike brukarar.
De mest vanlige skalla er Bourne–Shell (sh) og C–Shell (csh), standard skall, n
˚
ar
ikkje anna er spesifisert er Bourne–Shell standard skall.
3.2.3 Kommandoer
Det er viktig
˚
a legge merke til at UNIX skiller p
˚
a store og sm
˚
a bokstaver. Kom-
mandoene i UNIX blir som regel skrevne med sm
˚
a bokstaver.
I UNIX opererer vi med tre begrep n
˚
ar det gjeld kommandoar: kommando, op-
sjon og argument
Her er eit eksempel p
˚
a ein UNIX–kommando:
1
Utviklinga av tcsh vart starta av Ken Greer ved Carnegie Mellon University, men seinare har
det vorte vedlikeholde av mange andre personar.
2
D
˚
a UNIX ble lansert som eit kommersielt produkt vart prisane p
˚
a programvare mykje høgare
og det vart lagt begrensningar p
˚
a lisensane. GNU vart danna for
˚
a lage frie og gratis alternativ.
GNU er en ideell organisasjon med utgangspunkt i høgskulemiljøet p
˚
a MIT
3.2. KVA GJER UNIX ? 23
ls
lp
more
cat
pg
find
cpio
tar
vi
ssh
wc
ps
cp
mv
Skallet
Kjernen
Maskinvare
calendar
Figur 3.3: Rundt skallet ligg alle kommandoane som utgjer UNIX
$ls -al /home/zevs/ifi
Kommando er namnet p
˚
a programmet som skal kjørast,— i dette tilfellet
ls.
Opsjon er et direktiv til programmet som sier korleis programmet skal
utførast,— i dette tilfellet er opsjonen al og opsjoner vert alltid innleia med
teiknet “-” (det finst dessverre unntak).
Argument er data inn til programmet,- ofte det namn p
˚
a filar der pro-
grammet skal finne inndata.
I tillegg finst det muligheter for
˚
a legge kommandoar i fil og gjere denne fila
kjørbar,— det kallar ein for eit skallprogram( eng: shell-script). Alle skall (iallefall
dei eg nemnde tidlegare) har kraftige hjelpemiddel for
˚
a lage skallprogram.
Dei har s
˚
akalla strukturerte kontrollkonstruksjonar som vi kjenner igjen fr
˚
a
tradisjonelle programmeringsspr
˚
ak, det kan lese inn data og skrive ut data,
og kan handtere opsjonar og argument p
˚
a kommandolinja
3
. Det som er mest
vanleg er
˚
a lage seg eit skallprogram som utfører ein eller anna samansett kom-
mandosekvens og dermed dannar ein ny kommando.
4
Skallet har innebygde
miljøvariable(eng: environment-variables), som er standard, medan andre m
˚
a vere
definert for
˚
a f
˚
a bestemte program til
˚
a kjøre, til slutt har vi program som de-
finerer sitt eige miljø. Det minste ein m
˚
a ha i miljøet er to variablar PATH og
TERM
5
.
PATH definerer søkestien for hvor skallet skal leite etter kommandoar
eller program.
3
Eg veit om eit databasesystem under UNIX som i sin første versjon var skreve kun i
skallspr
˚
aket under Bourne–skallet!
4
I dei fleste System V baserte UNIX–system har ein ein reservert bruker sysadm,— n
˚
ar ein
loggar inn p
˚
a denne vil ein kome direkte inn i eit skallprogram som let ein gjere systemvedlikehold
ved
˚
a velge p
˚
a menyar istaden for
˚
a kjøre programma direkte med fare for
˚
a gjere tabbar.
5
Legg merke til at PATH og TERM er skrevne med store bokstavar,— dette er vanleg under
Bourne-skallet,— medan under C-skallet blir miljøvariable som dette definert med sm
˚
a bokstavar.
24 KAPITTEL 3. OM UNIX SOM OPERATIVSYSTEM
TERM definere kva slags terminal(terminaltype) ein brukar.
Skallet tek seg dessutan av omdirigering av inn– og utdata og røyrlegging.
3.2.4 Prosessar
Ein prosess er eit program som kjører. Fleire brukarar kan starte det same
programmet,— det blir d
˚
a fleire prosessar men vi har forsatt berre eitt pro-
gram.
I UNIX opererer ein med framgrunns– og bakgrunnsprosessar. Litt forenkla
kan ein seie at bakgrunnsprosessar er program som ikkje blir kjørt interaktivt.
Ein angjev at skallet skal kjøre ein prosess i bakgrunnen ved
˚
a avslutte kom-
mandoen med teiknet “&”.
3.2.5 Brukarar og grupper
For
˚
a f
˚
a lov
˚
a bruke eit UNIX–system m
˚
a ein ha ein konto/bruker p
˚
a syste-
met. Kvar konto/bruker har ein innloggingsidentitet og eit tilhøyrande pass-
ord. Kvar bruker har sitt brukeromr
˚
ade p
˚
a disken,— i UNIX operer ein med
begrepet heimekatalog( i UNIX–verden HOME). I tillegg til
˚
a vere registrert som
bruker m
˚
a ein ogs
˚
a vere registrert som medlem av minst ei brukergruppe (ein
kan alts
˚
a vere medlem av fleire grupper). Denne inndelinga av eigar og grup-
per skal hjelpe alle til
˚
a administrere filane innanfor UNIX–systemet. Ein kan
heile tida bestemme sjølv kven som skal f
˚
a lov til
˚
a sj
˚
a filar og eventuelt lese
innhold eller kjøre program. Dette kan ein bruke til
˚
a differensiere tilgang til
bestemte omr
˚
ader eller program.
Kapittel 4
Grunnleggande kommandoar
4.1 Logge inn
Eg antek at alle er kjende med terminalar og terminalemulatorar b
˚
ade p
˚
a PC
og Mac. Ellers g
˚
a det jo ogs
˚
a an
˚
a prøve seg direkte p
˚
a konsollet! For
˚
a logge
inn m
˚
a ein ha eit av følgande skjermbilde:
SunOS UNIX (zevs)
login:
eller
System V UNIX (arion)
login:
Som vi ser den eine presenterer seg som ein System V UNIX medan den andre
er ein BSD variant.
Markøren vil st
˚
a rett etter login:,— der skal ein skrive inn den brukeridentiteten
ein har f
˚
att fr
˚
a systemansvarleg,— n
˚
ar ein har gjort det avsluttar ein med
˚
a
trykke retur–tasten. Systemet vil d
˚
a spørje etter passord:
SunOS UNIX (zevs)
login: trondk
Password:
eller
25
26 KAPITTEL 4. GRUNNLEGGANDE KOMMANDOAR
System V UNIX (arion)
login: troka
Password:
Oppgje passord (ver ikkje redd, dei tegna du tastar vil ikkje kome til syne p
˚
a
skjermen). OBS!: Vent med ˚a oppgje passord til systemet skriv ut passord-
ledeteksten. Dersom du skriv inn passordet før ledeteksten vil passordet
bli synleg p˚a skjermen. Dessutan vil ikkje login–programmet oppfatte pass-
ordet, ein vil f˚a ei feilmelding og ein kjem ikkje inn p˚a systemet. Dersom
brukeridentiteten er feil eller passordet er feil vil ein f
˚
a feilmelding. Merk!:
UNIX skiller p˚a store og sm˚a bokstaver ogs˚a ved brukeridentiteter og pass-
ord.
SunOS UNIX (zevs)
login: trondk
Password:
Login incorrect
login:
D
˚
a m
˚
a ein starte om igjen p
˚
a nytt med
˚
a oppgje brukeridentitet og passord.
Dersom ein har gjort alt riktig vil systemet presentere seg p
˚
a ein eller annan
m
˚
ate,— det er i grunn opp til systemansvarleg
˚
a legge opp rutiner for program
som skal utførast ved innlogging. Det er ogs
˚
a vanleg
˚
a gje viktige meldingar
ved hjelp av innloggingsprosedyrene.
SunOS UNIX (zevs)
login: trondk
Password:
Last login: Wed Feb 26 13:18:12 from asterix.ifi.unit.no
SunOS Release 4.1.1 (GENERIC) #1: Thu Oct 11 10:25:14 PDT 1990
You have mail.
.
.
.
zevs%
eller
System V UNIX (arion)
4.2. LOGGE UT 27
login: troka
Password:
UNIX System V/386 Release 3.2
arion
Copyright (C) 1984, 1986, 1987, 1988 AT&T
Copyright (C) 1987, 1988 Microsoft Corp.
All Rights Reserved
Login last used: Wed Feb 26 09:20:45 1992
.
.
.
arion%
4.2 Logge ut
N
˚
ar ein er ferdig med det ein skal ha gjort er det berre ikkje
˚
a sl
˚
a av terminalen,
PC‘en el.likn.,— ein m
˚
a alltid passe p
˚
a
˚
a logge seg ut. Grunnen til at ein skal
logge seg av er i første rekke p.g.a sikkerhets
˚
arsaker. Dersom ein berre sl
˚
ar
av f.eks terminalen og g
˚
ar, vil neste person som sl
˚
ar p
˚
a igjen terminalen vere
innlogga som den forrige og ha fri tilgang til denne personen sitt brukeromr
˚
ade
og filar.
For
˚
a logge ut:
zevs% exit
eller ein kan trykke CTRL-D ( trykke Ctrl–tasten og d–tasten samstundes). N
˚
a
ein har gjort dette vil innloggingsbildet kome fram p
˚
a skjermen igjen.
SunOS UNIX (zevs)
login:
Ein kan ikkje gje fleire kommandoar etter et ein har logga seg ut. Dersom eit
eller anna har “hengt” seg og ein f
˚
ar ikkje til
˚
a skrive nye kommandoar eller
logge seg ut, s
˚
a kontakt systemadministrator og be han logge deg ut!
4.3 Liste filar
For
˚
a liste ut filane i UNIX brukar vi kommandoen ls(engelsk : list. Det finst ein
heil rekke opsjonar til denne kommandoen, ca. 29, men vi treng absolutt ikkje
˚
a bry oss om alle. Dei to mest vanlege opsjonane er l og C. Den første for
˚
a f
˚
a
28 KAPITTEL 4. GRUNNLEGGANDE KOMMANDOAR
s
˚
akalla lang listing og den andre for
˚
a f
˚
a lista filane i kolonnar. I BSD–baserte
UNIX er det ogs
˚
a vanleg
˚
a bruke ein g opsjon saman med l, dette er fordi ein
ikkje f
˚
a sj
˚
a gruppetilhørighet som standard ved lang listing av filar. Dette er
standard System V basert UNIX.
zevs%ls
Mac.tel
Mail
New Groups File
News
ahs
backup
bin
fmconsole.log
fmdictionary
fraa-tih
internett
macps
misc
oppstartfiler
phigs
rfc
secure
src
text
Dette er utdata fr
˚
a ls–kommandoen utan opsjonar (legg merke til at UNIX listar
alltid filane alfabetisk!).
zevs%ls -C
Mac.tel ahs fmdictionary misc secure
Mail backup fraa-tih oppstartfiler src
New Groups File bin internett phigs text
News fmconsole macps rfc
Som vi ser blir listinga i kolonner. La oss ta ei lang listing.
4.3. LISTE FILAR 29
zevs%ls -l
total 51
-rw-r—– 1 trondk 3456 Feb 25 13:18 Mac.tel
drwx–S— 3 trondk 1024 Feb 25 08:18 Mail
-rwxr-xr-x 1 trondk 28336 Oct 24 09:51 New Groups File
drwxr-s— 2 trondk 512 Nov 22 09:55 News
-rw-rw-rw- 1 trondk 2889 Feb 26 09:00 ahs
drwx–S— 2 trondk 512 Jan 6 10:48 backup
drwx–S— 2 trondk 512 Dec 6 13:50 bin
-rw-r—– 1 trondk 163 Jan 28 11:04 fmconsole.log
-rwx–x–x 1 trondk 22 Jan 22 10:53 fmdictionary
drwxr-xr-x 2 trondk 512 Aug 12 1991 fraa-tih
-rw-r—– 1 trondk 0 Feb 27 14:53 help.fil
drwxr-s— 2 trondk 512 Nov 13 12:27 internett
drwxr-sr-x 3 trondk 512 Dec 3 12:17 macps
drwx–S— 3 trondk 512 Jan 24 08:34 misc
drwxr-xr-x 3 trondk 512 Aug 12 1991 oppstartfiler
drwxr-s— 4 trondk 512 Jan 30 09:51 phigs
drwxr-s— 2 trondk 512 Jan 28 08:26 rfc
drwx–S— 2 trondk 512 Feb 27 03:00 secure
drwxr-s— 4 trondk 512 Jan 24 13:03 src
drwxr-s— 3 trondk 512 Feb 19 13:32 text
zevs%
Dette er ein BSD basert UNIX slik at skulle vi ha sett gruppa ogs
˚
a m
˚
atte vi ha
teke med ein g–opsjon ogs
˚
a.
La oss ta ei lang listing med gruppe opsjon slik at vi ogs
˚
a f
˚
ar med gruppa.
30 KAPITTEL 4. GRUNNLEGGANDE KOMMANDOAR
zevs% ls -lg
total 51
-rw-r—– 1 trondk ifi 3456 Feb 25 13:18 Mac.tel
drwx–S— 3 trondk ifi 1024 Feb 25 08:18 Mail
-rwxr-xr-x 1 trondk ifi 28336 Oct 24 09:51 New Groups File
drwxr-s— 2 trondk ifi 512 Nov 22 09:55 News
-rw-rw-rw- 1 trondk ifi 2889 Feb 26 09:00 ahs
drwx–S— 2 trondk ifi 512 Jan 6 10:48 backup
drwx–S— 2 trondk ifi 512 Dec 6 13:50 bin
-rw-r—– 1 trondk ifi 163 Jan 28 11:04 fmconsole.log
-rwx–x–x 1 trondk ifi 22 Jan 22 10:53 fmdictionary
drwxr-xr-x 2 trondk ifi 512 Aug 12 1991 fraa-tih
-rw-r—– 1 trondk ifi 0 Feb 28 09:41 help.fil
drwxr-s— 2 trondk ifi 512 Nov 13 12:27 internett
drwxr-sr-x 3 trondk ifi 512 Dec 3 12:17 macps
drwx–S— 3 trondk ifi 512 Jan 24 08:34 misc
drwxr-xr-x 3 trondk ifi 512 Aug 12 1991 oppstartfiler
drwxr-s— 4 trondk ifi 512 Jan 30 09:51 phigs
drwxr-s— 2 trondk ifi 512 Jan 28 08:26 rfc
drwx–S— 2 trondk ifi 512 Feb 28 03:00 secure
drwxr-s— 4 trondk ifi 512 Jan 24 13:03 src
drwxr-s— 3 trondk ifi 512 Feb 19 13:32 text
zevs%
No ser vi at vi har f
˚
att med namnet “ifi” ogs
˚
a,— dette er gruppe tilhørigheten.
4.4 Kikke p˚a innhold i filar
For
˚
a f
˚
a innholdet i ei fil lista ut p
˚
a skjermen har UNIX mange program(disse
programma kan sjølvsagt brukast til andre ting ogs
˚
a!). Dei mest vanlege
˚
a bru-
ke er cat og more. Begge tek filnamn som parameter. Eksempel:
zevs% cat teksten
Dette er berre ein test ...
Dette er siste linje i fila testen.
Det programmet som blir brukt mest er more, fordi dette programmet er spe-
sialsydd for
˚
a liste filinnhold ut p
˚
a skjermen. Programmet har ein del funksjo-
nar som er nyttige i denne samanheng, f.eks viser programmet berre ei skjerm-
full dersom innholdet okkuperer meir enn ei skjermside, ein kan g
˚
a framover
ved
˚
a trykke f og bakover ved
˚
a trykke b osv. . . . , og avslutte ved
˚
a trykke q.
Dessverre s
˚
a finst det mange variantar av more slik at det er ikkje alt som verkar
p
˚
a alle. P
˚
a enkelte system heiter dette programmet less,— som regel vil begge
namn fungere for same kommando (dvs. det er sett opp ein alias ).
4.5. SLETTE FILAR 31
4.5 Slette filar
Til slutt har vi sletting av filar,— rm(remove). OBS! I UNIX er det ikkje mulig
˚
a
finne igjen fila dersom den er blitt sletta. Det g
˚
ar ikkje an
˚
a kjøre eit program
som leitar opp igjen fila og f
˚
ar innholdet tilbake. Tenk deg om før du slettar
filar! Eksempel :
zevs% rm filnamn . . .
N
˚
ar ein brukar slike kommandoar som kan f
˚
a store konsekvensar kan det vere
lurt
˚
a bruke ein -i–opsjon til rm–kommandoen,— det betyr at slettinga skal
utførast interaktivt slik at ein f
˚
ar eit spørsm
˚
al for kvar fil kommandoen skal
slette. Den gjer det mulig
˚
a angre dersom ein har tasta feil eller ein vil beholde
fila.
4.6 Kven er innlogga ?
For
˚
a finne ut kven som er innlogga p
˚
a UNIX-maskina kan ein bruke komman-
doen who. Kommandoen listar ut brukeridentitetane til dei som er innlogga,
kva terminalinngang dei brukar og n
˚
ar dei har logga seg inn. P
˚
a BSD variantar
vil ein ogs
˚
a f
˚
a sj
˚
a kva for ei maskin ein brukar kjem fr
˚
a dersom denne brukaren
har logga seg p
˚
a systemet fr
˚
a ei anna maskin. Eksempel:
zevs% who
royt console Mar 17 11:32
trondk p0 Mar 17 08:15 (asterix.ifi.unit.)
andreaso p1 Mar 17 12:03 (hera.ifi.unit.no)
ragnark p2 Mar 17 11:23 (vatix.ifi.unit.no)
svenng p3 Mar 17 10:03 (arion.ifi.unit.no)
zevs%
System V vil produsere omtrent dei same dataene. Dersom ein av ein eller anna
grunn lurer p
˚
a kva for ein innloggingsidentitet ein har kan ein skrive:
zevs% who am i
trondk p0 Mar 17 08:15 (asterix.ifi.unit.)
zevs%
who am i er System V m
˚
aten
˚
a f
˚
a vete sin eigen identitet p
˚
a,— p
˚
a BSD varian-
tar heiter kommandoen whoami (stort sett har alle UNIX–system begge varian-
tane). Denne kommandoen er i første rekke nyttig for systemansvarlege som
stadig skifter brukaridentitet,— det kan vere veldig nyttig
˚
a vete kven ein er
innlogga som før ein set igang med f.eks sletting av filar . . . .
4.7 Forandre passord
Etter
˚
a ha logga inn første gangen vil ein gjerne sette sitt eige passord. Det kan
ein gjere med kommandoen passwd.
32 KAPITTEL 4. GRUNNLEGGANDE KOMMANDOAR
Eksempel:
zevs% passwd
passwd: Changing password for trondk
Old password: det gamle passordet
New password: tast inn det nye passordet
Re-enter new password: det nye passordet p˚a nytt
zevs%
Gjer ein feil undervegs vil passordprogrammet skrive ut feilmeldingar,— men
ver merksam p
˚
a at passord m
˚
a minst ha 6 tegn. Bruk gjerne suspekte samanset-
ningar av tal, store og sm
˚
a bokstavar. Brukeridentitet, brukeridentiteten bak-
lengs, namn p
˚
a kone, barn etc. . . . , er bannlyst! Alt dette er sukkertøy for folk
som har som hobby
˚
a bryte seg inn p
˚
a datasystem. Undersøkelsar fr
˚
a USA for-
tel om personar som har klarer
˚
a knekke ca. 20% av alle passord p
˚
a eit gitt
system iløpet av berre eit par timar! Dersom du syns det er vanskeleg
˚
a huske
passordet kan ein jo skrive det ned og oppbevare det p
˚
a ein trygg plass. Det
beste er sjølvsagt
˚
a huske det utan
˚
a skrive det ned! Har ein gløymt passordet
er det beste
˚
a kontakte systemansvarleg for
˚
a sette eit nytt passord, det er ein
forholdsvis liten arbeidsoperasjon b
˚
ade for brukarane og systemansvarleg.
Kapittel 5
Skallet
5.1 Jokertegn
Det er mulig
˚
a angje fleire filar samstundes ved hjelp av s
˚
akalla jokertegn (en-
gelsk: wildcards). Eit filnamn som inneheld joker tegn kan st
˚
a for fleire filar. I
UNIX har vi følgande jokertegn:
* tilsvarar fleire tegn, berre stjerne betyr alle filar p˚a st˚aande katalog.
? tilsvarar eitt tegn.
[ ] brukast for ˚a angje mengder av tegn.
markerer ei mengde med tegn. Kan st˚a mellom to tegn som markerer grensene
for mengda. Tegna som markerer grensene oppfattast som del av mengda,— m˚a
st˚a innanfor klammeparentesar [].
Stjerne og spørsm
˚
alstegnet er forholdsvis enkle
˚
a bruke. Eksempel p
˚
a korleis
dei kan brukast:
* alle filar p˚a st˚aande katalog.
*x alle filar som endar p˚a ¨.
*.o alle filar som endar p˚a ¨.o¨.
??.o alle filar med filnamn p˚a fire tegn der dei to siste tegna er ¨.o¨.
????? alle filar med filnamn p˚a fem tegn.
tape[0–3 ] tilsvarer filane tape0, tape1, tape2 og tape3 dersom dei finst, som vi ser er
0-3 ei mengde og 0 og tre er ogs˚a medlemmar i denne mengda.
[jy ]ippi tilsvarar filane ¨jippi¨ og ¨yippi¨ dersom dei finst.
Alle joker tegn og alle eksempler for utvelging av filar kan brukast som ar-
gument til alle UNIX–kommandoar. Det vil seie at skallet vil automatisk sette
inn dei filane som passar til det mønsteret ein har oppgjeve som kriterium for
utvelging.
33
34 KAPITTEL 5. SKALLET
5.2 Miljøvariable
I dette underkapitlet vil eg berre g
˚
a gjennom korleis miljøvariable blir handtert
i Bourne–skallet. C–skallet handterer miljøvariable litt anneleis,— men prinsip-
pa er stort sett dei same.
Miljøvariable er teiknstrengar p
˚
aformen namn=verdi, der namn kan vere ein
teiknstreng som ikkje inneheld dollar ($) teiknet, verdi kan vere alle teikn in-
kludert mellomrom. Det er vanlegvis knytta mange miljøvariable til ein bru-
keridentitet, mange vil variere p
˚
a grunn av system, den installerte programva-
ren og dei eigne personlege preferansane. Ein miljøvariabel blir sett ved
˚
a gje
namn=verdi paret til skallet. Eksempel:
$ EKSEMPEL=¨Hallo gutatn og jentatn¨
$
Skallet kjenner igjen denne kommandoen som ein miljøvariabel til skallet og
tek vare p
˚
a namnet og verdien. Legg merke til at i Bourne–skallet er det kon-
vensjonen
˚
a bruke store bokstavar i namn p
˚
a miljøvariable (dette er slett ikkje
nødvendig, men ver merksom p
˚
a at UNIX skiller p
˚
a store og sm
˚
a bokstavar!).
Rett etter namnet setter inn, utan mellomrom, = tegnet, og etter dette kan ein
sette den verdien ein vil. Fordi denne verdien inneheld mellomrom m
˚
a ein site-
re den med hermetegn ( ¨ ). Ein treng ikkje
˚
a predefinere eller deklarere namnet
p
˚
a miljøvariabelen før ein brukar den. Skallet vil finne ut om namnet er i bruk
fr
˚
a før. Dersom namnet er i bruk fr
˚
a før, vil skallet sette miljøvariabelen til den
nye verdien og den gamle vil bli oversett. Dersom namnet ikkje eksisterer fr
˚
a
før, vil skallet opprette ein ny variabel. N
˚
ar vil ha verdien av ein miljøvariabel
s
˚
a sett ein $ framfor namnet. Dette fortel skallet at dette er ein miljøvariabel, og
at det skal ta variabelen sin verdi, ellers ville skallet oppfatte namnet som ein
tilfeldig streng. Ein kan bruke echo til
˚
a skrive ut variabelen sin verdi. Eksem-
pel:
$ echo $EKSEMPEL
Hallo gutatn og jentatn
$
Denne kommandoen fortel skallet at det skal skrive verdien av ein miljøvariabel
til terminalen. Ein kan bruke miljøvariable som kommandonamn eller som pa-
rametre til kommandoar. Eksempel:
$ KOMMANDO=¨cat beskjed ¨
$ $KOMMANDO
Hei Trond !
Har du huska aa sette paa kaffien paa pause-rommet.
Eg spanderer konjakk til kaffien idag.
Styraren.
$
Før skallet utfører kommandoen s
˚
a erstattar skallet verdien assosiert med nam-
5.2. MILJØVARIABLE 35
net inn i kommandolinja. Denne mekanisma kan ein bruke til
˚
a lenke lange og
mykje brukte kommandoar til ein kort miljøvariabel. Pass p
˚
a
˚
a starte variabe-
len med $ slik at dette blir intrepetrert av skallet.
Kommandoen for
˚
a liste ut alle miljøvariable heiter env. Kommandoen listar ut
variablane p
˚
a formen namn=verdi. Eksempel:
$ env
BLAB HOME=/usr/local/blab
FMHOME=/usr/local/frame
HOME=/home/zevs/ifi/trondk
LOGNAME=trondk
MFBASES=/usr/local/src/tex3.0/tex/lib/mf/bases
MFINPUTS=.:/usr/local/src/tex3.0/tex/lib/mf/inputs
MFPOOL=/usr/local/src/tex3.0/tex/lib/mf
MF BASES=/usr/local/src/tex3.0/tex/lib/mf/bases
MF INPUTS=/usr/local/src/tex3.0/tex/lib/mf/inputs
MF POOL=/usr/local/src/tex3.0/tex/lib/mf
PATH=/home/zevs/ifi/trondk/bin:/usr/lang:/usr/ucb:/bin:/usr/bin:/usr/5bin:/usr/tran/sparc/bin:/usr/bin/X11:
/usr/local:/usr/local/bin:/usr/new:/usr/new/emacs:/usr/hosts:.:/usr/local/old:/usr/local/old/bin:
/usr/local/frame/bin:/usr/local/blab/bin:/usr/local/blab/etc:/usr/etc:/usr/local/src/tex3.0/tex/bin:
/usr/local/src/tex3.0/tex/bin
PWD=/home/zevs/ifi/trondk/text/unixkurs
SHELL=/bin/csh
TERM=vt100
TEXFONTS=/usr/local/src/tex3.0/tex/lib/tex/fonts:/usr/local/src/tex3.0/tex/lib/tex/fonts/pk:
/usr/local/src/tex3.0/tex/TeXPS/ps-fonts:.
TEXFORMATS=/usr/local/src/tex3.0/tex/lib/tex/formats
TEXINPUTS=.:/usr/local/src/tex3.0/tex/lib/tex/inputs:
TEXPOOL=/usr/local/src/tex3.0/tex/lib/tex
TEXROOT=/usr/local/src/tex3.0/tex
TEX BIN=/usr/local/src/tex3.0/tex/bin
TEX FONTS=/usr/local/src/tex3.0/tex/lib/tex/fonts
TEX FORMATS=/usr/local/src/tex3.0/tex/lib/tex/formats
TEX INPUTS=/usr/local/src/tex3.0/tex/lib/tex/inputs
TEX MAN=/usr/local/src/tex3.0/tex/man
TEX POOL=/usr/local/src/tex3.0/tex/lib/tex
TEX ROOT=/usr/local/share/src/tex3.0/tex
USER=trondk
VFFONTS=/usr/local/src/tex3.0/tex/lib/tex/fonts/vf
VF FONTS=/usr/local/src/tex3.0/tex/lib/tex/fonts/vf
$
Denne framstillinga lyg litt fordi eg m
˚
atte sette inn linjeskift i den linjene som er
veldig lange( p.g.a tekstbehandlaren ). Ein kan legge til og endre miljøvariablar
som ein vil, men ver likevel litt forsiktig med
˚
a endre eksisterande variablar for-
di desse gjerne blir brukt av applikasjonar og kommandoar. Før ein opprettar
ein ny miljøvariabel er det lurt
˚
a sjekke om den finst fr
˚
a før. Dersom ein prøvar
˚
a skrive ut ein miljøvariable som ikkje finst fr
˚
a før s
˚
a vil skrive ut ingenting.
Eksempel:
36 KAPITTEL 5. SKALLET
$ echo $INGENTING
$
Denne responsen fortel at ein kan bruke denne miljøvariabelen til eige bruk.
5.3 Standard inn og standard ut
Alle ytre enhetar som er knytta opp mot eit UNIX–system har filar som re-
presenterer enheten. Det gjeld for alle enheter som skrivarar, portar, termina-
lar, magnetbandstasjonar osv. . . Representasjonen av alle ytre enhetar som filar
gjer at ein lettvindt kan omdirigere resultat fr
˚
a den eine enheten til ein an-
nan enhet. Alle prosessar som blir oppretta f
˚
ar tildelt tre filer, standard inn,
Figur 5.1: Standard ut, inn og feilmelding
standard ut og standard feilmelding. N
˚
ar man er p
˚
alogga ved hjelp av f.eks
ein terminal vil tastaturet vere standard inn, skjermen vil vere standard ut og
standard feilmelding. Dette kan ein alts
˚
a forandre ved hjelp av omdirigering.
N
˚
a ein brukar omdirigering s
˚
a er det i første rekke for
˚
a sende dataene enten
til ei fil eller ein anna prosess. Ein kan ogs
˚
a f
˚
a prosessar til
˚
a lese inndataene
fr
˚
a fil istaden for
˚
a skrive dataene inn fr
˚
a tastaturet. N
˚
ar ein sender data fr
˚
a
ein prosess over til ein annan prosess kallast det for røyrlegging eller piping.
Omdirigering blir brukt slik at sm
˚
a kommandoer blir kombinert til ein stor og
kraftig kommando, som eg nemnde tidlegare. Omdirigering til eller fr
˚
a filar
brukar ein < for
˚
a ta standard inn fr
˚
a og > for
˚
a sende data fr
˚
a standard ut til
ei fil. Eksempel:
zevs% ls -l >ls-fila.text
5.3. STANDARD INN OG STANDARD UT 37
zevs%
Terminal
Prosess
Fil
Figur 5.2: Redirigering ut til fil
Her vart utdataene sendt til fila ls-fila.text,— la oss ta eit eksempel det vi tek
standard inn fr
˚
a ei fil.
zevs% mailx eyvindh <brevet.til.eyvind
zevs%
Terminal
Prosess
Fil
Figur 5.3: Standard inn fr
˚
a fil
Skal standard ut omdirigerast til standard inn til ein anna prosess brukar vi
tegnet | (engelsk : pipe), p
˚
a norsk kan vi oversette det til røyr. Og det er eigent-
leg det vi gjer, vi lagar ein røyrledning fr
˚
a den eine prosessen til den andre.
Eksempel:
zevs% find / -depth -print | cpio -ocvB >/dev/rst1
zevs%
Terminal
Prosess Prosess
Fil
røyr
Figur 5.4: Røyrlegging mellom prosessar
Her har vi b
˚
ade røyrlegging til ein anna prosess og omdirigering til ei fil (den-
ne gongen representerer fila ein enhet,— ein ekstern tape-stasjon). Det denne
kommandoen gjer er
˚
a finne alle filar i systemet og sender alle namna over til
cpio som kopierer desse filane ut p
˚
a fila /dev/rst1,— dette er enhetsfila for ein
38 KAPITTEL 5. SKALLET
magnetbandstasjon. Vi kan kort og godt seie at vi kjøyrer sikkerhetskopiering
av systemet ut p
˚
a eit magnetband.
5.4 Returverdiar fr˚a kommandoar
I likhet med standard ut, standard inn og standard feilmelding, returnerer
kommandoar ein numerisk verdi til skallet. Denne returverdi blir vanlegvis
ikkje vist p
˚
a skjermen. Verdien er vanlegvis 0 (null) dersom kommandoen fullførte
utan feil og ulik 0 (null) dersom det oppstod feil. Denne feilverdien er veldig
kommandoavhengig, verdien kan variere f.o.m 0 t.o.m 255. Vanlegvis er for-
skjellige grunnar for feil gjenspeila i returverdien fr
˚
a programmet. Returverdi-
en kan ein f
˚
a tak i ved
˚
a bruke variabelen $?, som er sett til holde returverdien
etter kvar kommando. Dersom ein har tenkt
˚
a lagre verdien, m
˚
a ein lagre ver-
dien i ein anna miljøvariabel før neste kommando. Eksempel:
$ ls
kjerne.ps
kurs.aux
kurs.dvi
kurs.log
kurs.ps
kurs.tex
kurs.toc
latex.log
program.ps
rettigheter.ps
skall.ps
$ echo $?
0
$ cat eifil
cat: eifil: No such file or directory
$ echo $?
1
$ echo $?
0
$
Som vi ser s
˚
a gjekk ls–kommandoen utan feil, s
˚
a prøvde vi
˚
a vise innholdet p
˚
a
ei fil som ikkje eksisterte, d
˚
a vart returverdien sett til 1. Den siste gongen vi
skreiv ut returverdien hadde den igjen vorte 0, dette var returverdien fr
˚
a den
forrige echo–kommandoen som fullførte utan feil.
Eigentleg er ikkje $? ein miljøvariabel, men ein skallvariabel . Desse variablane
er ikkje tilgjengeleg p
˚
a same m
˚
aten som ekte miljøvariable, dei blir oppdaterte
av skallet og ikkje av kommandoar. Skallvariable har namn som best
˚
a av eit
tegn, dersom ein vil sj
˚
a verdien m
˚
a ein sette ein $ framfor namnet. I tilleg til
? finst det ein del andre skallvariable som f.eks skigardteiknet (#), som inne-
held antal kommandolinje parametre til dette skallet, og $ som angjev proses-
sidentiteten til dette skallet. Desse variablane skal vi ikkje g
˚
a gjennom i denne
5.4. RETURVERDIAR FR
˚
A KOMMANDOAR 39
omgang,— seinare vil vi sj
˚
a at desse har ein stor betydning for skallprogram-
mering.
Kapittel 6
Filsystemet
Ei fil er ein namngjeven samling av informasjon, ei fil kan inneholde data, eit
kjørbart program, tekstdokument, eit bilde, ein video, etc. . . .
6.1 Filar i UNIX
Alle filar i eit UNIX–system har ein unik identifikator
1
, ein dato for siste end-
ring, ein dato for sist den vart aksessert, ein eigar, ein gruppetilhørighet og
tilgangsrettighetar. Namnet gjev brukaren eller eigaren mulighet for
˚
a gje eit
beskrivande namn p
˚
a informasjonen som ligg lagra p
˚
a fila. Filsystemet i UNIX
operer med den unike identifikatoren for
˚
a finne igjen fila p
˚
a disken. Eigaren
av ei fil har alle rettighetar, og kan ogs
˚
a bestemme kva rettighetar andre skal
ha til ei fil.
6.2 Katalogstruktur og viktige katalogar
UNIX grupperer filane i hierarkiske katalogar (engelsk: directory). P
˚
a øverste
niv
˚
a operer UNIX med begrepet rota (engelsk: root) som blir representert ved
tegnet /.
UNIX har ei stor mengde kommandoar som ligg p
˚
a kvar si fil. Desse komman-
doane er fordelt p
˚
a fleire katalogar. Dei mest brukte er lokalisert p
˚
a /bin og /usr/
bin. Desse katalogane er som regel alltid med i den standard søkestien(jmfr.
tidlegare omtale av PATH). P
˚
a /etc–katalogen ligg ein heil del systemfilar og
administrative program.
Det som er av betydning for vanlige brukarar er heimekatalogen, denne brukar
ein fritt innanfor dei grensene som finst tilgjengeleg i form av fysisk diskplass.
Det som er viktig
˚
a merke seg er at alle brukarane deler p
˚
a den diskplassen
som er tilgjengeleg. Dersom ein brukar meir plass enn det ein har lov til, vil
det berre g
˚
a ut over andre brukarar, tommelfingerregel nr 1: Vis hensyn!
1
I UNIX operer vi med ein intern representasjon ved hjelp av s
˚
akalla i–nodenummer,— dette er
ikkje s
˚
a viktig i første omgang.
40
6.3. FILNAMN 41
Ein vanleg brukar f
˚
ar vanlegvis lov til
˚
a lese det meste, men f
˚
ar berre lov til
˚
a skrive p
˚
a sin eigen heimekatalog og p
˚
a temporære katalogar. Desse tempo-
rære katalogane blir stort sett brukt som kladdekatalogar for program eller
programsystem. Felles for alle desse katalogane er at dei heiter tmp, eksempel:
/tmp, /usr/tmp . . .
Dei viktigaste katalogane:
/etc I denne katalogen ligg ein del systemadministrasjonsfilar og konfigurasjons-
filar, særleg for nettverk. Dei fleste overordna programma for nettverk
ligg ogs
˚
a her. Ein vil ogs
˚
a finne passordfila p
˚
a denne katalogen.
/bin Katalogen innheld dei fleste brukarkommandoane.
/dev Inneheld alle enhetsfilane, dvs. dei filane som gjev tilgang til skrivarar,
portar, diskar, taper,terminalar . . . osv.
/usr Alle filar som er ein del av systemet men som ikkje er kritiske for at sys-
temet skal kunne kjøre. Her vil det ligge brukaraplikasjonar som f.eks
akkurat denne UNIX–varianten understøttar. Eksempel p
˚
a programvare
som kan ligge under /usr er kompilatorar og vindussystem.
/usr/bin Hjelpeprogram for brukarane.
/usr/lib Filar med støttefunksjonar som globale bibliotek, oppsett av epost-
program, skrivarar . . . .
/usr/local Som regel blir alle lokale tilpasninger lagt under denne katalogen,
dvs. alt som ikkje er standard UNIX skal eigentleg ligge her. Det kan vere
spesiell konfigurasjon, spesielle program som ikkje er ein del av operativ-
systemet, etc. . .
/tmp Denne temporære katalogen kan brukast som midlertidig lagring av fi-
lar. Alle brukarar har tilgang til denne katalogen og dei fleste program
under UNIX som treng kladdeomr
˚
ade legg kladdefilane sine p
˚
a denne
katalogen. Dette er ikkje ein trygg stad
˚
a legge filar,— her er det fritt fram
for
˚
a slette filar for alle brukarar, og dersom maskina “g
˚
ar ned vil inn-
holdet p
˚
a denne katalogen bli sletta under oppkjøring av systemet. (Alle
UNIX-system vil starte med “blanke” ark n
˚
ar dei skal opp og g
˚
a,— derfor
slettar alltid UNIX alle temporære filar som ligg igjen fr
˚
a tidlegare).
/var/tmp Er ogs
˚
a ein temporær katalog veldig likt /tmp,— men denne blir
ikkje sletta mellom kvar restart av systemet, men det er likevel eit forbe-
hold. Red Hat Linux f.eks vil slette filar som er eldre enn 30 dagar. Derfor
er det ein del program som brukar denne katalogen som temporærkata-
log for
˚
a beholde viss form for status.
6.3 Filnamn
Eit filnamn i eit System V–basert UNIX–system kan maksimalt vere 255 byte
2
.
De fleste skrivbare teikn blir godteke som tegn i eit filnamn. UNIX tvinger
2
Dersom ein brukar teiknsett der eit teikn kan legge beslag p
˚
a meir enn 1 byte vil sjølvsagt det
maksimale filnamnet bli kortare enn 255 teikn.
42 KAPITTEL 6. FILSYSTEMET
ingen til
˚
a ha system i namnsettinga p
˚
a filar og katalogar, det kan likevel vere
ein fordel
˚
a ha eit eige system. Det er ikkje uvanleg med eit–teikns–haleheng
fr
˚
a enkelte program som f.eks C–kompilatoren.
Det er vanleg
˚
a bruke sm
˚
a bokstavar i filnamn, men UNIX krev ikkje at ein
gjer det. Det som er viktig
˚
a merke seg er at UNIX skiller mellom store og sm
˚
a
bokstavar.
. og .. er to spesielle namn p
˚
a katalogar. . er st
˚
aande katalog og .. er katalogen
over st
˚
aande katalog.
Dersom ein vil opprette s
˚
akalla “skjulte” filar, dvs. filar som ikkje blir vist fram
ved vanleg filfortegnelse, s
˚
a kan det gjerast ved
˚
a bruke punktum som første
tegn i filnamnet.
Reglar for katalognamn og stiar:
Eit stinamn er ei liste med filnamn som er skilt fr
˚
a kvarrandre med tegnet
“/”. Dei første namna i stien er namn p
˚
a katalogar, medan det siste er
namnet p
˚
a ei fil.
Det er lov
˚
a bruke mellomrom i stinamn og filnamn, men eg vil ikkje
anbefale
˚
a bruke det fordi det blir meir tungvint
˚
a navigere i filsystemet
fr
˚
a kommandolinja.
Ein kan g
˚
a oppover i hierarkiet ved
˚
a angje “..” for forrige katalog.
Ein kan nedover i filsystemet ved
˚
a angje katalogar og underkatalogar.
Dersom stinamnet startar med ein “/” (engelsk: slash), tek stien utgangspunkt
i rotkatalogen p
˚
a toppen av hierarkiet.
Alle andre stinamn er relative til st
˚
aande katalog.
Eksempel p
˚
a lovlege filnamn:
/home/zevs/ifi/trondk/fmdictionary
Legg merke til at siste namnet er namnet p
˚
a ei fil.
../../local/domain/pz/ifi.unit.no
Her her eg angjeve stinamnet relativt til st
˚
aande katalog. Filnamnet er ogs
˚
a her
siste namnet.
/home/zevs/hf/jot/.cshrc
Her er alts
˚
a ei s
˚
akalla “skjult” fil.
6.4 Tilgangsrettighetar
UNIX er eit fleirbruker system og m
˚
a derfor ha mekanismer som styrer tilgan-
gen til program, data eller omr
˚
ader. Som nemnt tidlegare opererer UNIX med
eigar, gruppe og alle andre. Den som eig fila kan sette alle tilgangsrettighetane
som skal gjelde for fila. Den som opprettar (vanlegvis) ei fil blir sett som ei-
gar av fila, og den gruppa som eigaren er aktiv medlem i ved opprettelsen vil
6.4. TILGANGSRETTIGHETAR 43
bli gruppetilhørigheten til fila. Ved opprettelse av ei fil vil det bli sett p
˚
a stan-
dard tilgangsrettighetar,— desse kan vere bestemt av systemansvarleg eller av
ein sjølv. Det finst ein eigen kommando som set opp kva som skal vere stan-
dard tilgangsrettighetar ved oppretting av filar. UNIX opererer med tre typar
tilgangsrettighetar
3
:
Lesing
Skriving
Kjøring
For
˚
a sj
˚
a p
˚
a tilgangsrettighetane m
˚
a vi ta ei lang listing:
zevs%ls -l
total 51
-rw-r—– 1 trondk 3456 Feb 25 13:18 Mac.tel
drwx–S— 3 trondk 1024 Feb 25 08:18 Mail
-rwxr-xr-x 1 trondk 28336 Oct 24 09:51 New Groups File
drwxr-s— 2 trondk 512 Nov 22 09:55 News
-rw-rw-rw- 1 trondk 2889 Feb 26 09:00 ahs
drwx–S— 2 trondk 512 Jan 6 10:48 backup
drwx–S— 2 trondk 512 Dec 6 13:50 bin
-rw-r—– 1 trondk 163 Jan 28 11:04 fmconsole.log
-rwx–x–x 1 trondk 22 Jan 22 10:53 fmdictionary
drwxr-xr-x 2 trondk 512 Aug 12 1991 fraa-tih
-rw-r—– 1 trondk 0 Feb 27 14:53 help.fil
drwxr-s— 2 trondk 512 Nov 13 12:27 internett
drwxr-sr-x 3 trondk 512 Dec 3 12:17 macps
drwx–S— 3 trondk 512 Jan 24 08:34 misc
drwxr-xr-x 3 trondk 512 Aug 12 1991 oppstartfiler
drwxr-s— 4 trondk 512 Jan 30 09:51 phigs
drwxr-s— 2 trondk 512 Jan 28 08:26 rfc
drwx–S— 2 trondk 512 Feb 27 03:00 secure
drwxr-s— 4 trondk 512 Jan 24 13:03 src
drwxr-s— 3 trondk 512 Feb 19 13:32 text
zevs%
La oss sj
˚
a litt p
˚
a fillista. Første tegn heilt til venstre fortel kva slags type fil den
er,— her er dei fleste katalogar (directory) og derfor st
˚
ar det ein “d” som første
tegn i venstre kolonne. Dei tre etterfølgande teikna er tilgangsrettighetane til
eigaren,— dei fleste filane her har alle rettighetar (lese = r, skrive = w, kjøre = x).
Dei neste tre tegna er tilgangsrettighetane til brukarar i same gruppe,— her ser
vi at det er ein del forskjellar ute og g
˚
ar. Det st
˚
ar ogs
˚
a b
˚
ade ein liten og stor
“s” der,— det skal eg kome tilbake til seinare. Dei tre siste tegna er rettighetane
til alle andre. Som vi ser s
˚
a er nekting av ein rettighet symbolisert med teiknet
“–”.
Neste symbol alltid er eit tall st
˚
a for antal lenker til fila,— alle filar kan ha fleire
lenker til seg, dvs. at ein kan lage ei fil med eit nytt namn, men istaden for
˚
a fysisk lage ei ny fil lagar ein ei lenke til ei allereie eksisterande fil. Dette er
3
Det finst filsystem som i tillegg har meir avanserte tilgangsrettighetar eller ACL (Access Con-
trol List),— men her vil eg berre ta for meg det som er felles for alle filsystem
44 KAPITTEL 6. FILSYSTEMET
Alle andre
Gruppe
Eigar
Filtype (vanleg [], katalog [d] eller lenke [l] )
drwxrxrx 3 trondk 512 Dec 3 12:17 macps
Figur 6.1: Aksess-rettigheter p
˚
a filer under UNIX
nyttig n
˚
a fleire personar skal dele p
˚
a data eller skal dele p
˚
a same fila.
I neste kolonne st
˚
ar namnet p
˚
a eigaren til fila,— i dette tilfellet “trondk” som
er min brukaridentitetet. S
˚
a kjem størrelsen p
˚
a fila, deretter dato og klokke-
slett for opprettelse av fila, til slutt filnamnet. Dei same rettighetane gjeld for
katalogar, d
˚
a vil rettighetane ha ein litt anna betydning enn for vanlege filar.
Leseaksess til ein katalog betyr at ein kan liste filane som ligg p
˚
a katalogen,
skriveaksess betyr at ein kan slette og opprette filar p
˚
a katalogen og kjøre ak-
sess betyr eigentleg søketilgang til katalogen, dette betyr at ein kan leite etter
filar p
˚
a denne katalogen men ein vil ikkje ha anledning til
˚
a liste filane p
˚
a ka-
talogen.
6.5 Forandre eigar og gruppe p˚a filar
OBS ! Dette er ikkje mogleg for vanlege brukarar under BSD–UNIX. Som vi
s
˚
ag tidelegare har alle filar ein eigar og ein gruppetilhørighet. Av og til kan det
vere ønskeleg
˚
a gje bort filar, dette gjer ein med kommandoen chown (CHange
OWNer). Parametre til kommandoen er ny eigar og filnamn. Eksempel:
arion% ls -l fila.mi
total 51
-rw-r—– 1 troka ifi 3456 Feb 25 13:18 fila.mi
arion% chown eyvho fila.mi
arion% ls -l fila.mi
-rw-r—– 1 eyvho ifi 3456 Feb 25 13:18 fila.mi
arion%
P
˚
a same m
˚
aten kan ein forandre gruppa til ei fil med kommandoen chgrp
(CHange GRouP). Eksempel:
arion% ls -l fila.mi
total 51
-rw-r—– 1 troka ifi 3456 Feb 25 13:18 fila.mi
arion% chgrp hf fila.mi
arion% ls -l fila.mi
-rw-r—– 1 troka hf 3456 Feb 25 13:18 fila.mi
arion%
Ver oppmerksom p
˚
a at n
˚
ar ein forandra eigar p
˚
a fila s
˚
a kan ein ikkje forandre
tilbake,— d
˚
a er det nemnleg ein annan brukar som eig fila! Alts
˚
a ein kan berre
gje vekk dei filane som ein sjølv eig.
6.6. FORANDRE TILGANGSRETTIGHETAR 45
6.6 Forandre tilgangsrettighetar
For
˚
a forandre tilgangsrettighetar har vi kommandoen chmod ( CHange MODe
). Denne tek dei nye rettighetane og filnamn som parametre. Eksempel:
zevs% chmod 0755 fila.mi
zevs%
Her har eg brukt den oktale m
˚
aten
˚
a spesifisere tilgangsrettighetane. Den ok-
tale representasjonen er:
Rettighet
Oktal verdi
Kjøring (Execute) 1
Skrive (Write) 2
Lese (Read) 4
Tabell 6.1: Rettighet og oktal verdi
Ut fr
˚
a desse oktale talkodane kan vi komponere ulike samansetningar og ulike
rettighetar. Eksempel:
Oktal verdi Rettighetar
7 Lese, skrive og kjøre
6 Lese og skrive
5 Lese og kjøre
4 Lese
3 Skrive og kjøre
2 Skrive
1 Kjøre
0 Ingen
Tabell 6.2: Oktale verdiar for tilgangsrettighetar
Kommandoen tek ogs
˚
a symbolske namn for aksessretighetar,— der teiknkombinasjonar
st
˚
ar for kven som skal ha tilgang og for tilgangsrettighetar:
Symbol Brukargruppe
u Eigar (user)
g Gruppe (group)
o Andre (others)
Tabell 6.3: Teiknsymbol for brukargrupper
Tilgangsrettighetane er symbolisert med:
For
˚
a sette rettighetane m
˚
a ein bruke ein operator:
Legg spesielt merke til at n
˚
ar ein brukar likhetsteiknet blir alle rettighetar sett
p
˚
a nytt. Eksempel:
46 KAPITTEL 6. FILSYSTEMET
Symbol Rettighet
r Lese (read)
w Skrive (write)
x Kjøre (execute)
Tabell 6.4: Teiknsymbol for rettighetar
Operator Resultat
+ Legge til rettighet
- Fjerne rettighet
= Sette eksplisitt likt etterfølgande teiknstreng
Tabell 6.5: Operatorer for rettighetar
zevs% chmod u+w fila.mi
zevs%
Legge til skrive-aksess for eigar.
zevs% chmod u=rwx,g=rx,o=rx fila.mi
zevs%
Eigar f
˚
ar alle rettighetar, gruppe f
˚
ar lese– og kjøretilgang, alle andre har lese–
og kjøretilgang.
6.7 Sette standard tilgangsrettighetar
I staden for
˚
a m
˚
atte sette tilgangsrettighetar for kvar fil ein opprettar kan ein
bruke kommandoen umask. Kommandoen tek dei same oktale akssessrettighetane
som chmod men no har dei motsatt betydning. Dei oktale verdiane er nekting
av tilgang,— dvs. at kommandoen umask 002 vil f
˚
a følgande betydning:
777
- 002
= 775
Tabell 6.6: Sette umask
Dette er ein kommando som typisk blir brukt i oppstartfilane for skall.
Alts
˚
a dersom ein utfører kommandoen umask 002 vil alle filar ein opprettar
etter denne kommandoen teoretisk f
˚
a tilgangsrettighetane:
I praksis vil ikkje filar som ein opprettar f
˚
a kjøretilgang utan at ein spesifikt
ber om det,— unntaket er n
˚
ar ein kompilerer filar med ein kompilator for
˚
a
lage eit kjørbart program. Som regel vil den kjørbare fila ha kjøretilgang fordi
kompilatoren vil sette det direkte. Eksempel:
6.7. SETTE STANDARD TILGANGSRETTIGHETAR 47
Oktal–verdi Rettighetar
7 Ingen rettighetar
6 Kjøre
5 Skrive
4 Skrive og kjøre
3 Lese
2 Lese og kjøre
1 Lese og skrive
0 Lese, skrive og kjøre
Tabell 6.7: umask–rettigheter
Eigar Lese, skrive og kjøre
Gruppe Lese, skrive og kjøre
Andre Lese og kjøre
arion% umask 002
arion% touch fila.mi
arion% ls -l fila.mi
-rw-rw-r– 1 troka ifi 0 Feb 25 13:18 fila.mi
arion% rm fila.mi
arion% umask 000
arion% touch fila.mi
arion% ls -l fila.mi
-rw-rw-rw- 1 troka ifi 0 Feb 25 13:18 fila.mi
arion%
Som regel vil ein kjøre kommandoen umask 022 i oppstartfila for skallet,— dvs.
følgande tilgang:
Eigar Lese, skrive og kjøre
Gruppe Lese og kjøre
Andre Lese og kjøre
Dersom ein skriv kommandoen umask utan parametre vil den skrive ut gjel-
dande verdi. D
˚
a ogs
˚
a gjerne p
˚
a formen 22,– dvs. at kommandoen ikkje skriv ut
0. Det g
˚
ar ogs
˚
a an
˚
a angje parametrane p
˚
a same m
˚
ate til umask.
umask–verdi Rettighetar
2 Nekt skrivetilgang for andre.
22 Nekt skrivetilgang for gruppe og andre.
27 Nekt alle rettighetar for andre og skrivetilgang for gruppe.
77 Nekt alle rettightar for gruppe og andre.
Personleg likar eg best
˚
a skrive parametre til umask p
˚
a formen 022 for
˚
a forsikre
meg om at det blir rett tilgang.
48 KAPITTEL 6. FILSYSTEMET
6.8 Navigering
Eg vil no prøve
˚
a fortelje korleis ein skal navigere i filsystemet i UNIX.
6.8.1 St˚aande katalog
Det kjem litt an p
˚
a korleis miljøet rundt er sett opp, enkelte viser st
˚
aande kata-
log i ledeteksten (engelsk: prompt) som skallet skriv ut, medan andre berre viser
f.eks maskinnamnet. Det finst ein eigen kommando for
˚
a skrive ut st
˚
aande ka-
talog, denne heiter pwd (Print Working Directory). Eksempel:
zevs% pwd
/home/zevs/ifi/trondk/text/unixkurs
zevs%
Som vi ser tek denne kommandoen utgangspunkt i rota,— det ser ein ved at
stien startar med /.
6.8.2 Endre st˚aande katalog
For
˚
a endre st
˚
aande katalog brukar ein cd (Change Directory ). Det er to m
˚
atar
˚
a
oppgje stinamn til der ein vil flytte seg, ein kan oppgje absolutt stinamn (slik
som pwd gjorde) eller relativt til st
˚
aande katalog. For
˚
a skifte katalog absolutt
startar ein stinamnet med “/” og brukar “/” som skilje mellom katalognamn.
Eksempel:
zevs% cd ..
Her vil ein skifte til katalogen over. Skal ein skifte til ein katalog under skriv
ein berre katalognamnet. Eksempel:
zevs%pwd
/home/zevs/ifi/trondk
zevs%cd Mail
zevs%pwd
/home/zevs/ifi/trondk/Mail
zevs%
Andre m
˚
atar
˚
a gjere det p
˚
a:
zevs%pwd
/home/zevs/ifi/trondk/text/unixkurs
zevs%cd ../../bin
zevs% pwd
/home/zevs/ifi/trondk/bin
zevs%
Har ein “rota” seg vekk i hierarkiet, eller vil kome seg fort tilbake til heime-
katalogen, kan det vere lurt
˚
a skrive cd utan parametre, for d
˚
a vil ein hamne
tilbake p
˚
a sin eigen heimekatalog.
6.9. OPPRETTE OG SLETTE KATALOGAR 49
6.9 Opprette og slette katalogar
Sidan UNIX er oppbygt hierarisk s
˚
a undetstøttar det at brukarane ogs
˚
a f
˚
a lage
sin eigen trestruktur. Det er ogs
˚
a meir oversiktleg
˚
a dele opp i katalogar slik at
filar kan grupperast logisk.
For
˚
a opprette katalogar har ein kommandoen: mkdir,— parametre er namnet
p
˚
a den katalogen ein vil opprette.
Slette katalogar gjer ein med kommandoen: rmdir,— her er ogsaa parameter
den katalogen ein skal slette
4
. Eksempel:
zevs% pwd
/home/zevs/ifi/trondk
zevs% mkdir test
zevs% cd test
zevs% pwd
/home/zevs/ifi/trondk/test
zevs% cd ..
zevs% pwd
/home/zevs/ifi/trondk
zevs% rmdir test
6.10 Kopiere og flytte filar
N
˚
a ein har oppretta filer vil ein gjerne kopiere dei til nye filar eller endre namn
p
˚
a dei eller slette dei dersom ein ikkje har bruk for dei meir. Til kopiering har
ein kommandoen : cp (copy). Skal ein kopiere ei fil til ei anna fil,— tek kom-
mandoen to parametre. Eksempel:
zevs% cp fr˚afil tilfil
Skal ein kopiere fleire filar til ein katalog kan kommandoen ta fleire kjeldefiler
som parameter,— men berre ein katalog som m
˚
al. Eksempel :
zevs% cp kjelde1 kjelde2 . . . til-katalog
Av og til s
˚
a har ein bruk for
˚
a gje filar nye namn,— d
˚
a brukar vi kommando-
en mv(move). Denne kommandoen kan ogs
˚
a brukast til
˚
a flytte filar til andre
katalogar. Denne kommandoen tek dei same parametre som cp. Eksempel:
zevs% mv kjeldefil destinsjonsfil
Skal vi flytte fleire filar. Eksempel :
zevs% mv kjeldefil1 kjeldefil2 . . . til-katalog
4
Dette er ikkje alltid den mest lettvinte m
˚
aten
˚
a slette katalogar med underkatalogar p
˚
a,— det
skal vi kome tilbake til seinare.
Kapittel 7
VI
Editoren vi
1
er UNIX sin standard editor. Den har vorte beskulda for
˚
a vere
vanskeleg og tung
˚
a bruke. vi er iallefall nyttig
˚
a kunne fordi denne editoren all-
tid er standard, alle UNIX–system har denne editoren installert. Vidare har den-
ne editoren sider som f
˚
a har oppdaga fordi den gjev s
˚
a negativt førsteintrykk.
Alle editorar som har vorte laga har teke id
`
ear fr
˚
a vi (slik som alle andre har
teke id
`
ear fr
˚
a UNIX ),— likevel er det f
˚
a av dei som klarar
˚
a oppn
˚
a dei mest
avanserte sidene ved vi. Delar av dette dokumentet som du no held i hendene
er skreve ved hjelp av vi. La meg sitere Stephen Coffin som har skreve boka
“UNIX System V release 4, the complete reference” sin karakteristikk av vi:
“Usually when the editor won‘t do something that you want‘t it to do, it is because
you don‘t know how to do it, not because the editor is unable to do it”.
7.1 Introduksjon
vi er ein fullskjerms tekst editor som prøvar
˚
a handtere heile skjermen, som
sørger for eit vindu inn i fila som ligg i vi sitt indre buffer. Markøren er alltid
p
˚
a st
˚
aande linje, og dei fleste redigeringskommandoane blir utført der. N
˚
ar ein
flyttar p
˚
a markøren vil skjermen bli tegna p
˚
a nytt slik at st
˚
aande linje alltid vil
vere p
˚
a skjermen. Det ein skal ha heilt klart for seg er at vi er ikkje ein tekst-
behandlar eller eit slags publikasjonssystem, den formaterer ikkje tekst eller
understøttar integrert grafikk. P
˚
a den andre sida er vi uavhengig av terminal,
ein kan bruke den like godt p
˚
a konsollet som p
˚
a ein terminal.
7.1.1 Sette terminal-type
For
˚
a bruke vi p
˚
a mange forskjellige terminalar, m
˚
a ein fortelje programmet
kva slags terminal ein brukar. Dette gjer ein ved
˚
a sette ein miljøvariable som
heiter TERM. vi og andre fullskjermsprogram sjekkar denne miljøvariabelen
n
˚
ar dei startar opp og justerer utdataene til skjermen mest mulig effektivt. Ein
set miljøvariabelen med:
1
Vanlegvis blir vi uttalt som vi–ai
50
7.1. INTRODUKSJON 51
$ TERM=ansi
$ export TERM
Terminaltypen ansi er det korrekte formatet for ANSI og andre liknande ter-
minalar. Den andre kommandoen, export TERM, tillet ogs
˚
a subskall til
˚
a bruke
TERM–variabelen p
˚
a lik linje ned innloggingsskallet. Dette eksemplet var for
Bourne–skall,— dersom ein skal sette TERM for C–skall:
zevs% setenv TERM ansi
Dei fleste terminaltypar blir støtta av TERM–variabelen. Dersom ein gjer ein
feil n
˚
ar ein set TERM–variabelen, vil fullskjermsprogram skrive rare tegn og
teiknsekvensar p
˚
a uventa tidspunkt ut p
˚
a skjermen. Det er vanleg
˚
a sette TERM
i oppstartfilane .profile for Bourne–skallet eller .cshrc for C–skallet. Vanlege PC–
ar brukar vanlegvis TERM=AT386 for innlogging p
˚
a konsollet. Brukar ein xterm
skal ein bruke TERM=xterm, ved innlogging fr
˚
a ein vanleg terminal brukar ein
TERM=ansi, vt100 eller vt220, dette brukar
˚
a verke i dei fleste tilfella.
7.1.2 Oppstart av VI
Ein kan starte opp vi med ei liste av filnamn, som f.eks her:
zevs% vi gammel.fil
zevs% vi ny.fil
zevs% vi gammel.fil ny.fil
zevs% vi
Alle desse eksempla er lovlege kommandoar. Dersom ikkje filane eksisterer vil
vi opprette dei. Dette er ein vanleg metode for
˚
a opprette filar i UNIX. Dersom
ein inkluderer meir enn eitt filnamn i parameterlista, vil vi editere ei fil om
gongen ved
˚
a laste den første inn i tekstbufferet n
˚
ar ein startar programmet.
Det finst kommandoar for
˚
a skifte mellom filar, men vi har ikkje mulighetar for
˚
a editerere p
˚
a to filar samstundes. Alle vi–kommandoar blir utført p
˚
a st
˚
aande
filnamn, dersom ein startar opp vi utan filnamn vil vi verke p
˚
a same m
˚
ate, men
ein m
˚
a oppgje eit filnamn før ein f
˚
ar lov
˚
a lagre bufferet tilbake til filsystemet.
Ser vi p
˚
a eksempla vil vi starte opp med første linje som st
˚
aande linje. I tillegg
til filnamn kan vi ta imot ei rekkje andre parametre p
˚
a kommandolinja. Ein kan
bruke + (pluss) opsjon etterfulgt av eit linjenummer for
˚
a gjere den til st
˚
aande
linje ved oppstart. Eksempel:
zevs% vi +34 gammel.fil
Denne kommandoen vil gjere at linje nummer 34 vil bli st
˚
aande linje ved opp-
start.
zevs% vi +$ gammel.fil
Denne kommandoen gjer at vi vil starte p
˚
a siste linje i fila.
zevs% vi +/ streng gammel.fil
Ein kan ogs
˚
a bruke denne formen for
˚
a f
˚
a vi til
˚
a søke etter streng og gjere den
linja med det første treffet til st
˚
aande linje. Faktisk kan ein bruke alle tilgjen-
gelege kommandoar i vi etter + (pluss), og vi vil utføre kommandoen før den
oppdaterer skjermen. Vanlegvis fyller vi heile skjermen med tekst, unntatt den
52 KAPITTEL 7. VI
Figur 7.1: Ein opningsskjerm for VI
nederste linja, denne blir brukt til informasjon. Dersom fila er s
˚
a kort eller ein
er p
˚
a enden av fila, vil vi fylle den delen av skjermen som ikkje er i bruk med
tomme linjer som startar med tegnet (thilde). Dette markerer ei ubrukt linje.
N
˚
ar ein lastar vi utan filnamn vil heile skjermen ha thilde–teikn p
˚
a venstre sida,
sidan det ikkje er tekst i bufferet. Alle linjer i det interne bufferet er nummerert,
vanlegvis vil ikkje linjenummer bli skreve ut p
˚
a skjermen.
7.1.3 Modus i VI
Editoren har tre modus. Modus er forskjellige tilstandar som editoren kan vere i
til forskjellige tider. Ein kan hoppe fr
˚
a modus for
˚
a utføre forskjellige operasjo-
nar. vi har tre modus, kommandomodus, skrivemodus og linjemodus. I kommando-
modus kan ein gje kommandoar direkte til editoren, i skrivemodus kan ein skrive
inn tekst i bufferet og ein kan skifte mellom kommando– og skrivemodus. Det-
te er ofte ei kjelde til feil, det er lett
˚
a gløyme kva slags modus ein st
˚
ar i. Dersom
ein skriv inn kommandoar i skrivemodus vil dei bli ein del av innholdet i fila, og
men
˚
a prøve
˚
a skrive tekst medan ein er i kommandomodus kan gje rare forand-
ringar i fila. Den interne set–kommandoen kan brukast til
˚
a skrive ut modusen
p
˚
a skjermen. Denne kommandoen skal vi g
˚
a igjennom seinare, men foreløpig
kan ein bruke kommandoen:
:set showmode
for
˚
a skrive ut st
˚
aande modus p
˚
a skjermen. I den tredje moduset, linjemodus,
kan ein gje linjeorienterte kommandoar som blir vist p
˚
a den siste linja p
˚
a skjer-
men. Tegnet : (kolon) gitt fr
˚
a kommandomodus skiftar til linjemodus, slik at set
kommandoen som vart vist ovanfor er eit eksempel p
˚
a linjemodus. Ein kan ber-
re skifte til linjemodus n
˚
ar ein st
˚
ar i kommandomodus, dersom ein stod i tekst-
modus ville :–teiknet bli skrive inn i bufferet som tekst. N
˚
ar ein entrar linjemodus
med :(kolon), vil markøren hoppe til siste linja p
˚
a skjermen og vi vil vente p
˚
a
kommando.
7.1. INTRODUKSJON 53
7.1.4 Skifting mellom modus
Linjemodus blir brukt til
˚
a gje enkeltkommandoar p
˚
a siste linje. N
˚
ar komman-
doen er ferdig, returnerer vi tilbake til kommandomodus, som vi ser er linjemodus
særdeles kortliva. Dei andre to modi er aktive heilt til ein eksplisitt skiftar ut
av dei. N
˚
ar ein er i skrivemodus kan ein skifte til kommandomodus ved
˚
a trykke
ESC–tasten, som er merka ESC p
˚
a mange tastatur. Ein kan g
˚
a tilbake til skrive-
modus ved taste ein av skrive-kommandoane som vi skal g
˚
a gjennom seinare i
kapitlet. Kvar modus oppfører seg forskjellig, og har sitt eige kommandosett.
Linjekommandoar blir vist p
˚
a den siste linja etter kvart som ein taster inn kom-
mandoane, medan kommandoane i kommandomodus vil ikkje gje ekko (det finst
unntak . . . ).
7.1.5 Avslutte VI
For
˚
a avslutte vi og g
˚
a tilbake til skallet kan ein bruke kommandoen :q (for
quit). Denne kommandoen verkar berre dersom fila ikkje har vorte forandra
sidan ein lagra den sist. Ein kan tvinge vi til
˚
a avslutte utan
˚
a lagre ved
˚
a legge
til ein ! (utropstegn, engelsk: bang) etter q.
:q!
Husk, at alle endringar sidan ein lagra sist vil forsvinne for alltid!
7.1.6 Lagre filar
Linjemodus blir brukt for
˚
a lese inn og lagre filar mellom det interne tekst-
bufferet og permanente filar i filsystemet. Bruk :w for
˚
a lagre fila. Ein vil van-
legvis gjere dette før ein avsluttar vi, men ver klar over at vi skriv over fila p
˚
a
disken. Det anbefales
˚
a lagre fila ganske ofte slik at ikkje redigeringsfeil blir s
˚
a
katastrofale. vi utfører ikkje automatisk lagring eller sikkerhetskopiering med-
an ein arbeider med ei fil. Ein kan forandre filnamnet ved
˚
a angje eit stinamn
etter :w:
:w nyttnamn.fil
Dette lagar ein ny fil med det nye namnet, vi vil gje ekko p
˚
a kommandoen,
f.eks :
:w nyttnamn.fil
nyttnamn.fil” 12 lines, 593 characters
Denne meldinga vil kome fram p
˚
a siste linje og erstatte :w–kommandoen. Der-
som fila eksisterer allereie vil vi gje feilmelding og nekte
˚
a lagre (vanlegvis,
dette g
˚
ar an
˚
a konfigurere).
:w nyttnamn.fil
nyttnamn.fil” File exists - use ”w! nyttnamn.fil” to overwrite
Ein kan tvinge vi til
˚
a overskrive fila uansett og øydelegge innholdet p
˚
a den
gamle fila ved
˚
a legge til ein ! etter :w, som opplyst i feilmeldinga. Dersom ein
ikkje har tilgang til
˚
a forandre filinnholdet vil vi gje denne feilmeldinga:
:w! nyttnamn.fil
54 KAPITTEL 7. VI
nyttnamn.fil” Permission denied
I dette tilfellet kan ein forandre rettighetane til fila (dersom ein kan det) eller
skrive innholdet i bufferet til eit anna filnamn. Det g
˚
ar an
˚
a skrive berre ein del
av bufferet ved
˚
a angje omr
˚
adet av linjer som skal lagrast. Dette gjer ein ved
˚
a angje den første linja etter :, etterfølgd av eit komma, deretter siste linje som
ønskjer
˚
a lagre:
:4,18w nyttnamn.fil
Berre linjer f.o.m 4 og t.o.m 18 vil bli lagra i fila, og det interne bufferet i vi
vil vere uforandra. Ein kan kombinere lagre– og avsluttoperasjonen med kom-
mandoen :
:wq nyttfilnamn.fil
Denne kommandoen lagrar innholdet i bufferet og returnerer til skallet. Fr
˚
a
kommandomodus kan ein ogs
˚
a bruke kommandoen ZZ som eit synonym for :wq
for
˚
a lagre innholdet og returnere til skallet.
7.1.7 Lese inn filar
Kommandoen :r verkar p
˚
a same m
˚
ate som :w, berre at denne kommandoen les
ei fil inn i det interne bufferet etter st
˚
aande linje. vi gjev ekko p
˚
a kommandoen
:
:r gammel.fil
gammel.fil” 12 lines, 234 characters
Denne kommandoen kan brukast til
˚
a lese ei fil inn i tomt buffer eller ta innhol-
det i ei fil
˚
a inn i det st
˚
aande bufferet. Dersom ein spesifiserer eit linjenummer
før r, som i dette eksemplet:
:7r gammel.fil
vil vi plassere innholdet fr
˚
a fila etter den 7. linja istadenfor etter st
˚
aande linje.
Leseoperasjonen forandrar st
˚
aande linje til
˚
a bli siste linje i den fila som blir
lese inn i bufferet.
7.1.8 Viktige kommandoar
7.1.9 Skifte mellom filar
Dersom ein har starta vi med ei liste av filar, vil kommandoen :n stenge den
st
˚
aande fila og skifte til neste fil i fillista. I vi er det berre mulig
˚
a redigere ei fil
om gongen, det er alltid berre ei st
˚
aande fil. Ein kan tvinge vi til skifte fil med
:n! dersom ein ikkje vil lagre endringane sidan forrige lagring. Dersom ein vil
sj
˚
a namnet p
˚
a st
˚
aande fil, kan ein bruke linje-kommandoen :f eller kommando-
modus funksjonen Ctrl-g. vi vil skrive ut filnamn og størrelse p
˚
a siste linje.
7.1.10 Oppfrisking av skjerm
Dersom skjermen blir rotete av ein eller anna grunn, kan ein trykke Ctrl-l i
kommandomodus. Dette tvingar vi til
˚
a friske opp skjermen og vise innholdet
7.1. INTRODUKSJON 55
Skift til tekstmodus Flytte markøren
i Før markøren l eller mellomrom Eit steg til høgre
a Etter markøren h eller slett bakover Eit steg til venstre
I P
˚
a starten av linja j eller + Ei linje ned
A P
˚
a enden av linja k eller - Ei linje opp
o Opne ei linje nedanfor $ Til enden av linja
O Opne ei linje ovanfor ˆ Til starten av linja
w Neste ord
e Til enden av ordet
b Forrige ord
nG G
˚
a til linje n
Slett Forandre
dw Ord cw Forandre ord
dd Linje cc Forandre linje
D Til enden av linja C Til enden av linja
x Tegnet over markøren r Tegnet over markøren
R Heilt til Esc
Andre funksjonar Skjerm kontroll
u Angre siste kommando Ctrl–d Rull framover
/ Søk framover Ctrl–u Rull bakover
? Søk bakover Ctrl–f Neste skjerm
n Neste forekomst Ctrl–b Forrige skjerm
. Gjenta siste kommando Ctrl–l Frisk opp skjerm
Y Kopier linje
p Lim inn under
P Lim inn ovanfor
ZZ Lagre og avslutt
Esc Avbryt kommando
Merk
I tekstmodus I linjemodus
Slett bakover Slett tegn :w Lagre fil
Ctrl–w Slett ord :q Aslutt
Esc Kommando-modus :wq Lagre og avslutt
:n Neste fil
:r Les inn fil
:e Editer fil
:f Filnamn
:set Forandre oppsett
:! Utgang til skall
:n G
˚
a til linje n
:addr Hopp til addr
Tabell 7.1: Viktige kommandoar i vi
56 KAPITTEL 7. VI
i bufferet p
˚
a nytt. Dette er ofte nyttig n
˚
ar det f.eks kjem meldingar fr
˚
a systemet
og forstyrrar skjermbildet medan ein arbeider.
7.1.11 Utgang til skall
Utropsteiknet (!) har ei rekkje bruksomr
˚
adar i linjemodus. Ein kan bruke
:! kommando . . .
for
˚
a suspendere vi temporært og eksekvere kommandoar i eit subskall. N
˚
ar
kommandoen er ferdig kjem ein tilbake i vi. Eksempel :
:!ls
Denne kommandoen vil utføre ls p
˚
a st
˚
aande katalog. For
˚
a f
˚
a eit fullt skall kan
ein bruke kommandoen:
:sh
vi vil bli suspendert, og ein vil g
˚
a ut i eit nytt skall. N
˚
ar ein er ferdig med skallet
avsluttar ein med exit eller Ctrl-d og ein er tilbake i vi.
7.2 Redigering med VI
No n
˚
ar vi har g
˚
att igjennom basisoperasjonane kan ein starte
˚
a bruke vi til riktig
redigeringsarbeid. Det er lurt
˚
a lage seg testfilar som ein kan trene p
˚
a.
7.2.1 Angre siste kommando
Ein av dei mest viktige kommandoane er :u (engelsk for undo). vi tek vare p
˚
a
den siste forandringa som blir gjort p
˚
a bufferet, denne kan ein angre n
˚
ar som
helst og f
˚
a tilbake innholdet slik som det var før siste kommando. Det vil seie,
at dersom ein gjer ei rekkje med kommandoar kan ein angre p
˚
a den siste.
7.2.2 Skifte fr˚a kommandomodus til tekstmodus
Det finst mange kommandoar som skiftar fr
˚
a kommandomodus til tekstmodus.
Ein kan flytte dit ein vil i fila og detter skifte modus. Husk alltid
˚
a trykke Esc for
˚
a skifte tilbake til kommandomodus. Kommandoen o (engelsk : open), opnar ei
ny linje etter st
˚
aande linje og plasserer markøren p
˚
a starten av denne nye linja.
Det same gjer kommandoen O bortsett ifr
˚
a at denne vil opne ei ny linje ovan-
for st
˚
aande linje. Bruk a for
˚
a skrive inn tekst etter det tegnet markøren st
˚
ar p
˚
a.
Kommandoen A skiftar til tekstmodus p
˚
a enden av st
˚
aande linje. Likeeins vil
i gjere det mulig
˚
a starte skriving av tekst inn framfor der markøren st
˚
ar, og I
g
˚
ar over i tekstmodus p
˚
a starten av st
˚
aande linje. Bruk Esc for
˚
a komme tilbake
til kommandomodus.
7.2.3 Tekstmodus
Dei fleste kommandoane i tekstmodus er intuitive. N
˚
ar ein st
˚
ar i tekstmodus
vil stort sett alt bli oppfatta som tekst. Dersom ein gjer ein feil kan ein slette dei
siste tegna med slett bakover (backspace) heilt til ein kjem til venstre margen, vi
7.2. REDIGERING MED VI 57
vil ikkje tillate
˚
a slette tekst bak starten p
˚
a linja. For
˚
a redigere forrige linje m
˚
a
ein skifte til kommandomodus og posisjonere seg til feilen og rette opp. Ctrl-
w slettar st
˚
aande ord utan at ein treng
˚
a g
˚
a ut av tekstmodus. Ein vanleg feil
er
˚
a skrive kommandoar medan ein er i tekstmodus, utan
˚
a trykke Esc først.
Sjølv vi–ekspertar gjer denne feilen, eller gjer den motsette feilen ved prøve
˚
a skrive tekst n
˚
ar ein er i kommandomodus. Denne feilen er meir destruktiv,
fordi ein kan gjere opptil fleire feil og det kan ikkje rettast opp ved
˚
a skrive u.
Den einaste m
˚
aten
˚
a unng
˚
a store feil i denne forbindelsen er
˚
a lagre fila ofte.
7.2.4 Flytting rundt i bufferet
Kommandomodus blir vanlegvis brukt til
˚
a flytte rundt i bufferet, og
˚
a en-
tre tekstmodus p
˚
a forskjellige m
˚
atar for
˚
a redigere teksten. Kommandoen w
gjer at markøren hoppar framover mellom ord, markøren hoppar ogs
˚
a mellom
linjer. Kommandoen b hoppar mellom ord bakover. Mellomrom–tasten flyttar
markøren ein posisjon framover medan slett-bakover–tasten (backspace) flyttar
markøren ein posisjon bakover. Retur–tasten flyttar markøren til første posi-
sjon p
˚
a neste linje, (minus) flyttar markøren til første posisjon p
˚
a forrige linje.
ˆ flyttar markøren til første posisjon p
˚
a st
˚
aande linje, og $ til enden av st
˚
aande
linje. Alle desse flytte kommandoane kan ta eit numerisk argument, eller antal
gongar, dette m
˚
a ein angje før kommandoen.
5w
Dette flyttar markøren fram 5 ord.
6-
Her vil ein flytte til starten p
˚
a linja som ligg 6 linjer bak st
˚
aande linje. H vil
gjere øverste linje p
˚
a skjermen til st
˚
aande linje, L gjer siste linje p
˚
a skjermen
til st
˚
aande linje. Ein kan hoppe til ei bestemt linje med G, ved
˚
a oppgje linje-
nummeret først. Enkelte kommandoar i linjemodus kan ogs
˚
a brukast til
˚
a flytte
seg rundt i teksten. For
˚
a flytte til første linje kan ein skrive :1, og siste linje
:$. Den st
˚
aande linja er symbolisert med namnet . (punktum
2
). Ein kan f.eks
bestemme linje-nummer for st
˚
aande linje med linje-kommandoen :
:.=
Som respons vil vi skrive ut linjenummeret p
˚
a siste linje p
˚
a skjermen. P
˚
a same
m
˚
aten viser :
:$=
vi linjenummeret for siste linje i bufferet. Ctrl-f flyttar fram ei skjermside, Ctrl-b
flyttar bakover ei skjermside. Mange terminalar har piltastar, vi vil vanlegvis
prøve
˚
a bruke dei dersom TERM er sett til riktig terminal. Sidan desse tastane
kan variere mellom tastatur m
˚
a ein av og til eksperimentere litt for
˚
a finne
ut kva som verkar. Dersom terminalen ikkje har piltastar skal følgande tastar
fungerer, h for venstre piltast, l for høgre piltast, j for pil ned og k for pil opp.
2
I UNIX– samanheng ofte kalla dot
58 KAPITTEL 7. VI
7.2.5 Søking etter tekst
Ein variant av linjemodus tillet ein
˚
a søke etter tekst i bufferet. Søket startar p
˚
a
st
˚
aande posisjon, fortsetter gjennom bufferet, enten til enden p
˚
a bufferet eller
til starten (ein kan søke b
˚
ade bakover og framover) og tilbake til utgangspunk-
tet. Ein brukar / (skr
˚
astrek) og ein streng for
˚
a utføre eit søk. Denne komman-
doen :
/streng
vil søke etter streng i bufferet. Kommandoen fungerer p
˚
a same m
˚
ate som andre
kommandoar i linjemodus. N
˚
ar ein skriv inn / vil markøren hoppe til siste linje
og alle tastetrykk gjev ekko p
˚
a skjermen, søket startar n
˚
ar ein trykker Retur
tasten. P
˚
a same m
˚
ate kan ein søke bakover i bufferet med ?.. N
˚
ar ein har funne
ein forekomst kan ein søke etter neste forekomst med / eller ? pluss Retur. Det
g
˚
ar ogs
˚
a an
˚
a gjenta søket berre ved
˚
a taste n (for next). Legg merke til at n
˚
ar
ein brukar / og ? kan ein skifte retning for søket. vi lagrar søkestrengen, dersom
ein ikkje har spesifisert ein søkestreng vil vi gje feilmelding :
/
No previous regular expression
Søkestrengen kan vere mykje meir avansert enn enkle tekststrengar, vi vil g
˚
a
igjennom regulære uttrykk seinare i kurset.
7.2.6 Forandre tekst
Fleire operatorar entrar tekstmodus og tillet endring av eksisterande tekst.
Kommandoen r etterfølgd av eit tegn erstattar tegnet under markøren med
det tegnet ein tastar inn. Kommadoen returnerer til kommandomodus, sidan
den forandrar berre eit tegn. Kommandoen R gjer at ein kan forandre s
˚
a man-
ge tegn ein vil, med start p
˚
a st
˚
aande posisjon. Denne kommandoen returnerar
ikkje til kommandomodus, men ein kan berre forandre til enden p
˚
a linja. N
˚
ar
ein trykkjer Esc etter denne kommandoen vil alle tegn som ikkje vart over-
skrevne eksistere som før. Kommandoen C verkar nesten p
˚
a same m
˚
ate som R,
men den har ein viktig forskjell, heile linja blir forandra sjølv om ein berre tasta
inn eit tegn før ein g
˚
ar tilbake til kommandomodus. For
˚
a sl
˚
a saman st
˚
aande
og neste linje trykkjer ein J (join). Skal ein dele ei linje er det enklaste
˚
a skifte til
tekstmodus i den posisjonen ein vil dele linja og sette inn linjeskift ved
˚
a trykke
Retur.
7.2.7 Slette tekst
vi inneheld ogs
˚
a kommandoar for
˚
a slette delar av tekst. Kommandoen x slet-
tar tegn i st
˚
aande posisjon. Ein kan bruke 4x for
˚
a slette dei neste 4 tegna fr
˚
a
st
˚
aande posisjon. Kommandoen dd slettar st
˚
aande linje, og 7dd slettar 7 linjer
fr
˚
a og med st
˚
aande linje. Ord slettar ein med dw, og dei neste 3 orda med 3dw.
For
˚
a forandre ordet ved st
˚
aande posisjon tastar ein cw, og 7cw for
˚
a forandre
dei neste 7 orda. Kommandoen cc forandrar st
˚
aande linje, 6cc dei neste 6 linje-
ne. Kommandoen D slettar fr
˚
a st
˚
aande posisjon til enden av linja. Ein kan ogs
˚
a
bruke linjemodus til
˚
a slette tekst:
7.2. REDIGERING MED VI 59
:56,61d
Denne kommandoen vil slette f.o.m linje 56 t.o.m linje 61.
7.2.8 Gjenta siste kommando
Kommandoen . (punktum) gjentek siste kommando p
˚
a st
˚
aande posisjon. Dette
inkluderer innskriving av tekst og sletting s
˚
avel som erstatting.
7.2.9 Klipp, kopier og lim
vi har mange interne lagringsplassar, eller buffer. Blokker av tekst kan takast
ut av ei fil og inn i eit buffer, deretter tilbake til fila fr
˚
a bufferet. Det eksisterar
eit standard buffer i tillegg til hovedbufferet, ein kan gje namn til slike buffer,
namnet best
˚
ar av eit tegn. N
˚
a ein gjer operasjonar p
˚
a bufferet brukar ein dette
namnet for
˚
a referere til bufferet. Desse operasjonane verkar fr
˚
a kommando-
modus. Desse operasjonane er i UNIX–terminologi kjent som yank (kopier) og
put (lim). Alle operasjonane verkar p
˚
a blokker av linjer, for
˚
a klippe ei linje
m
˚
a dele linja i to og klippe ut den delen ein vil ha. Ein kan kopiere ein del
av teksten inn i eit buffer med Y (yank). Y kan ta antal linjer den skal kopiere.
Kommandoen:
7Y
vil kopierer st
˚
aande og dei 6 neste linjene inn i standard bufferet. Etterp
˚
a kan
ein flytte markøren dit ein skal og trykke p (put) og teksten vil bli lima inn
etter st
˚
aande linje. P vil lime inn teksten ovanfor st
˚
aande linje. For
˚
a gjere ein
cut (klipp) og paste (lim) kan ein slette ei blokk med linjer med ein kommando
som f.eks 7dd. Dette slettar st
˚
aande linje pluss dei 6 neste linjene fr
˚
a fila. Det
som eigentleg skjer er at denne blokka blir lagt i standard bufferet, slik at etter
at ein har posisjonert markøren kan ein berre trykke p eller P for
˚
a lime alt
inn igjen i fila. N
˚
ar ein har lima inn innholdet i bufferet vil innholdet framleis
eksistere slik at ein kan gjere fleire limeoperasjonar. S
˚
a snart ein gjer ein anna
redigeringskommando vil innholdet forsvinne, og siste operasjon vil erstatte
innholdet. Ein kan lagre tekst i buffer meir permanent ved
˚
a gje bufferet eit
namn, ved
˚
a angje ¨ og ein bokstav fr
˚
a a – z.
aY
Denne kommandoen vil kopiere 7 linjer inn i bufferet a. vi kan ha 26 slike buffer
samstundes. Eit slikt buffer kan kopierast inn i teksten igjen med kommando-
en:
¨ap
som kopierer innholdet i bufferet a inn i fila etter st
˚
aande linje.
7.2.10 Klipp, kopier og lim ved hjelp av linjenummer
Linjemodus har kommandoar som kan bruke linjenummer for
˚
a kopiere og flyt-
te blokker med tekst. For eksempel kan ein bruke kommandoen :
:3,5m9
60 KAPITTEL 7. VI
til
˚
a flytte linjene f.o.m. 3 t.o.m 5 til etter linje 9. P
˚
a same m
˚
aten med :
:3,5t9
vil den kopiere linjene f.o.m. 3 t.o.m 5 til etter linje 9. Dersom ein skal kopiere
berre ei linje oppgjev ein berre eitt nummer, f.eks :
:6t12
Linjenummer kan eigentleg vere fulle regulære uttrykk som adresser, det skal
vi sj
˚
a nærare p
˚
a i dei neste kapitla.
7.2.11 Konfigurering av vi
vi har mange opsjonar som kan forandre oppførselen. Desse opsjonane kan
settast p
˚
a to m
˚
atar, ved hjelp av den s
˚
akalla set–kommandoen eller ved ein
miljøvariabel. Kommandoen set kan brukast inne i vi i linjemodus eller ved
hjelp av ei oppstartfil som heiter .exrc. Oppstartfila skal ligge p
˚
a heimekatalogen.
Miljøvariabelen heiter EXINIT, dersom miljøvariabelen eksisterer vil vi bruke
den istaden for oppstartfila.
echo $EXINIT
set autoindent|set autowrite|set noflash|set hardtabs=0|set ignorecase
|set redraw|set report=10|set scroll=23|set shell=/bin/bash|set shiftwidth=2
|set showmatch|set showmode|set tabstop=8|set notimeout|set warn
|set wrapmargin=0|set writeany
Dei same kommandoane kan brukast i .exrc med ein kommando p
˚
a kvar linje.
Eg trur det har lite hensikt
˚
a ramse opp alle opsjonane som kan brukast til
˚
a
sette opp vi. Dei som er nok interessert til
˚
a bruke denne editoren vil ogs
˚
a greie
˚
a grave opp dokumentasjon. Det som kanskje er interessant i denne samanhen-
gen er ein ogs
˚
a ein kommando som heiter map, denne kan brukast til
˚
a omdefi-
nerer tastar slik at enkle tastetrykk kan f
˚
a vi til
˚
a gjere komplekse operasjonar.
Dessverre s
˚
a er denne funksjonen vanskeleg slik at det er eit f
˚
atal personar som
mestrar dette.
7.2.12 Filtrering av tekst inne i vi
Ein kan f
˚
a data fr
˚
a standard ut fr
˚
a alle kommandoar inn i tekstbufferet med :
:r !kommando
Dette les standard ut fr
˚
a kommandoen inn i fila p
˚
a st
˚
aande linje. P
˚
a same m
˚
ate :
:w !kommando
blir innholdet i tekstbufferet standard inn til kommando. Ein kan ogs
˚
a filtrere
ein del av fila gjennom ein røyrledning, slik som her:
:34,47 !kommando
Dette skriv linjene f.o.m 34 t.o.m. 47 inn i standard inn til kommando, slettar
desse linjene, og erstattar dei med dataene fr
˚
a standard ut fr
˚
a kommando. Til
slutt vil eg berre anbefale eit formateringsverktøy fmt som flettar saman korte
linjer. Prøv:
7.2. REDIGERING MED VI 61
:1,$ !fmt
p
˚
a ei testfil for
˚
a sj
˚
a korleis dette fungerer. Dette er iallefall ein enkel m
˚
ate
˚
a
sikre at alle linjene har ei passeleg lengde.
Kapittel 8
Emacs
Editoren Emacs er ein anna fullskjerm teksteditor. Den har etter kvart vore like
populær som vi,— men den er ikkje ein del av eit standard UNIX system. Emacs
er likevel tilgjengeleg for alle versjonar av UNIX p
˚
a alle moglege plattformer.
Vi kan vel seie at Emacs er gjerne det første eller andre programmet som vert
tilpassa ein ny plattform etter kvart som dei kjem p
˚
a markedet
1
.
Emacs har ein filosofi som er ganske forskjellig fr
˚
a vi, men akkurat som vi er
ikkje Emacs ein tekstbehandler i moderne betydning.
Begge formaterer hverken tekst eller grafikk. Akkurat som vi, tillet Emacs ein
˚
a bruke alle tenkelege terminalar, spesifisert med miljøvariabelen TERM der-
som ein kjører utan eit grafisk miljø. Dersom man kjører eit grafisk miljø vil
som regel Emacs kjøre i eit eige vindu. I tilleg har Emacs eit makrospr
˚
ak der
ein kan bygge opp avanserte mulighetar. Makrospr
˚
aket ligg veldig nær opp til
programmeringsspr
˚
aket Lisp,— og blir defor kalla elisp.
8.1 Fundamentale konsept for Emacs
Operativt er Emacs fundamentalt forskjellig fr
˚
a vi, der finst ingen skrivemodus
eller kommandomodus,— vanlegvis vil alle vanlege tegn som blir tasta inn
bli oppfatta som tekst. Dette betyr at Emacs er alltid i skrivemodus. Faktisk,
begrepet modus har eit heilt anna bruk i Emacs, det referer ikkje til kommando-
statusen for editoren men til dei opsjonane som er sett. Emacs har s
˚
akalla major
modus for
˚
a redigere L
A
T
E
X, C, Java, Python, Lisp, HTML, CSS, XML, osv. . .
2
Dvs. at Emacs vil gje deg hjelp for den typen innhold du redigerer. Major
modus er gjensidig eksklusive,— dvs. eit buffer i Emacs kan ikkje b
˚
ade vere
i C– og HTML–modus samstundes. S
˚
a finst det ogs
˚
a s
˚
akalla minor–modus som
kan kombinerast med major–modus,— som f.eks at Emacs skal vise linje– og
kolonnenummer.
1
P
˚
a http://www.gnu.org/software/emacs/ kan ein laste ned versjonar for alle populære
UNIX–variantar, Linux, MacOSX, MS–Windows og MS DOS.
2
Emacs har støtte for mange fleire typar innhold enn det eg har nemnt her.
62
8.2. STARTE EMACS 63
Kommandoar for
˚
a flytte markøren, lese og lagre filar,
˚
apne fleire linjer, osv. . . er
spesielle sekvensar av tastetrykk som startar med eit tastetrykk p
˚
a Esc eller
Ctrl. For eks, for
˚
a avslutte Emacs m
˚
a ein bruke sekvensen Ctrl-x etterfølgt av
Ctrl-c. I Emacs terminologi vert desse sekvensane gjerne oppgjeve som C-x C-
c,— der C st
˚
ar for
˚
a holde nede Ctrl–tasten medan ein trykker x og c. Andre
kommandoar blir innleia med Esc, f.eks som kommandoen Esc-d, som slettar
neste ord. I Emacs terminologi vert desse kommandoane oppgjevne som M-d,
der M st
˚
ar for Meta,— likevel meinar ein Esc-d. Det som er viktig
˚
a huske p
˚
a
er at alle teiknsekvensar som ikkje startar med Ctrl eller Esc vert oppfatta som
tekst. Heretter vil eg holde meg til denne notasjonen for kommandoane i Emacs.
Emacs brukar stort sett alle Ctrl sekvensar for korte funksjonar, medan sekven-
sar som C-x og M-x introduserer lenger sekvensar med spesifikke betydningar,
som f.eks C-x C-s for
˚
a lagre buffer eller M-x-? for
˚
a vise alle kommandoar som
er tilgjengeleg.
Der er ogs
˚
a ein slags laus logikk i bruken av Ctrl og Esc i Emacs. Ctrl–kommandoane
opererer vanlegvis p
˚
a enkelte teikn og linjer, Meta–kommandoane p
˚
a ord og
setningar,— og Ctrl-Meta–kommandoane er ein slags kompleks kombinasjon
av begge.
Mange foretrekk den moduslause m
˚
aten i Emacs framfor dei tre modus under
vi, sjølv om kommandoane under Emacs er vanskelege
˚
a lære.
8.2 Starte Emacs
Ein kan starte Emacs med eit eller fleire filnamn som argument:
zevs# emacs fila.mi . . .
Filane, dersom ein oppgjev det, vil bli lesen inn i hoved (eng: main) til Emacs.
Andre kommandoar er +n, der n er eit nummer, vil medføre at Emacs vil plasse-
re markøren p
˚
a linje n n
˚
ar den startar. Det finst ei rad andre argument som ein
kan spesifisere p
˚
a kommandolinja,— særleg i kombinasjon med X–Windows.
Etter at Emacs er lasta, kan ein lese fleire filar inn i andre buffer, og redige-
re p
˚
a opptil 12 filar samstundes. Kommandoen C-x C-f les ei fil inn i eit nytt
buffer. Dette er forskjellig fr
˚
a kommandoen C-x C-r som les ei fil inn i st
˚
aande
buffer og markerer bufferet berre for lesing. Kommandoen C-x C-i les ei fil
fil inn i st
˚
aande buffer ved st
˚
aande markørposisjon utan
˚
a slette innholdet av
bufferet. Alle desse kommandoane spør etter namnet p
˚
a fila. Her er eit typisk
vindu (figur 8.1) etter at Emacs er lasta. Øverst ser vi st
˚
aande linje og alle om-
liggande linjer,— ein kan sjølvsagt forandre størrelse p
˚
a vinduet med Emacs
kommandoar f.eks C-xC-m (for change mode). I den utheva linja lenger nede i
vinduet ser vi namnet Emacs, deretter filnamnet eller buffer namnet og modus
og/eller opsjonane som er sett(“Fundamental” i dette tilfellet). Til slutt viser
Emacs kor stor del av fila som er over toppen p
˚
a vinduet. Bindestrekane —–
indikerar at fila har ikkje vorte forandra sidan ein starta
˚
a redigere,— dette
vil forandre deg til –**- s
˚
a snart ein forandrar innholdet i bufferet. Den siste
linja i vinduet er ei spesiallinje som skal inneholde informasjon, reservert for
beskjedar og kommandoar.
64 KAPITTEL 8. EMACS
Figur 8.1: Eit typisk vindu for Emacs
8.3 Deling av vindu
I Emacs kan ein splitte vinduet slik at ein kan vise og redigere to buffer i det
same vinduet. Ein kan lese ei anna fil inn i eit anna buffer med kommandoen C-
x C-f , ein kan splitte skjermen i to ved kommandoen C-x 2, Emacs vil spørre om
namn eller nummer p
˚
a det nye bufferet. Deretter kan ein returnere til berre eit
buffer ved
˚
a taste C-x 1, igjen vil Emacs spørre etter namnet eller nummeret p
˚
a
det bufferet som skal visast i vinduet. Sjølv om ein ikkje viser innhold av buffer
p
˚
a skjerm eller i vindu,— ligg framleis innholdet i minnet under oppsyn av
Emacs. Før ein kan avslutte Emacs vil den spørre om ein vil lagre eller ignorere
alle forandringar p
˚
a dei buffer som er endra. Ein kan hoppe til neste buffer
med kommandoen C-x C-o,— eller ein kan vise alle buffer med C-x C-b.
8.4 Lagre buffer
Etter at ein har gjort forandringar p
˚
a eit buffer kan ein skrive det tilbake med
C-x C-w. Dermed vil følgande beskjed dukke opp p
˚
a siste linja i vinduet:
Write file:
Det m
˚
a ein skrive inn eit filnamn. Ein kan trykke <RETUR> og det same fil-
namnet vil brukt, eller ein kan skrive inn eit nytt namn. Ein kan ogs
˚
a trykke
C-g for
˚
a avbryte operasjonen. For
˚
a skrive det aktive bufferet tilbake til det
aktive filnamnet kan ein bruke kommandoen C-x C-s.
8.5. AVSLUTTE EMACS 65
8.5 Avslutte Emacs
Kommandoen C-x C-c (for close) vert brukt til
˚
a avslutte Emacs og g
˚
a tilbake til
skallet. Dersom ein prøvar
˚
a avslutte utan
˚
a lagre vil Emacs spørje om den skal
lagre fila først før den avsluttar.
8.6 Hjelpsystemet
Dei fleste versjonar av Emacs tilbyr eit ganske omfattande hjelpesystem. Kom-
mandoen C-h entrar eit stort hjelpsubsystem. Etter C-h kan ein taste inn ein
? eller ein ny C-h for
˚
a f
˚
a hjelp med hjelpesystemet. Alternativt kan ein taste
C-h c < tast > for
˚
a f
˚
a ein kort beskrivelse av funksjonen til ein tastesekvens.
Ein lenger beskrivelse kan ein f
˚
a med C-h k < tast >. Det inverse,— tastetrykka
som er nødvendig for
˚
a kunne utføre ein funksjon, kan ein f
˚
a vist med kom-
mandoen C-h w kommando dersom ein kan anta at ein veit det rette namnet p
˚
a
denne funksjonen. Det kan vere lurt
˚
a lære seg hjelpesystemet til Emacs der ein
har tenkt
˚
a bruke denne editoren mykje.
8.7 Flytting rundt i bufferet
Det finst ei rekkje med kommandoar som flyttar markøren. Framover C-f , bak-
over C-b, neste linje C-n, forrige linje C-p. Meir linjeorienterte flytt,— til starten
p
˚
a linja C-a, til enden p
˚
a linja C-e. Til starten p
˚
a buffer M-< og til enden p
˚
a
buffer M->. Bakover eit ord M-b, fram eit ord M-f , ei skjermside fram C-v og ei
skjermside bakover M-v. Mange av desse kommandoane kan repeterast eit an-
tall gongar dersom ein oppgjev eit nummer. Dette gjer ein p
˚
a følgande m
˚
ate,—
for eksempel, flytte fram 8 ord, M-8 M-f.
8.8 Sletting av tekst
Sidan alle “normale” tegn ein skriv inn blir oppfatta som tekst,— vil det seie at
det er ingen problem med
˚
a skrive inn tekst. N
˚
ar det gjeld
˚
a slette tekst finst det
ein del spesielle kommandoar. Tasten <BackSpace> (slett bakover) slettar tegn
bak markør, og C-d slettar tegn “under” markør. Kommandoen C-k slettar res-
ten av linja eller skøytar saman st
˚
aande linje med neste linje dersom ein st
˚
ar
p
˚
a enden av linja. Dersom ein gje inn eit argument p
˚
a 0 vil Emacs teksten fr
˚
a
startem p
˚
a linja til markøren. Eit argument større enn 0 vil slette det antall lin-
jer nedanfor st
˚
aande linje, eit argument mindre enn 0 vil slette det antal linjer
ovanfor st
˚
aande linje.
8.9 Merking i Emacs
Meir kompleks sletting og tekst flytting involverer merking. Emacs tillet opp-
til 12 merker, berre eit for kvart buffer. Sett eit merke med C-<Space>. Merke
vil ikkje bli vist p
˚
a skjermen i dei fleste versjonar av Emacs. N
˚
ar ein flyttar
markøren vil merket ikkje flytte seg,— dermed kan ein flytte eller slette tekst
mellom merket og st
˚
aande posisjon. Dersom ein flyttar til eit anna buffer, vil
66 KAPITTEL 8. EMACS
Flytte makør Sletting
C-f Fram ei tegn C-d Slett eit tegn
C-b Bak eit tegn <BkSpc> Slett bakover
C-n Neste linje C-k Slett til enden av linja
C-n Forrige linje M-d Slett eit ord
C-a Start p
˚
a linje M-k Slett resten av setning
C-e Til enden p
˚
a linje C-y Lim inn sletta tekst
M-f Fram eit ord M-y Bytt kopiert tekst med slette stakk
M-b Bak eit ord
M-a Start p
˚
a setning Buffer
M-e Enden av setning C-x 2 Splitt vindu
M-[ Start p
˚
a paragraf C-x 1 Kun eitt buffer i vindu
M-] Enden p
˚
a paragraf C-b Til namngitt buffer
M-< Start p
˚
a buffer C-x C-b List alle buffer
M-> Enden p
˚
a buffer C-x o Til anna buffer
C-v Neste side C-x k Slett buffer
M-v Forrige side C-y Lim inn
M-n M-r Ned n linjer
M-x goto-line n Til linjen Diverse
C-x C-c Avslutt Emacs M-! Utgang til skall
C-l Oppfrisk vindu
Filer C-h Hjelp
C-x C-f Les inn fil C-h w Tastetrykk for kommando
C-x C-s Lagre buffer C-x u Angre
C-x C-w Lagre som C-g Avbryt kommando
C-x i Inkluder fil
C-o Sett inn blank linje Makro
C-x ( Start makro
Omr
˚
ader C-x ) Slutt makro
C-<space> Set merke
C-w Slett fr
˚
a merke til markør
M-w Kopier til slette stakk
C-x X-x Bytt markør og merke
Søking
C-s Søk framoveretter streng
C-r Søk bakover etter streng
C-M-s Søk framover til RE
C-M-r Søk bakover til RE
Tabell 8.1: Viktige kommandoar i Emacs
8.10. KLIPP OG LIM I EMACS 67
merket holde seg p
˚
a plass i det “gamle” bufferet, og ein kan sette eit merke i
det aktive bufferet.
Fordi merket ikkje blir vist p
˚
a skjermen er det vanskeleg
˚
a huske kor ein sette
merket. Derfor har ein ein kommando som byttar om plasseringa av merket
og markørposisjonen,— C-x C-x. For
˚
a returnere til den opprinnelege markør-
posisjonen (og flytte merket tilbake), er det berre
˚
a trykke C-x C-x p
˚
a nytt.
8.10 Klipp og lim i Emacs
N
˚
ar materiale blir sletta fr
˚
a tekstbufferet, vil Emacs holde materialet i ein slags
slette stakk. Dei siste
˚
atte slettingane vert vedlikeholdt p
˚
a denne stakken. Van-
legvis vil ein slette tekst ved
˚
a g
˚
a til starten p
˚
a blokka, sette merke, g
˚
a til enden
av blokka og slette den med C-w. Teksten er ikkje borte, s
˚
a no kan ein berre g
˚
a
til riktig posisjon og trykke C-y. For verkeleg
˚
a slette eit heilt omr
˚
ade, slett det
med C-w, og gløym det.
Ein kan sjølvsagt bruke C-y til angre dersom ein slettar feil tekst, sidan Emacs
vedlikeheld denne stakken. Emacs har ogs
˚
a separate angre kommandoar.
Kommandoen M-w kopierer tekst fr
˚
a st
˚
aande posisjon til merke, og legg teks-
ten p
˚
a slette stakken. Denne kommandoen forandrar ikkje teksten i st
˚
aande buf-
fer, s
˚
a derfor blir denne kommandoen saman med C-y brukt til
˚
a kopiere tekst
innan for det same bufferet eller til andre buffer.
8.11 Søk og erstatt i Emacs
Emacs har mange gode søke operatorar som kan lokalisere tekststrengar eller
regulære uttrykk i bufferet. Kommandoen C-s (for search) startar aksjonen, og
Emacs spør etter strengen. Søket startar p
˚
a st
˚
aande posisjon og fortset til enden
p
˚
a bufferet. For
˚
a søke bakover brukar ein kommandoen C-b. N
˚
ar strengen er
lokalisert kan ein søke p
˚
a nytt etter sen same strengen ved
˚
a trykke C-s for
˚
a
søke vidare i same retning eller C-r for
˚
a reversere søkeretninga.
Ein kan bruke ei likanande prosedyre for
˚
a substituere strengen etter at Emacs
har funne den. Kommandoen M-x replace-string startar operasjonen. I dette
tilfellet startar ein inn strengen replace-string etter M-x og trykker <RETUR>
etter dette, dermed vil Emacs spørre etter strengen som skal erstattast. Trykk
<RETUR> n
˚
ar ein er ferdig og Emacs vil spørre etter strengen som skal settast
inn. Emacs vil erstatte alle forekomstar av den første strengen med den andre,—
ver forsiktig!.
For at det ikkje skal vere nødvendig
˚
a ta s
˚
a stor risiko som ved forrige kom-
mando, finst ein kommando som vil sørje for kvar forekomst den finn. Dette
er kommandoen M-x query-replace, denne fungerer p
˚
a same m
˚
ate som den for-
rige, bortsett fr
˚
a at no vil den hoppe til første forekomst og vente der, trykk y
eller <Space> for
˚
a erstatte strengen med den nye strengen. I tillegg finst det
ein likande kommando som heiter M-x query-replace-regexp som er basert p
˚
a
regulære uttrykk. Neste kapittel omhandlar regulære uttrykk.
68 KAPITTEL 8. EMACS
8.12 Utgang til skall
Som s
˚
a mange andre kommadoar kan ein ogs
˚
a i Emacs suspendere den for ei
stund medan ein g
˚
ar ut i eit skall og utfører andre operasjonar. Kommandoen
M-! gjer at Emacs vil spørje etter ei kommandolinje som den kan eksekvere.
Emacs vil d
˚
a stoppe og vente til kommandoen er ferdig, deretter oppfriske vin-
duet og fortsette som før.
Med kommandoen M-x skall vil ein starte eit interaktivt skall. N
˚
ar ein avsluttar
skallet vil ein kome tilbake til Emacs og ein kan fortsette som før.
8.13 Modus i Emacs
Emacs har fleire uavhengige modus som tillet effektiv redigering p
˚
a forskjel-
lige typar tekst. Dette er s
˚
akalla major–modus (ref. 8.1). Det finst spesifikke
modus for skrive C, Java, XML, CSS, troff, Lisp og L
A
T
E
X
3
,— for
˚
a nemne nokre
. . . Vanlegvis vil Emacs finne ut kva slags fil det er,— ut fr
˚
a filnamnet og vil
innta rett modus.
Innrykk, nøsting, linjedeling, og andre funksjonar oppfører seg forskjellig i dei
forskjellige modi. Den eksakte lista over alle modus er avhenging av versjon
og kor mange tilleggsfunksjonar systemansvarleg har lagt inn. Ein kan tvinge
Emacs til
˚
a bruke eit bestemt modus ved
˚
a sette inn ein spesiell streng p
˚
a star-
ten av fila. Moduskommandoen m
˚
a vere den første linja i fila. Skriv -*- b
˚
ade
framfor og etter namnet p
˚
a det modi ein vil bruke for denne fila.
-*- nroff -*-
Dette vil velge ei modus som er fin for redigering av nroff dokument. Sidan
denne linja inng
˚
ar i dokumentet m
˚
a ein gjere denne linja til ei kommentar-linje
i det “spr
˚
aket” ein redigerer.
8.13.1 Modifikasjonar til modus
Emacs har mulighetar for
˚
a modifisere p
˚
a modus,— dette er for
˚
a sette person-
lege preferansar og opsjonar. Dette blir kalla minor–modus (ref. 8.1) . Til dette
brukar ein kommandoen M-x,— deretter kan ein taste inn riktig funksjon enten
for
˚
a sl
˚
a den p
˚
a eller av. Ein opsjon som eg syns er nyttig, er auto-fill-mode.
8.14 Oppstartfil for Emacs
N
˚
ar Emacs startar opp vil den lese fila $HOME/.emacs. Denne fila m
˚
a inneholde
elisp–kode
4
. Emacs vil eksekvere denne koden før den oppdaterer skjermen og
gjer seg klar til
˚
a ta imot kommandoar fr
˚
a mus eller tastatur. Eit utdrag fr
˚
a
$HOME/.emacs:
Dei interesserte kan konsultere GNU Emacs Lisp Reference Manual[3] for
˚
a lære
meir.
3
Dette dokumentet er f.eks skreve i Emacs med AUCT
E
X som er ein makropakke for L
A
T
E
X.
4
Makrospr
˚
aket for Emacs.
8.14. OPPSTARTFIL FOR EMACS 69
;;
(setq load-path (cons “/usr/local/share/emacs/23.3/lisp” load-path))
(setq load-path (cons “/usr/local/share/emacs/23.3/site-lisp” load-path))
(setq load-path (cons “/usr/local/share/emacs/site-lisp” load-path))
;;
;; set emacs’ temporary directory
(setenv “TMPDIR” “/home/kalle/var/emacs”)
;;
;; where to place the unix-socket for emacsclient
(setq server-socket-dir “/home/kalle/var/emacs”)
;;
(column-number-mode 1)
(line-number-mode 1)
;;
;; start emacs as server
(server-start)
;;
;; Turn on font-lock mode for Emacs
(global-font-lock-mode t)
;;
;; set up Tramp <http://savannah.gnu.org/projects/tramp>
;; Transparent Remote File Access
(require ’tramp)
(setq tramp-default-method “ssh”)
. . .
Tabell 8.2: .emacs eksempel
Kapittel 9
Regulære uttrykk og avansert
redigering
Redigering i UNIX er basert p
˚
a regulære uttrykk. Regulære uttrykk er formelle
beskrivelsar av tekst strengar som tillet ekstremt stor grad av mønsteroperasjonar.
I dette kapitlet skal vi g
˚
a gjennom konseptet regulære uttrykk, g
˚
a gjennom ein
del kommandoar som brukar dei direkte, returnere til vi og andre editorar og
sj
˚
a korleis regulære uttrykk gjer dei til kraftige program.
9.1 Basiskonsept for regulære uttrykk
N
˚
ar ein brukar /streng i vi for
˚
a søke etter ein streng som passar, kan ein bruke
regulære uttrykk istaden for ein enkel streng. Faktisk er ein streng det minste
komplekse regulære uttrykket.
9.2 Alle enkle tegn
Eit regulært uttrykk er laga av operatorar som skal beskrive dei tegna ein skal
søke etter. Tegnet . (punktum
1
) er ein av operatorane i regulære uttrykk, og st
˚
ar
for alle enkle teikn. Uttrykket a.c vil referere til alle strengar p
˚
a 3 tegn som
startar med a og endar p
˚
a c. Trikset er
˚
a finne det uttrykket som filterer ut dei
strengane ein vil ha og ingen andre.
9.2.1 Søking ved hjelp av mengder
Operatorane [ og ] definerer mengder av tegn, alle teikn i mengda vil f
˚
ar tilslag.
Uttrykket:
[def]
vil finne alle enkelte teikn d, e og f. Uttrykket:
1
I UNIX–litteratur referert til som dot
70
9.2. ALLE ENKLE TEGN 71
[aA]
vil finne alle enkle sm
˚
a og store a. Ein kan bruke sekvensar av desse uttrykka
for
˚
a finne meir enn eitt teikn.
[sD][cF]
Dette uttrykket vil finne strengane sc, sF, Dc og DF. Ein kan bygge desse opera-
sjonane opp til store komplekse uttrykk, men ver oppmerksom p
˚
a at sekvensar
i hakeparentes finn berre eitt enkelt tegn.
9.2.2 Søking ved hjelp av rekkjer
Hakeparantesen kan ogs
˚
a søke etter eitt tegn i ei rekke av teikn i ein alfabetisk
sortert rekkje. For
˚
a finne eit heilttal i ei fil kan ein skrive :
[0123456789]
Ei kortare form er
˚
a skrive :
[0-9]
Bindestrek i hakeparentes indikerar ei rekkje av tegn. For
˚
a finne alle lovlege
engelske bokstaver kan ein skrive:
[a-zA-Z]
Uttrykket vil finne alle store og sm
˚
a bokstavar i det engelske alfabetet.
9.2.3 Unnta spesialteikn for ˚a bli oppfatta som operatorar
For
˚
a søke p
˚
a teiknet / utan at vi skal oppfatte teiknet som operator m
˚
a ein unn-
ta teiknet for
˚
a bli oppfatta som operator. Det gjer ein med teiknet \ (dessverre
veit eg ikkje om eit godt ord p
˚
a norsk).
ˆhttp:\/\/
Vil finne alle linjer som startar med http://. Ein kan unnta alle spesialteikn fr
˚
a
˚
a
bli oppfatta som spesialteikn p
˚
a denne m
˚
aten.
9.2.4 Spesialteikn for start og slutt p˚a linje
Ein kan bestemme posisjon p
˚
a linja der utrykka skal sl
˚
a til, i første rekke er det
i starten eller p
˚
a slutten av linja. Tegnet ˆ st
˚
ar for starten og $for slutten p
˚
a linja.
/ˆher
Dette uttrykket vil finne alle linjer som startar med ordet her. P
˚
a same m
˚
ate:
/her$
vi ein finne linjer som sluttar med ordet her. For
˚
a unnta desse spesialteikna
brukar ein \.
\$25
Dette uttrykket st
˚
ar for $25.
72 KAPITTEL 9. REGULÆRE UTTRYKK OG AVANSERT REDIGERING
9.2.5 Bygging av komplekse regulære uttrykk
Ein kan kombinerer eitt teiknuttrykk til
˚
a finne lange strengar :
[0-9][0-9][0-9]
Denne linja vil finne den første sekvensen av ein tallstreng som inneheld minst
3 tal. Ein kan bygge p
˚
a med
˚
a legge til * (stjerne), dette tegnet betyr 0 (null)
eller fleire forekomstar av det foreg
˚
aande eitteikns regulære uttrykket. For
˚
a
finne alle talstrengar kan ein skrive:
[0-9][0-9]*
Kvifor kunne ein ikkje bruke:
[0-9]*
som søke uttrykk?. Fordi * betyr 0 (null) eller fleire forekomstar av strengen,
dermed ville dette uttrykket berre finne starten p
˚
a kvar linje. Den første [0-9]
tvingar editoren til
˚
a finne minst eit tal. For
˚
a finne ei heil linje :
.*$
Ein kan lese denne linja som: “Start p
˚
a starten av linja (ˆ), og ta alle tegn (.) uan-
sett antal gongar (*) heilt til enden av linja ($)”. Med desse enkle byggeklossane
kan ein bygge opp store og komplekse uttrykk.
9.2.6 Den lengste strengen som passar
Ein viktig regel som ein skal huske p
˚
a er at regulære uttrykk prøvar
˚
a finne den
lengste strengen som passar. Dersom ein har strengen:
okj456edgf
og brukar uttrykket :
/[0-9][0-9]*
vil uttrykket finne alle tal, eller
456
fordi [0-9]* prøvar
˚
a finne alle tal i strengen. Komplekse uttrykk vil som regel
finne meir enn ein trur, ver forsiktig! Dette er kraftige verktøy!
9.3 Kommandoen grep
UNIX har eit filterprogram som søkjer etter strengar i filar, dette programmet
brukar regulære uttrykk. Kommandoen grep (Global Regular Expression and Print)
les standard inn eller ei liste av filar som parametre, og til skriv standard ut dei
linjene som inneheld strengen. Den første parameteren til grep er mønsteret
som programmet skal finne.
grep mønster filnamn . . .
9.3. KOMMANDOEN GREP 73
Ein kan bruke denne formen for
˚
a søkje gjennom ei liste med filar. Søkjestrengen
kan vere kva som helst av regulært uttrykk. P
˚
a si enklaste form kan mønsteret
vere ei enkel rekkje av tegn:
zevs% grep hallo gammel.fil
halloen folkens !
hallo verden
zevs%
Regulære uttrykk kan ogs
˚
a brukast som søkemønster:
zevs% grep “ˆ[a-z][0-9][0-9]*” ei.fil
Dersom ein har komplekse samansette regulære uttrykk f.eks med hakeparentesar
m
˚
a ein sette uttrykket i g
˚
aseauge for at skallet skal sende uttrykket urørt til
grep. Kommandoen grep kan ogs
˚
a brukast til
˚
a velge dei linjene som ikkje inne-
held mønsteret,— det gjer ein med ein opsjon -v:
zevs% grep -v hallo gammel.fil
dette er andre linja
og tredje linje
zevs%
Kommandoen har fleire opsjonar som -c (count), -n (number dvs. linjenummer)
og -i (ignore case), for
˚
a nemne ein del. Kommandoen blir vanlegvis brukt til
˚
a
søkje gjennom ei liste med filar, dermed blir det vanskeleg
˚
a vete kva for ei fil
som inneheld det ein er p
˚
a jakt etter. D
˚
a er det at grep eller ein av variantane
kjem til sin rett. Dersom ein startar grep med meir enn eit filnamn vil komman-
doen skrive ut filnamnet p
˚
a starten av kvar linje som f
˚
ar treff.
zevs% grep dette *
gammel.fil: dette er andre linja
nyttnamn.fil: dette er første linja i ny fil
zevs%
Dermed kan ein med ein gong finne ut kva for ei fil ein er p
˚
a jakt etter.
9.3.1 Kommandoane fgrep og egrep
Desse kommandoane er variasjonar over grep–kommandoen som optimalise-
rer søket for spesielle situasjonar. Kommandoen fgrep (fast grep) tek berre enkle
søkestrengar og ikkje regulære uttrykk. Kommandoen egrep (extended grep) til-
let eit rikare sett av operatorar enn grep,— og er ein god del tregare enn grep
p
˚
a grunn av dette. I dei flesta tilfella vil grep vere tilstrekkeleg. Kommandoen
egrep har ein del operatorar i tillegg som er litt forskjellige fr
˚
a dei vi finn i grep. I
tillegg til * (stjerne) har egrep ein operator + som betyr ein eller fleire forekomstar
av det foreg
˚
aande teiknet eller gruppe. I egrep ville:
[0-9][0-9]*
bli:
[0-9]+
74 KAPITTEL 9. REGULÆRE UTTRYKK OG AVANSERT REDIGERING
for alle heiltal. Ein kan sjølvsagt ogs
˚
a bruke den første notasjonen i egrep. Vida-
re har egrep operatoren ”? som betyr 0 (null) eller ein forekomst av mønsteret,
og operatoren | som betyr eller. Eksempel:
ˆ[0-9]?a|b
Dette uttrykket vil finne alle linjer som startar med eit tal + a eller b. Vidare tillet
ogs
˚
a egrep at ein grupperer uttrykk som best
˚
ar av fleire teikn saman. Uttrykket:
([0-9]+ab)+1243
vil finne alle forekomstar av strengen som innheld eit eller fleire heiltal etterfølgt
av ab, 1 eller fleire gongar etter kvarande, heilt til 1243 forekjem. For begge
desse kommandoane kan ein spesifisere ei fil der søkemønsteret er definert,
istaden for
˚
a bruke kommandolinja. Dette gjer ein med opsjonen -f (file).
zevs% egrep -f fila.monster fila.mi
For fgrep skal fila innholde ei liste over strengar som fgrep skal leite etter.
9.4 Søking i vi ved hjelp av regulære uttrykk
Operatorane / og ? i linjemodus tillet alle regulære uttrykk som søkestreng. Eit
spesifikt teikn er berre ei enkel form for eit regulært uttrykk. Prøv
˚
a bruk re-
gulære uttrykk n
˚
ar du redigerer,— det kan vere tungt i starten med etter kvart
bil ein finne ut at redigering vil g
˚
a mykje raskare og effektivt.
9.4.1 Substituering i vi
Operatoren :s (substitute) i linjemodus gjer at ein kan finne og erstatte strengar.
M
˚
aten ein gjer dette p
˚
a er følgande:
:s/kraftig/fleksibel
Først kommandoen :s, deretter skilleteiknet / og strengen som skal finnast og
slettast, nytt skilleteikn / og strengen som skal erstatte den første. Denne sub-
stitusjonskommandoen vil berre erstatte den første forekomsten p
˚
a st
˚
aande lin-
je, sjølv om markøren er posisjonert bakom første forekomsten. Det betyr alts
˚
a
at substitusjonskommandoen verkar p
˚
a heile linjer, uavhengig av posisjonen
for markøren p
˚
a linja. For
˚
a substituere alle forekomstane p
˚
a st
˚
aande linje, m
˚
a
ein legge til eit nytt skilleteikn / og deretter ein g (global).
:s/streng/nystreng/g
For
˚
a slette tekst kan ein angje søkestreng og utelate erstatning. Eksempel:
:s/streng//
For legge til tekst enten p
˚
a starten p
˚
a linja eller p
˚
a enden av linja brukar ein
operatorane ˆ og $.
:s/ˆ/ny tekst i starten
Og for
˚
a legge til tekst p
˚
a enden av linja:
9.4. SØKING I VI VED HJELP AV REGULÆRE UTTRYKK 75
:s/$/ny tekst p
˚
a enden
Ein avsluttande / er eigentleg ikkje nødvendig utan at ein skal ha med g.
9.4.2 Konkatenering av strengar i vi
Enkelte gongar vil ein ikkje erstatte strengen men legge til ord eller tegn. Ek-
semplet med talstrengen, dersom ein vil legge fleire teikn til ein talstreng:
afd1243def
kan ein gjere det p
˚
a følgande m
˚
ate:
:s/[0-9][0-9]*/&nystreng
Resultatet blir dermed:
afd1243nystrengdef
Operatoren & har substituert strengen i den ferdige teksten. Som vanleg kan
ein inkludere tegnet & i teksten ved
˚
a unnta den for spesiell betydning ved
hjelp av \.
9.4.3 Substituering i eit omr˚ade av linjer
Ein kan spesifisere linjer for substitusjonskommandoen, dette gjer ein ved
˚
a
oppgje linjene etter : og før s for
˚
a f
˚
a vi til
˚
a utføre denne same aksjonen p
˚
a kvar
linje i omr
˚
adet. Eksempel:
:3,8s/dette/desse
Denne kommandoen vil finne den første forekomsten av dette i omr
˚
adet f.o.m.
linje 3 t.o.m. linje 8 og erstatte dette med desse. For
˚
a erstatte alle forekomstar i
omr
˚
adet m
˚
a ein legge til /g. Eksempel:
:3,8s/dette/desse/g
For
˚
a forandre alle forekomstar i bufferet eller fila brukar ein kommandoane:
:1,$s/dette/desse/g
eller:
:%s/dette/desse/g
Her blir $oppfatta som siste linje i fila. Merk forskjellen p
˚
a betydning av $i vi, i
linjemodus oppfattar vi $som enden p
˚
a fila, i regulære uttrykk betyr $enden p
˚
a
linja. P
˚
a samme m
˚
ate med . (dot) indikerar alle tegn i regulære uttrykk, medan
st
˚
aande linje n
˚
ar tegnet blir brukt som linjeadresse.
9.4.4 Meir om linjeadressering
Ein kan bruke berre eitt linjenummer istaden for eit omr
˚
ade for
˚
a velje ei linje.
:23s/gammel/ny/g
Ein kan ogs
˚
a bruke logiske namn som f.eks:
:.s/gammel/ny/g
76 KAPITTEL 9. REGULÆRE UTTRYKK OG AVANSERT REDIGERING
og:
:$s/gammel/ny/g
Den første betyr at substitusjonen skal utførast p
˚
a st
˚
aande linje, medan den
andre p
˚
a siste linje. Enkle aritmetriske uttrykk er ogs
˚
a tillate, ein kan spesifisere
eit omr
˚
ade rundt st
˚
aande linje ved
˚
a gje relative adresser. Eksempel:
:-4,.+6s/gammel/ny
Denne kommandoen vil utføre substitusjonen p
˚
a 11 linjer, med start p
˚
a den
fjerde linja ovanfor st
˚
aande linje og g
˚
a til den sjette linja nedanfor st
˚
aande linje.
Her kan ein ogs
˚
a bruke logiske namn:
:-4,$-5s/gammel/ny/g
Dersom ein gjer feil i desse aritmetriske operasjonane vil vi prøve
˚
a gje feilmel-
ding:
:.,$+8s/gammel/ny/g
Not that many lines in buffer
Ei lovleg adresse er ikkje nødvendigvis logisk rett for akkurat det ein vil oppn
˚
a,—
s
˚
a ver forsiktig, vi spør ikkje om bekreftelse før operasjonar blir utført.
9.4.5 Kontekstadressering med regulære uttrykk
I vi har ein muligheten ogs
˚
a for
˚
a adressere seg til linjer ved hjelp av regulære
uttrykk. vi vil søke fram til første linje som innheld ein streng som passar til det
regulære uttrykket, og bruke denne linja som den st
˚
aande linje. Ein kan f.eks
erstatte første forekomst av ein streng etter st
˚
aande linje p
˚
a denne m
˚
aten:
:/gammel/s//ny
vi oppfattar den første strengen som søke operator og posisjonere seg p
˚
a den
linja som strengen vart funne, og deretter utføre substitusjonen. Ein kan sjølvsagt
søke baklengs med:
?gammel?s//ny
Legg merke til at n
˚
ar ein har definert ein søkeuttrykk vil vi ta vare p
˚
a det og
bruke det heilt til det blir definert eit nytt søkeuttrykk. Ein kan ogs
˚
a oppgje eit
omr
˚
ade ved hjelp av regulære uttrykk som adresser:
/jammen/,/tja/s/gammel/ny/g
I dette tilfellet vil vi søke fr
˚
a st
˚
aande linje til den finn jammen og utføre substi-
tusjonene heilt til den treff ei linje som inneheld tja.
Kapittel 10
Fleire kommandoar til vanleg
bruk
Kommandoane som eg har tenkt
˚
a presentere i dette kapitlet er kommandoar
som kan gjere ein del nyttige ting. Dei fleste er fundamentale byggeblokker for
skallprogram.
10.1 Bruk av miljøvariabelen PATH
Ein av dei viktigaste miljøvariabelane er PATH variabelen. N
˚
ar ein eksekverer
ein kommando ved
˚
a gje fullt stinamn:
$ /usr/bin/vi
vil skallet finne kommandoen ved
˚
a følge stien fr
˚
a rota. Dersom ein berre skriv
kommandonamnet m
˚
a skallet vete kor det skal leite etter programmet. Miljø-
variabelen PATH inneheld ei liste over katalogar der skallet skal søke for
˚
a finne
kommandoar utan at ein m
˚
a oppgje fullt stinamn. Ein typisk PATH–variabel :
zevs% echo $PATH
/home/zevs/ifi/trondk/bin:/usr/lang:/usr/ucb:/bin:/usr/bin:/usr/5bin:/usr/tran/sparc/bin:
/usr/bin/X11:/usr/local:/usr/local/bin:/usr/new:/usr/new/emacs:/usr/hosts:.:/usr/local/old:
/usr/local/old/bin:/usr/local/frame/bin:/usr/local/blab/bin:/usr/local/blab/etc:/usr/etc:
/usr/local/src/tex3.0/tex/bin:/usr/local/X11R5/gnu/bin:/usr/local/src/tex3.0/tex/bin
zevs%
Variabelen vil variere ein del, men syntaksen vil vere den same for alle UNIX–
system. PATH er ein liste database, med enkeltst
˚
aande innslag, skilde med teg-
net : N
˚
ar ein gje inn ein kommando vil skallet søke gjennom katalogane lista
i PATH, fr
˚
a venstre mot høgre, heilt til det finn ein kommando med det spesi-
fiserte namnet. Dersom skallet ikkje finn kommandoen skriv det ut ei feilmel-
ding :
zevs% ddddddd
hddddddd: Command not found.
zevs%
77
78 KAPITTEL 10. FLEIRE KOMMANDOAR TIL VANLEG BRUK
Ein kan ha fleire kommandoar med like namn p
˚
a same maskin s
˚
a lenge dei ligg
i forskjellige katalogar. Sidan katalogane i PATH blir søkt i rekkefølge avgjer
ogs
˚
a PATH kva for kommando ein utfører. Det betyr alts
˚
a at vanlege brukarar
kan kontrollerer kva for kommandoar dei vil utføre ved
˚
a forandre PATH. Dei
fleste eksekverbare program ligg p
˚
a /bin, /usr/bin og /usr/local/bin. Ein kan utvi-
de med andre katalogar dersom ein finn nyttige program eller for finne eigne
personlege program.
10.2 Kommandoen banner
Enkelte kommandoar i UNIX er laga for moro, eit eksempel er banner. Det finst
sjølvsagt seriøse bruksomr
˚
ader for denne kommandoen ogs
˚
a som f.eks for
˚
a
skille utskrifter til skrivar. Kommandoen banner skriv parametrane til program-
met til standard ut som forstørra tekst.
zevs% banner skriv dette
#### # # ##### # # #
# # # # # # # #
#### #### # # # # #
# # # ##### # # #
# # # # # # # # #
#### # # # # # ##
##### ###### ##### ##### ######
# # # # # #
# # ##### # # #####
# # # # # #
# # # # # #
##### ###### # # ######
zevs%
Kommadoen lagar separate linjer for kvart ord for
˚
a holde skjermen rein og
fornuftig.
10.3 Blanke skjermen
Kommandoen clear er eit enkelt verkøy for
˚
a blanke skjermen og skrive ut
ledeteksten fr
˚
a skallet p
˚
a øverste linje.
zevs% clear
Denne kommandoen har ingen parametre. Den skal verke p
˚
a dei fleste typar
utstyr.
10.4. KOMMANDOEN DATE 79
10.4 Kommandoen date
UNIX har veldig bra funksjonar knytta til tidsm
˚
aling. Dei fleste datamaskiner
har ganske bra brikker som kan m
˚
ale tid og kjernen i UNIX set riktig tid n
˚
ar
den bootar. Vanlege brukarar kan bruke kommandoen date for
˚
a f
˚
a skreve ut
lokal tid:
zevs% date
Thu Apr 9 09:56:59 MET DST 1992
zevs%
At klokka er sett riktig er veldig viktig for alle UNIX–system, i første rekke
for
˚
a sette eit tidsstempel p
˚
a arbeid,— men ogs
˚
a ein stor del av den interne
aktiviteten i UNIX er avhengig av riktig tid. Klokka m
˚
a alltid vere sett skikkleg
for at eit UNIX–system skal fungere korrekt.
10.5 Kommandoen cal
Kommandoen cal fell i gruppa nyttig og artig. Kommandoen utan argument
skriv ut kalenderen for inneverande m
˚
anad.
zevs% cal
April 1992
S M Tu W Th F S
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30
zevs%
Ein vel m
˚
anad ved
˚
a angje talet for m
˚
anaden som parameter til kommandoen,—
dvs. tala f.o.m. 1 t.o.m. 12. Det g
˚
ar ogs
˚
a an
˚
a angje
˚
arstal for kalenderen,—
dersom ein oppgjev berre eit tal blir dette oppfatta som
˚
arstal.
10.6 Kommandoen calendar
Kommandoen calendar er ei enkel kommando som kan liste ut avtalar som er
registrert p
˚
a ei fil. Denne kommandoen er veldig enkel dersom ein samanliknar
med andre liknande fasilitetar i UNIX. Kommandoen brukar ei avtalefil som
ligg p
˚
a heimekatalogen som heiter calendar (denne fila treng eigentleg
˚
a lig-
ge p
˚
a st
˚
aande katalog n
˚
ar kommandoen blir eksekvert). Kommandoen leitar
igjennom denne fila og leitar etter linjer som inneheld enten datoen for idag
eller morgondagen og skriv desse til standard ut.
zevs% calendar
Apr 9 : Husk ˚a handle før eg reiser heim ...
zevs%
Kommandoen kan handtere fleire datoformat, men ikkje det europeiske med
80 KAPITTEL 10. FLEIRE KOMMANDOAR TIL VANLEG BRUK
dd/mm. Det er kanskje ein id
`
e
˚
a kjøre denne kommandoen kvar gong du log-
gar inn?
10.7 Programmet more
Vi har g
˚
att igjennom programmet more før men det kan kanskje vere p
˚
a plass
med litt meir utfyllande omtale av programmet. Programmet presenterer inn-
hold p
˚
a filer ei skjermfull om gongen, og ventar p
˚
a at ein skal f.eks trykke
MELLOMROM før det g
˚
ar vidare til neste skjermfull. Vanlegvis brukar ein more
i enden p
˚
a ein røyrledning eller med fleire filnamn som parameter :
zevs% more .profile .cshrc .exrc
Kommandoen gjer ein pause etter kvar skjermfull, og skriv ut ledeteksten :
–More–( % )
p
˚
a nederste linje p
˚
a skjermen. For
˚
a g
˚
a vidare kan ein trykke MELLOMROM
eller f (forward). Trykke b eller CTRL-b for
˚
a hoppe tilbake ein skjermfull. For
˚
a rulle ei linje framover trykker ein RETUR. Alle desse kommandoane kan ta
numeriske verdiar som fortel kor mange gongar kommandoen skal gjentakast.
I tillegg kan more ta imot fleire kommandoar p
˚
a ledeteksten –More–( % ),— det
g
˚
a an ogs
˚
a her
˚
a søke etter tekst ved hjelp av / og regulære uttrykk. Eit heiltal
før / vil søke etter den n-te forekomsten av ordet eller uttrykket. Dersom det
er fleire filar i parameter-lista kan ein hoppe til neste fil med :n og forrige fil
med :p. Begge desse kommandoane kan ogs
˚
a ta ein numerisk verdi. Sjølvsagt
vil ikkje :p og :n verke dersom more p
˚
a enden av ein røyrledning. Dersom ein er
i tvil kva for kommandoar ein har tilgjengeleg kan ein trykke h,— q vil avslutte
programmet.
10.8 Programmet tail
Fordi more alltid startar p
˚
a begynnelsen av ei fil kan det vere tungvint
˚
a sj
˚
a
gjennom heile fila for
˚
a f
˚
a sj
˚
a berre dei siste linjene. Derfor har UNIX program-
met tail, programmet tek filnamn som parameter. Programmet kan sjølvsagt
brukast i ein røyrledning eller i enden av ein røyrledning. Standard er at pro-
grammet skriv dei siste 10 linje av fila til standard ut.
zevs% tail .cshrc
alias la ’ls -alg’
alias lm ’ls -alg \!* | more’
alias Make ’( make \!* ; time ) >& list’
alias print ’(pr -l72 \!*) | lp’
alias tn telnet
alias emacs /usr/local/bin/emacs -u root
alias pr ’pr -f
mail -H
source /usr/local/src/tex3.0/texlogin
calendar
zevs%
10.9. KOMMANDOEN HEAD 81
Programmet kan ogs
˚
a ta antal linjer som opsjon. I tillegg kan eit tegn bak talet
spesifisere enhetar istaden for linjer. To mulighetar er c for teikn (characters )
og b for blokker (blocks).
zevs% tail -20c .cshrc
0/texlogin
calendar
zevs%
Kommandoen g
˚
ar som regel tilbake til skallet n
˚
ar det les enden p
˚
a fila, i enkelte
situasjonar ville det ha vore finst om ein kunne følge med ei fil etter kvart som
den veks. For
˚
a gjere dette brukar ein opsjonen f ( follow ). Denne opsjonen f
˚
ar
tail til
˚
a fortsette og skrive ut siste nye linje etter kvart som fila veks.
zevs% tail -f veksande.fil
Fordi tail -f ikkje avsluttar av seg sjølv, m
˚
a ein sjølv avslutte prosessen ved
trykke CTRL-c eller DEL, eller ein anna tast eller taste-kombinasjon som avbryt
prosessar.
10.9 Kommandoen head
Kommandoen head blir brukt p
˚
a same m
˚
ate som tail. Den tek dei same para-
metre som tail med unntak av -f,— denne er jo meiningslaus i utgangspunktet
for dette programmet.
10.10 Kommandoen cmp
Ein har ofte bruk for
˚
a samanlikne filer eller katalogar for
˚
a sj
˚
a om dei er like.
Kommandoen cmp vil samanlikne alle filer, inkludert binære filar. Kommando-
en tek to filnamn som parametre:
zevs% cmp /bin/sh /bin/csh
/bin/sh /bin/csh differ: char 1, line 1
zevs%
Utdataene fr
˚
a programmet er begrensa, programmet rapporterer første byte
som som er forskjellig,— dersom dei er forskjellige. Dersom ein brukar ein -l-
opsjon vil cmp liste ut bytenummer og differansen i verdi for ulikheten i dei to
byte. Sjølv om denne muligheten er brukbar kan det føre til veldig store meng-
der av utdata. Kommandoen kan ta som parameter istaden for det første
tilnamnet,— programmet vil d
˚
a lese inndata fr
˚
a standard inn.
10.11 Kommandoen diff
For tekstfilar finst det eit kraftig samanlikningsverktøy som heiter diff. Dette
programmet produserer ein komplett indeks over dei linjene som er forskjel-
lige i dei to filene,— saman med linjenummer. Programmet rapporterer ogs
˚
a
kva som skal forandrast for at filane skal bli like.
82 KAPITTEL 10. FLEIRE KOMMANDOAR TIL VANLEG BRUK
zevs% cat fil1
Dette er ei kort fil
med berre nokre faa linjer,
heilt enkelt
som vil vise korleis diff fungerer.
zevs% cat fil2
Dette er ei kort fil
med berre nokre faa linjer,
heilt super-enkelt
som vil vise korleis diff fungerer.
zevs% diff fil1 fil2
3c3
< heilt enkelt
> heilt super-enkelt
zevs%
Den første delen i utdataene fr
˚
a diff listar den ut linjenummer p
˚
a dei linjene
som er forskjellige. Neste linje er linje er fr
˚
a den første fila markert med <,
skille, deretter linja i den andre fila, markert med >. N
˚
ar filane blir større vil
sjølvsagt mengden av utdata auke omtrent proporsjonalt med størrelsen, like-
vel er diff ganske intelligent og den handterer store forskjellar og ulikt antal
linjer. Faktisk vil diff nesten alltid klare
˚
a finne den minste mengde av forskjel-
lar mellom to filar. Dersom eit filnamn i kommandolinja er erstatta med vil
diff lese fr
˚
a standard inn. Vanlegvis vil ekstra mellomrom eller tabuleringar f
˚
a
diff til
˚
a markere linjer som forskjellige. Dersom ein brukar opsjonen -w (white-
space) vil diff ignorere linjer som berre er forskjellig med omsyn til mellomrom
eller tabuleringar. Ein kan ogs
˚
a bruke -i (ignorecase) for
˚
a f
˚
a diff til
˚
a hand-
tere store og sm
˚
a teikn likt. Kommandoen kan ogs
˚
a lage s
˚
akalla ed–makroar
for konvertere den første fila til den andre fila. Dersom ein brukar diff med
-e-opsjon lagar diff ei makrofil som kan brukast direkte til
˚
a konvertere filane.
zevs% diff -e fil1 fil2
3c
> heilt super-enkelt
.
zevs%
Desse utdataene kan brukast til
˚
a konvertere fil1 til fil2,— f.eks slik som dette:
zevs% diff -e fil1 fil2 > ed.makro
zevs% ( cat ed.makro; echo w ) | ed fil1
97
103
zevs% diff fil1 fil2
zevs%
Dette eksemplet inneheld mange id
`
ear,— men eg vil ikkje g
˚
a nærare inn p
˚
a dei
i første omgang. Det kan ogs
˚
a synes litt rart at ein lagar ein makro for
˚
a kon-
vertere ei fil til ei anna n
˚
ar ein berre kan kopiere den. Dette er ikkje ideen bak
dette,— det som er tenkt er
˚
a distribuere denne makroen som oppgradering av
programvare. Dersom ein har kjeldekode (og det er det vanlege i UNIX–miljø)
10.12. KOMMANDOEN DIRCMP 83
s
˚
a treng ein berre
˚
a distribuere ein slik makro for
˚
a oppgradere kjeldekoden og
kompilere p
˚
a nytti for
˚
a oppgradere programvare. Det vil ta mindre plass enn
˚
a distribuere heile filar.
10.12 Kommandoen dircmp
Denne kommandoen samanliknar innholdet p
˚
a to katalogar med subkatalo-
gar. Programmet rapporterar dei filane som eksisterar i den eine katalogen, og
samanliknar alle filar som eksisterer p
˚
a begge katalogane med cmp.
zevs% dircmp . /usr/tmp
. . .
zevs%
Mengden av utdata kan bli ganske stor, særleg ved store katalogar,— men dir-
cmp kan vere nyttig n
˚
ar ein skal samanlikne to versjonar av ein katalog. Ein
kan bruke -d–opsjon for
˚
a utdata p
˚
a diff –form istadenfor p
˚
a cmp–form.
10.13 Kommandoane sort og uniq
UNIX har verktøy til som ofte brukast til
˚
a filtrere tekstfiler. Kommandoen sort
som ordnar linjer av tekst i alfabetisk rekkefølge. Programmet kan ta ei liste
av filnamn som parameter eller lese fr
˚
a standard inn. sort skriv utdataene til
standard ut.
zevs% cat tekst.fila
Dette er ei kort fil.
Kvar linje startar med ein anna bokstav.
kvar linje startar med ord paa fire bokstavar,- unntatt den foerste.
Alle linjene skal starte med store bokstavar.
zevs% sort tekst.fila
Alle linjene skal starte med store bokstavar.
Dette er ei kort fil.
Kvar linje startar med ein anna bokstav.
kvar linje startar med ord paa fire bokstavar,- unntatt den foerste.
zevs%
sort–programmet sorterer alle linjene i alle inndatafilane saman,— den inklu-
derer med andre ord ein flette funksjon. Den kan ogs
˚
a handtere veldig store
filar,— ein vil merke at det vil g
˚
a merkbart seinare med filar over 1000 lin-
jer. Det g
˚
ar ofte fortare
˚
a sortere fleire sm
˚
a filar først og flette dei saman med
-m–opsjonen (merge) til sort–kommandoen. Som standard brukar sort ASCII
rekkefølgen for
˚
a bestemme rekkefølge,— og startar p
˚
a starten av linja. Ifølge
ASCII kjem s
˚
akalla mellomromsteikn (engelsk: whitespace) først, deretter spe-
sialtegn (engelsk: punctation characters), nummer, store bokstavar og til slutt
sm
˚
a bokstavar. Dersom det første tegnet for to linjer er det same, vil sort g
˚
a
til neste tegn, heilt til linjeskift dersom det er nødvendig, for
˚
a finne den rette
rekkefølgen. N
˚
ar ein sorterer filer som kun inneheld tekst vil som regel resul-
tatet vere rett, men dersom ein skal sortere nummer kan resultatet bli eit anna
enn ein trudde.
84 KAPITTEL 10. FLEIRE KOMMANDOAR TIL VANLEG BRUK
zevs% cat nummer.fila
1
2
10
11
23
zevs% sort nummer.fila
1
10
11
2
23
zevs%
Dette resultatet oppst
˚
ar fordi 1 kjem før 2 i ASCII–tabellen, dermed vil alle
linjer som startar med 1 kome før alle linjer som startar med 2. Opsjonen -n (
numeric ) vil f
˚
a sort til
˚
a sortere nummer i rett rekkefølge.
zevs% sort -n nummer.fila
1
2
10
11
23
zevs%
For
˚
a ignorere forskjellen p
˚
a store og sm
˚
a bokstavar brukar ein opsjonen -f.
zevs% sort -f tekst.fila
alle linjene skal starte med store bokstavar,dei fleste iallefall.
Alle linjene skal starte med store bokstavar.
Dette er ei kort fil.
Kvar linje startar med ein anna bokstav.
zevs%
Det eksisterer fleire likande opsjonar men eg vil ikkje g
˚
a gjennom desse, eg kan
berre vise til dokumentasjon. S
˚
a lenge har sorteringsnøkkelen vore starten p
˚
a
linja,— det er ikkje alltid ønskeleg. Kommandoen kan bruke andre delar av
linja som sorteringsnøkkel,— ein instruerer sort til
˚
a bruke andre felt av linja
ved hjelp av +n og -n som argument p
˚
a kommando-linja. Eit felt er definert
som ei samling av tegn avgrensa av eit skilletegn (vanlegvis eit mellomrom
eller tabulator). Starten p
˚
a linja er alltid felt 0. Dersom ein oppgjev +1 som felt
vil sort bruke det andre feltet i linja og ut til linjeskift som sorteringsnøkkel
istaden for
˚
a starte heilt p
˚
a begynnelsen av linja.
zevs% sort +1 tekst.fila
Dette er ei kort fil.
Kvar linje startar med ein anna bokstav.
alle linjene skal starte med store bokstavar,dei fleste iallefall.
Alle linjene skal starte med store bokstavar.
zevs%
P
˚
a same m
˚
ate f
˚
ar -n sort til
˚
a stanse samanlikninga før felt n.
10.13. KOMMANDOANE SORT OG UNIQ 85
zevs% sort +1 -3 tekst.fila
. . .
zevs%
Denne kommandoen vil berre bruke det andre og tredje feltet som sorteringsnøkkel.
Vidare kan ein spesifisere primær og sekundær nøkkel etter plasseringa p
˚
a
kommandolinja.
zevs% sort +3 -4 +0 -1 tekst.fila
. . .
zevs%
Her brukar vi det fjerde feltet som primærnøkkel og det første feltet som se-
kundærnøkkel. Ein kan forandre standard feltskill med opsjonen -t, denne tek
eit tegn som argument.
zevs% sort -t: /etc/passwd
. . .
zevs%
Vidare har sort opsjonane -b for
˚
a ignorere blanke i nøkkel og -r for reversert
sortering. Kommandoen sort blir som regel brukt saman med eit anna program
som heiter uniq. Programmet uniq rapporterer like linjer eller felt i ei fil, innda-
taene m˚a vere sortert for at programmet skal fungere korrekt. Kommandoen les
standard inn eller fr
˚
a ei liste med filnamn og skriv til standard ut. Som stan-
dard skriv uniq ut dei linjene som er forskjellig fr
˚
a alle andre linjer ein gong.
zevs% cat tekst.fila
abc
def
abc
def
ghi
jkl
mno
zevs% sort tekst.fila | uniq
abc
def
ghi
jkl
mno
zevs%
Som vi ser berre ein kopi av alle linjene som er forskjellige fr
˚
a alle andre. Opsjo-
nar som kan vere nyttige er -c for antall like linjer eller felt og -d for duplikate
linjer,- dvs. uniq skriv ut ein kopi av duplikate linjer.
zevs% sort tekst.fila | uniq -c
2 abc
2 def
1 ghi
1 jkl
1 mno
zevs% sort tekst.fila | uniq -d
86 KAPITTEL 10. FLEIRE KOMMANDOAR TIL VANLEG BRUK
abc
def
zevs%
Kommandoen kan ogs
˚
a styres til
˚
a undersøke berre felt i inndataene. Opsjo-
nene -n der n er eit nummer, ignorerer det første n felt i kvar linje for den
samanliknar linjene. Som med sort er standarden at felt er skilde med mellom-
rom eller tabulator. Opsjonen +n f
˚
ar uniq til
˚
a ignorere dei første antal n tegn
p
˚
a starten av kvar linje. N
˚
ar ein brukar -n og +n saman, hoppar uniq over felt
før enkelttegn.
10.14 Kommandoane cut og paste
Kommandoen cut vert brukt til
˚
a splitte linjer i forhold til kolonner eller felt.
zevs% cat data.fila
123:456:789
234:567:891
345:678:912
456:789:123
567:891:234
zevs% cut -f2 d: <data.fila
456
567
678
789
891
zevs%
Opsjonen -d (delimiter) fortel cut kommandoen kva som skal vere skilletegn
mellom felt. Ver oppmerksom p
˚
a at skilletegnet er ikkje med i utdataene, og at
kvar linje av inndata produserer ei linje utdata. Kommandoen har mulighet for
˚
a spesifisere fleire felt :
zevs% cut -f1,3 -d: <data.fila
123:789
234:891
345:912
456:123
567:234
zevs%
cut kan ogs
˚
a operere p
˚
a kolonner. Her er eit eksempel:
zevs% cut -c5-8 data.fila
456:
567:
678:
789:
891:
zevs%
10.14. KOMMANDOANE CUT OG PASTE 87
Som vi ser brukar ein opsjonen -c (column) for
˚
a operere p
˚
a kolonner. Talet som
ein oppgjev tek kolonne fr
˚
a og med talet, og til og med talet for sluttkolonne.
Kommandoen kan ta ei liste av filnamn som parameter eller lese fr
˚
a standard
inn,— utdata vert sendt til standard ut.
Kommandoen paste tek to eller fleire filnamn som argument, les ei linje fr
˚
a
kvar fil og kombinerer desse linjene til ei samanhengande linje og skriv denne
til standard ut. Inndataene fr
˚
a filane blir ordna i felt med ein tabulator mellom
bidraga fr
˚
a kvar fil. Med -d opsjonen kan ein sjølv bestemme kva som skal vere
skilletegn.
zevs% cat forste.fila
1111
2222
3333
4444
5555
zevs% cat andre.fila
aaaa
bbbb
cccc
dddd
eeee
ffff
gggg
zevs% paste -d: forste.fila andre.fila
1111:aaaa
2222:bbbb
3333:cccc
4444:dddd
5555:eeee
:ffff
:gggg
zevs%
I dette eksemplet vart tegnet : brukt som skilletegn, men faktisk kan fleire enn
eit tegn kome etter -d–opsjonen. Alle skilletegna vil bli brukt etter tur for
˚
a
skille felta parvis.
zevs% paste -d:+$ forste.fila andre.fila tredje.fila fjerde.fila
1111:aaaa+tredje$fjerde
2222:bbbb+tredje$fjerde
3333:cccc+tredje$fjerde
4444:dddd+tredje$fjerde
5555:eeee+$
:ffff+$
:gggg+$
zevs%
Dette skulle vel vere meir eller mindre sjølvforklarande.
88 KAPITTEL 10. FLEIRE KOMMANDOAR TIL VANLEG BRUK
10.15 Kommandoen join
I tillegg til paste–kommandoen som berre limar saman linjer fr
˚
a fleire filar s
˚
a
har vi kommandoen join som flettar saman linjer fr
˚
a forskjellige filar som er
like i eit spesifikt felt.
zevs% cat person.forste
person.a:kontor:telefon
person.b:kontor:telefon
person.c:kontor:telefon
person.d:kontor.telefon
zevs% cat person.andre
person.a:adresse:barn
person.b:adresse:barn
person.c:adresse:barn
person.d:adresse:barn
zevs% join -t: person.forste person.andre
person.a:kontor:telefon:adresse:barn
person.b:kontor:telefon:adresse:barn
person.c:kontor:telefon:adresse:barn
person.d:kontor.telefon:adresse:barn
zevs%
Opsjonen -t vel skilletegn mellom felt, som standard er skilletegnet tabulator.
Utdata fr
˚
a join blir skreve til standard ut. Ein kan velge kva for felt som skal
vere utdata med opsjonen -o (for only), som tek ei liste av argument p
˚
a formen
m.n, der m er nummeret paa fila og n er feltnummer. Kommandoen krev at
filane er sortert etter det feltet som er felles og som skal brukast som
¨
nøkkel
¨
.
Som standard brukar join første feltet i kvar linje i kvar fil,— dette kan ein
forandre med opsjonen -j (for join field).
zevs% join -j1 2 -j2 1 fil1 fil2
zevs%
Her vil ein flette saman filane ved
˚
a bruke andre felt i første fila og første felt i
andre fila.
10.16 Databaseoperasjonar p˚a tekstfilar
Kommandoane som vi no har g
˚
att igjennom er ekstremt nyttige for
˚
a prosesse-
re tekstfilar og lage permutasjonar av inndata. Desse kommandoane er veldig
mykje kombinert i røyrledningar, og med desse verktøy kan ein utføre veldig
komplekse operasjonar p
˚
a filar og p
˚
a dei dataene som desse filane inneheld.
La oss ta nokre enkle eksempel:
zevs% cut -f1 -d: /etc/passwd
root
nobody
daemon
sys
bin
10.16. DATABASEOPERASJONAR P
˚
A TEKSTFILAR 89
uucp
news
. . .
olava
williama
haralds
gormh
olej
gustavs
zevs%
Ein enkel m
˚
ate
˚
a finne alle brukeridentitetane p
˚
a denne maskina. P
˚
a same m
˚
ate
kan ein finne ut kva slags skall brukerane har n
˚
ar dei loggar seg inn.
zevs% cut -f1,7 -d: /etc/passwd
root:/bin/csh
nobody:
daemon:
sys:/bin/csh
bin:
uucp:
news:/bin/csh
. . .
olava:/bin/csh
williama:/bin/csh
haralds:/bin/csh
gormh:/bin/csh
olej:/bin/csh
gustavs:/bin/csh
zevs%
Dersom ein vil legge til standardskall p
˚
a dei linjene som ikkje hadde noko skall
i den siste posisjonen, kan ein ta fordel av at cut plasserer skilletegn p
˚
a linjene
som ikkje har det siste feltet.
zevs% cut -f1,7 -d: /etc/passwd | grep ’:$ | sed ’s/$/\/bin\/sh/’ > ny.data
zevs% cat ny.data
nobody:/bin/sh
daemon:/bin/sh
bin:/bin/sh
uucp:/bin/sh
ris:/bin/sh
Denne kommandoen vil kutte ut kolonne 1 og 7 i passord-fila, sende utdataene
vidare til grep og den vil velge ut alle linjer som sluttar med :$, til slutt vil sed
ta alle linjene og legge p
˚
a strengen /bin/sh. P
˚
a dette stadiet inneheld fila ny.data
berre dei brukarane dei som ikkje hadde definert eit skall. Dei andre finn vi
med:
zevs% cut -f1,7 -d: /etc/passwd | grep -v ’:$ >>ny.data
zevs%
90 KAPITTEL 10. FLEIRE KOMMANDOAR TIL VANLEG BRUK
Denne kommandoen legg til dei linjene som ikkje endar p
˚
a :$ til slutten av fila.
No kan vi f.eks finne ut kva for skall som er i bruk.
zevs% cut -f2 -d: ny.data | sort | uniq
/bin/csh
/bin/sh
/bin/sync
/usr/diag/sundiag/sundiag
/usr/diag/sysdiag/sysdiag
/usr/local/bin/tcsh
zevs%
Etterp
˚
a kan ein finne ut kor mange personar som brukar dei forskjellige skalla
:
zevs% cut -f2 -d: ny.data | sort | uniq -c | sort -nr
69 /bin/csh
5 /bin/sh
3 /usr/local/bin/tcsh
1 /usr/diag/sysdiag/sysdiag
1 /usr/diag/sundiag/sundiag
1 /bin/sync
zevs%
Det
˚
a lage slike komplekse røyrledningar krev masse eksperimentering. Det
enklaste er
˚
a starte med ein enkel kommando og legge fleire og fleire til i
røyrledningen. N
˚
ar ein har funne ut ein fin kommandosekvens kan ein lagre
den i ei fil som eit skallprogram.
10.17 Kommandoen sleep
Ein interessant kommando som har mange bruksomr
˚
ader er sleep. Denne kom-
mandoen tek ein numerisk verdi som argument, denne verdien blir oppfatta
som antal sekund. Det denne kommandoen gjer er
˚
a vente i dei antal sekund,
for s
˚
a
˚
a returnere til skallet.
zevs% date “+%r”; sleep 10 ; date “+%r”
02:51:29 PM
02:51:39 PM
zevs%
Kommandoen er litt unøyaktig under eit sekund, slik at kommandoen sleep 1
kan for
˚
arsake ukorrekt resultat. Sidan UNIX er eit fleirprosessystem vil det ofte
vere ønskeleg at systemet f
˚
ar tilbake kontrollen over CPU‘en n
˚
ar ein vil vente
for ei stund. Dermed kan andre prosessar f
˚
a kjøre medan din kommando ligg
og ventar i bakgrunnen. Dette er ein annan filosofi enn det ein finn i einpro-
sess system der venting ofte er implementert ved
˚
a bruke systemet aktivt,—
ved hjelp av ei løkke el.likn. Denne aktive ventinga er sløsing med ressursar
under UNIX der andre program ventar p
˚
a p
˚
a tur til
˚
a bruke systemressursar
medan din kommando ventar. Eit prinsipp med fleirbrukar og fleirprosessys-
tem er at ein delar ressursane med andre brukarar. N
˚
ar ein ikkje er aktiv, sjølv
10.18. KOMMANDOEN FIND 91
om kommandoen er aktiv i bakgrunnen, er det ditt ansvar
˚
a bruke komman-
doar som let andre brukarar f
˚
a lov
˚
a aksessere systemressursar. Kommandoen
sleep gjer dette automatisk for deg, n
˚
ar ein kommandoen søv, gjer ein minimal
bruk av systemressursane. Ein annan fordel med sleep er at den er avhengig av
den interne klokka og ikkje av belastninga p
˚
a systemet eller CPU–hastighet.
Nøyaktigheten er eksakt opp til det næraste sekundet.
10.18 Kommandoen find
Dersom ein ein vil operere p
˚
a filar i subkatalogar i tillegg til filar p
˚
a st
˚
aande
katalog s
˚
a har vi kommandoen find. Kommandoen er ein av dei kraftigaste,—
og har ogs
˚
a ein av dei vanskelegaste kommandolinjene i UNIX. P
˚
a den and-
re sida er find s
˚
a kraftig at det er vel anvente timar
˚
a lære seg alle knep med
denne kommandoen. Kommandoen leitar seg ned gjennom hierarkiet i filsys-
temet og lokaliserer alle filar som kvalifiserer kriteriane p
˚
a kommandolinja.
Kommandoen kan utføre ei rekkje med aksjonar p
˚
a filane den finn. Basisen for
kommandolinja er følgande:
zevs% find sti-liste utrykk
. . .
zevs%
der sti-liste er ei liste av katalogar,— liste kan innholde ein eller fleire katalo-
gar, med enten relative eller fulle stinamn. Uttrykksdelen er operatorane som
beskriv utvalgskriteriet for filar, og aksjonane som find skal utføre p
˚
a dei.
zevs% find $HOME/text/unixkurs -print
/home/zevs/ifi/trondk/text/unixkurs
/home/zevs/ifi/trondk/text/unixkurs/kurs.log
/home/zevs/ifi/trondk/text/unixkurs/kurs.tex
/home/zevs/ifi/trondk/text/unixkurs/ps
/home/zevs/ifi/trondk/text/unixkurs/ps/kjerne.ps
/home/zevs/ifi/trondk/text/unixkurs/ps/kurs.ps
/home/zevs/ifi/trondk/text/unixkurs/ps/skall.ps
/home/zevs/ifi/trondk/text/unixkurs/ps/program.ps
/home/zevs/ifi/trondk/text/unixkurs/ps/rettigheter.ps
/home/zevs/ifi/trondk/text/unixkurs/ps/banner.ps
/home/zevs/ifi/trondk/text/unixkurs/kurs.tex
/home/zevs/ifi/trondk/text/unixkurs/bak
/home/zevs/ifi/trondk/text/unixkurs/bak/kurs.tex
/home/zevs/ifi/trondk/text/unixkurs/kurs.dvi
/home/zevs/ifi/trondk/text/unixkurs/kurs.aux
/home/zevs/ifi/trondk/text/unixkurs/kurs.toc
/home/zevs/ifi/trondk/text/unixkurs/kurs.ps
zevs%
Dette er ein av dei minste kommandoane, find skal finne alle filar og katalogar
under $HOME/text/unixkurs. Ein kan ogs
˚
a som nemnt tidlegare bruke ei liste
av katalogar.
zevs% find $HOME /home/zevs/ifi/eyvindh -print
92 KAPITTEL 10. FLEIRE KOMMANDOAR TIL VANLEG BRUK
. . .
zevs%
Kommandoen find kan ogs
˚
a ta jokertegn :
zevs% find /home/zevs/ifi/* -print
. . .
zevs%
Som standard utfører ikkje find nokon aksjon p
˚
a filene den finn, s
˚
a derfor er
-print nødvendig for at find skal liste ut filane p
˚
a standard ut, eit namn for kvar
linje.
zevs% find / -print | wc -l
. . .
zevs%
Denne kommandoen vil telle antal filar og katalogar p
˚
a denne maskina. Store
operasjonar med find tek gjerne lang tid
˚
a fullføre, spesielt p
˚
a store maskiner
og maskiner med filsystem ute i nettverket. Bruk fornuften og prøv
˚
a avgrense
søket mest mulig ved
˚
a g
˚
a s
˚
a langt ned i filsystemet som mulig. Det finst ei
rekkje forskjellige operatorar for
˚
a finne filar,— namn, eigar av fil, gruppe, dato
og størrelse, for
˚
a nemne nokre. Alle operatorar startar med (minusteiknet).
zevs% find . -name .profile -print
./.profile
./oppstartfiler/oppstart.old/.profile
./.rsrc/.profile
zevs%
Det spesifiserte namnet kan ogs
˚
a inneholde jokertegn dersom det vert sett i
hermeteikn.
zevs% find . -name “*profile” -print
. . .
zevs%
Andre jokertegn som ?, [ og ] kan ogs
˚
a brukast dersom dei ogs
˚
a vert sett i
hermetegn. N
˚
ar find søkjer i eit filsystem s
˚
a er rekkefølgen avhengig av den
interne organiseringa av filsystemet,— dersom ein vil har sorteret rekkefølje
m
˚
a ein redirigere utdataene fr
˚
a find til sort. N
˚
ar fleire operatorar er spesifisert
vert det utført fr
˚
a venstre mot høgre.
zevs% find . -print -name “*profile”
. . .
zevs%
er ikkje det same som :
zevs% find . -name “*profile” -print
. . .
zevs%
fordi den første kommandoen skriv ut filnamn etter kvart som den filar eller
katalogar og deretter leitar etter filar som kan passe namnet ”*profile”. Den
andre kommandoen leiter etter filar som kan passe namnet ”*profileførst og
10.18. KOMMANDOEN FIND 93
etterp
˚
a skriv ut namnet p
˚
a dei filane kommandoen har funne. Kommandoen
søkjer etter alle filnamn i stilista, brukar utrykka fr
˚
a venstre mot høgre for
˚
a
godta eller
˚
a forkaste filar heilt til det siste uttrykket er utført. Dersom ei fil
ikkje tilfredsstiller eit uttrykk vil ikkje dei etterfølgande bli utført. Vi kan g
˚
a litt
nærare inn p
˚
a opsjonar for find. Opsjonen for
˚
a finne filar med eigar, -user og
gruppe -group. Opsjonen -type c leiter etter filar av bestem type,— der c er den
type fil som kjem fram i venstre kolonne ved ein ls -l (f for fil, d for katalog, l
for symbolsk lenke, p for pipe, dette er vel dei mest vanlege). Opsjonen -mtime
n velger ut filar som var modifisert akkurat for n dagar sidan. Uttrykket -mtime
-n velger ut alle filar som har vore modifisert dei siste n dagar. Uttrykket -mtime
+n finn alle filar finn alle filar som har vore modifisert før n dagar sidan. Ellers
kan ein finne filar etter størrelse,— -size n finn alle filar p
˚
a nøyaktig n blokker,
-size -n finn alle filar under n blokker og -size +n alle over n blokker.
zevs% find / -type f -size +1000 -print
. . .
zevs%
Denne kommandoen vil finne alle filar i systemet som er over 1000 blokker,—
dvs. over 512 000 byte. Ein kan invertere uttrykka ved
˚
a sette eit utropstegn
framfor operatoren ( dette tegnet blir ofte kalla bang–operatoren i UNIX– og
C–dokumentasjon ).
zevs% find $HOME -type f ! -user $LOGNAME -print
. . .
zevs%
Denne kommandoen finn alle filar i min heimekatalog som ikkje eg eig. Ope-
ratoren ! m
˚
a ha mellomrom eller tabulator p
˚
a begge sider, og den inverterer
berre den operatoren som kjem rett etter utropstegnet. Ein kan ogs
˚
a lage større
logisk uttrykk med eller–operator.
zevs% find $HOME -size +50 -o ! -user $LOGNAME -print
. . .
zevs%
Operatoren -o betyr eller (engelsk or). Denne kommandoen vil med andre ord
finne alle filar over 50 blokker og alle filar som ikkje eg eig. Alle operatorar
som ikkje har -o mellom seg er logisk knytta saman med og (engelsk and). Meir
avanserte kommandoar :
zevs% find . -type f \( -name “*.abc” -o -name “*.def -o -name
“*.ghi” \) -print
. . .
zevs%
Her vil ein finne alle vanlege filar som enten endar p
˚
a abd, def eller ghi. Legg
merke til at vi m
˚
a unnta parantesane for spesiell betydning ved hjelp av bakslask-
tegnet ( tegnet \ ). Dette er fordi parentes har ein spesiell betydning for alle
skall,— det skal vi kome tilbake til seinare. Kommandoen find kan eksekve-
re alle kommandoar for kvar fil den finn ved hjelp av dei andre operatorane.
Operatoren -exec tek ei etterfølgande kommando-linje. Kommandoen kan in-
kludere namnet p
˚
a den fila som find prosesserer ved
˚
a bruke spesialsyntaksen
94 KAPITTEL 10. FLEIRE KOMMANDOAR TIL VANLEG BRUK
{ og }. Kommandolinja vert avslutta med tegna \;. Ein kommando som forand-
rar aksessrettighetane p
˚
a alle filar p
˚
a heimekatalogen.
zevs% find $HOME -exec chmod -rw {} \; -print
. . .
zevs%
Operatoren -exec evalurer til sant dersom kommandoen den utfører returnerer
0 som returverdi,— ellers vil den returnere usant.
Kapittel 11
Skall-programmering
11.1 Lagre skallkommandoar i filar
Alle kommandoar som blir eksekvert fr
˚
a ein terminal kan lagrast i ei fil og
bli eksekvert derifr
˚
a. Skallet gjer at fila vert omgjort til standard inn istaden
for terminalen. Ein m
˚
ate
˚
a utføre kommandoar i ei fil er
˚
a gje filnamnet som
argument til sh.
zevs% cat kommando.fila
echo $LOGNAME
pwd
zevs% sh kommando.fila
trondk
/home/zevs/ifi/trondk
zevs%
Kommandoane er eksekvert med kommandoen sh kommando.fila, og resultatet
kjem til standard ut. Ein annan m
˚
ate
˚
a eksekvere kommandoen p
˚
a er:
zevs% chmod u+x kommando.fila
zevs% ./kommando.fila
trondk
/home/zevs/ifi/trondk
zevs%
Dersom fila har kjøyre rettighet treng ein ikkje gje filnamnet som argument
til eit subskall. Innloggingsskallet finn ut at det er eit skallprogram og utfører
eit eige subskall for
˚
a fullføre kommandoen. Eit skallprogram kan eksekvere
akkurat som eit binært program og det er vanlegvis ikkje nokon grunn til
˚
a
skille mellom dei to typane. Eit skallprogram som nemnt tidlegare blir utført
i eit subskall derfor vil dei aksjonane som blir utført i skallprogrammet berre
p
˚
averke subskallet. Derfor er det alltid nyttig
˚
a definere skallvariable som har
same levetid som skallprogrammet.
95
96 KAPITTEL 11. SKALL-PROGRAMMERING
zevs% cat kommando.fila
DIR=‘pwd‘
echo $DIR
zevs% ./kommando.fila
/home/zevs/ifi/trondk
zevs% echo $DIR
DIR: Undefined variable.
zevs%
P
˚
a same m
˚
ate vil ikkje kommandoar i skallprogram fortsette etter at skall-
programmet er ferdig.
zevs% cat kommando.fila
pwd
echo Forandrar katalog ...
cd /tmp
pwd
zevs% ./kommando.fila
/home/zevs/ifi/trondk
Forandrar katalog ...
/tmp
zevs% pwd
/home/zevs/ifi/trondk
zevs%
Ein kan forandre katalog inne i skallprogrammet, men operasjonen p
˚
averkar
berre skallprogrammet, og ikkje resten av sesjonen. Sidan systemet ikkje gjer
forskjell p
˚
a binære program og skallprogram, kan ein inkludere skallprogram
som kommandoar inne andre skall-program. Husk alltid p
˚
a eksportere loka-
le variable dersom du vil at dei skal brukast i andre subprogram eller skall-
program.
Dersom man vil at skallprogrammet skal kjørest med eit bestemt skall kan ein
oppgje skallet med følgande sekvens p
˚
a første linje i fila:
#! /bin/sh
Det er mest vanleg
˚
a bruke Bourne–skall for skallprogram (som vist ovanfor).
11.2 Kommentarar i skallprogram
Alle program treng kommentarar, b
˚
ade for den personen som skreiv program-
met og den som skal vedlikeholde programmet. Tegnet # blir brukt for
˚
a intro-
dusere kommentarar. Skallet ignorerer alt p
˚
a den linja som kjem etter tegnet
#.
zevs% cat kommando.fila
:
# Dette er ein kommentar ....
11.3. OPERATOREN IF 97
echo Halloen folkens # Dette er ein unødvendig kommentar
exit 0
zevs% kommando.fila
Halloen folkens
zevs%
Dersom slettetegnet er # kan ein bruke \ for
˚
a unnta tegnet for denne spesial-
betydninga. Kommentarar er eit godt hjelpemiddel for
˚
a vedlikeholde skall-
program dersom kommentarane er fornuftige, og det kostar ingenting i effek-
tivitetet eller fart.
11.3 Operatoren if
Den første kondisjonelle operatoren vi skal g
˚
a igjennom er if . Syntaksen p
˚
a
kommandoen er:
if uttrykk ; then kommandoar ; fi
Dette eksemplet opptrer p
˚
a ei enkel kommandolinje, if kan ogs
˚
a opptre over
fleire linjer og er ikkje avslutta før tegna opptrer. Uttrykket kan vere alle logis-
ke uttrykk eller kommandoar som returnerar ein verdi. Dersom uttrykket eller
kommandoen returnerar null, vil kommandoane etter then bli utført.
zevs% if true ; then echo Halloen ;
Halloen
zevs%
Denne kommandoen er p
˚
a same linja, vanlegvis vil ein skrive dei p
˚
a fleire lin-
jer.
zevs% if true
> then
> echo Halloen
>
Halloen
zevs%
Ein kan bruke s
˚
a mange kommandoar ein vil i then–delen av ein if –konstruksjon,
ogs
˚
a andre nøsta if–konstruksjonar. I tilfelle ein annan operasjon er nødvendig
s
˚
a er ein else–konstruksjon tilgjengeleg.
zevs% if false
> then
> echo Halloen
> else
> echo Hadiii
>
Hadiii
98 KAPITTEL 11. SKALL-PROGRAMMERING
zevs%
Andre if –konstruksjonar kan kome etter else. Desse kan ein introduserer med
ei kort form elif (for else if ).
zevs% if false
> then
> echo Halloen
> elif true ; then
> echo Hadiii
>
Hadiii
zevs%
Husk alltid p
˚
a then etter elif . Heile konstruksjonen vert avslutta med .
11.4 Kommandoen test
Hittil har ein berre kunne brukt enkle uttrykk i forbindelse med if , ofte s
˚
a enkle
at det ikkje har rot i det verklege liv. I praksis kan eit uttrykk vere alle moglege
variantar av logiske uttrykk. Kommandoen test er laga for
˚
a settast saman med
if –uttrykk og returnerer verdiar som if kan intrepetrere. Kommandoen har to
formar,— begge er synonyme og ein kan ofte finne begge formene i eit og same
skallprogram. Det er ein fordel for ein sjølv og andre om ein klarar
˚
a holde seg
konsekvent til ei form.
zevs% if test $VAR
> then
> echo Halloen ...
>
zevs%
Dersom miljøvariabelen VAR er definert vil denne evaluere til sant.
zevs% if test $HOME
> then
> echo Halloen ...
>
Halloen ...
zevs%
Den andre forma av test brukar spesialoperatorane [ og ]. P
˚
a denne forma vert
argumenta til test sett mellom hakeparantesane og ordet test vert ikkje brukt.
zevs% if [ $HOME ]
> then
> echo Halloen ...
11.4. KOMMANDOEN TEST 99
>
Halloen ...
zevs%
Pass p
˚
a at det skal vere minst eit mellomrom mellom if og første Hakeparantes,
og mellom hakeparantesane og uttrykket. Denne bruken av hakeparentesar
er forskjellig fr
˚
a den vanlige bruken ved jokertegn eller regulære uttrykk for
ekspansjon av filnamn,— likevel vil skallet oppfatte dei korrekt fordi dei blir
brukt rett etter if.
zevs% if [ -f /etc/passwd ] ; then echo Fila eksisterer ;
Fila eksisterer
zevs%
Formen -f fil testar om fil eksisterer, -r fil om fil er lesbar, -w fil om fil er skrivbar
og -x fil om fil er kjøyrbar. P
˚
a same m
˚
ate, -d fil om fil er ein katalog og -s fil om
fil eksisterer og er større enn null tegn. Streng operatorar blir brukt for teste
om miljøvariable eksisterar og verdien av dei. Dette tillet ein
˚
a utføre operasjo-
nar, tilordne verdiar, og teste verdien av ein miljøvariabel for
˚
a avgjere vidare
aksjonar.
zevs% DIR=‘pwd‘
zevs% if [ $DIR = $HOME ]
> then
> echo “I heimekatalogen ...”
>
I heimekatalogen ...
zevs%
Legg merke til at = blir brukt til
˚
a samanlikne to strengar. Forma != kan brukast
for ikkje lik. For
˚
a samanlikne tal har ein eigne operatorar.
-eq Lik.
-ne Ikkje lik.
-gt Større enn.
-lt Mindre enn.
Desse numeriske verdiane er ofte brukt for
˚
a teste returverdiar fr
˚
a kommando-
ar.
zevs% mkdir /tmp/SS
zevs% RET=$?
zevs% if [ $RET -eq 0 ]
> then
> echo “mkdir var vellykka”
> else
> echo “Fekk ikkje laga katalog ...”
>
100 KAPITTEL 11. SKALL-PROGRAMMERING
mkdir var vellykka
zevs%
Kommandoen test har ogs
˚
a verktøy for
˚
a kombinere operatorar og byggje kom-
plekse uttrykk. Tegnet ! blir brukt for
˚
a invertere ein operator.
zevs% if [ ! -f fil ]
> then
> touch fil # Dette lagar fil
>
zevs%
Andre kombinasjonar av operatorar som er tilgjengelege for test er -a for OG
(AND) og -o for eller (OR).
zevs% if [ ! -f fil1 -a -f fil2 ]
> then
> echo “fil1 eksisterer ikkje, men fil2 eksisterer”
>
fil1 eksisterer ikkje, men fil2 eksisterer
zevs%
Dersom uttrykka blir veldig kompliserte g
˚
ar det an
˚
a gruppere dei med parentesar,—
n
˚
ar uttrykka er s
˚
apass kompliserte ville det vere ein fordel
˚
a prøve
˚
a forenkle
dei ein del eller dele testane opp i fleire setningar.
11.5 Kommandoen exit
Denne kommandoen vert brukt til
˚
a avbryte skallprogram. Kommandoen tek
eit argument, dette vert returverdi til skallet som starta skallprogrammet.
zevs% cat kommando.fil
if true
then
exit 6
zevs% ./kommando.fil
zevs% echo $?
6
zevs%
N
˚
ar ein brukar returverdiar fr
˚
a skallprogram skal ein bruke standard konven-
sjonane, kommandoar som fullfører feifritt skal returnere null. Returverdiar
som er forskjellig fr
˚
a null skal vere reservert for forskjellige feilsituasjonar.
11.6. KOMMANDOEN EXPR 101
11.6 Kommandoen expr
Sjølv om programmeringsspr
˚
aket under skallet ikkje er optimalisert for kalk-
ulasjonar, har det kommandoar som kan gjere utrekningar. Kommandoen expr
(expression) er den som er mest brukbar til dette form
˚
alet. Den tek nummer og
aritmetriske operatorar som argument, reknar ut resultatet og skriv svaret til
standard ut.
zevs% expr 4 + 6
10
zevs%
Det g
˚
ar sjølvsagt an
˚
a spesifisere lengre kommandoar, men ver oppmerksom
p
˚
a at alle argument m
˚
a skillast med mellomrom eller tabulator,— dette fordi
expr oppfattar argument som del av uttrykket som den skal evaluere. Operato-
rane som er lovlege,— heiltal, + (pluss), - (minus), * (multiplikasjon), / (divi-
sjon), % (rest etter divisjon [modulus] ). Husk alltid p
˚
a unnta tegna * og / ved
˚
a
sette \ (bakslask) framfor slik at ikkje skallet oppfattar dei som spesialtegn før
dei vert sendt til expr.
zevs% expr 3 \* 4 + 2 \/ 2
13
zevs%
Normale presedens reglar vert brukt slik at multiplikasjon og divisjon vert
utført før addisjon og subtraksjon. Ein kan forandre presedensen ved
˚
a utføre
komplekse kalkulasjonar i fleire omgangar.
zevs% VAL=‘expr 3 \* 4 + 2‘
zevs% expr $VAL \/ 2
7
zevs%
I tillegg kan ein gruppere operasjonar innanfor parentesar,— her m
˚
a ein ogs
˚
a
passe p
˚
a
˚
a unnta parentesar for spesialbetydning ved
˚
a sette \ (bakslask) fram-
for.
zevs% expr 3 \* \( 4 + 3 \) \/ 2
10
zevs%
Kommandoen kan ogs
˚
a utføre logiske operasjonar,— den kan avgjere om eit ar-
gument er større, mindre, lik . . . osv. enn eit anna argument. Lovlege operatorar
er :
= Lik.
!= Ulik.
> Større.
102 KAPITTEL 11. SKALL-PROGRAMMERING
< Mindre.
<= Mindre eller lik.
>= Større eller lik.
Desse teikna er ogs
˚
a spesial-teikn for skallet, derfor m
˚
a ogs
˚
a desse brukast
saman med \ (bakslask).
zevs% X=‘expr 4 \ < 5‘
zevs% echo $X
1
zevs% X=‘expr 4 = 5‘
zevs% echo $X
0
zevs%
Dersom argumenta for desse logiske operatorane er nummer, vil expr utføre
numeriske samanlikning. Er dei strengar vil expr lage samanlikningar basert
p
˚
a rekkefølgen i ASCII–tabellen (eller teiknsettet som er definert i skallet).
11.7 Operatoren for
Andre operatorer i skallprogrammering sørger for løkkekonstruksjonar,— som
gjentek delar av programmet i fleire repetisjonar.
zevs% for variabel in obj1 obj2 obj3 ; do kommando(-ar) ; done
Der variabel er ein miljøvariabel som ein gjev namn, og mengda (obj1 obj2 . . . )
er ei liste av strengar, som er adskilt med mellomrom eller tabulator.
zevs% for VAL in 1 2 3 4 ; do kommando(-ar); done
Variabelen vert sett lik alle elementa i lista etter tur. Her er eit eksempel p
˚
a ei
lita prosedyre som listar ut alle elementa i lista etter kvart som dei blir proses-
sert.
zevs% for VAL in 1 2 3 4
> do
> echo $VAL
> done
1
2
3
4
zevs%
Som vanleg kan kommandoane inne i do og done vere s
˚
a komplekse som nødvendig,—
med f.eks if–konstruksjonar og/eller nye for–konstruksjonar. Denne for–konstruksjonen
vert gjerne brukt ved operasjonar p
˚
a filar. Fordi for–operatoren vert tolka av
skallet kan ein bruke jokertegn.
11.8. OPERATOREN WHILE 103
zevs% ANTAL=0
zevs% for FIL in *
> do
> ANTAL=‘expr $ANTAL + 1‘
> done
zevs% echo $ANTAL
30
zevs%
Det er ingenting som tvingar ein til
˚
a bruke miljøvariabelen som kjem etter for,
men det m
˚
a vere der, ellers ville ikkje skallet finne ut kor mange gongar det
skal gjenta løkka. Standard ut kan ogs
˚
a brukast til
˚
a lage ei mengde eller liste.
zevs% ANTAL=0
zevs% for FIL in ‘ls‘
> do
> ANTAL=‘expr $ANTAL + 1‘
> done
zevs% echo $ANTAL
30
zevs%
Kommandoen for har mange bruksomr
˚
adar, b
˚
ade i skallprogram og interaktivt
ved terminalen, fordi den let ein eksekvere i ei liste av objekt og utføre ei stort
antal med kommandoar p
˚
a kvart objekt i lista. Operatoren for er faktisk den
operatoren som er mest brukt i skall-program.
11.8 Operatoren while
Operatoren while kombinerer enkelte karekteristikka fr
˚
a b
˚
ade for og if. Den tek
ein etterfølgande test–kommando, og har deretter ein do done seksjon.
zevs% while [ ! -f fil ]
> do
> echo “Proevar aa lage fil”
> touch fil
> done
Proevar aa lage fil
zevs%
Ein kan substituere while med until, dermed vert betydninga av test–uttrykket
invertert.
zevs% COUNT=0; export COUNT
zevs% until [ $COUNT -gt 5 ] ; do
> echo $COUNT
> EE=‘expr $EE + 1‘
> done
0
104 KAPITTEL 11. SKALL-PROGRAMMERING
1
2
3
4
5
zevs%
until er i mange tilfeller lurt
˚
a bruke dersom man vil at løkka skal bli utført
minst 1 gong. Det er fristande
˚
a samanlikne until med f.eks ei do while løkke i
programmersspr
˚
aket C eller Java.
11.9 Operatoren case
Skallet har ein fleirvalgsoperator, case, denne fungerer som ein stor if–elif–fi
konstruksjon. Ut fr
˚
a ein streng kan case utføre ei liste av kommandoar assosiert
med den kategorien.
zevs% case $VAR in
> mønster1)
> kommando-liste
> ;;
> mønster2)
> kommando-liste
> ;;
> mønster3)
> kommando-liste
> ;;
> esac
zevs%
Det kan vere ubegrensa mange mønster og kommandolister, kommandolista
assosiert med kvart mønster m˚a vere terminert med ;; (semikolon). I tillegg m
˚
a
alle mønster vere forskjellige og tegnet ) (høgre parentes) m˚a st
˚
a etter kvart
mønster. Variabel kan vere alle miljøvariable, eller eit uttrykk som er eller re-
turnerer ein streng.
zevs% case $LOGNAME in
> jot)
> echo “‘allo ‘allo Jo ...”
> ;;
> eyvindh)
> echo “Jobbe nuh igjen ... ?”
> echo “Ha deg heim til kjerringa !”
> logout
> ;;
> trondk)
> echo “User too confused to work !”
> logout
11.10. KOMMANDOEN PRINTF OG UTSKRIFTER FR
˚
A SKALLPROGRAM105
> ;;
> *)
> echo “Willkommen, bievenue, willkommen to ‘uname -n‘.”
> ;;
> esac
zevs%
Mønsterdelen av case–operatoren tillet bruk av regulære uttrykk i skallformat.
I dette eksemplet kunne vi f.eks ha brukt *ot, ?ot, jo* eller eit anna mønster for
˚
a finne jot. I tillegg kan ein bruke |, røyrsymbolet (pipe), for meine eller ( OR) i
mønster seksjonen. Ved regulære uttrykk vil det første mønsteret som passar
til strengen sl
˚
a til.
11.10 Kommandoen printf og utskrifter fr˚a skallpro-
gram
Den vanlege kommandoen ein brukar for
˚
a f
˚
a utskrifter fr
˚
a eit skallprogram
er kommandoen echo. Dette er ein enkel kommando for
˚
a skrive ut strengar
og verdiar av miljøvariable. For meir komplekse former av utskrifter er printf
betre egna. Denne kommandoen tilbyr eit streng orientert subsett av eigenska-
pane til printf som vi finn i programmmeringsspr
˚
aket C.
zevs% printf “Dette er ein streng: %s\n “1234567890”
Dette er ein streng: 1234567890
zevs%
Eg reknar med at dei fleste kjenner til printf fr
˚
a programmeringsspr
˚
aket C,
derfor vil eg ikkje g
˚
a nærare gjennom denne kommandoen. Ver oppmerksom
p
˚
a at kommandoen tek berre formateringskodar til strengar.
zevs% TEST=‘printf “%.4s” “Hallo verden”‘
zevs% echo $TEST
Hall
zevs%
Det som er verdt
˚
a merke seg ved denne kommandoen er at den er enkel
˚
a
bruke for
˚
a ta ut delar av strengar.
11.11 Operatoren .
Husk alltid p
˚
a at skallprogram blir utført i eit subskall, og forandringar p
˚
a
miljøet vil ikkje ha tilbakeverkande kraft p
˚
a “foreldreskallet”.
zevs% sh .profile
zevs%
106 KAPITTEL 11. SKALL-PROGRAMMERING
Dersom .profile vert kjøyrt p
˚
a denne m
˚
aten vil ikkje det føre til permante end-
ringar i miljøet. For
˚
a kome rundt dette problemet har skallet ein operator som
tvingar det noverande skallet til
˚
a utføre skallprogrammet. Dette er operatoren
. (punktum). P
˚
a engelsk blir denne operatoren kall for the dot–operator.
zevs% . .profile
zevs%
Alle skallprogram er akseptale argument (s
˚
a lenge det er skallprogram laga
for Bourne–skall). Forandringar som er gjort i miljøet ved denne operatoren vil
forbli permanente i miljøet, og bli arva dersom ein startar nye skall.
11.12 Argument p˚a kommandolinja
N
˚
ar ein lagar skallprogram vil ein at dei skal handtere argument p
˚
a kommando-
linja akkurat slik som andre program. Skallspr
˚
aket under Bourne–skallet kraf-
tige verktøy for
˚
a handtere dette.
11.13 $#, $*, og posisjonsparametre
Vi har allereie g
˚
att igjennom ein del av skallvariablane. No skal vi ta i bruk to
nye,— $# og $*, som st
˚
ar henholdsvis for antal parametre p
˚
a kommandolinja
og verdiane av alle parametre.
echo $#
for VAR in $*
do
echo $VAR
done
Skallet ekspanderer variabelen $* til alle parametre p
˚
a kommandolinja. La oss
prøve
˚
a kjøyre dette skallprogrammet.
zevs% ./skriv.parametre forste andre tredje
3
forste
andre
tredje
zevs%
3–talet er resultatet av echo $# medan det andre er resultatet av echo–setninga
i for–do–done–løkka. I tilleg er dei andre parametrane individuelt tilgjengelege
for skallprogrammet gjennom namna $1, $2, $3 . . . osv., heilt opp til ni paramet-
re. Det forrige programmet kunne ein f.eks ha skreve slik.
11.14. FEIL OG FEILMELDINGAR I SKALLPROGRAM 107
echo $#
echo $1
echo $2
echo $3
Kvar av desse kommandolinje parametrane kan brukast til
˚
a gje inn filnamn el-
ler anna informasjon til skallprogrammet fr
˚
a kommandolinja. Desse kommando-
linje parametrane er vanlegvis berre i bruk i skallprogram som blir eksekvert
som kommandoar, fordi innloggingsskallet har vanlegvis ikkje parametre.
zevs% echo $#
0
zevs%
$0 returnerer sjølve kommandonamnet. Den første parameteren etter kommando-
namnet er $1. I tilleg finst ein kommando i skallet som kan sette kommando-
linje parametre dersom det trengs.
zevs% set forste andre tredje
zevs% echo $#
3
zevs% echo $2
andre
zevs%
Operatoren set tilordnar parametrane til dei s
˚
akalla posisjonsparametrane slik
at skallprogram kan bruke namna $2, og s
˚
a vidare, sjølv om det ikkje er oppgitt
parametre p
˚
a kommandolinja. Dette kan f.eks brukast dersom skallprogrammet
skal ha inn parametre, dersom det ikkje blir gitt inn parametre kan skallprogrammet
sette parametrane til ein predefinert verdi. Kommandoen set blir brukt ein del
i skallprogram.
11.14 Feil og feilmeldingar i skallprogram
˚
A utvikle skallprogram som verkar etter hensikten krev ein del eksperimen-
tering og testing. Skallet skriv ut enkelte feilmeldingar dersom det ikkje f
˚
ar
til
˚
a eksekvere eit skallprogram som ikkje er korrekt, men meldingane er ofte
knappe.
zevs% for VAR in ‘ls‘ do
> Halloen
syntax error:’Halloen’ unexpected
zevs%
Feilen var at vi ikkje hadde semikolon eller linjeskift før do, det var kanskje
ikkje s
˚
a enkelt
˚
a skjønne ut fr
˚
a den feilmelding som skallet skreiv ut.
108 KAPITTEL 11. SKALL-PROGRAMMERING
Det er defor mulig
˚
a sette p
˚
a ein s
˚
akalla transparent modus (i engelsk litteratur
ofte nemnt som trace), dette gjer ein ved
˚
a eksekvere skallprogrammet med ein
-x–opsjon. Dette f
˚
ar skallet til
˚
a skrive ut kvar kommando etter kvart som dei
vert utført. Ein annan opsjon som ogs
˚
a g
˚
ar an
˚
a bruke er verifiser (engelsk:
verbose), d
˚
a brukar ein -v.
zevs% sh -v skriv.parametre forste andre tredje
:
echo $#
3
for VAR in $*
do
echo $VAR
done
forste
andre
tredje
exit 0
Andre varianten med -x.
zevs% sh -x skriv.parametre forste andre tredje
+ :
+ echo 3
3
+ echo forste
forste
+ echo andre
andre
+ echo tredje
tredje
+ exit 0
Begge opsjonane kan settast inne i skallprogrammet f.eks først i fila med set -v
og set -x . Opsjonane kan sjølvsagt ogs
˚
a brukast saman,— alts
˚
a b
˚
ade -x og -v.
11.15 Kommandoen getopt(s)
Hittil har vi sett p
˚
a skallprogram har f
˚
a namn p
˚
a filar eller anna som argument
p
˚
a kommandolinja. Den normale syntaksen for ein kommando er at flagg el-
ler opsjonar startar med - (minus) for
˚
a modifisere operasjonen p
˚
a komman-
doen. Skallprogram kan ogs
˚
a ha flagg eller opsjonar som del av parameter-
lista. Skalloperatoren getopt(s) (for get option(s)) er laga for gjere traverserin-
ga av kommandolinje argument lettare n
˚
ar desse flagga/opsjonane kan vere i
vilk
˚
arleg rekkefølge, og i tillegg har parametre om er tilknytta opsjonane/flagga.
I gamle skallprogram vil ein finne denne funksjonen som getopt, i nyare imple-
mentasjonar av UNIX har denne funksjonen vorte endra ein del og har f
˚
att
namnet getopts, denne siste er
˚
a foretrekke for nye implementasjonar av UNIX.
11.15. KOMMANDOEN GETOPT(S) 109
while getopts yz:x VAR
Dette definerer ei løkke som brukar getopts funksjonen, som tek to argument.
Det første argumentet er ei liste over akseptable bokstaver utan mellomrom
eller tabulator. Kvart tegn som krev eit etterfølgande argument har eit kolon
etter tegnet. Det andre argumentet , VAR, er den temporære miljøvariabelen
som skal inneholde verdien av denne opsjonen, som vert sett for kvar iterasjon
gjennom while–løkka. Som vi ser i dette eksemplet er lovlege opsjonar y, z og
x. Opsjonen z skal ha eit etterfølgande argument.
zevs% cat kommando.fil
:
# First we parse the command options, assigning
# enviroment-variables to mark that legal flags has been set.
while getopts yz:x VAR
do
case $VAR in
x)
XFLAG=true
;;
y)
YFLAG=true
;;
z)
ZFLAG=true ; ZOPT=$OPTARG ;
;;
*)
echo $USAGE ; exit 2
;;
esac
done
# Now we have parsed all flags and options, we just reset
# the argument list to be only what‘s left after these are
# taken from the input line
shift ‘expr $OPTIND - 1‘
# We can now go on with the shell-script, as needed
.
.
zevs%
Skallvariabelen USAGE er definert av getopts funksjonen, og rapporterer kva
opsjonar som er lovlege i getopts–kommandoen som er definert i while–konstruksjonen.
Lovlege kommandoar er f.eks:
zevs% kommando.fil
zevs% kommando.fil -x
110 KAPITTEL 11. SKALL-PROGRAMMERING
zevs% kommando.fil -y -x
zevs% kommando.fil -z argument
zevs% kommando.fil -x -z argument
zevs% kommando.fil -z argument -y
Etter at alle kommandolinje argumenta har vorte prosessert i while–løkka, vil
shift–kommandoen fjerne alle argument som har vorte prosessert fra $*–variabelen,
slik at $1 vil no st
˚
a for første argument som end
˚
a ikkje har vorte prosessert. N
˚
ar
alle argumenta har vorte prosessert kan skallprogrammet gjere jobben.
11.16 Kommandoen trap
Vanlegvis n
˚
ar eit signal slik som f.eks hangup, eller eit anna signal vert sendt til
eit skallprogram, vil eksekvering bli stoppa med det same og ein vil returnere
tilbake til skallet. Og vanlegvis er det dette ein vil, men enkelte gongar kan
skallprogrammet holde p
˚
a med sensitive operasjonar. D
˚
a kan det vere lurt
˚
a
fange signal slik at skallprogrammet f
˚
ar lov til
˚
a gjere seg ferdig, f.eks ved at
skallprogrammet mottek signalet og utfører ei rutine for
˚
a rydde opp før det
avsluttar. Kommandoen trap er laga for dette bruket. Den kan brukast alle sta-
der innanfor eit skallprogram,— eg vil ikkje anbefale ˚a bruke denne direkte
fr˚a kommandolinja!. Kommandoen tek ei kvotert kommandolinje som første
argument, og ei liste over signalnummer. N
˚
ar ein av signala vert mottatt vil
kommandolinja bli utført, etterp
˚
a vil skallprogrammet g
˚
a tilbake til det gjorde
før signalet. Dersom skallprogrammet skal avslutte m
˚
a ein eksplisitt sette inn
kommandoen exit i kommandolinja til trap.
trap “echo Avsluttar ...; exit” 1 2 15
Lista over tilgjengeleg signal og betydning kan ein lese i manualane (signal(5)),
dette vil ein finne i Programmers Reference Manual. Ein har ikkje tilgang til signal-
nummeret inne i kommandolinja, men ein kan sette s
˚
a mange trap–kommandoar
som ein vil. For
˚
a resette brukar ein berre ein ny trap–kommando som redefi-
nerer det same signalet.
trap 1 2 15
Dersom kommandostrengen er tom vil det signalet bli ignorert. Denne kom-
mandoen ignorerer tre signal som gjer det vanskeleg
˚
a stoppe skallprogrammet.
11.17 Kommandoen wait
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Av og til vil ein kanskje sette igong fleire bakgrunnsjobbar, men ikkje fortsette
for ein eller fleire av dei er ferdig. D
˚
a kan ein bruke kommandoen wait for
˚
a
fortelle at skallprogrammet skal vente til ein bakgrunnsjobb er ferdig før det
skal g
˚
a vidare. Kommandoen tek prosessidentiteten til den prosessen ein skal
vente p
˚
a som argument.
11.18. SKALLFUNKSJONAR 111
zevs% cat /unix /tmp/dd &
1234
zevs% wait 1234
N
˚
a prosessen er ferdig vil wait returnere til skallet. Dersom ein vil vente p
˚
a
alle bakgrunnsjobbar startar ein wait utan argument. Kommandoen wait tilbyr
enkelte funksjonar innanfor jobbkontroll for skallprogram.
11.18 Skallfunksjonar
I tillegg til
˚
a kunne lage skallprogram ved
˚
a samle kommandoar i tekstfilar, g
˚
ar
det an
˚
a lage s
˚
akalle skallfunksjonar. Desse er meir effektive enn skallprogram
men er mykje vanskelegare
˚
a kontrollere, fordi dei er definerte direkte til skallet
og har ikkje eit permanent liv som i ei fil. N
˚
ar ein definerer ein skallfunksjon
s
˚
a les det aktive skallet definisjonen, og skallfunksjonen vert lagra inne i det
aktive skallet. Ein kan utføre funksjonen som alle andre kommandoar eller
skallprogram, men n
˚
a ein stoppar skallet eller loggar ut er funksjonen borte.
Skallfunksjonar g
˚
ar ikkje an
˚
a eksportere og dei er heller ikkje automatisk til-
gjengeleg i subskall, skal dei vere tilgjengelege i subskall m
˚
a dei lesast inn av
subskallet. Skallfunksjonar blir definert p
˚
a formen:
zevs% namn () {
> kommando-liste
> }
zevs%
der namn kan vere vilk
˚
arleg namn. Parantesane () m˚a vere med, og teiknet {
startar kommandolista,— og teiknet } avsluttar funksjonen
1
. Skallvariablane
$#, $* og posisjonsparametrane $1 $9 er tilgjengelege innanfor funksjonen.
zevs% vis () {
> echo $1
> echo $2
> exit 0
> }
zevs% vis andre forste
forste
andre
zevs%
Dette definerer ein skallfunksjon som skriv ut dei to første parametrane og
returnerer ein verdi p
˚
a null tilbake til skallet. Dersom ein har mange skall-
program som ein brukar veldig mykje kan ein spare ein del n
˚
ar det gjeld ytelse
ved
˚
a definere dei som skallfunksjonar. D
˚
a kan ein definere skallfunksjonane
i oppstartfilane for skallet, dermed vil dei alltid vere tilgjengeleg n
˚
ar ein har
bruk for dei.
1
Dette skulle vere kjent fr
˚
a programmeringsspr
˚
aket C eller Java.
112 KAPITTEL 11. SKALL-PROGRAMMERING
11.19 Kommandosekvensar
Ein kommandosekvens blir konstruert med med operatorane && (logisk OG)
og || (logisk ELLER) som skille mellom individuelle kommandoar. Operato-
ren && eksekverer den andre kommandoen dersom den første gjekk feilfritt
(returnerte null til skallet). Operatoren || eksekverer den andre kommandoen
dersom den første gjekk feil, dersom den første gjekk feilfritt utfører den ikkje
den andre kommandoen.
zevs% touch fila.mi || echo “Kan ikkje opprette fila.mi”
zevs%
Dette er ekvivalent med:
zevs% touch fila.mi
zevs% if [ $? -ne 0 ] ; then echo “Kan ikkje opprette fila.mi” ;
zevs%
Ein veldig vanleg m
˚
ate
˚
a bruke kommandosekvensar:
[ -f $HOME/.profile ] && . ${HOME}/.profile
For
˚
a hente inn miljøvariablane fr
˚
a .profile.
Kapittel 12
Prosesser
Aspektet med fleiroppg
˚
aver under UNIX er vanlegvis gruppert under emnet
om prosessar . Ein prosess , eller ein jobb, er ein forekomst av eit program som
eksekverer. Innloggingsskallet er ein prosess s
˚
a lenge ein er innlogga. Dersom
ein eksekverer ein kommando, s
˚
a er denne kommandoen ein prosess medan
den blir utført. Prosessar har mange attributtar, og det eksisterer mange kom-
mandoar for
˚
a manipulere prosessar og attributtar. I dette kapitlet vil eg prøve
˚
a komme litt inn p
˚
a korleis ein kan kontrollere prosessar og miljøet rundt pro-
sessar til eigen fordel. Før vi g
˚
ar vidare kan vi ta nokre eksempel:
zevs% cat /etc/passwd
Denne kommandoen opprettar ein prosess, som eksisterer heilt til cat–kommandoen
er ferdig. Dersom ein opprettar ein røyrledning med operatoren |, vil kvar av
komponentane i kommandoen lage separate prosessar. Kommandolinja
zevs% cat /etc/passwd | wc
vil opprette to prosessar, ein for kvar kommando. Desse to kommandoane
kommuniserer med kvarandre gjennom røyrledningen.
12.1 Tidsdeling i UNIX
P
˚
a kvar prosessor kan berre eit program bli eksekvert til ei kvar tid. Ein av
dei største oppg
˚
avene til kjernen, den delen av UNIX som administrer heile
UNIX–systemet, er
˚
a kontrollere og støtte alle programma som treng
˚
a bruke
prosessorane. Fleire av desse programma vil gjerne ha prosessortid samstun-
des, og det er kjernen sin jobb
˚
a gje ein prosess aksess for eit gitt tidspunkt,
likevel kjører prosessen berre ei kort stund, deretter vert kontrollen gitt til ein
annan prosess. Fordi denne byttinga av jobbar, eller prosesskiftet, skjer minst
ein gong i sekundet, som regel oftare, har kvar brukar inntrykket av at han el-
ler ho eig” heile maskina. Dette er fordi fleirprosess operativsystem vert kalla
tidsdelingssystem,— prosessorane er ein ressurs som vert delt mellom bru-
karane og prosessane. Ein prosess er alts
˚
a ein forekomst av eit program som
eksekverer. Ein kommando som ligg lagra p
˚
a disken kan vere eksekverbar, og
ein kan vere i stand til
˚
a utføre den med eit kommandonamn, men s
˚
a lenge den
113
114 KAPITTEL 12. PROSESSER
ikkje kjører eller ventar p
˚
a
˚
a f
˚
a aksess til prosessoren er den ikkje ein prosess.
Prosessar beskriv den aktuelle statusen for maskina.
12.2 Om prioritetsklasser
Vanlegvis vil alle prosessar ha lik prioritet, det vil seie at alle har lik rett p
˚
a pro-
sessortid. I UNIX finst det verktøy for
˚
a endre prioriteten p
˚
a prosessar som ein
opprettar. I nyare versjonar av UNIX, som f.eks System V Release 4, finst det
to separate klasser der prioriteten kan endrast separat. Tidsdelings prioriteten
er for vanlege brukarapplikasjonar, denne vil eg g
˚
a igjennom. Ei ny sanntids
prioritet har ogs
˚
a vorte oppretta. Sanntidsprioritet har endeleg gitt UNIX mu-
ligheten til
˚
a bli brukt i applikasjonar som krev fast og hurtig respons. Likevel
blir det stort sett brukt spesialiserte kjerner og distribusjonar dersom ein treng
ekte sanntid. Ein kan manipulere prioriteten p
˚
a prosessane separat i kvar klas-
se, men sanntidsprosessar vil alltid f
˚
a prosessortid før tidsdelingsprosessar.
12.3 Kontrollere prosessar i tidsdeling
Vanlegvis vil auke av proritet for ein prosess bety at den blir fortare ferdig p
˚
a
bekostning av andre prosessar p
˚
a maskina. Dette fordi andre prosessar ikkje
f
˚
ar like mykje prosessortid, og dermed vert dei seinare ferdig. Dersom ein sen-
kar prioriteten vil prosessen kreve mindre prosessortid, det tek lenger tid
˚
a
fullføre, men alle dei andre prosessane p
˚
a maskina dreg fordel sidan dei f
˚
ar
ein større del av maskinressursane. Dersom ein er superbruker kan ein set-
te opp prioriteten p
˚
a sine eigne prosessar. Vanlege brukarar kan berre senke
prioriteten med kommandoen nice. For
˚
a bruke denne kommandoen startar
ein berre kommandolinja med nice.
zevs% nice cat /etc/passwd
Kommandolinja eller kommandolinjene som ein vil eksekvere vert brukt som
parametre til nice–kommandoen. Denne kommandoen vil redusere prioriteten
p
˚
a kommandoen med 10, dette er standard verdi. Nummeret er eit vilk
˚
arleg
verdi
1
i prosessplanen som kan variere fr
˚
a 0 til 19. Ein kan redusere priorite-
ten til kommandoen meir eller mindre ved
˚
a gje eit numerisk inkrement som
argument til nice.
zevs% nice -14 cat /etc/passwd
N
˚
ar ein har ein applikasjon som konsumerer mykje prosessortid kan ein kjøre
kommandoen med lav prioritet, slik at kommandoen vil “suge” ut ledig pro-
sessortid og ikkje p
˚
averke jobbar med høgare prioritet p
˚
a maskina.
1
N
˚
ar eg her i seier at talet er vilk
˚
arleg s
˚
a er det fordi ein ikkje kan utlede eksakt n
˚
ar prosessen
er ferdig ved hjelp av denne tallverdien. Talet vil berre st
˚
a i forhold til dei andre prosessane,– og
dei er igjen avhengige av belastning p
˚
a systemet.
12.4. BAKGRUNNSPROSESSAR 115
12.4 Bakgrunnsprosessar
Kommandoen nice vil ein assosiere med kommandoar som ein kjører i bak-
grunnen fr
˚
a skallet. Dette betyr at skallet er tilgjengeleg sjølv om ein komman-
do kjører, slik at ein kan kjøre andre kommandoar p
˚
a samstundes. Skallet bru-
kar operatoren & for
˚
a la ein eksekvere kommandoar i bakgrunnen.
zevs% cat /etc/passwd &
I dette tilfellet legg vi kommandoen i bakgrunnen, likevel vil utdataene bli
skrevne ut p
˚
a skjermen fordi vi ikkje har redirigert standard ut. N
˚
ar ein bru-
kar & for kjøre ein kommando vil skallet returnere med ein gong og vente p
˚
a
din neste kommando. Skallet returnerer eit prosessnummer eller pid (dette refe-
rerer til eit engelsk uttrykk som blir mykje brukt i UNIX: Process ID), dette kan
brukast for
˚
a referere til bakgrunnsprosessen.
zevs% cat /etc/passwd &
7843
zevs%
Vi skal g
˚
a igjennom meininga med prosessnummer seinare i kapitlet. Vanleg-
vis vil ein redirigere standard inn og standard ut for kommandoar som kjører i
bakgrunnen, slik at ein ikkje blir skjermbildet ikkje blir forstyrra av bakgrunns-
prosessar.
zevs% cat /etc/passwd > passwd.kopi &
7834
zevs%
Ein vil i tillegg redirigere standard feil ogs
˚
a, fordi den vil ogs
˚
a kome til termi-
nalen sjølv om standard ut er redirigert.
zevs% cat /etc/passwd > passwd.kopi 2>feil.ut &
6342
zevs%
UNIX let ein kjøre mange bakgrunnsjobbar (det finst ei grense for kvar bru-
kar, men denne grensa held i massevis dersom ein ikkje opprettar for mange
prosessar ved ein feil),— blir det for mange vil ein merke at det blir d
˚
arlegare
responstider. Maksimum antal prosessar pr. brukar kan sjekke med komman-
doen ulimit.
zevs% ulimit -u
709
zevs%
N
˚
ar ein bakgrunnsprosess er ferdig vil ikkje systemet nødvendigvis fortelle at
kommandoen er ferdig,— m
˚
a ein finne sjølv. Ein kan sjekke statusen p
˚
a bak-
grunnsprosessar med kommandoen ps, denne skal vi kome tilbake til i dette
kapitlet.
116 KAPITTEL 12. PROSESSER
12.5 Logge ut medan bakgrunnsprosessar kjører
Dersom ein har oppretta bakgrunnsprosessar medan ein har innlogga, vil dei
bli stoppa n
˚
ar ein loggar ut. Dette blir gjort fordi dei alle saman er assosiert
med innloggingsskallet. Derfor har UNIX eit verktøy som tillet at prosessane
f
˚
ar kjøre vidare etter at ein har logga ut. Dette er kommandoen nohup (for no
hangup), som kan vere veldig nyttig dersom ein har lange jobbar som tek f.eks
ei heil natt eller ei heil veke for
˚
a fullføre. Kommandoen brukast p
˚
a same m
˚
ate
som nice, p
˚
a starten av den kommandolinja ein vil ha utført.
zevs% nohup cat /etc/passwd &
Dersom ein brukar nohup i ein røyrledning, m
˚
a ein starte kvart element i røyr-
ledninga med ein nohup–kommando.
zevs% nohup cat /etc/passwd | nohup wc > ut.fila &
Dersom ein ikkje gjer dette vil dei medlemmane av røyrledningen som er utan
ein nohup–kommando bli stoppa n
˚
ar ein loggar ut og heile røyrledningen vil
kollapse. Dersom ein ikkje redirigerer utdataene vil nohup lage ei fil for utdata-
ene, dette er fordi at n
˚
ar ein har logga ut vil det ikkje eksistere nokon terminal
˚
a sende utdataene til. Ta deg spesielt av standard feil dersom du ikkje vil at
feilmeldingar skal kome i denne fila.
12.6 Foreldre og barn
N
˚
ar ein loggar inn, vil systemet lage ein skallprosess, denne prosessen stoppar,
eller døyr, n
˚
ar ein loggar ut. Ein vil alltid ha minst ein prosess assosiert med
ein sesjon. Uttrykk som blir brukt er at prosessar blir fødde n
˚
ar dei startar, og
døyr n
˚
ar dei stoppar. Mange prosessar kjem og g
˚
ar p
˚
a denne m
˚
aten, avhen-
gig av korleis systemt vert brukt. Enkelte prosessar startar n
˚
ar systemet vert
starta opp og eksisterer heilt til systemet vert teke ned. Som oftast har pro-
sessar kortare livstid enn dette. Den einaste m
˚
aten for ein prosess
˚
a bli fødd
er at ein annan prosess startar den. Den eldste prosessen blir kalla foreldre”
prosess og den som startar for “barne” prosess. Ein foreldreprosess kan “skal-
le” av fleire barneprosess , men ein prosess kan berre ha ein foreldreprosess.
Ein prosess kan skalle av ein barneprosess, som s
˚
a skallar av ein ny barne-
prosess, . . . osv. Ein brukar ikkje
˚
a snakke om besteforeldre til ein prosess men
det g
˚
ar faktisk an
˚
a spore opp den opprinnelege prosessen ved følge tempo-
rære prosessar bakover. Sjølv om alle desse temporære prosessane ikkje ek-
sisterer eller fortset
˚
a eksistere har likevel alle prosessar ein bestemt foreldre-
prosess. Dersom ein prosess lagar ein barneprosess, og denne barneprosessen
lagar sin eigen barneprosess kan prosessane i mellom dø. Vanlegvis vil alle
barneprosessane dø n
˚
ar foreldreprosessen dør, men ein kan forandre ting slik
at ikkje barneprosessen dør. N
˚
ar dette skjer arvar den opprinneleg prosessen
barnet til den prosessen som døde. Dvs. dersom ein barneprosess opprettar ein
ny prosess og terminerer, vil “besteforelderen”, “oldeforelderen” eller “tipp-
oldeforelderen”osv. . . bakover i prosesshierarkiet arve barnet dersom foreldre-
prosessane i mellom har dødd, og bli foreldreprosess. Dermed har alle proses-
sar ein foreldreprosess.
12.7. KOMMANDOEN PS 117
12.7 Kommandoen ps
Ein kan kikke p
˚
a kjørande prosessar med kommandoen ps (prosess status).
Denne kommandoen viser informasjon om prosessar som er i live n
˚
ar ein ekse-
kverer kommandoen. Dersom ein kjører kommandoen fleire gongar etter kvar-
andre vil den produsere forskjellig informasjon for kvar gong,— ps tek berre eit
bilete av aktiviteten akkurat n
˚
ar ps vert kjørt. Dersom ein kjører denne kom-
mandoen utan parametre vil den vise eigne prosessar.
zevs% ps
PID TT STAT TIME COMMAND
21559 p0 IW 0:01 -csh (csh)
21674 p0 IW 0:00 xcalc
21682 p0 S 0:15 xeyes
21699 p0 IW 0:03 vi kurs.tex
21712 p1 S 0:00 -csh (csh)
21949 p1 R 0:00 ps
zevs%
I første kolonne der det st
˚
ar PID (Process IDentitity) er denne unike prosess-
identifikatoren. Neste kolonne det det st
˚
a TT betyr kva for port/terminal inn-
gong prosessen tilhøyrer. STAT betyr status p
˚
a prosessen,— dersom vi ser p
˚
a
den første kommandoen csh s
˚
a har den status IW, dette betyr Idle og Swapped
out,— alts
˚
a for øyeblikket ikkje aktiv og kasta ut av minnet (dette er eigentleg
ikkje s
˚
a viktig,— det har igrunn ogs
˚
a liten praktisk betydning for ein brukar).
TIME fortel kor mykje prosessortid denne prosessen har f
˚
att. COMMAND
skulle vel vere sjølvforklarande. Dessverre s
˚
a er denne kommandoen veldig
forskjellig p
˚
a BSD i forhold til System V n
˚
ar det gjeld opsjonar. Ein f
˚
a stort sett
ut dei same opplysningane, men opsjonane er heilt forskjellige for
˚
a f
˚
a lista ut
dei same opplysningane. Det vil ta altfor lang tid
˚
a forklare alle mulighetar
derfor vil eg berre henvise til man–sidene, det skulle g
˚
a an
˚
a f
˚
a noko fornuftig
ut av dei. S
˚
a lenge vi skal berre stoppe v
˚
are eigne prosessar er det nok
˚
a f
˚
a tak i
prosessidentiteten og det vil ein klare berre ved
˚
a skrive ps. Det er mykje meir
informasjon rundt ein prosess enn det som kom fram i denne listinga. Til dette
har vi mellom anna -f –opsjon under System V og -u–opsjon under BSD.
zevs% ps -u
USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND
trondk 12644 13.6 2.9 76 420 p2 S 13:26 0:00 sh -c ps -u
trondk 11668 0.0 0.0 88 0 p2 IW 08:21 0:01 -csh (csh)
trondk 12492 0.0 2.5 240 368 p2 S 13:08 0:05 vi +/foreldre og barn ku
trondk 12338 0.0 0.0 88 0 p4 IW 12:37 0:00 -csh (csh)
trondk 12657 0.0 2.8 176 400 p2 R 13:26 0:00 ps -u
trondk 12016 0.0 0.0 608 0 p2 IW 11:10 0:03 xdvi kurs
zevs%
Med fare for
˚
a bli veldig teknisk kan eg prøve
˚
a forklare kva dette st
˚
ar for.
118 KAPITTEL 12. PROSESSER
USER Namnet p
˚
a eigar av prosessen.
PID Prosess identiteten.
%CPU Forbrukt prosessortid.
%MEM Antal prosent av minne som vert brukt av prosessen.
SZ Størrelsen av datasegment og stakksegment.
RSS Størrelse i minnet i antal Kb.
TT Terminal.
STAT Tilstand for prosessen.
START Tidspunkt for n
˚
ar prosessen vart starta.
COMMAND Kommandolinja for prosessen.
Denne kommandoen vart utført p
˚
a ei maskin med BSD–UNIX,— ein vil finne
igjen dei same opplysningane dersom ein utfører ein tilsvarande kommando
p
˚
a System V.
12.7.1 Aktiviteten for andre brukarar
Kommandoen ps kan ogs
˚
a ein opplysningar om kva andre brukarar gjer p
˚
a
maskina. I System V har ein muligheten for
˚
a spesifisere bruker ved hjelp av
ein -u–opsjon. For
˚
a kikke f.eks p
˚
a prosessane til bruker troka kan ein skrive :
ps -u troka. I BSD–UNIX har ein ikkje muligheten til dette,— det her ein berre
muligheten for
˚
a kikke p
˚
a alle prosessar. Dette gjer ein med -a (for all).
zevs% ps -ua
USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND
root 19964 82.1 1.4 28 196 p1 R < 09:38 3:39 /usr/secure/pwchecker/ch
trondk 19970 11.9 2.9 76 424 p0 S 09:42 0:00 sh -c ps -ua
root 19949 0.0 0.0 28 0 p1 IW< 09:34 0:00 /bin/sh ./pwguess.sh
trondk 19875 0.0 0.0 596 0 p0 IW 09:21 0:02 xdvi kurs
root 19965 0.0 0.0 0 0 p1 Z < May 8 0:00 <defunct>
trondk 19878 0.0 2.9 240 424 p0 S 09:24 0:04 vi +/\%CPU kurs.tex
root 19950 0.0 0.0 36 0 p1 IW< 09:34 0:00 /bin/sh ./pwguess.sh
root 19933 0.0 0.0 68 0 p1 IW 09:33 0:00 -su (csh)
trondk 19912 0.0 0.0 88 0 p1 IW 09:33 0:00 -csh (csh)
trondk 19827 0.0 0.0 88 0 p0 IW 08:18 0:00 -csh (csh)
trondk 19983 0.0 2.9 188 424 p0 R 09:42 0:00 ps -ua
Ein kan sj
˚
a ein del ting av dette, blant anna at det er fleire som er logga inn. Vi-
dare at det f.eks ligg ein prosess som er s
˚
akalla <defunct> ,— dvs. at foreldre-
prosessen ikkje har avslutta kontakten med barnetprosessen sin p
˚
a ein skikke-
leg m
˚
ate. Dersom vi undersøker datoen for denne prosessen s
˚
a ser vi at den
er berre oppgitt med m
˚
anad og dag,— dette er fordi prosessen har vore aktiv
lenger enn det siste døgnet. Prosessar som g
˚
ar lenger enn eit døgn f
˚
ar oppgitt
tidspunktet p
˚
a denne m
˚
aten for
˚
a redusere utdataene fr
˚
a ps,— UNIX vil alltid
ha dette tidspunktet lagra eksakt internt.
12.7. KOMMANDOEN PS 119
12.7.2 Systemprosessar
Vi har sett litt p
˚
a prosessar for brukarar, men der er ogs
˚
a langliva prosessar som
skal understøtte aktivitet p
˚
a systemet, og andre transiente prosessar som blir
fødde og dør etter som systemet g
˚
ar uavhengig av dei individuelle brukarane.
P
˚
a System V brukar ps opsjonen -e (for every for
˚
a vise alleaktive prosessar. P
˚
a
BSD–UNIX brukar ein opsjonen -x. Desse opsjonane viser prosessar som ligg
bak alle brukerprosessane, og kan vere viktig for
˚
a diagnostisere problem.
zevs% ps -ax
PID TT STAT TIME COMMAND
0 ? D 1:46 swapper
1 ? S 0:05 /sbin/init -
2 ? D 0:05 pagedaemon
55 ? S 0:12 portmap
58 ? S 1:39 ypserv
60 ? IW 0:00 ypxfrd
62 ? IW 0:07 ypbind
64 ? IW 0:00 keyserv
67 ? IW 0:00 rpc.ypupdated
70 ? IW 0:00 rpc.yppasswdd /etc/passwd -m passwd
82 ? IW 3:33 in.named
84 ? I 0:00 (biod)
86 ? I 0:00 (biod)
87 ? I 0:00 (biod)
88 ? I 0:00 (biod)
90 ? IW 0:00 /usr/etc/popd
103 ? IW 0:42 syslogd
115 ? IW 0:10 -Waiting for connection (sendmail)
121 ? IW 0:07 rpc.mountd -n
123 ? IW 0:00 rpc.statd
125 ? S 1:53 (nfsd)
126 ? S 1:54 (nfsd)
127 ? S 1:50 (nfsd)
128 ? S 1:59 (nfsd)
129 ? S 1:46 (nfsd)
130 ? S 1:50 (nfsd)
131 ? IW 0:00 rpc.lockd
132 ? S 1:46 (nfsd)
133 ? S 1:53 (nfsd)
141 ? S 177:18 screenblank
143 ? IW 0:00 /usr/etc/rpc.pcnfsd -s /var/spool/lw
147 ? S 1:34 pcimapsvr.eth -D0000 -n4 -I129.241.163.2 129.241.255.255 25
149 ? S 4:08 pciconsvr.eth -D0000 -L0000 -n4 -I129.241.163.2 129.241.255
179 ? S 2:35 /usr/local/es/atalkd
182 ? S 0:43 /usr/local/es/afpsrv
188 ? S 0:37 /usr/local/es/mailsrv
191 ? S 0:02 /usr/local/es/admsrv
194 ? IW 0:02 /usr/local/es/termsrv
120 KAPITTEL 12. PROSESSER
200 ? S 28:18 update
203 ? IW 0:20 cron
218 ? S 1:12 in.rwhod
220 ? IW 0:57 inetd
223 ? IW 0:01 /usr/lib/lpd
227 ? IW 0:00 - std.9600 ttypb (getty)
887 ? IW 0:00 rpc.rquotad
5771 ? IW 0:00 popper
5772 ? IW 0:00 popper
11616 ? IW 0:00 csh -c /usr/bin/X11/xclock -display "129.241.164.113:0.0" -
11619 ? IW 0:00 csh -c /usr/bin/X11/xcalc -display "129.241.164.113:0.0" -g
11651 ? I 0:24 /usr/bin/X11/xclock -display 129.241.164.113:0.0 -geometry
11670 ? IW 0:00 /usr/bin/X11/xcalc -display 129.241.164.113:0.0 -geometry 2
12603 ? IW 0:03 selection\_svc
19871 ? S 0:20 /usr/local/es/afpsrv
19875 ? IW 0:10 xdvi kurs
19949 ? IW< 0:00 /bin/sh ./pwguess.sh
19950 ? IW< 0:03 /bin/sh ./pwguess.sh
20046 ? IW 0:00 csh -c /usr/bin/X11/xterm -ls -title "zevs xterm" -sb -disp
20060 ? S 0:19 /usr/bin/X11/xterm -ls -title zevs xterm -sb -display 129.2
20090 ? IW 0:09 in.telnetd
20325 ? IW 0:01 selection\_svc
20794 ? R< 1:32 /usr/secure/pwchecker/checker 2gGHfwMKQE9jU
20795 ? S< 0:00 cat LIST19949 /usr/secure/pwchecker/dict1
20796 ? IW 0:00 csh -c /usr/bin/X11/xman -display "129.241.164.113:0.0" -ge
20809 ? S 0:03 /usr/bin/X11/xman -display 129.241.164.113:0.0 -geometry 20
13870 co IW 0:00 -csh (csh)
20289 co IW 0:00 sunview
20296 co IW 0:03 clock -Wp 497 32 -WP 704 0 -Wi -Wb 255 217 238 -Wg
20302 co IW 0:00 textedit -Wp 259 98 -WP 840 0 -Wi -Wb 255 219 212 -Wg
20304 co IW 0:01 mailtool -Wp 482 71 -WP 908 0 -Wi -Wb 255 255 210 -Wg
20305 co IW 0:00 Mail -N -B -f /tmp/MTda20304
20061 p0 IW 0:01 -csh (csh)
20781 p0 S 0:05 vi +/ps -ua kurs.tex
20810 p0 S 0:00 sh -c ps -ax
20823 p0 R 0:00 ps -ax
20291 p1 IW 0:00 cmdtool -Wp 0 0 -WP 0 0 -Wh 3 -Ww 80 -Wl $<<$ CONSOLE $>>$ -WL
20292 p1 IW 0:00 -bin/csh (csh)
20091 p2 IW 0:04 -tcsh (tcsh)
20784 p2 IW 0:00 ftp ftp.uni-stuttgart.de
20297 p3 S 0:11 cmdtool -Wp 0 71 -WP 772 0 -Wi -Wb 212 220 255 -Wg
20298 p3 IW 0:00 -bin/csh (csh)
20310 p4 IW 0:13 shelltool -Wp 54 154 -WP 976 0 -Wb 237 204 255 -Wg
20311 p4 IW 0:00 -bin/csh (csh)
20316 p4 IW 0:01 -csh (tcsh)
20696 p4 IW 0:16 mva ../gdl/mva.gdl p
20322 p5 IW 0:31 shelltool -Wb 237 204 255 -Wg
20324 p5 IW 0:00 -bin/csh (csh)
20332 p5 IW 0:00 -csh (tcsh)
20336 p5 IW 0:50 emacs ack.c
12.8. DREPE EIN PROSESS 121
Som vi ser er dette eit ganske stort system med mange programpakkar. Den
første prosessen som vert starta n
˚
ar maskina bootar er swapper og f
˚
ar prosess-
identifikator 0. Den startar igjen opp init og pagedaemon. Init betyr initializa-
tion og den passar p
˚
a at alle systemprosessane kjører. Som neste prosess kjem
pagedaemon,— denne prosessen overv
˚
akar og handterer den virtuelle hukom-
melsen og sender prosessar mellom disk og hukommelse ettersom dei vert
kjørt eller vert sett til sides temporært. Etter det er det meir vilk
˚
arleg kva som
vert starta opp,— det avheng mest av kva slags oppg
˚
aver maskina har. I dette
tilfellet st
˚
ar den som server i nettverk og har oppg
˚
aver som
˚
a vere namneser-
ver, hovedmaskin for post, den har dei fleste filsystema som andre maskiner
benyttar seg av (NFS–master) og den er Yellow Pages/NIS master. Dettte skal
vi ikkje legge s
˚
a stor vekt p
˚
a,— iallefall ikkje hittil i kurset. Det vi kan sj
˚
a er
iallefall at alle prosessar som kjem etter init har sitt utgangspunkt i init. Dei
fleste prosessane som kjører er applikasjonar som vanlege brukarar kjører,—
men ellers kjenner vi igjen prosessen som handterer utskrifter, lpd, og sendmail
som skal sende epost ut i verden.
12.8 Drepe ein prosess
Dersom ein har sett igong ein prosess som g
˚
ar feil, eller ”hengeller jobben legg
beslag p
˚
a s
˚
a mykje ressursar at ein vil drepe den før den ferdig, kan ein bruke
programmet kill . UNIX har program som let ein drepe prosessar, men ein har
berre tilgong til
˚
a drepe eigne prosessar. Ein brukar kill–kommandoen med PID
som argument til programmet for
˚
a drepe ein prosess.
zevs% kill 324
zevs%
Dersom prosessen vert avslutta vil den ikkje bli lista n
˚
ar ein kjører komman-
doen ps, og kill vil ikkje gje tilbakemelding om at noko gjekk feil. Dessverre har
kill store sjansar til
˚
a feile slik at ein alltid skal sjekke om prosessen er avslut-
ta. Sjekk ogs
˚
a om prosessen har barneprosessar,— dersom den har det, drep
alle barneprosessane samstundes ellers vil ein risikere at barneprosessane vert
hengande utan at dei gjer noko fornuftig. Kommandoen kan ta fleire PID som
argument.
zevs% kill 345 724 234
zevs%
˚
A drepe prosessar kan vere litt farlig,— stort sett vil det g
˚
a bra for vanlege
brukarar. Det verste som kan skje er at enkelte prosessar vert arva av init slik at
dei vert hengande heilt til maskina vert tatt ned og opp igjen, eller at ein sjølv
blir utlogga ved at ein drep sitt eige skall.
12.9 Signal
N
˚
ar ein skal drepe ein prosess gjev man systemet beskjed om
˚
a sende eit signal
til prosessen. Signal vert brukt som kommunikasjon mellom prosessar og det
finst mange forskjellige signal som kan sendast. I System V Release 4 finst 31
vanlege signal som kan sendast mellom prosessar. Dei fleste signal refererer til
122 KAPITTEL 12. PROSESSER
feilsituasjonar som kan oppst
˚
a innanfor eit system. Dette kan vere signal som
gje beskjed om at program prøvar
˚
a aksessere minne utanfor sitt eige autori-
serte minneomr
˚
ade, n
˚
ar ein tastar tastekombinasjonen for
˚
a drepe ein prosess
(vanlegvis Ctrl–c eller DEL), vil ein barneprosessen dø. D
˚
a er arbeidet til pro-
sessen
˚
a foreta ein aksjon som svar p
˚
a signalet, enten
˚
a avslutte eller foreta
aksjonar som gjer at denne situasjonen ikkje oppst
˚
ar p
˚
a nytt. N
˚
ar ein brukar
kill utan
˚
a spesifisere signal vil programmet sende SIGTERM (software termi-
nation signal) til prosessen eller prosessane. Dette fortel prosessen at den m
˚
a
avslutte,— prosessen treng ikkje
˚
a fange dette signalet og d
˚
a m
˚
a ein bruke ster-
kare lut. Dersom ikkje signalet avsluttar brukar ein eit ubetinga avslutt signal
(SIGKILL), dette vil verke umiddelbart.
zevs% kill -TERM 324
zevs%
Ein kan ogs
˚
a bruke tallkoden for signalet som argument til kill,— tallkoden
finn ein i manualsidene for signal. Dersom ein brukar dei logiske namna skal ein
ta vekk SIG–delen i namnet som ein finn i man{–sidene om signal. Igjen vil eg
berre minne om at ein ikkje unødig drep prosessar dersom det g
˚
ar an
˚
a avslutte
prosessar p
˚
a ein annan m
˚
ate.
Kapittel 13
Utskrift til skrivar
UNIX har ein del verktøy for kontrollere skrivarar og for
˚
a sende data ut til
hardkopi utstyr. Maskina kan konfigurerast for ein enkel skrivar eller som
skrivartenar som kan drive mange forskjellige slags hardkopi utstyr. Verktøya
gjer ein bra jobb n
˚
ar det gjeld
˚
a gøyme detaljar om maskinvaren.
13.1 Bruk av lp og lpr
For
˚
a f
˚
a utskrift av UNIX–filer brukar vi programet lp for system med System V
utskriftsystem og lpr for BSD–baserte system
1
. Begge utskriftskommandoane
tek filnamnet som parameter, ein kan godt spesifisere fleire filnamn. Eksempel:
zevs% lpr testen . . .
zevs%
Dette var eit eksempel p
˚
a BSD–utskrift. System V svarar med kønummer og
skrivar. Eksempel:
arion% lp testen . . .
request id is hplaser–234 (1 file)
arion%
Begge kommandoane kan ta inndata fr
˚
a standard inn. Slik som f.eks p
˚
a denne
m
˚
aten.
arion% cat denne.fila | lp
request id is hplaser–236 (standard input)
arion%
Begge kommandoane har ein del opsjonar som det kan vere lurt
˚
a lære seg.
Begge kommandoane har opsjonen -m for mail,— dette betyr at brukaren f
˚
ar
beskjed tilbake via elektronisk post n
˚
ar utskrifta er ferdig.
1
Idag har ofte UNIX–system begge utskriftssystema innebygde,— det kan derfor vere ein fordel
˚
a vete om begge. Det mest avanserte og min personlege favoritt er BSD–systemet.
123
124 KAPITTEL 13. UTSKRIFT TIL SKRIVAR
13.2 Opsjonar til lp
Kommandoen lp har i tillegg ein opsjon -w som skriv til terminalen n
˚
ar utskrif-
ta er ferdig,— er ein ikkje innlogga vil den sende beskjed via epost. For
˚
a f
˚
a
fleire kopiar kan ein spesifisere dette med opsjonen -n og eit tal som angjev
antal kopiar.
arion% lp -m -n6 fila.mi
request id is hplaser-238 (1 file)
arion%
Dersom det er vanskeleg
˚
a skille utskriftene fr
˚
a kvarandre kan det vere lurt
˚
a lage seg ei tittelside,— dette gjer ein med opsjonen -t og ein streng. Denne
strengen vert skreven p
˚
a tittelsida.
arion% lp -t “Dette er mi utskrift: $LOGNAME” fila.mi
request id is hplaser-239 (1file)
arion%
Sist og kanskje ikkje den minst viktige opsjonen, den som let ein velge skri-
var. Opsjonen -d (for destination), denne opsjonen tek namnet p
˚
a ein spesifikk
skrivar som argument.
arion% lp -d hplaser -n2 fila.mi
request id is hplaser-239 (1file)
arion%
lp vil enten bruke systemet sin standardskrivar eller s
˚
a kan ein sette sin eigen
standardskrivar v.h.a miljøvariabelen LPDEST.
13.3 Opsjonar til lpr
Dei viktigaste opsjonane til lpr er -P
2
for
˚
a velge skrivar (p
˚
a same m
˚
ate som
-d for lp), antall kopiar angje ein med -# og eit tal, tittel p
˚
a ei tittelside f
˚
ar ein
med -T pluss ein streng. Ein viktig opsjon ved veldig store filar er -s, dette
gjer at fila ikkje blir kopiert til utskriftsomr
˚
adet og utskriftsprogrammet vil
operere direkte p
˚
a originalfila. Denne opsjonen brukar ein dersom ein har eit
veldig trangt eller fullt utskriftsomr
˚
ade,— bruk denne opsjonen dersom du
skal skrive ut f.eks veldig store PostScriptfilar.
zevs% lpr -s -P pilt -#6 -T”Dette er utskrifta til: $LOGNAME” fila.mi
zevs%
I tilleg har lpr ei rekkje med filteropsjonar,— dette vil eg ikkje g
˚
a inn p
˚
a fordi
at dette er ting som ein sjelden har bruk for.
13.4 Kanselere utskrifter
Dessverre s
˚
a er dette ogs
˚
a to forskjellige kommandoar som tek forskjellige pa-
rametre. Under System V har vi kommandoen cancel og under BSD heiter
2
Under lpr har ein muligheten for
˚
a sette opp sin eigen standardskrivar ved hjelp av miljø-
variabelen PRINTER, ellers er standard skrivar lp
13.5. SJEKKE STATUS P
˚
A SKRIVAR 125
kommandoen lprm . La oss ta cancel først, denne kommandoen tek enten jobb-
identiteten eller skrivarnamnet som parameter.
arion% cancel hplaser-236
hplaser–236 cancelled
arion%
Jobbidentiteten er skrivarnamn–(bindestrek)jobbnummer,— same identiteten
som vert skreven ut n
˚
ar jobben vert lagt i kø. Dersom ein berre oppgje skri-
varnamnet vil første jobb i køen for denne skrivaren bli sletta,— dersom ein er
eigar av denne jobben.
arion% cancel hplaser
hplaser-239 cancelled
arion%
Ved lprm brukar ein opsjonen -P, p
˚
a same m
˚
ate som med lpr, for
˚
a spesifisere
skrivar og jobbnummer p
˚
a den jobben ein skal slette (s
˚
a lenge vi berre har ein
skrivar er det ikkje nødvendig
˚
a spesifisere skrivarnamn).
zevs% lprm -Ppilt 215
dfA215zevs dequeued
cfA215zevs dequeued
zevs%
Skal ein slette alle eigne jobbar kan ein angje det med (bindestrek) istaden for
jobbnummer. Utan argument vil lprm slette jobben som er aktiv,— dersom ein
sjølv er eigar av jobben.
13.5 Sjekke status p˚a skrivar
N
˚
ar vi har f
˚
att igang utskrifta er det lurt
˚
a følge med, det kan oppst
˚
a feil eller
skrivaren kan g
˚
a tom for papir etc. . . . . Det finst ein eigen kommando for
˚
a kik-
ke p
˚
a skrivarkøen. System V lpstat og BSD lpq. Vi kan igjen starte med System
V. Den enklaste m
˚
aten er berre
˚
a skrive lpstat utan opsjonar. Andre mulighetar
er
˚
a bruke ein del opsjonar for
˚
a sj
˚
a korleis skrivaren er konfigurert. Opsjonen
-d fortel kva som er standard skrivar, -r fortel om utskriftssystemet kjøyrer, ein
kan spesifisere skrivar med -p og skrivarnamn,— alle desse opsjonane som er
nemnt ovanfor kan samlast i ein opsjon -t (total). Denne gjer at lpstat listar ut
alle opplysningar om utskriftssystemet.
arion% lpstat
hplaser-233 troka 5234 Mar 09 13:13
arion%
Som for alle dei andre kommandoane i BSD tek lpq opsjonen -P for
˚
a spesifisere
skrivar. Det enklaste ogs
˚
a her er
˚
a skrive lpq utan opsjonar.
zevs% lpq
lp is ready and printing
Rank Owner Job Files Total Size
active trondk 78 test.c 227 bytes
zevs%
126 KAPITTEL 13. UTSKRIFT TIL SKRIVAR
I tillegg finst opsjonen -l (for long),— med denne opsjonen vil kommandoen
rapportere fr
˚
a kva maskin utskriftsjobben vart lagt i i tillegg til alle dei andre
opplysningane. Ein annan nyttig mulighet med lpq er at ein spesifisere kor ofte
den skal sjekke køen. Ved
˚
a skrive + og eit etterfølgende tal n vil lpq sjekke køen
kvart n sekund og skrive ut køen samstundes. Slik vil lpq fortsette heilt til køen
er tom,— ein vil med andre ord ikkje kunne gjere noko anna enn
˚
a sjekke køen
medan dette p
˚
ag
˚
ar (dersom ein ikkje har ein & til slutt p
˚
a kommandolinja).
zevs% lpq +5
lp is ready and printing
Rank Owner Job Files Total Size
active trondk 78 test.c 227 bytes
Kapittel 14
Basiskommunikasjon
Nokre av dei rikaste kommandoane i UNIX inneheld kommunikasjon mellom
brukarar av den same maskina, eller p
˚
a fleire maskiner. Etter kvart er det god-
teke at UNIX tilbyr dei mest robuste og feilfrie verktøy for datakommunikasjon
samanlikna med andre populære operativsystem. Stødige, sikre og feilfri kom-
munikasjon over støyande og usikre kommunikasjonskanalar som f.eks tele-
fonlinjer lagar komplekse situasjonar og potensielle problem. UNIX har verktøy
som let ein entre dette komplekse omr
˚
adet p
˚
a fleire niv
˚
a, fr
˚
a den enkle kom-
mandoen mail til den sofistikerte administrasjonen av køing og sikkerhet som
trengst i UUCP–subsystemet og i raske lokale nettverk. Kommuniksjonsverktøy
i UNIX har rykte p
˚
a seg for
˚
a ha komplekse og mystiske eigenskapar. P
˚
a ein
m
˚
ate kan vel dette stemme, men samanlikna med kommunikasjonsprogramvare
fr
˚
a andre operativsystem s
˚
a st
˚
ar vektøy i UNIX som modell n
˚
ar det gjeld en-
kelhet og feilfri operasjon. Faktisk har mange programvareleverandørar gr˚adig
teke idear fr
˚
a dei kommunikasjonsverktøya som finst i UNIX, men implemen-
tert dei veldig d
˚
arleg. I dei
˚
ara som har g
˚
att har desse verktøya vorte forbetra
n
˚
ar det gjeld p
˚
alitleghet, mulighetar og sikkerhet. Idag vil vel dei fleste som
har kommunikasjonsrelaterte problem velje UNIX for
˚
a løyse desse problema.
Dette er ei naturleg utvikling no n
˚
ar lokale nettverk blir meir og meir utbreidd,
dermed er kommunikasjon viktigare enn noko anna.
14.1 Kommandoen news
Dette er ein kommando som berre er tilgjengeleg p
˚
a System V UNIX. Komman-
doen vert først og fremst brukt til
˚
a lese beskjedar fr
˚
a f.eks systemansvarleg.
Kommandoen vil skrive alle nye beskjedar sidan ein sist las news ut p
˚
a skjer-
men.
arion% news
moete ( eyvho ) Fri Jul 3 08:34:56 1992
Det er moete p˚a pauserommet kvar torsdag fram til ferien.
127
128 KAPITTEL 14. BASISKOMMUNIKASJON
Eyvind.
arion%
Etter et ein har sett beskjeden ein gong vil ikkje beskjeden bli skreven ut p
˚
a
nytt. Aktuelle opsjonar for news er -n for names, dette listar ut namnet p
˚
a dei
beskjedane som ein ikkje har lese, opsjonen -s for show gje antall uleste beskje-
dar.
arion% news -n
news: lunsj moete
arion% news -s
2 news items.
arion%
Beskjedar som skal vere tilgjengelege for news skal ligge i katalogen /usr/news.
Kvar beskjed skal ligge i separate filar og namnet p
˚
a fila blir namnet p
˚
a beskje-
den.
14.2 Dagens tekst
Som gammel konvensjon har alle UNIX–system ei fil p
˚
a katalogen /etc som hei-
ter motd ,— dette betyr Message Of The Day (p
˚
a norsk kan vi kanskje kalle det
“Dagens tekst”). Det finst ikkje nokon eigen kommando for
˚
a skrive ut innhol-
det i fila, som regel vil innholdet i fila bli skreve ut p
˚
a skjermen n
˚
ar ein logger
seg inn. Denne fila vert ofte brukt til
˚
a viktige beskjedar. Det mest vanlege er
at dei globale oppstartfilane for innlogging inneheld f.eks kommandoen: cat
/etc/motd . Her m
˚
a ein passe p
˚
a innholdet i fila er kort og oppdatert ellers vil
dei fleste ignorere innholdet etter ei stund og g
˚
a glipp av viktige beskjedar. Fila
skal ha lesetilgong for alle,— men berre skrivetilgong for superbruker .
14.3 Kommandoen write
Kommandoen write sørger for direkte kommunikasjon mellom to aktive brukarar,—
ved
˚
a sende beskjedar direkte til enhetsfila for terminal. Kommandoen tek
brukeridentiteten til mottakaren som argument.
zevs% write eyvindh < beskjed
zevs%
Kommandoen vil bestemme enhetsfil for den terminalen brukaren er innlogga
p
˚
a og sende beskjeden dit. N
˚
ar beskjeden er sendt vil ein returnere tilbake til
skallet. Kommandoen vil gje ei feilmelding dersom brukaren ikkje er innlogga.
zevs% write terjer
terjer is not logged in.
zevs%
Brukarar kan stenge av denne metoden for direkte kommunikasjon ved
˚
a utføre
kommandoen:
zevs% mesg n
14.4. KOMMANDOEN WALL 129
zevs%
For
˚
a sl
˚
a p
˚
a igjen direkte kommunikasjon :
zevs% mesg y
zevs%
Dersom ein brukar har stengt av direkte kommunikasjon vil write skrive ut ei
(kanskje litt rar) feilmelding.
zevs% write eyvindh
Permission denied.
zevs%
14.3.1 Interaktiv bruk av write
Fordi write les standard inn for beskjeden som skal sendast kan den brukast
i p
˚
a ein meir direkte m
˚
ate. Dersom ein startar kommandoen utan redirigering
av standard inn vil write sette opp forbindelsen med mottakar og pipe to gon-
gar for
˚
a gjere oppmerksom p
˚
a at forbindelsen er oppretta. Dermed kan ein
skrive inn beskjeden direkte fr
˚
a tastaturet og write vil sende linje for linje til
mottakaren. N
˚
ar ein er ferdig avsluttar ein ved
˚
a trykke Ctrl-d .
zevs% write eyvindh
Dette er ein test, ignorer denne.
Ctrl-d
zevs%
Kommunikasjonskanalen som vert oppretta er berre einvegs,— slik at mottaka-
ren har ikkje mulighet for
˚
a svare tilbake direkte. Har ein tenkt
˚
a svare m
˚
a ein
sjølv starte write .
14.4 Kommandoen wall
Kommandoen write tillet berre
˚
a kommunisere med ein brukar med denne
brukaren siin login-id som parameter til programmet. Mange gongar har ein
bruk for
˚
a sende beskjedar til alle brukarane som er p
˚
alogga. For eksempel n
˚
ar
maskina skal g
˚
a ned og ein evil annonsere dette. Akkurat som write les denne
wall standard inn for teksten som skal bli meldinga.
zevs% wall < beskjed.txt
zevs%
Kommandoen sender meldinga til alle brukerane som er p
˚
alogga inkludert
sender. Beskjeden har same hodet som write produserer. Beskjedar kan bli nek-
ta tilgong med kommandoen mesg n.
Kapittel 15
Korn– og C–skall
Skallet er ein brukerprosess som alle andre kommandoar. Den har ingen spesi-
elle relasjonar til kjernen,— eller andre privilegiar som ikkje andre kommando-
ar har. Likevel kan skallet forandrast av brukeren,— og mange alternative skall
er tilgjengeleg som er forskjellige eller er optimalisert for forskjellige funksjo-
nar.
Standard skallet, som vi har g
˚
att igjennom hittil, er kjent som Bourne–skallet
p.g.a utviklaren, Steve Bourne fr
˚
a AT & T Bell Laboratories. Dette er eit lite, re-
lativt effektivt skall, laga for vanleg bruk. Dette skallet vart introdusert i 1978. I
ettertid har ein del ny funksjonar og forbetringar vorte lagt til, f.eks skall funk-
sjonar, for
˚
a holde tritt med resten av UNIX–systemet. Likevel har det fleire
ulemper for ekspertbrukarar. For det første har det ikkje kommando historie,—
dvs. at det g
˚
ar ikkje an
˚
a gjenta ei kommandolinja utan
˚
a taste den inn p
˚
a nytt.
Ein annan mulighet som standard skallet ogs
˚
a manglar er aliaser ,— mulighe-
ten for
˚
a forenkle kommandoar som blir brukt veldig mykje. M
˚
aten ein kan
løyse dette problemet p
˚
a er
˚
a lage skallprogram,— men dette er lite fleksibelt.
Desse omstendighetane motiverte til
˚
a utvikle to forbetra skall. Korn og C
skall. Begge desse skalla kan erstatte Bourne–skallet for interaktiv bruk og for
eksekvering av skallprogram. C–skallet vart utvikla av Bill Joy som del av BSD
versjonen av UNIX, og Korn–skallet vart utvikla av David Korn fr
˚
a AT & T
Bell Laboratories som svar p
˚
a C–skallet. C–skallet er eldre enn Korn skallet, og
p
˚
a mange m
˚
atar kan ein seie at Korn skallet har forbetra mange av C–skallet
sine mulighetar og metodar. C–skallet er ogs
˚
a relativt lite effektivt dersom ein
samanliknar med Bourne– og Korn–skall. Likevel har C–skallet mange tilhen-
garar, særleg blant tilhengarar av BSD–UNIX.
1
Sjølv om Korn–skallet er ein
del større enn C–skallet, er det merkbart meir effektivt fordi det har innebygde
skallfunksjonar som kan utførast direkte istaden for
˚
a kreve eit separat sub-
skall.
Hverken C–skallet eller Korn–skallet klarar heilt
˚
a erstatte Bourne–skallet. Si-
dan Korn–skallet skulle vere ein erstatning for Bourne–skallet, og skulle vere
1
Underteikna har heilt sidan den første kontakten med UNIX, brukt C–skallet og er godt
fornøgd med det . . . , det kan jo skuldast latskap (dvs. et eg ikkje har orka
˚
a lære meg noko anna).
130
15.1. KORN–SKALLET 131
fullt kompatibelt med med det, er det stadig ting som skurrar. C–skallet var
aldri tenkt som ein erstatning for Bourne–skallet og er ganske forskjellig fr
˚
a
det. Desse skalla inneheld ei rekke forbetringar i forhold til Bourne–skallet,—
som fleire operatorar for skallprogrammering, innebygde aritmetriske opera-
torar som erstattar expr–kommandoen, og betre strenghandtering. Dei vikti-
gaste forandringane er likevel redigering av kommandoar, kommandohistorie
og aliaser.
15.1 Korn–skallet
Korn–skallet skal vere ein utvidelse av Bourne–skallet,— det vil seie at alle
skallprogram og kommandoen linjer som g
˚
ar under Bourne–skallet skal ogs
˚
a
fungere med Korn–skallet,— inkludert skallfunksjonar og andre programme-
ringsmulighetar. Det motsette er ikkje mulig,— skallprogram for Korn–skallet
vil ikkje nødvendigvis fungere under Bourne–skallet.
Det fleste Linux–distrubisjonar vil ikkje automatisk installere korn–skallet,-
men dei fleste har ein mulighet for
˚
a installere korn–skallet via pakkesystemet.
15.1.1 Starte Korn skallet
Som alle program kan ein starte Korn–skallet rett fr
˚
a kommandolinja.
asterix% ksh
$
Korn–skallet brukar PS1 og PS2 miljøvariablane som ledetekst (engelsk: prompt),
s
˚
a det kan sj
˚
a ut som ingenting skjer n
˚
ar ein startar Korn skallet p
˚
a denne
m
˚
aten. Ein av dei mange mulighetane med Korn skallet er
˚
a sette opp ein dis-
tinktiv ledetekst (engelsk: prompt). Eit eksempel kan vere
˚
a sette den opp til
˚
a
vise antall kommandoar.
$ PS1=” [ ! ] $
[ ! ] $ ksh
[ 1 ] $ echo $P1
[ ! ] $
[ 2 ] $
Legg merke til at ledeteksten forandrar seg heile tida under ksh, medan Bourne
skallet gir ikkje ! noko spesiell betydning.
N
˚
ar ein startar ksh p
˚
a denne m
˚
aten, kjøyrer det som ein normal kommando,
n
˚
ar ein avsluttar skallet kjem ein tilbake i det forrige skallet.
[ ! ] $ ksh
[ 1 ] $ exit
[ ! ] $
Ein kan ogs
˚
a avslutte ved
˚
a trykke CTRL-d,— istaden for
˚
a bruke exit.
Ein annan m
˚
ate
˚
a starte opp ksh p
˚
a er
˚
a bruke exec , dette erstattar det noveran-
de skallet med det nye skallet.
132 KAPITTEL 15. KORN– OG C–SKALL
[ ! ] $ exec ksh
[ 1 ] $
I dette tilfellet vert det originale skallet borte,— slik at n
˚
ar ein avsluttar ksh vil
ein bli logga ut.
N
˚
ar ksh startar opp brukar den oppstartfiler,— desse filane er /etc/profile og
$HOME/.profile,— dersom dei eksisterer. Dette betyr ogs
˚
a at dersom ein vil
skifte skall tilbake til Bourne–skallet s
˚
a m
˚
a ein passe p
˚
a
˚
a berre legge inn kom-
mandoar som fungerer for begge skall i $HOME/.profile.
Dersom ein vil ha spesielle oppstartkommandoar for ksh kan ein definere ein
miljøvariabel ENV,— n
˚
ar ksh startar opp leitar den etter denne miljøvariabelen
der innholdet enten er ei liste med kommandoar eller namnet p
˚
a ei fil som ksh
skal utføre.
$ ENV=$HOME/.kshrc
$ export ENV
$
Ein kan ogs
˚
a f
˚
a ksh til
˚
a eksekvere eit skallprogram.
$ ksh skall-program
$
eller
$ ksh < skall-program
$
Ein kan bruke denne formen sjølv om ein ikkje brukar ksh som skall.
15.1.2 Kommandohistorie med ksh
N
˚
ar ein brukar ksh som skall kan ein med fordel ta i bruk kommandohistorie og
redigering p
˚
a kommandolinja. Etter kvart som ein skriv inn kommandolinjer
for utførelse, vil ksh lagre kvar kommando i ei historieliste. Kommandoane i
historielista er nummerert i sekvens, og sekvensnummeret kan ein skrive ut
ved hjelp av ! operatoren i ledeteksten fr
˚
a skallet. Som standard tek ksh vare
p
˚
a dei siste 128 kommandoane, men verdien av ! vil fortsette
˚
a auke etter 128.
N
˚
ar dette skjer vil ksh ignorere dei eldste kommandoane til fordel for dei nye
kommandolinjene som kjem til,— og ein vil ikkje ha mulighet for
˚
a kalle opp
dei kommandoane som er sletta fr
˚
a lista. Det er mulig
˚
a sette størrelesen p
˚
a
lista med miljøvariabelen HISTSIZE:
$ HISTSIZE=200
$ export HISTSIZE
$
Dette gjer at ksh vil holde dei siste 200 kommandoane i historielista. For
˚
a slette
lista og restarte tellinga m
˚
a ein enten slette eller slett innholdet i historiefila før
ein startar ksh.
Som standard brukar ksh $HOME/.sh history til inneholde historielista. Der-
som ein ønskjer
˚
a bruke ei anna fil kan ein sette det ved hjelp av miljøvariabelen
HISTFILE:
15.1. KORN–SKALLET 133
$ HISTFILE=$HOME/.ksh.historie
$ export HISTFILE
$
Desse historierelaterte kommandoane vert ofte plassert i $HOME/.profile for
˚
a starte p
˚
a nytt kvar gong ein loggar inn. Det er med andre ord ogs
˚
a mulig
˚
a
legge dei i andre oppstartfilar og d
˚
a vil ein ha med seg kommadohistorie fr
˚
a
forrige gong ein var innlogga.
15.1.3 Redigering p˚a kommandolinja
Ein kan g
˚
a inn i historielista og ta ut tidlegare eksekverte kommandolinjer, ved
˚
a bruke redigeringsmulighetane for kommandolinja. Redigering p
˚
a kommando-
linja gjer at ein kan editere p
˚
a kommandolinja etter kvart som ein skriv dei inn
og/eller f
˚
a tilbake og editere kommandoar som ligg i historielista.
Korn–skallet har to metodar for
˚
a redigere kommandolinjer. Dei kan enten
følge konvensjonane til vi eller emacs. Ein kan velje modus ved
˚
a sette miljø-
variabelen VISUAL og eksportere denne. Verdien av variabelen skal vere nam-
net p
˚
a editoren som ein vil bruke.
$ VISUAL=vi
$ export VISUAL
$
For
˚
a velge emacs m
˚
atte det sjølvsagt ha st
˚
att emacs. Etter at ein har valgt ein
editeringsmodus, kan ein bruke denne kommandoen til
˚
a editere kommando-
linjer. Skallet behandlar denne historie lista som ei skrivbar fil. N
˚
ar det gjeld
editeringskommandoar vil eg berre vise til tidlegare dokumentasjon. Husk at
for
˚
a kome til kommandomodus i vi m
˚
a ein trykke ESC.
15.1.4 Aliaser i ksh
Ein anna viktig eigenskap ved ksh er muligheten for
˚
a definere aliaser. Alia-
ser tillet ein
˚
a forandre miljøet rundt ksh slik at kommandoar ein skriv inn p
˚
a
kommandolinja blir forandra av ksh til andre aliaser eller kommandoar før dei
vert eksekverte. Denne substitusjonen med aliaser for kommando namn ver
kalla for alias ekspansjon (engelsk: alias expansion). La oss definere eit alias:
$ alias rm=”rm -i”
$
Dersom ein no eksekverer kommandoen “rm” vil skallet ekspandere komman-
doen til “rm -i”.
Det er fleire reglar knytta til aliaser. Eit alias kan inneholde s
˚
a mange ord som
ein vil ha, s
˚
a lenge ein omsluttar dei med hermetegn i alias kommandoen. Alias
erstatninga vil bli utført kun p
˚
a det første ordet p
˚
a kommandolinja,— og p
˚
a det
første ordet av kvart element i ein røyrledning.
$ alias grep=”fgrep -i”
$ grep hallo fila | grep grep
vil ekspandere til kommandolinja:
134 KAPITTEL 15. KORN– OG C–SKALL
fgrep -i hallo fila | fgrep -i grep
I tilleg vil ikkje kommandoar som startar med / (engelsk: slash), for
˚
a spesifisere
fullt stinamn, ikkje bli prøvt
˚
a ekspandere.
Ein kan fjerne aliaser med kommandoen unalias. :
$ unalias rm
$
Kommandoen alias utan parametre vil liste ut alle definerte alias.
$ alias
autoload=’typeset -fu’
command=’command ’
false=’let 0’
functions=’typeset -f
h=history
hash=’alias -t -’
history=h
integer=’typeset -i’
local=typeset
ls=/bin/ls
nohup=’nohup ’
r=’fc -e -’
stop=’kill -STOP’
suspend=’kill -STOP $$’
true=:
type=’whence -v’
$
Ein kan lage s
˚
a mange aliaser ein berre vil, men sidan aliaser blir handtert in-
ternt av ksh, vil dei ikkje overleve fleire sesjonar. Derfor m
˚
a aliaser vere definert
i oppstartfilane for ksh.
15.1.5 Kommandoen whence
Skallet inkluderer fleire nyttige eigenskapar. Ein kan bruke kommandoen when-
ce med eit kommandonamn som parameter for
˚
a lokalisere den eksakte formen
av ein kommando. For normale kommandoar vil vil whence skrive ut det fulle
stinamnet ved
˚
a søke i miljøvariabelen PATH.
$ whence ksh
/bin/ksh
$
Dersom kommandoen er innebygd eller er ein skallfunksjon, vil ksh skrive
namnet utan sti.
$ whence echo
echo
$
I tillegg har whence s
˚
akalla alias ekspansjon (sj
˚
a tidlegare omtale av det same
emnet), slik at ein kan sj
˚
a korleis ein kommando ser ut n
˚
ar den vert eksekvert.
15.1. KORN–SKALLET 135
$ whence ls
’ls -C’
$
Kommandoen er veldig nyttig for
˚
a finne kommandoar og aliaser. Kommando-
en kan ta fleire opsjonar for
˚
a kontrollere oppførselen.
15.1.6 Thilde substitusjon
N
˚
ar ksh ser tegnet (thilde) p
˚
a staren av eit stinamn, vil den prøve
˚
a tolke neste
streng fram til / som ein brukeridentitet. Dersom den finn denne brukaren, vil
bli erstatta med stien til heimekatalogen for denne brukaren. Eksempel:
$ pwd
/home/zevs/ifi/trondk
$ cd eyvindh
$ pwd
/home/zevs/ifi/eyvindh
$
Som vi ser vart st
˚
aande katalog forandra til heimekatalogen for brukaren ey-
vindh.
$ cat trondk/text/ei.tekst.fil
Detta er ei tekst fil.
Med litt tekst.
Dette er siste linje.
$
Denne kommandoen listar ut innholdet i ei fil som ligg under katalogen text i
heimekatalogen for brukaren trondk.
15.1.7 Forandre katalog under ksh
Skallet inneheld ogs
˚
a utvida eigenskaper for
˚
a forandre katalog. Ein nyttig ei-
genskap er forma cd – som vil forandre katalog tilbake til forrige katalog.
$ pwd
/home/zevs/ifi/trondk
$ cd /tmp
$ pwd
/tmp
$ cd -
/home/zevs/ifi/trondk
$ pwd
/home/zevs/ifi/trondk
$
Korn skallet supporterer ogs
˚
a miljøvariabelen CDPATH p
˚
a same m
˚
ate som
Bourne–skallet.
136 KAPITTEL 15. KORN– OG C–SKALL
15.1.8 Kommandoen set
Korn–skallet inneheld mange opsjonar som kan forandre oppførselen til skal-
let for
˚
a tilpasse det til eigne preferansar. Desse opsjonane kan studerast og
forandrast med kommandoen set. Det finst ei rekke med opsjonar som er do-
kumentert i man–sidene for ksh. No vil eg berre g
˚
a gjennom dei viktigaste og
dei eg anser som dei mest nyttige.
$ set -n
$
Instruerer ksh til
˚
a lese kommandoar i skallprogram og sjekke dei for feil,—
men ikkje eksekvere kommandoane. Denne opsjonen vert ignorert for interak-
tive skall. For
˚
a kome tilbake til opprinneleg modus:
$ set +n
$
Generelt kan vi seie at ein opsjon vert sett dersom argumentet startar med og
tilbakestiller dersom argumentet startar med +.
$ set -a
$
Dette medfører at alle miljøvariable som etter dette blir definert,— vil auto-
matisk bli eksportert. (Vanlegvis m
˚
a ein bruke export,— jmfr. omtale av miljø-
variable).
$ set -v
$
Denne opsjonen kallar ein verbose,— den medfører at ksh vil skrive ut kvar
kommando i eit skallprogram etter kvart som den vert utført. Denne opsjonen
kan vere veldig nyttig for
˚
a avluse skallprogram.
$ set -m
$
N
˚
ar denne opsjonen er sett vil ksh informere om at ein bakgrunnsjobb er ferdig.
Dette kan ofte vere nyttig,— særleg dersom ein m
˚
a vente p
˚
a ein bakgrunnsjobb
før
˚
a f
˚
a gjort noko anna.
Den andre typen set–kommandoar er kommandoar som direkte kontrollerer
interaktive sesjonar. Desse kommandoane har gjerne formen :
set -o opsjon
der opsjon er ein av følgande typar:
$ set -o ignoreeof
$
Dette vil føre til at skallet vil ignorere CTRL-d , og dermed sikre ein mot at
ein ikkje vil bli utlogga dersom ein trykker CTRL-d ved ein misforst
˚
aelse. N
˚
ar
ignoreeof er sett, m
˚
a ein bruke exit for
˚
a logge ut.
$ set -o noclobber
$
15.1. KORN–SKALLET 137
Denne kommandoen vil passe p
˚
a at ikkje redirigerings operatoren > ikkje vil
slette innholdet i ei eksisterande fil. Dette kan vere veldig nyttig for
˚
a fange
opp misforst
˚
aelsar og ta vare p
˚
a filar som ellers ville ha vorte overskrevne.
Ein kan bruke:
$ set -o emacs
$
eller
$ set -o vi
$
for
˚
a overstyre miljøvariabelen VISUAL og forandre modus for kommando-
linjeredigering.
$ set -o bgnice
$
Denne vert sett for
˚
a la alle bakgrunnsjobbar kjøyre med lavare prioritet enn
vanleg. Opsjonen bgnice er som standard sett,— slik at opsjonen m
˚
a sl
˚
aast av
dersom bakgrunnsjobbar skal ha normal prioritet.
15.1.9 Forbetringar for skallprogrammering under ksh
I Korn–skallet vorte lagt vekt p
˚
a operatorar som kan forbetre logikken i skall-
program,— og kjøre skallprogram raskare. Desse tillegga kan ikkje kjørast med
Bourne–skallet,— derfor er det lurt
˚
a bruke dei med litt omtanke.
15.1.9.1 Aritmetriske operatorar
Ein av dei mest viktige forbetringane under ksh er aritmetriske operatorar. Un-
der sh m
˚
a ein bruke kommandoen expr for
˚
a evaluere numeriske uttrykk. Den-
ne er b
˚
ade treg og ineffektiv fordi det er ein eigen sjølvstendig kommando som
blir eksekvert som ein eigen prosess. I ksh er dei fleste aritmetriske operatorane
innebygde slik at dei vert utført mykje raskare.
Kommandoen let vert brukt til
˚
a sette og forandre verdiar p
˚
a miljøvariable.
$ let x=42
$ echo $x
42
$
Deretter kan ein bruke vanlege aritmetriske operatorar for
˚
a oppdatere eller
forandre verdiar.
$ let x=42
$ let x=$x*3-11
$ echo $x
115
$
Legg merke til at normal aritmetrisk presedens vert følgd. For
˚
a forandre rekkefølgen
av evalueringa,— m
˚
a ein bruke temporære tilordningar.
138 KAPITTEL 15. KORN– OG C–SKALL
$ let x=42
$ let y=3-11
$ let x=$x*$y
$ echo $x
-336
$
Ein kan ikkje ha mellomrom eller tabulatorar i let–kommandoar, men ein kan
bruke posisjonsparametre (sj
˚
a kapitlet om skall-programmering) eller andremiljø-
variable. Ein kan i tillegg utelate let–operatoren fordi tegnet = fortel ksh at ein
vil utføre ein aritmetrisk operasjon.
15.1.9.2 Tabellar
Korn–skallet tillet ogs
˚
a bruk av eindimmensjonale tabellar, som er identifisert
med ein indeks etter variabelnamnet. Indeksen er eit tal mellom hakeparentes.
$ x[3]=20
$ x[4]=30
$ x[5]=${x[3]}+${x[4]}
$ echo ${x[5]}
50
$
Legg merke til at n
˚
ar ein tilordnar ein indeksert variabel kan ein referere til
den direkte,— medan n
˚
ar ein brukar ein indeksert m
˚
a den st
˚
a mellom krøll-
parentesar,— ellers vil ikkje ksh tolke det korrekt.
Som standard antek ksh at all aritmetikk skal utførast i titallssystemet,— ksh
tillet aritmetikk i andre tallsystem.
15.1.9.3 Forbetra spørring, inn og ut
Korn–skallet har mange innebygde kommandoar som gjer det lettare
˚
a spørje
ein bruker etter inndata og lese linjer med data fr
˚
a ei fil. Kommandoen print
erstattar p
˚
a mange m
˚
atar echo, den kan skrive utdata til skjerm, til historielista
(med opsjonen -s), eller til mange andre m
˚
al. Kommandoen read vert brukt
til
˚
a lese ei linje med inndata. Inndata som vert lese inn vert tilordna miljø-
variablane som er oppgitt som parametre til read.
$ read a1 a2 a3
har vi det kjekt no eller
$ echo $a1
har
$ echo $a3
det kjekt no eller
$
Dersom inndataene inneheld fleire ord enn det er parametre til read,— vil det
siste argumentet fange alle dei ekstra orda. Dersom det er færre ord i innda-
taene enn argument til read,— vil dei ekstra argumenta vere udefinerte. Der-
som det første argumentet til read inneheld eit spørsm
˚
alsteikn, vil tegna etter
15.2. C–SKALLET 139
spørsm
˚
alsteiknet bli skreve ut som ledetekst, og ordet før spørsm
˚
alsteiknet er
namnet p
˚
a den miljøvariabelen som tek det første ordet i inndataene.
$ read a1?Kvisleis hev du det idag ?”a2 a3
Kvisleis hev du det idag ? ikkje saa verst kossen det
$ echo a1
ikkje
$ echo a2
saa
$ echo a3
verst kossen det
$
Dette gjer at ein kan spørre etter inndata fr
˚
a brukaren mykje meir effektivt enn
i Bourne–skallet.
15.1.9.4 Operasjonar p˚a miljøvariable
I tillegg har ogs
˚
a ksh forbetra operasjonar p
˚
a miljøvariable,— som f.eks tillet
bruk at standard verdiar dersom den ikkje er definert under kjøring, utskrift
av feilmeldingar dersom ein miljøvariabel ikkje er definert, eller bruk av berre
ein delstreng av variabelen sin verdi. Inverse funksjonar av dette er ogs
˚
a mulig.
˚
A nemne alle formene kan bli veldig komplekst. Basis formen er:
${parameter operasjon ord}
der parameter er namnet p
˚
a den vanlege miljøvariabelen, operator er spesial ope-
ratoren, og ord er den ønska standardverdien, delstrengen o.l.
VAR=${OVAR:-verdi}
Dette set VAR til verdien av OVAR dersom OVAR er definert, men set VAR til
verdi dersom OVAR er udefinert.
VAR=${OVAR#verdi}
VAR=${OVAR%verdi}
Desse samanliknar strengen verdi med starten (#) eller slutten (%) av OVAR, og
dersom den er den same, vil dei slette den delen som er identisk.
GMLFIL=fil.o
NYFIL=${GMLFIL%.o}.c
P
˚
a denne m
˚
aten kan ein konvertere namnet fil.o til fil.c. Dette kan vere veldig
nyttig,— men ogs
˚
a ganske forvirrande p
˚
a same tid. Full beskrivelse av alle
operatorane er
˚
a finne i manualsidene for ksh.
15.2 C–skallet
Namnet p
˚
a dette skallet kjem av at programmeringssyntaksen ligg veldig nær
opptil syntaksen for programmerinsspr
˚
aket C. Skallet er ein av dei tre store
skalla som er bruk pr. idag,— faktisk har vel C–skallet fleire aktive brukarar
enn det Bourne og Korn–skallet har til saman. Grunnen til dette er den lange
historia som del av BSD–UNIX. P
˚
a den andre sida er C–skallet veldig forskjellig
140 KAPITTEL 15. KORN– OG C–SKALL
p
˚
a mange m
˚
atar enn dei andre skalla,— og mange av dei mulighetane som vi
hittil har g
˚
att igjennom vil ikkje fungere under C–skallet.
15.2.1 Kommandolinja
C–skallet brukar litt andre jokerteikn enn sh og ksh. Derfor m
˚
a ein vere klar over
bruken for ein del av dei p
˚
a kommandolinja. Utropstegn er eit eksempel,— det
er f.eks mulig
˚
a adresse epost p
˚
a denne m
˚
aten :
zevs% mail -s Dette er test”maskin!bruker
bruker: event not found
zevs%
For
˚
a bruke ei slik kommandolinje m
˚
a ein unnta utropstegnet for spesiell betydning,—
f.eks slik :
zevs% mail -s Dette er test”maskin\!bruker
15.2.2 Setting av variable i csh
Ein av dei største forskjellane mellom sh, ksh og csh,— er korleis csh behandlar
miljøvariable. Miljøvariabelen PS1 finst ikkje under csh ,— istaden vert brukar
csh ein variabelen som heiter prompt for den same funksjonen. Kommandoen
set blir brukt for
˚
a manipulere miljøvariable:
zevs% set prompt=”ka du vil ?”
ka du vil ?
Legg merke til at under csh vert alle miljøvariable skrevne med sm
˚
a boksta-
var. Andre viktige variablar er home og term, som erstattar HOME og TERM
som vi kjenner fr
˚
a sh og ksh. Ein kan forandre den ekvivalente av PATH ved
˚
a sette path–variabelen. Verdien av denne er ei liste av katalogar separert med
mellomrom, og omslutta av parentesar.
ka du vil ?set path=( /bin /usr/bin /usr/ucb /usr/local/bin . )
ka du vil ?
Ein treng ikkje
˚
a eksportere variable under csh,— skallet handterer dette auto-
matisk. Same formen vert brukt av miljøvariablene cdpath,— som er ekviva-
lentmed CDPATH i Bourne– og Korn–skallet.
ka du vil ? set cdpath=( $home . /usr/bin )
ka du vil ?
Legg merke til bruken av home. P
˚
a same m
˚
ate som i Bourne og Korn–skallet
brukar ein miljøvariable ved hjelp av operatoren $. Andre variable vert ogs
˚
a
støtta av csh, og dei vert manipulert av set–kommandoen. Dei viktigaste er
noclobber som sikrar at csh ikkje overskriv eksisterande filer ved redirigering.
Vidare ignoreeof som ignorer CTRL-d som utloggingstegn. Prøv denne kom-
mandoen:
ka du vil ? set
for
˚
a liste ut den aktive lista. Ellers vil eg berre henvise til UNIX man–sidene.
15.2. C–SKALLET 141
15.2.3 Kommandohistorie og redigering av kommandoar i csh
C–skallet har støtte for kommandohistorie og redigering av kommandoar fr
˚
a
historielista. Likevel er det vanskeleg
˚
a redigere p
˚
a ein kommando som ein
held p
˚
a
˚
a taste inn,— alts
˚
a ein som ikkje er i historielista fr
˚
a før
2
. Skallvariabelen
history set lengden av historielista.
ka du vil ? set history=40
ka du vil ?
Sidan csh held denne lista internt,— vil det seie at det ikkje eksisterer ei historie-
fil slik som under ksh. Innholdet i historielista skriv ein ut med kommandoen
history. N
˚
ar ein brukar kommandoar fr
˚
a historielista kan ein referere til dei med
med nummer. Dersom ein brukar utropstegn i ledeteksten for csh vil skallet
vise kommandonummeret for kommandoar (jmfr. ksh).
ka du vil ? set prompt=” ! csh:‘hostname‘{‘whoami‘} >
44 csh:zevs{trondk} >
Straks ein veit kommandonummeret for kommandoar kan ein bruke utrops-
tegn alle stader i ein kommando for
˚
a referere til ein spesiell kommando i
historielista.
44 csh:zevs{trondk} > echo !43
echo set prompt= ! csh:‘hostname‘{‘whoami‘} >
set prompt= ! csh:‘hostname‘{‘whoami‘} >
45 csh:zevs{trondk} >
N
˚
ar ein brukar ! vil csh skrive ut kommandoen etter at den er substituert, men
før den vert eksekvert. Ein kan ogs
˚
a berre bruke ! + eit nummer for eksekvere
ein kommando p
˚
a nytt.
45 csh:zevs{trondk} > !44
echo set prompt= ! csh:‘hostname‘{‘whoami‘} >
set prompt= ! csh:‘hostname‘{‘whoami‘} >
46 csh:zevs{trondk} >
P
˚
a nytt ser vi at kommandoen vert substituert, skreven ut p
˚
a nytt og deret-
ter eksekvert. Istaden for
˚
a bruke nummer kan ein bruke strengar for
˚
a finne
kommandoar i lista. Formen !streng refererer til forrige kommando som starta
med streng. Skallet vil søke bakover i lista og eksekvere første kommando som
startar med streng. Uttrykket !! refererer til forrige kommando.
46 csh:zevs{trondk} > echo “Berre ein test”
Berre ein test
47 csh:zevs{trondk} > !!
echo Berre ein test
Berre ein test
48 csh:zevs{trondk} >
Legg merke til at n
˚
ar ein brukar csh kan ein ikkje bruke ! som eit vanleg tegn
p
˚
a kommandolinja, utan
˚
a unnta det for spesialbetydning ved
˚
a bruke bakslask.
49 csh:zevs{trondk} > echo \!44
2
Derfor vart tcsh ( Terminal C-shell ) laga
142 KAPITTEL 15. KORN– OG C–SKALL
!44
50 csh:zevs{trondk} >
C–skallet har eit komplett system for
˚
a redigere p
˚
a kommandoar som ein hen-
tar fram fr
˚
a historielista. Ulempen med denne er at den er vanskeleg
˚
a bru-
ke. Etter at ein har valgt kommando med !–operatoren kan ein erstatte delar
av kommandoen med søk-og-erstatt operatorar,— for
˚
a modifisere komman-
doen før den vert eksekvert. Til dette brukar ein : (kolon), etterfølgd av s/
gamalstreng/nystreng.
50 csh:zevs{trondk} > !46:s/test/hallo
echo Berre ein hallo
Berre ein hallo
51 csh:{trondk} >
Berre enkle strengar er lovleg,— komplekse regulære uttrykk vil ikkje funge-
re. Ein kan ogs
˚
a referere til individuelle delar ved
˚
a plassere eit tal etter : for
indikere posisjonen for det ordet ein vil ha med.
51 csh:zevs{trondk} > echo !!:3
echo hallo
hallo
52 csh:zevs{trondk} >
Ein kan gjerne kombinerere desse to metodane s
˚
a mykje ein vil.
52 csh:zevs{trondk} > echo !46:3:s/all/XXX/
echo hXXXo
hXXXo
53 csh:zevs{trondk} >
I tillegg refererer tegnet $ til siste element p
˚
a kommandolinja, og # refererer til
heile kommandolinja. Det finst fleire liknande operatorar som ein kan bruke
som ein vil, alle stader p
˚
a kommandolinja,— for
˚
a rekonstruere kommandoar
og utføre dei p
˚
a nytt.
15.2.4 Hashing
Dessverre kan eg ikkje finne eit godt norsk ord for
˚
a oversette hashing,— slik
at vi f
˚
ar bruke det engelske uttrykket. N
˚
ar C–skallet startar opp g
˚
ar det gjen-
nom alle katalogane som har innslag i miljøvariabelen path og finn alle mulige
kommandonamn og lagar ein intern tabell med deira fulle stinamn. N
˚
ar ein
kommando skal utførast, brukar csh den interne tabellen istaden for
˚
a søke i
stien. Denne teknikken vert kalla hashing. Dette sikrar ein betre ytelse,— men
dersom ein forandrar stien eller legg til ein kommando vil ikkje csh f
˚
a med
seg denne forandringa utan vidare. Derfor m
˚
a ein tvinge csh til
˚
a bygge ein ny
hash–tabell ved
˚
a eksekvere kommandoen rehash.
15.2.5 Aliaser
C–skallet tilbyr ein alias funksjon for
˚
a forandre kommandoar før dei vert ek-
sekvert. Ein kan lage alias med kommandoen alias, etterfølgd av namnet p
˚
a
aliasen,— og til slutt kommandoen som skal eksekverast.
15.2. C–SKALLET 143
53 csh:zevs{trondk} > alias dill ’echo tull’
54 csh:zevs{trondk} > dill
tull
55 csh:zevs{trondk} > dill tuller
tull tuller
56 csh:zevs{trondk} > /dill
/dill: Command not found.
57 csh:zevs{trondk} >
Alias substitusjon vert berre utført p
˚
a det første ordet i kommandolinja i kvart
element i ein røyrledning, og berre n
˚
ar kommandonamnet vert oppgitt som eit
relativt kommandonamn som ikkje startar med /. Ein kan eliminere eit alias
med kommandoen unalias.
57 csh:zevs{trondk} > unalias dill
58 csh:zevs{trondk} > dill
dill: Command not found.
59 csh:zevs{trondk} >
Aliaser er nyttige for
˚
a sette opp kommandolinjemiljøet. Vanlegvis vil ein legge
inn eigne aliasar i .cshrc–fila p
˚
a heimekatalogen.
15.2.6 Redirigering av I/O med csh
Redirigering av standard feilmelding i csh har ein litt anneleis syntaks enn det
som er vanleg i andre skall. Ein kan bruke > for
˚
a redirigere standard ut, men
istaden for
˚
a bruke 2> som er vanleg under Bourne og Korn–skallet, m
˚
a ein
bruke >& for
˚
a sende b
˚
ade standard ut og standard feilmelding til same fila
under csh.
59 csh:zevs{trondk} > cat fila >& utfila
60 csh:zevs{trondk} >
Dersom opsjonen noclobber er satt, m
˚
a ein bruke >! eller >&! for
˚
a tvinge csh
til
˚
a overskrive fila. P
˚
a same m
˚
ate kan ein bruke >>! og >>&! til
˚
a forlenge ei
eksisterande fil, utan
˚
a øydelegge innholdet p
˚
a fila før utdataene vert skrevne.
Sjølv om det ikkje er lett
˚
a dirigere standard ut og standard feilmelding til
forskjellige filar, kan ein gjere dette ved hjelp av subskall.
60 csh:zevs{trondk} > (cat fila > utfila) >& feilfila
61 csh:zevs{trondk} >
15.2.7 Skallprogrammering for csh
C–skallet støttar skall–programmering, men programmeringsspr
˚
aket er veldig
forskjellig fr
˚
a det ein finn i andre skall. Likevel vil ein finne dei same funksjo-
nane. Istaden for operasjonen:
for var in liste
do
done
har csh operatoren foreach, som vert terminert med end:
144 KAPITTEL 15. KORN– OG C–SKALL
61 csh:zevs{trondk} > foreach var ( hallo hadi )
? echo $var
? end
hallo
hadi
62 csh:zevs{trondk} >
Det er fleire ting som er verdt
˚
a merke seg i dette eksemplet; for det første,
lista er omgitt av parentesar (ein kan sjølvsagt bruke utdata fr
˚
a kommandoar
istaden for ei konkret liste); for det andre, csh sin ekvivalente til PS2 er ? (eit
spørsm
˚
alstegn); og for det tredje, der er ingen do . . . done kommando. Ein kan
utføre ein test og eksekvere kommandoar dersom testen er sann, med if . . . then
. . . endif . Ordet then m
˚
a st
˚
a p
˚
a same linje som if , og testen m
˚
a vere omgitt av
parentesar.
62 csh:zevs{trondk} > cat eksisterer-fil.csh
if ( -e $1 ) then
echo fila $1 eksisterer
else
echo fila $1 eksisterer ikkje
endif
63 csh:zevs{trondk} > csh -f eksisterer-fil.csh /etc/passwd
fila /etc/passwd eksisterer
64 csh:zevs{trondk} >
Det eksisterer fleire test operatorar i tilleg til -e, som returnerer sant dersom
ei fil eksisterer. Ei komplett liste kan ein finne man–sidene for csh. Nokre av
dei mest vanlege operatorane er -r, som returnerer sant dersom ein har lese-
aksess til ei fil; -f , som returnerer sant dersom ei fil er ei ordinær fil; og -d, som
returnerer sant dersom ei fil er ein katalog. Ein kan ogs
˚
a samanlikne numeriske
verdiar, og bruke vanlege aritmetriske operatorar:
64 csh:zevs{trondk} > cat nummer-test.csh
set x=1
if ( $x - 1 ) then
echo SANT eller ulik null
else
echo USANT eller lik null
endif
65 csh:zevs{trondk} > csh -f nummer-test.csh
USANT eller lik null
66 csh:zevs{trondk} >
Som vi ser s
˚
a støttar csh numeriske operasjonar utan ein expr–kommando. P
˚
a
den andre sida støttar ikkje csh operatoren (engelsk: grave)
3
Istaden har brukar
csh krøllparentesar,— { og }, for
˚
a teste p
˚
a returverdien fr
˚
a ein kommando.
if { kommando parametre . . . } then
Som vi ser s
˚
a erstattar krøllparantesane dei vanlege parantesane i eit slikt ut-
trykk. C–skallet understøttar ogs
˚
a enkle aritmetriske operasjoner i skall-program.
3
Dette er den operatoren som tek ein kommando med parametre og returnerer verdien fr
˚
a
kommandoen enten til ein test eller ei tilordning. Eks: variabel=‘kommando parametre ...‘
15.2. C–SKALLET 145
I tilleg til set som vi kjenner fr
˚
a ksh brukar csh ogs
˚
a operatoren @ (krøllalfa)
for
˚
a utføre ein operasjon p
˚
a ein variabel. Denne operatoren fungerer ikkje p
˚
a
kommandolinja.
66 csh:zevs{trondk} > cat operator.csh
set x=5
echo $x
@ x++
echo $x
@ x+=32
echo $x
@ = $x + 32
echo $x
67 csh:zevs{trondk} > csh -f operator.csh
5
6
38
70
68 csh:zevs{trondk} >
Pass alltid p
˚
a
˚
a ha mellomrom mellom elementa i tilordningsuttrykk,— p
˚
a
same m
˚
ate som med expr. Husk ogs
˚
a p
˚
a at @–operatoren ikkje verkar for in-
teraktive skall.
C–skallet sitt fleirvalgsuttrykk er switch . . . endsw. Merk kvart valg med case, og
terminer kvart valg med breaksw.
68 csh:zevs{trondk} > cat skall-program.csh
switch ( $1 )
case 1 :
echo ”Hallo”
breaksw
case 2 :
echo ”Hadi”
breaksw
default :
echo God dag”
breaksw
endsw
69 csh:zevs{trondk} > csh -f skall-program.csh 25
God Dag
70 csh:zevs{trondk} > csh -f skall-program.csh 1
Hallo
71 csh:zevs{trondk} >
Parantesane etter switch er p
˚
akrevde, og uttrykket kan ogs
˚
a vere uttrykk som
evaluerer til ein streng. Dersom uttrykket er ein streng, vil kvart valg bli sa-
manlikna med strengen, og tilhøyrande vil bli utførde heilt til kommandoen
breaksw, som vil bryte ut av switch. Dersom ingen av dei aktuelle valg slær til,
vil default bli utført.
Løkker kan ein lage med while . . . end. Her m
˚
a ein ogs
˚
a legge testen mellom
parentesar.
146 KAPITTEL 15. KORN– OG C–SKALL
71 csh:zevs{trondk} > cat while-test.csh
set x=1
while ( $x < 5 )
echo $x
@ x++
end
72 csh:zevs{trondk} > csh -f while-test.csh
1
2
3
4
73 csh:zevs{trondk} >
End
˚
a finst fleire operatorar og m
˚
atar
˚
a programmere p
˚
a under csh,— men eg
vil ikkje gjennomg
˚
a meir i denne omgang.
15.2.8 Finne ein kommando med csh
C–skallet har ingen innebygd kommando p
˚
a linje med ksh sin whence–operator.
Istaden har dei fleste BSD–system brukt kommandoen which. Denne komman-
doen fungerer i prinsippet p
˚
a same m
˚
ate som whence. I System V Release 4
blir denne kommandoen levert som del av ein BSD kompabillitetspakke,— det
betyr at den ikkje vil vere installert p
˚
a alle system.
15.3 Velge skall for skallprogram
N
˚
ar ein vil ha eksekvert eit skallprogram, vil det som standard bli starta opp
eit subskall av same type som det som ein kjøyrer for øyeblikket. Dette vil
sjølvsagt for
˚
arsake problemer dersom skallprogrammet er laga for csh,— men
ksh vil prøve
˚
a kjøyre det. Derfor har det vorte laga ein mulighet for spesifisere
skall inne i skallprogrammet. Dermed vil UNIX alltid velge rett skall for alle
skallprogram. M
˚
aten ein gjer dette p
˚
a er følgande:
#! /full/sti
Dette skal st
˚
a som første linje i skallprogrammet. Det kan f.eks st
˚
a:
#! /bin/csh
for eit skallprogram som er laga for csh, eller
#! /bin/sh
for Bourne–skallet, sh,— og
#! /usr/bin/ksh
for Korn–skallet, ksh. Systemet vil leite etter denne linja før det startar eit sub-
skall. Sidan linja startar med # (skigardteiknet) som blir oppfatta som kom-
mentarar av alle tre skall, vil ikkje denne linja influere p
˚
a utførelsen av skall-
programmet etter at systemet har starta opp rett skall.
15.4. VALG AV INNLOGGINGSSKALL 147
15.4 Valg av innloggingsskall
B
˚
ade Korn– og C–skall er laga av UNIX–ekspertar,— for UNIX–ekspertar. Der-
med er dei mykje kraftigare og mangfoldige enn Bourne–skallet, men saman
med dei ekstra mulighetane kjem større kompleksitet og fleire vanskelege ting.
Som standard vert Bourne–skallet starta av systemet dersom ein ikkje har spe-
sifisert anna n
˚
ar ein loggar inn p
˚
a systemet. Bourne skallet les oppstartfilane /
etc/profile og $HOME/.profile, og skriv ut PS1 som ledetekst for
˚
a fortelje at det er
klart til
˚
a ta imot kommandoar. Dette skallet vert kalla innloggingsskallet fordi
det vert starta av systemet n
˚
ar ein loggar inn. Dersom ein brukar exec skall i
oppstartfilane eller startar eit anna skall fr
˚
a kommandolinja, startar ein eit sub-
skall som ikkje er eit innloggingsskall. Dersom ein foretrekk andre skall enn det
som er spesifisert som innloggingsskall er dette veldig enkelt
˚
a forandre for
den som er systemansvarleg. Dersom ein vil bruke ksh som innloggingsskall
kan ein fortsette
˚
a bruke $HOME/.profile som oppstartfil,— men i tillegg kan
ein definere eit filnamn i ein miljøvariabel ENV, denne fila vert ogs
˚
a brukt som
oppstartfil for ksh i tillegg til $HOME/.profile. C–skallet brukar ikkje $HOME/
.profile, istaden brukar csh to filer, $HOME/.cshrc og $HOME/.login. Begge vert
tolka som eit som skallprogram. N
˚
ar ein loggar inn vil csh først utføre $HOME/
.cshrc, dertter $HOME/.login. Dersom csh ikkje er eit innloggingsskall vil det
hoppe over $HOME/.login. Dersom ein brukar csh som innloggingsskall kan
ein ogs
˚
a lage ei fil .logout p
˚
a heimekatalogen. Denne fila vert lesen og utført av
csh n
˚
ar ein loggar ut. Bourne– og Korn–skallet har ikkje denne muligheten.
15.5 Jobbkontroll
B
˚
ade csh og ksh har jobbkontroll . Jobbkontroll er muligheten for
˚
a flytte ekse-
kverande prosessar i bakgrunnen, forgrunnen, stoppe eller restarte dei. Jobb-
kontroll har p
˚
a mange m
˚
atar vorte erstatta og duplisert ved hjelp av skallniv
˚
a,
virtuelle terminalar og vindussystem som X–Windows,— men mange anser
jobbkontroll som den beste m
˚
aten
˚
a kontrollere prosessar. Bourne–skallet un-
derstøttar jobbkontroll dersom det vert starta med namnet jsh (for Job SHell)
istaden for sh. N
˚
ar ein startar ein prosess eller ein jobb i forgrunnen vil termi-
nalen vere “blokkert” heilt til prosessen er ferdig. D
˚
a er det ofte greitt
˚
a legge
denne prosessen i bakgrunnen for
˚
a f
˚
a tilbake kontrollen av terminalen. P
˚
a
same m
˚
ate er det ønskeleg
˚
a f
˚
a ein bakgrunnsprosess til
˚
a bli ein forgrunns-
prosess,— enten for
˚
a kontrollere den eller gje inn data til prosessen. N
˚
ar ein
har kjøyrer ein prosess i forgrunnen, kan ein trykke CTRL-z for
˚
a suspendere
eller stoppe prosessen.
73 csh:zevs{trondk} > sleep 40
CTRL-Z
[1] + Stopped sleep 40
74 csh:zevs{trondk} >
Prosessen har stoppa, og ein beskjed vert skreven ut som inneheld jobbnum-
meret, status Stopped og kommandolinja sleep 40. Legg merke til at sjølv om
denne prosessen er stoppa s
˚
a er ikkje klokka stoppa, dvs. at dersom ein star-
148 KAPITTEL 15. KORN– OG C–SKALL
tar opp denne prosessen om 40 sekund vil denne prosessen fullføre umid-
delbart. N
˚
ar ein st
˚
ar i denne situasjonen kan ein starte nye prosessar/jobbar,
drepe stoppa jobbar/prosessar,restarte stoppa prosessar/jobbar i forgrunnen
eller i bakgrunnen. For
˚
a kikke p
˚
a ei liste over alle prosessar/jobbar, inklu-
dert bakgrunnsprosessar og stoppa prosessar/jobbar, brukar ein kommando-
en jobs. Den listar prosessar/ jobbar p
˚
a same m
˚
ate som ovanfor.
74 csh:zevs{trondk} > jobs
[1] + Stopped sleep 40
75 csh:zevs{trondk} >
No kan ein bruke jobbnummeret til
˚
a kontrollere desse jobbane. Bruk bg (for
BackGround) for
˚
a restarte jobbar som bakgrunnsjobbar, og fg (for ForGround)
for
˚
a restarte jobbar som forgrunnsjobbar. Desse kommandoane tek ein jobb-
nummer innleia med eit % (prosent teikn) som parameter.
75 csh:zevs{trondk} > fg %1
sleep 40
Som vi ser vert kommandolinja skreve ut p
˚
a nytt og jobben “overtek” kontrol-
len over terminalen. Kommandoen bg verkar akkurat p
˚
a same m
˚
aten, forskjel-
len er at jobben vert lagt i bakgrunnen, p
˚
a same m
˚
aten som om ein hadde brukt
& p
˚
a slutten avkommandolinja. Ein kan bruke %streng istadenfor %tall, der
streng er alle kommandolinjer som startar med streng, eller formen %?streng
som vil finne alle kommandolinjer som inneheld streng. Ein kan stoppe bak-
grunnsjobbar med kommandoen stop , og restarte dei igjen med fg og bg.
76 csh:zevs{trondk} > (sleep 40; echo halloen ) &
[1] 12056
77 csh:zevs{trondk} > jobs
[1] + Running (sleep 40; echo halloen) &
78 csh:zevs{trondk} > stop %?sleep
[1] + Stopped (signal) (sleep 40; echo halloen)&
79 csh:zevs{trondk} > jobs
[1] + Stopped (signal) (sleep 40; echo halloen)&
80 csh:zevs{trondk} > fg %1
(sleep 40; echo halloen)
halloen
81 csh:zevs{trondk} > fg %1
ksh: fg: no such job
82 csh:zevs{trondk} >
Dersom ein prøvar
˚
a logge ut medan ein har stoppa jobbar vil skallet klage.
82 csh:zevs{trondk} > jobs
[1] + Stopped (signal) (sleep 40; echo halloen)&
83 csh:zevs{trondk} > exit
You have stopped jobs
84 csh:zevs{trondk} >
Dersom dette skjer, bør ein studere jobblista og frigjere prosessar enten ved
˚
a
fullføre dei eller drepe dei. Dersom ein prøvar p
˚
a nytt
˚
a logge ut vil csh og ksh
15.5. JOBBKONTROLL 149
drepe dei stoppa jobbane og logge ut. Ein kan drepe jobbar med kommandoen
kill:
kill -signal %tall
der signal er det signalet ein vil sende, og %tall refererer til jobbnummeret.
Kapittel 16
Media
Behandling av diskar er viktig i alle operativsystem. Som systemadministrator
vil arbeide med media som diskar, diskettar, magnetband, CD–ROM og DVD
lesarar allereie n
˚
ar ein installerer operativsystemet p
˚
a disken. Media kan ogs
˚
a
brukast til
˚
a handtere plassen p
˚
a disken, og i sikkerthetskopiering for
˚
a beskyt-
te data. UNIX har to basismetodar
˚
a handtere media, og ein kan bruke mange
slags typar størrelsar av diskar p
˚
a UNIX–system. Dei fleste UNIX–variantar
har fleire typar filsystem som kan oppføre seg ganske forskjellig. Alle kan opp-
tre p
˚
a same maskin, dei kan til og med dele same disk, enkelte er virtuelle fil-
system som ikkje representerer fysisk plass p
˚
a ein disk. N
˚
ar utfører ein ak-
sjon p
˚
a ein disk, m
˚
a ein vanlegvis spesifisere filsystemtype p
˚
a kommandolinja.
Magnetband har gjerne andre reglar enn diskar.
16.1 Diskblokker og i–noder
UNIX handterer diskplass i størrelse som vert kalla blokker. I moderne filsys-
tem er gjerne blokkstørrelsen dynamisk slik at filsystemet kan tilpassast den
forventa bruken. Størrelsen kan variere mellom 512 byte opp til 64 kilobyte.
Ein liten blokkstørrelse vil utnytte disken betre,— men eit system som i hoved-
sak har store filer vil stor blokkstørrelse gje ein betre ytelse. Dette betyr at ein
ikkje kan lage ei fil eller katalog som ikkje tek mindre plass enn ei blokk. Ei fil
som inneheld 510 byte tek like mykje plass p
˚
a disken som ei fil som inneheld
1 byte. Dei fleste diskrelaterte kommandoane vil rapportere diskforbruk ved
˚
a
telle blokker. Berre nokre f
˚
a, som ls, rapporterer filstørrelse direkte i antal byte.
Katalogar brukar ogs
˚
a diskplass,— sjølv om katalogen innheld ingen filar vil
den likevel legge beslag p
˚
a ei blokk.
I tillegg til blokker, har filsystemet ei liste over alle filer i systemet, med ein
peiker til første blokka i fila. Namnet og blokkene er lagra i ein entitet som vi
kallar i–node (identifiation node). Katalogfilar har innslag som inneheld i–noden
for kvar fil i katalogen. N
˚
ar ei fil blir oppdatert vil systemet ogs
˚
a oppdatere i–
noden. Antal i–noder blir fastsett n
˚
ar filsystemet vert oppretta. Vanlegvis vil
ein ikkje ha nokon grunn til
˚
a operere p
˚
a i–nodar,— men det hender faktisk at
enkelte filsystem klarer
˚
a bruke opp alle i–noder.
150
16.2. FILSYSTEM 151
16.2 Filsystem
Lista av diskblokker, i–nodar og anna informasjon assosiert med diskforbruk
vert vedlikehelde separat for alle filsystem. Kvar disk som vert sett p
˚
a maskina
m
˚
a ha sitt eige filsystem, men det er ogs
˚
a mulig
˚
a lage fleire filsystem p
˚
a same
disk. P
˚
a moderne UNIX–variantar kan ogs
˚
a filsystem g
˚
a over fleire diskar,—
og diskar (eller diskpartisjonar) kan leggast til eit filsystemet dynamisk. Tid-
legare var praksisen
˚
a lage minst 3 separate filsystem med ein partisjon (eller
disk) for kvart filsystem, eit for / (root), eit for /user og swap. Ein brukte
˚
a skil-
le / og /usr fordi dei to ikkje skulle øydelegge for kvarandre dersom den eine
gjekk full. No har diskar vorte s
˚
a billege og store at ein i dei fleste tilfeller kan
opprette 2 partisjonar,— ein partisjon for swap og installere operativsystem p
˚
a
resten. Dei fleste UNIX–variantar har fleire typar filsystem,— dvs. korleis den
administrative informasjonen for
˚
a finne filane blir lagt ut p
˚
a disken og korleis
filane blir plassert p
˚
a disken. Mange har transaksjonsstøtte og journalføring
som skal gje økt sikring mot tap av data
1
. Dei forskjellige filsystem har sterke
og svake (eller svakare) sider. Nokre er betre p
˚
a store og f
˚
a filer,— medan andre
er betre p
˚
a mange og sm
˚
a filer. Eit journalførandre filsystem vil naturleg nok
vere tregare enn eit filsystem utan journal, sjølv om dette er marginalt for ei
personleg datamaskin som skal st
˚
a p
˚
a pulten. Derimot for ein travel server vil
millisekund fort addere opp til mange sekunder.
16.3 Ledig disk plass,— kommandoen df
For
˚
a finne ledig plass p
˚
a alle filsystem kan ein bruke kommandoen df (disk
free). No skal vi sj
˚
a p
˚
a denne kommandoen p
˚
a SunOS. I første kolonne ser ein
zevs# df
Filesystem kbytes used avail capacity Mounted on
/dev/sd0a 15487 8364 5574 60% /
/dev/sd0g 342495 159862 148383 52% /usr
/dev/sd1f 859650 766537 7148 99% /usr/local
/dev/sd1a 30835 13947 13804 50% /var
/dev/sd2f 321004 184244 104659 64% /var/tmp
/dev/sd2a 15311 115 13664 1% /tmp
/dev/sd2h 918521 620188 206480 75% /home
arion:/dbin 39936 5599 34337 14% /dbin
poseidon:/home/poseidon 363277 112018 214931 34% /home/poseidon
poseidon:/var/spool/news 186199 436 167143 0% /var/spool/news
zevs#
Tabell 16.1: df for SunOS
enhetsfila som vert brukt for det aktuelle filsystemet, deretter kor stort filsyste-
met er i antal Kbytes, kor mykje som er brukt, tilgjengeleg, kor mange prosent
av filsystemet som er utnytta og til slutt filsystemet. La oss ta ein kikk p
˚
a den
same kommandoen p
˚
a System V Release 3. Som ein ser kjem filsystemet i første
1
Legg merke til økt sikring, det er ikkje 100% garanti mot tap av data ved journalføring og
transaksjonar. Gode rutiner rundt sikkerhetskopiar er fortsatt beste sikring mot tap av data.
152 KAPITTEL 16. MEDIA
arion# df
/ (/dev/dsk/0s1 ): 13466 blocks 5841 i-nodes
/tmp (/dev/dsk/0sa ): 56592 blocks 7334 i-nodes
/usr (/dev/dsk/0s3 ): 11068 blocks 12961 i-nodes
/dbin (/dev/dsk/0s4 ): 68674 blocks 9672 i-nodes
/usr/spool/news (/dev/dsk/0s5 ): 392382 blocks 49653 i-nodes
/home (/dev/dsk/0s6 ): 205862 blocks 55450 i-nodes
/home/zevs (zevs:/home/zevs ): 412868 blocks 0 i-nodes
arion#
Tabell 16.2: df for System V Release 3
kolonne, deretter enhetsfila, antal ledige blokker og til slutt antal i–nodar. P
˚
a
denne maskina er blokkstørrelse 512 byte, antal i–nodar fortel kor mange filar
ein kan opprette. Dersom ein opprettar 5841 filar p
˚
a filsystemet / (root), vil-
le vi ha brukt opp alle i–nodane og ein ville ha f
˚
att feilmelding fr
˚
a systemet
dersom vi hadde prøvt
˚
a opprette fleire filar. System V har i tillegg ein kom-
mando dfspace som reknar alle opplysningane fr
˚
a df om i antal Mbyte,— slik
at lesbarheten og forst
˚
aelsen kan bli lettare. P
˚
a System V Release 3 er dfspace
arion# dfspace
/ : Disk space: 6.57 MB of 29.00 MB available (22.67%).
/tmp : Disk space: 27.63 MB of 29.00 MB available (95.28%).
/usr : Disk space: 5.39 MB of 68.00 MB available ( 7.94%).
/dbin : Disk space: 33.53 MB of 38.99 MB available (85.98%).
/usr/spool/news : Disk space: 191.55 MB of 195.00 MB available (98.23%).
/home : Disk space: 100.51 MB of 231.00 MB available (43.51%).
/home/zevs :(Remote) Disk space: 192.56 MB of 896.99 MB available (21.47%).
Total (Local) Disk Space: 365.20 MB of 591.00 MB available (61.80%).
arion#
Tabell 16.3: dfspace for System V Release 3
eit skallprogram som f
˚
a inndataene sine fr
˚
a df og reknar antal blokker om til
Mbyte.
16.4 Brukt diskplass,— kommandoen du
Kommandoen df rapporterer tilgjengeleg diskplass p
˚
a alle filsystem. Ein har
ogs
˚
a bruk for
˚
a vete kor mykje plass ein brukar. Til det brukar ein kommandoen
du (for disk usage).
zevs# cd text
zevs# du
183 ./unixkurs/ps
1622 ./unixkurs/bak
283 ./unixkurs/dos
3867 ./unixkurs
16.5. KOMPRIMERING AV FILAR 153
281 ./regler
107 ./misc
4257 .
zevs#
P
˚
a BSD–UNIX eller SunOS, som i dette tilfellet, rapporterer programmet størrelse
i antal blokker som igjen er p
˚
a 1Kbyte. P
˚
a System V er vanlegvis blokkstørrelsen
p
˚
a 512 byte.
arion# cd src
arion# du
110 ./script
506 ./c-src
618 .
arion#
Som standard tek ikkje du filnamn som parameter,— berre katalogar. Program-
met rapporterar for alle underkatalogar i katalogen. Dersom ein brukar opsjo-
nen -a vil du generere ei linje for kvar fil og katalog,— istaden for berre katalo-
gar.
zevs# du -a
5 ./arbkon.doc
3 ./cc-tull.tex
1 ./patch-zevs.tex
1 ./laanekassa.tex
1 ./rrestore.tex
1 ./forside.tex
3 ./juleb92.tex
3 ./it12.txt
1 ./nydisk.tex
17 ./julebord.cdr
2 ./sun-vol-p.tex
3 ./sun-utgifter.tex
42 .
arion#
Vidare har du opsjonen -s (for summary), som gjer at du berre skriv ut den samla
som summen av blokker for katalogar og subkatalogar.
zevs# du -s text
4193 text
zevs#
Som vi ser vil ein f
˚
a ein mykje betre og kortare liste
˚
a forholde seg til dersom
ein vil berre ha eit raskt overblikk over diskforbruket.
16.5 Komprimering av filar
Ein kan redusere størrelsen p
˚
a filar som ein brukar lite ved
˚
a komprimere dei.
Dermed vil ein spare ein del diskplass. P
˚
a UNIX finst det ein del standard-
program som kan redusere størrelsen p
˚
a filer mellom 30 og 50 prosent. Den
154 KAPITTEL 16. MEDIA
einaste haken med desse programma er at filane m
˚
a pakkast opp igjen før
dei kan brukast. Dei fleste system tilbyr to program compress og pack som kan
komprimere filar, og uncompress og unpack som kan pakke dei ut igjen. Desse
programma er forskjellige, dvs. dei brukar forskjellige algoritmer for
˚
a pakke
saman filane slik at ein kan ikkje bruke unpack for
˚
a pakke opp ei fil som er
pakka med compress.
zevs# ls -l locus.txt
-rw-r–r– 1 trondk 20916 Jan 22 11:34 locus.txt
zevs# compress locus.txt
zevs# ls -l locus.txt.Z
-rw-r–r– 1 trondk 8969 Jan 22 11:34 locus.txt.Z
zevs#
Programmet compress tek ei liste av filnamn som parameter og produserer ein
komprimert versjon av kvar fil. Programmet forandrar ogs
˚
a filnamnet ved
˚
a
legge .Z til filnamnet. Derfor, dersom ein har ei granse p
˚
a 14 tegn i filnamn,
kan ein berre pakke filar med 12 tegn i filnamnet. Programmet pack er ein del
˚
ar
eldre, men blir fortsatt brukt ein del. Kommandoen pack tek ei liste av filnamn
som parameter og produserer ein komprimert versjon av kvar fil.
zevs# pack locus.txt
pack: locus.txt: 34.3% Compression
zevs#
Programmet forandrar namnet p
˚
a fila ved
˚
a legge .z til p
˚
a slutten av filnamnet.
Ogs
˚
a dette programmet kan ikkje pakke filar med meir enn 12 tegn i filnamnet
dersom ein opererer med ei grense p
˚
a 14 tegn i filnamn. Programmet unpack
fungerer p
˚
a same m
˚
ate som uncompress,— dvs. pakke opp filane og lagre dei i
sin opprinnelege form.
Dei fleste vil foretrekke compress fordi dette programmet klarar som regel
˚
a
lage mindre filar enn pack. Desse kommandoane er som regel standard p
˚
a alle
system,— i tillegg finst det eit gratis pakkeprogram som heiter gzip,— filane fr
˚
a
dette programmet endar som regel p
˚
a .gz. Oppakking skjer med kommandoen
gunzip. Dette siste programet er
˚
a foretrekke framfor compress og pack fordi det
pakkar betre og har fleire mulighetar. Med gzip kan ein faktisk legge fleire filar
inn i den same komprimerte fila med:
$ gzip -c fil1 > pakka-fil.gz
$ gzip -c fil2 >> pakka-fil.gz
eller
$ gzip -c fil1 fil2 > pakka-fil.gz
N
˚
ar ein pakkar ut vil ein f
˚
a tilbake alle dei opprinnelege filane og det er ikkje
mulig
˚
a velge ut inviduelle filar. Dersom ein vil ha eit arkiv der ein kan velge
ut inviduelle filar bør ein bruke gzip i kombinasjon med tar (sj
˚
a side 159).
16.6. KOMMANDOEN DD 155
16.6 Kommandoen dd
Dette programmet vert brukt til
˚
a lage ein eksakt kopi av media. Pass p˚a at
det nye mediet er formatert (dersom det treng det), og har same størrelse og er
av same type. Ein treng ikkje
˚
a lage nytt filsystem p
˚
a det nye mediet,— kopi-
prosedyra vil gjere det som del av den eksakte kopieringa (dvs. dd vil kopiere
alt r
˚
att, bit for bit).
Kommandoen dd kopierer standard inn til standard ut,— ein kan f.eks kopiere
ei fil med kommandoen:
zevs# dd < in.fil > ut.fil
zevs#
Dersom ei av filane er ei enhetsfil kan ein gje det fulle stinamnet.
zevs# dd </dev/rfd0 >/tmp/ut.fil
2400+0 records in
2400+0 records out
zevs#
Programmet rapporterer kor mange blokker den les og skriv. Nummeret etter
+ er antal delvise blokker som vart kopiert.
For
˚
a kopierer ein diskett kan ein bruke dd til
˚
a kopiere den til ei temporær fil.
Deretter erstatte originalen med ein ny diskett av same type og bruke dd igjen
for
˚
a kopiere den ut igjen.
zevs# dd < /dev/rfd0 >/tmp/temp.fil
2400+0 blocks in
2400+0 blocks out
zevs# dd </tmp/temp.fil >/dev/rfd0
2400+0 blocks in
2400+0 blocks out
zevs#
Denne prosedyra brukar den s
˚
akalla “r
˚
a” enhetsfila,— dette sikrar ein eksakt
kopi av heile disketten.
16.6.1 dd,— kommandolinja
Dessverre s
˚
a har dd ein litt anna m
˚
ate
˚
a handtere opsjonar enn andre program.
Opsjonar blir gitt med nøkkelord=verdi,— der nøkkelord er opsjonen som skal
settast,— og verdi er verdien som skal brukast for denne opsjonen.
For eksempel kan ein gje inn filnamnet for innfil etter if= (for Input File),— og
utfil med of= (for Output File). Dersom desse opsjonane er sett vil dei erstatte
standard inn og standard ut.
zevs# dd if=/dev/rfd0 of=/tmp/temp.fil
2400+0 blocks in
2400+0 blocks out
zevs#
156 KAPITTEL 16. MEDIA
Som standard vil dd lese blokker p
˚
a 512 byte, skrive blokka, lese ei ny osv . . . .
Denne m
˚
aten kan vere ganske treg,— derfor g
˚
ar det an
˚
a auke blokkstørrelsen.
Ein bør forandre blokkstørrelsen med eit multiplum av 512 for
˚
a f
˚
a den beste
ytelsen. Blokkstørrelse kan spesifiserast med opsjonen bs= (for BlockSize).
zevs# dd if=/dev/rfd0 of=/tmp/temp.fil bs=5120
240+0 blocks in
240+0 blocks out
zevs#
Blokkstørrelsen er forandra for b
˚
ade lese og skrive operasjonar,— dermed vil
ogs
˚
a antal blokker som er kopiert bli forandra.
Ein kan ogs
˚
a forandre blokkstørrelsen separat for lese– og skriveoperasjonar,—
med henholdsvis ibs= og obs=.
I tillegg har dd verktøy for
˚
a konvertere data format under kopiering. Opsjonen
conv= spesifiserer kva slags algoritme som skal brukast. Lovlege verdiar er;
ascii for konvertering fr
˚
a EBCDIC til ASCII; ebcdic for konvertering fr
˚
a ASCII til
EBCDIC; lcase for
˚
a kopiere alle tegn til sm
˚
a bokstavar; ucase for
˚
a kopiere alle
tegn til store bokstavar. I tillegg finst det ein swab opsjon for
˚
a bytte om kvar
par av bytes i filane. Denne opsjonen er veldig nyttig n
˚
ar ein skal kopierer filar
fr
˚
a maskiner som brukar ein anna byterekkefølge. Alle desse opsjonane kan
kombinerast,— forusett at ein skiller dei med komma (,) p
˚
a kommandolinja.
zevs# dd bs=5120 conv=ascii,swab <inn.fil >ut.fil
12+0 records in
12+0 records out
zevs#
Konverteringsopsjonane kan vere nyttige ved kopiering fr
˚
a fil til fil,— dei har
heller lite for seg ved kopiering av media som diskar, diskettar og tape.
16.7 “R˚a” enhets aksess,— kommandoen cpio
Kommandoen mount gjev tilgang til diskettar, diskar, CD–ROM, DVD og taper
via filsystemet. Likevel er montering av diskettar ganske tregt,— og filsystemet
p
˚
a disketten tek ein del plass,— og i tillegg kan ein ikkje ha filar som er større
enn den fysiske plassen p
˚
a mediet.
For
˚
a bøte p
˚
a desse problema har UNIX ein kommando som gir “r
˚
a” aksess
til media utan
˚
a montere dei. Kommandoen er cpio (CoPy In/Out). Dette er
eigentleg ein slags arkivkommando,— den tek ei liste av filar og kopierer dei til
ei lang utfil,— med skille mellom filane slik at enkeltfilar kan kopierast tilbake.
Programmet kan lage arkivfilar direkte p
˚
a harddisk,— men det mest vanlege
er
˚
a bruke det til backup og lage arkiv p
˚
a diskettar eller tape.
Arkiv som er laga med cpio kan g
˚
a over fleire diskettar eller taper,— dermed
kan ein kopiere store filsystem. I tillegg tek cpio vare p
˚
a eigarrettighetar og
tidsstempling,— og kan arkivere alle typar filar.
16.7. “R
˚
A” ENHETS AKSESS,— KOMMANDOEN CPIO 157
16.7.1 cpio og bruk av media
For
˚
a kunne bruke cpio p
˚
a media som diskar eller diskettar m
˚
a ein formatere
dei først,— men ein treng ikkje
˚
a lage filsystem. Har ein kopiert filar til ein disk
eller diskett med cpio m
˚
a ein lage filsystem for
˚
a kunne montere den,— men d
˚
a
vil ein ogs
˚
a øydelegge alle data.
Ein skal bruke den r
˚
a enhetsfila for cpio operasjonar,— dette fordi cpio ikkje
treng
˚
a g
˚
a veien om eit filsystem.
zevs# echo fila.mi | cpio -o /dev/rfd0
zevs#
Media kan godt vere skrivebeskytta ved lesing.
16.7.2 Lage cpio-arkiv
N
˚
ar ein skal lage ei arkivfil med cpio skal programmet ha ei liste med filnamn
eller stinamn p
˚
a standard inn,— cpio skriv arkivet til standard ut. Utdataene
kan redirigerast til ei vanleg fil eller ei enhetsfil. Filnamn m
˚
a listast med eit
filnamn per linje. Opsjonen -o fortel cpio at den skal kopiere ut (out).
zevs# ls | cpio -o > ut.fila
zevs#
Ein kan ogs
˚
a bruke redirigering fra ei fil med ei liste av filnamn.
zevs# cpio -o > ut.cpio < fil.liste
zevs#
Men det mest vanlege er
˚
a bruke cpio saman med find,— f.eks for
˚
a ta backup
av heile filsystem.
zevs# find . -depth -print | cpio -o > /dev/rst1
zevs#
Det finst ei rekkje andre opsjonar til cpio,— dei viktigaste er -a (for access) som
set nytt tidspunkt for aksess til filane. Som standard vil cpio ta vare p
˚
a den
originale aksesstidspunktet. Ein annan opsjonen er -c (for character),— denne
tvingar cpio til
˚
a legge ut skille mellom filar i tekstform istadenfor i binær form.
Dette er for
˚
a lage arkiv som er portable,— derfor skal ein alltid bruke denne
opsjonen. Til slutt kan ein kanskje slenge p
˚
a verifisering,— -v. Om ein vil kan
ein bruke cpio til
˚
a arkivere filar som allereie er i cpio–arkivet,— klarar cpio
˚
a
holde orden p
˚
a antal niv
˚
a.
Det er likevel enkelte moment som ein m
˚
a huske p
˚
a. Ein m
˚
a ikkje redirigere
utdataene til ei fil som ligg p
˚
a same katalogen som den som blir arkivert. Dette
lagar ei evig løkke og prosessane vil ikkje stoppe før filsystemet er fullt (dersom
ein er heldig!).
16.7.3 Lesing av cpio–arkiv
Kommandoen cpio har opsjonen -i som er motstykket til -o opsjonen. Arkivet
som skal lesast tek cpio fr
˚
a standard inn, og cpio vil legge ut igjen filane nøyaktig
slik dei var d
˚
a arkivet vart laga.
158 KAPITTEL 16. MEDIA
zevs# cpio -icv < /tmp/home.cpio
125 blocks
zevs#
Dersom arkivet vart laga med relative stinamn, f.eks med find . -print (sj
˚
a side
91),— vil cpio bygge opp det same katalogtreet i st
˚
aande katalog. P
˚
a den andre
sida, dersom arkivet vart laga med absolutte stinamn (alle filar startar med /),
vil den same absolutte stien bli brukt for
˚
a opprette filar. Det siste vil eg ikkje
anbefale,— dersom ein er uforsiktig kan dette f
˚
a alvorlege følger.
16.7.4 Liste ut innholdet i eit arkiv
Ein kan liste ut innholdet i eit arkiv uten at ein treng
˚
a laste det inn. Sjølv
om dette kan spare diskplass er det ikkje raskare enn
˚
a lese inn heile arkivet
fordi cpio m
˚
a lese igjennom heile arkivet. Bruk opsjonen -t (for table) for
˚
a liste
filnamna og anna informasjon. D
˚
a vil fillista sj
˚
a ut som utdataene fr
˚
a ls. Dersom
ein brukar b
˚
ade opsjonen -v og -t, vil fillista sj
˚
a ut som utdataene fr
˚
a ls -l.
16.7.5 Velge eit subsett av filar fr˚a arkiv
Til slutt kan vi g
˚
a gjennom korleis ein kan velge ut filar fr
˚
a arkiv ved
˚
a gje inn
eit mønster i form av jokerteikn etter opsjonane p
˚
a kommandolinja. D
˚
a vil cpio
finne alle filnamn som passar til mønsteret og laste inn desse filane. Mønsteret
m
˚
a settast mellom g
˚
aseauge (“) for
˚
a hindre at skallet ekspanderer dei før cpio
ser dei.
zevs# cpio -icdm “*fil” “[0-9]tull*” < /dev/rfd0
238 blocks
zevs#
I tillegg til at filar med stinamn som endar p
˚
a fil, vil cpio laste alle filar som
inkluderer tala 0 til 9 etterfølgd av tull i stinamnet.
16.7.6 Flytting av katalogar
For
˚
a lage prikken over i–en kan cpio ogs
˚
a kopiere filar fr
˚
a ein plass i katalog-
strukturen til ein annan. For
˚
a gjere dette brukar ein opsjonen -p// (for pass)
istaden for -o og -i. Pass blir brukt fordi cpio vert brukt som ein røyrledning som
kopierer filane til ein anna plass i hierarkiet. N
˚
ar ein brukar denne opsjonen tek
kommandoen eit stinamn som m
˚
al for kopieringa.
zevs# find . -print | cpio -pdmv /tmp
/tmp/.cshrc
/tmp/.login
.
.
.
/tmp/text/unixkurs/kurs.tex
548 blocks
zevs#
16.8. KOMMANDOEN TAR 159
Som vanleg tek cpio ei liste av filar p
˚
a standard inn. Alle filar og alle katalogar
under st
˚
aande katalog vert kopiert til /tmp. Dersom ein skal kopiere store data-
mengder kan det vere lurt
˚
a sjekke om ein har nok diskplass før ein kopierer.
Programmet cpio har ein del fleire opsjonar enn dei har gjennomg
˚
att her,— i
tillegg har eg brukt ein del opsjonar i eksempla som eg ikkje har forklart,—
det har eg gjort med fullt overlegg. Dette har eg gjort fordi at skal ein f
˚
a full
utnyttelse av UNIX m˚a ein klare den elementære anstrengelsen det er
˚
a lese
igjennom man–sider og forst
˚
a dei opplysningane som vert gitt der.
16.8 Kommandoen tar
I tillegg til cpio, er kommandoen tar ogs
˚
a tilgjengeleg. Kommandoen dukka
først opp i BSD versjonen av UNIX,— og vart primært laga for
˚
a kjøyre mot
9–spors taperullar (derfor ogs
˚
a namnet tar for tape archive). Kommandoen er li-
kevel mykje brukt ogs
˚
a idag for sikkerhetskopiering b
˚
ade til diskettar og tape-
kasettar. Mange gamle UNIX–system har kun støtte for tar. Kommandoen har
ein viktig eigenskap som ikkje cpio kan understøtte,— tar tillet ein
˚
a legge nye
filar til p
˚
a slutten av eit eksisterande arkiv. Er dette ei fil som ligg i arkivet fr
˚
a
før kan ein seie at den vert erstatta av siste versjon av fila. Dette er implemen-
tert p
˚
a den m
˚
aten at ein legg den siste versjonen av fila p
˚
a slutten av arkivet,
n
˚
ar arkivet vert lasta inn vil siste fila i arkivet overskrive filar med det same
namnet. Dersom ein ikkje er forsiktig kan dette ogs
˚
a vere ei kjelde til feil. Kom-
mandoen tar er ein del tregare enn cpio, men tar kan bruke b
˚
ade r
˚
a enhetsfilar
og blokk enhetar,— r
˚
a enhetsaksess er raskast. Haken med tar er at arkivet ikkje
kan vere større enn maksimum størrelse av mediet.
16.8.1 Kommandolinja for tar
Den mest vanlege opsjonen for tar er -f (for file), og dette vert oppfatta som
fila programmet skal lage eller lese ifr
˚
a. Dette kan vere ei fil (tar–fil) p
˚
a disken
eller ei enhetsfil. Det som ogs
˚
a er forskjellig fr
˚
a cpio er at tar automatisk tek alle
underkatalogar og filar under st
˚
aande katalog.
zevs# tar -cf /dev/rfd0 /home/zevs/ifi/trondk/src
zevs#
Dette vil arkivere alle filar og subkatalogar under katalogen /home/zevs/ifi/trondk/
src til ein diskett. Dersom eit minus tegn (-) vert brukt som arkivnamn,— vert
dette oppfatta som enten som standard inn eller standard ut,— avhengig av
tidlegare opsjonar. Dermed kan ein ogs
˚
a bruke redirigering. Kommandoen tar
kan opprette, lese eller oppdatere eit arkiv. Opsjonane er -c (for Create), -x (for
eXtract) og -r (for Replace).
zevs# tar -cf - . | ( cd /tmp; tar -xvf - )
.cshrc
.login
.
.
.
text/unixkurs/kurs.tex
zevs#
160 KAPITTEL 16. MEDIA
Den første tar–kommandoen vil lage eit arkiv som den skriv til standard ut,—
dette arkivet vert oppfatta som standard inn til eit subskall (ein kommando
som er omslutta med parentesar p
˚
a kommandolinja gjer at skallet vil lage eit
nytt subskall som utfører kommandoen),— dette subskallet vil forandre kata-
log til /tmp,— deretter utføre tar–kommandoen som les arkivet fr
˚
a standard inn
og pakkar det ut p
˚
a /tmp. Dette er m
˚
aten ein brukar tar til
˚
a flytte katalogar og
underkatalogar.
UNIX har fleire s
˚
akalla arkivkommandoar,— men i første omgang vil det holde
˚
a kunne cpio og tar. Ein m
˚
a vel seie at cpio har f
˚
att liten utbreiing i forhold til
tar,— kanskje særleg fordi tar var ein kommando fr
˚
a BSD og BSD–UNIX st
˚
ar
sterkt i akademiske og tekniske miljø. Kommandoen tar er ogs
˚
a veldig mykje
benytta i forbindelse med anonym ftp,— dette skal eg g
˚
a igjennom i eit seinare
kapittel.
Kapittel 17
Satsvis kjøring
Ein viktig del for alle multiprosess system er kjøring av jobbar. For at alle pro-
sessar skal f
˚
a ein rimeleg aksess til prosessoren p
˚
a maskina m
˚
a ein ha ei meka-
nisme for tidsdeling som skiftar til ein ny prosess n
˚
ar ein prosess har brukt opp
sin del av prosessortida. UNIX har svært gode mekanismer for dette, med ein
tidsskala som kan g
˚
a fr
˚
a milisekund til fleire
˚
ar. Basis tidsfunksjonane er bygd
inn i operativsystemet, og desse kommandoane og verktøya utfører admini-
strative oppg
˚
aver stadig, utan oppsyn av brukarar eller systemadministrator.
Likevel er dette avhengig av at maskina er kjører 100% av tida. Mange oppg
˚
aver
er sett opp til
˚
a kjøre ein gong for dagen, vanlegvis i dei “sm
˚
a” timer om natta.
Andre kan er sett opp til
˚
a kjøre ein gong i veka, andre kan kjøre kanskje berre
ein eller to gongar i
˚
aret. I dette kapitlet vil eg g
˚
a gjennom ein del mulighetar
som vanlege brukarar kan bruke til sin fordel.
17.1 Tidsdeling vs. sanntidsytelse
N
˚
ar mange brukarar eller prosessar skal dele den same maskina, er ansvaret for
˚
a allokere prosessorressursar tillagt operativsystemet. Under normale omsten-
dighetar kan ikkje vanlege brukarar bestemme kor stor del av prosessortida
dei vil f
˚
a i løpet av eit intervall. Dette kan gje problem med prosessar som krev
sanntidsytelse. Dette kan bety at I/O–utsyr med høg ytelse enten kan f
˚
a for
lite data eller bli oversvømma dersom systemet er tungt lasta. Før var dette eit
stort problem,— og dette førte ofte til at UNIX ikkje vart brukt i mange sann-
tidsapplikasjonar. I den nye versjonen av System V Release 4 er det lagt inn
ein ny modul som tillet brukarar (eller administratorar)
˚
a spesifisere enkelte
eller alle prosessar som sanntidsprosessar. Dette kan og bety at enkelte proses-
sat f
˚
a ein urimeleg del av systemressursane (dette har vi ogs
˚
a g
˚
att igjennom i
eit tidlegare kapittel . . . )
161
162 KAPITTEL 17. SATSVIS KJØRING
17.2 UNIX er laga for ˚a kjøre heile tida
Historisk vart UNIX laga for tidsdelte system som skulle vere tilgjengeleg 100%
av tida. Som regel var den einaste tilgjengelege prosessortida om natta n
˚
ar f
˚
a
brukarar var aktive p
˚
a systemet. Derfor vart var ein stor del av dei adminstra-
tive jobbane sett opp til
˚
a kjøre seint p
˚
a natta,— og vart det laga verktøy som
kunne kjøre dei automatisk. Faktisk vert dei fleste UNIX–maskinene berre sl
˚
att
av n
˚
ar det skal gjerast reperasjonar eller vedlikehold p
˚
a maskinvaren. Derfor
har det vorte lagt vekt p
˚
a
˚
a lage eit system om skal vere stabilt, og det er ein
fordel
˚
a la maskina kjøre s
˚
a mykje som mulig.
Sjølvsagt vil UNIX fungere utmerket dersom maskina vert kjørt ned av og til,—
likevel er det eit krav at maskina er mest mulig oppe og kjører.
Dette gjeld særleg dersom maskina vert brukt dagleg,— det er liten vits i
˚
a kjøre
ned maskina kvar natt og sl
˚
a av strømmen. Systemet vil gjere ein opprydding
av loggfilar, temporærfilar, o.l. kvar natt,— som eg nemnde tidlegare.
Seinare i dette kapitlet vil eg g
˚
a igjennom cron–funksjonen,— og eg vil vise
korleis ein kan bruke den til
˚
a kjøre prosessar.
17.3 Utvidelse av kommandoen date
UNIX vedlikeheld ein intern dato som er tilgjengeleg for brukarene. Vi s
˚
ag p
˚
a
basisfunksjonane for date i eit tidlegare kapittel. Kommandoen date har basis
brukarniv
˚
a aksess til tidsfunksjonar.
zevs# date
Fri Apr 23 13:57:32 MET DST 1993
zevs#
Som vi ser,— dersom vi berre skriv kommandoen date vil den skrive ut dato og
tid slik som maskina er sett opp.
I tillegg kan date formatere utdataene p
˚
a forskjellige m
˚
atar. Formata vert spe-
sifisert til date ved først
˚
a skrive ein pluss (+),- deretter m
˚
a ein angje felt, dette
vert introdusert med tegnet %,— etter dette kjem bokstaven som fortel kva for
eit dataelement ein vil ha. I dette eksemplet er vi interessert i m
˚
anaden:
zevs# date +%m
04
zevs#
Som vi ser denne m
˚
anaden den 4. m
˚
anaden i
˚
aret eller april. Andre operatorar
er d for dagen i m
˚
anaden, y for dei to siste siffer i
˚
arstalet, H for time, M for
minutt, S for sekund, w for dagen i veka, h for m
˚
anad (Januar til Desember),—
og til slutt r for AM/PM notasjon. Tegn som ikkje kjem etter tegnet % vil bli
oppfatta som normale tegn. Dermed kan date skrive ut komplekse uttrykk som
inneheld dato og tid.
zevs# date +Idag er det den %d. %h. Og klokka er no akkurat %H:%M:%S.”
Idag er det den 26. Apr. Og klokka er no akkurat 10:44:35.
zevs%
17.4. TIDSSTEMPLING AV FILAR 163
I tillegg kan ein bruke %n til
˚
a skrive ut linjeskift,— slik at ein f
˚
ar til
˚
a spre
utdataene p
˚
a fleire linjer.
zevs# date “+Maaned: %m%nDag: %d%nTid: %T”
Maaned: 04
Dag: 26
Tid: 10:50:03
zevs#
I dei fleste tilfella vert desse innfløkte date–kommandoane brukt i skallprogram,
enten ved spørring eller for
˚
a tilordne variable. Mulighetane er mange,— til sa-
man har ein 29 forskjellige operatorar som kan brukast saman med %.
17.4 Tidsstempling av filar
UNIX vedlikeheld fleire tidsstempel for alle filar i systemet, eit av desse vert
vist fram n
˚
ar ein tek kommandoen ls -l. Dette er siste gong fila vart modifisert,
eller tidpunktet for siste oppdatering. Dette tidspunktet vert brukt av fleire
kommandoar for
˚
a bestemme om filar er av rett versjon (f.eks ved oppgrade-
ring av op.sys), og enkelte program vil finne ut om filar har vorte forandra
sidan sist programmet vart kjørt. I tillegg har systemet to andre tidsstempel
p
˚
a filar. Den eine er tidspunkt for opprettelse av fila, og tidspunkt for siste ak-
sess. Tidspunktet for opprettelse angje den første gongen fila vart laga. Aksess-
tidspunktet angje forrige gong ein bruker eller eit program las innholdet i fila.
Tidspunkt for opprettelse og aksesstidspunkt har generelt liten interesse for
vanlege brukarar,— derfor finst det f
˚
a kommandoen som viser dette som ut-
data eller har det som utvelgelse av filar. Dei mest vanlege kommandoane som
kan bruke dette er find og test. Som regel vil ein vere mest interessert i tids-
punktet for siste oppdatering.
17.5 Kommandoen touch
Kommandoen touch vert brukt for
˚
a forandre tidsstemplinga p
˚
a filer. Komman-
doen tek ei liste av filnamn som parametre, og som standard set den aksess–
og modifiseringstidpunkt til noverande tidspunkt.
zevs# ls -l ei.fil
-rw-r—– 1 trondk 0 Feb 21 15:41 ei.fil
zevs# touch ei.fil
zevs# ls -l ei.fil
-rw-r—– 1 trondk 0 Apr 26 13:58 ei.fil
zevs#
Opsjonen -m f
˚
ar touch berre til
˚
a oppdatere modifiseringstidspunkt, -a oppda-
terer berre aksesstidspunkt.
Kommandoen kan ogs
˚
a sette tider p
˚
a filar til eit vilk
˚
arleg tidspunkt. Det nye
tidspunktet er parameter til touch.
164 KAPITTEL 17. SATSVIS KJØRING
zevs# ls -l gamal.fil
-rw-r—– 1 trondk 0 Feb 17 13:01 gamal.fil
zevs# touch 03211541 gamal.fil
zevs# ls -l gamal.fil
-rw-r—– 1 trondk 0 Mar 21 15:41 gamal.fil
zevs#
Som ein kanskje observerer er datoformatet mmddhhMM,- alts
˚
a mm=m
˚
anadsnr.,
dd=dagnr., hh=time og den siste MM=minutt. I tillegg kan ein legge til 2 siffer
p
˚
a enden av datostrengen,— dette st
˚
ar for
˚
arstalet. Kommandoen touch kan
ogs
˚
a brukast til
˚
a lage tomme filar.
zevs# ls -l ny.fil
ny.fil not found
zevs# touch ny.fil
zevs# ls -l ny.fil
-rw-r—– 1 trondk 0 Apr 26 14:36 ny.fil
zevs#
Denne metoden vert ofte brukt i skallprogram for
˚
a sikre at filar vil bli oppretta,
eller eksisterer.
Litt moral til slutt: som med andre ting som er under kontroll av UNIX,— det
er ingen grunn til
˚
a forandre tidsstempling p
˚
a filar utan at det er heilt p
˚
akrevd.
Enkelte prosessar som f.eks automatiserte verktøy for sikkerthetskopiering, vil
ikkje fungere som forventa dersom tidsstemplet blir forandra.
17.6 Kommandoen at
Det finst fleire m
˚
atar
˚
a legge jobbar i for seinare eksekvering under UNIX.
Alle slags kommandolinjer eller skallprogram kan køast opp med at. Dersom
det er nødvendig kan eit skallprogram inneholde ein ny at–kommando. Kom-
mandoen er vanlegvis tilgjengeleg for alle brukarar av systemet dersom ikkje
systemansvarleg har nekta tilgangen.
Kommandoen kjem i tillegg til den s
˚
akalla mekanismen cron, som er meir inn-
retta mot system mekanismer og systemadministrasjon. at vert starta ved at
ein m
˚
a gje tidspunkt og dato p
˚
a kommando-linja,— deretter vil at lese resten
p
˚
a standard inn.
zevs# at 11:34 < at-script.csh
Job 2713 at Thu Jun 8 11:34:00 1993
zevs#
Dette vil eksekvere kommandoane i fila at-script.csh klokka 11.34 idag. Dersom
kommandoen vert godkjent vil at svare med
˚
a skrive jobbidentitet og tidspunkt
p
˚
a standard feilmelding. Jobben vil bli utført sjølv om ein loggar ut av maski-
na og om maskina vert teken ned og opp før dette tidspunktet. Jobben vert
sjølvsagt ikkje utført dersom maskina er avsl
˚
att p
˚
a det aktuelle tidspunktet.
17.6. KOMMANDOEN AT 165
17.6.1 Spesifisere dato for at
Kommandoen at tillet fleire format for tidsspesifikasjon, inkludert datoar som
er seinare enn idag. Eit tidspunkt kan vere spesifisert p
˚
a timar med eitt eller to
tal.
zevs# at 17
.
.
.
Job 2719 at Thu Jun 9 17:00:00 1993
zevs#
Denne kommandoen vil eksekvere klokka 5 p
˚
a ettermiddagen. Dersom ikkje
den amerikanske forma med am og pm vert spesifisert, vert 24 timers tid antatt.
zevs# at 5pm
.
.
.
Job 2720 at Thu Jun 9 17:00:00 1993
zevs#
Denne kommandoen vil ogs
˚
a bli kjørt klokka 5 p
˚
a ettermiddagen. Legg merke
til at mellomrom ikkje er lovleg mellom den numeriske verdien for tid og am
eller pm strengen. I tillegg er det mulig
˚
a spesifisere tidspunkt med fire tal og :
(kolon) mellom time og minutt.
zevs# at 2:34pm
.
.
.
Job 2721 at Thu Jun 9 14:34:00 1993
zevs#
Spesielle reserverte ord er ogs
˚
a lovleg, som f.eks noon, now og midnight.
zevs# at noon
.
.
.
Job 3278 at Mon Thu 12:00:00 1993
zevs#
Ein jobb kan ogs
˚
a bli eksekvert p
˚
a eit tidspunkt som blir angitt med inkrement
i tid dersom + (pluss) operatoren vert inkludert etter tidspunktet.
zevs# at now + 15 minutes
.
.
.
zevs#
Desse spesifisjonane verkar ganske komplekse ved første augekast,— men grei-
er ein
˚
a lære seg at klokkeslettet skal kome før dato brukar det
˚
a g
˚
a bra. Ellers
vil eg vise til manualsidene for at. Dersom formatetet p
˚
a tidspunktet vert feil
vil at skrive ut ei feilmelding og jobben vert sjølvsagt ikkje lagt i kø.
17.6.2 Vise jobbkøen for at
Desverre er det forskjell korleis ein kikkar p
˚
a jobbkøen og slettar jobbar for
at under BSD–UNIX of System V. I BSD–UNIX er dette eigne kommandoar,—
166 KAPITTEL 17. SATSVIS KJØRING
medan under System V er dette berre opsjonar til at.
La oss ta System V først,— for
˚
a kikke p
˚
a jobkøen slenger ein berre p
˚
a opsjonen
-l (for list).
arion# at -l
742658400.a Wed Jul 14 14:00:00 1993
arion#
Dersom ein angrar seg og vil slette jobben,— brukar ein opsjonen -r (for remove)
og jobbnummeret p
˚
a den jobben ein skal slette.
arion# at -l
742660320.a Wed Jul 14 14:32:00 1993
742831320.a Fri Jul 16 14:02:00 1993
arion# at -r 742831320.a
arion# at -l
742660320.a Wed Jul 14 14:32:00 1993
arion#
Sjølvsagt er ein begrensa til
˚
a slette sine eigne jobbar,— berre superbrukaren
kan slette alle jobbane i køen.
Under BSD–UNIX listar ein køen med atq.
zevs# atq
Rank Execution Date Owner Job # Queue Job Name
1st Jul 15, 1993 15:00 trondk 8610 a stdin
zevs#
For
˚
a slette jobben brukar ein kommandoen atrm pluss jobbnummeret.
zevs# atq
Rank Execution Date Owner Job # Queue Job Name
1st Jul 15, 1993 15:00 trondk 8610 a stdin
zevs# atrm 8610
zevs# atq
zevs#
N
˚
ar det gjeld innholdet i skallprogram eller kommandoar s
˚
a kan ein utføre
dei same kommandoane som ein vanlegvis kan utføre under eit interaktivt
skall. Vanlegvis vil ogs
˚
a at eksekvere kommandoane eller skallprogramet ein
gong,— vil ein utføre det fleire gongar kan ein inkludere ein ny at–kommando
til slutt i kommandosekvensen. NB! Ver sikker p˚a at programmet er feilfritt
før du set igang slike jobbar,— dette kan f˚a større konsekvensar ein kunne
tenkje seg p˚a førehand. Treng ein jobbar som skal gjentakast kvar dag, veke
el.likn. er det betre
˚
a bruke cron og crontab,— dette skal vi g
˚
a igjennom seinare
i dette kapitlet.
17.7 Kommandoen batch
Ein anna kommando som er ganske lik at er batch. Denne kommandoen funge-
rer meir som:
17.8. SIKKERHETSVURDERINGAR MED AT OG BATCH 167
zevs# at now
. . .
zevs#
men batch har ein viktig eigenskap som ikkje at har,— jobben vert ikkje sett
igong før belastninga p
˚
a systemet er under eit bestemt niv
˚
a. Kommandoen
batch brukar ei intern algoritme for
˚
a bestemme belastninga p
˚
a systemet og
dermed n
˚
ar ein jobb skal f
˚
a lov til
˚
a kjøre. Dette er nyttig n
˚
ar ein har man-
ge store jobbar som skal kjørast samstundes. Dersom desse jobbane berre vart
eksekvert i bakgrunnen ville alle prøve
˚
a kjøre samstundes og dermed vil ein
blokkere prosessoren (prosessorane). Som resultat vil alle jobbane bli forsinka.
Med batch vil ein unng
˚
a dette sjølv om ein set igong alle jobbane samstun-
des. I praksis ser ein at den samla tida ein jobb tek
˚
a fullføre vert kortare med
batch,— og den samla prosessorbruken vert ogs
˚
a mindre. tillegg ser ein ogs
˚
a
at dei første jobbane vert ferdig mykje fortare. Kommandoen batch tek ingen
opsjonar, sidan alle jobbar vert eksekvert s
˚
a snart som praktisk mulig. Som
at, les ogs
˚
a batch kommandoane p
˚
a standard inn,— og sender standard ut og
standard feilmelding som elektronisk post.
zevs# batch < skall-program
job 2722 at Fri Jul 16 12:46:27 1993
zevs#
P
˚
a same m
˚
ate som at skriv ogs
˚
a batch ut jobbnummret p
˚
a standard feilmelding.
Kommandoen at -r (p
˚
a System V) eller kommandoen atrm (p
˚
a BSD–UNIX) kan
brukast til
˚
a slette ein jobb,— dersom ein klarar
˚
a fange den før den har starta
˚
a eksekvere.
17.8 Sikkerhetsvurderingar med at og batch
B
˚
ade at og batch har sikkerthetsmekanismer som vil nekte brukarar
˚
a eksekvere
jobbar utan autorisasjon. Dersom du prøvar ein del av eksempla som eg har
vist her, vil du kanskje bli nekta
˚
a tilgang:
zevs# at 15:05 < skall-program
at: you are not authorized to use at. Sorry.
zevs#
Brukarene kan enkeltvis bli autorisert eller nekta tilgong til at og batch. Filane
som styrer dette heiter at.allow og at.deny. Ved
˚
a sl
˚
a opp i manualsidene for at
eller batch vil ein finne ut kor dei ligg i katalogstrukteren (dette varierer kraftig
. . . ). Vanlegvis vil ei slik fil sj
˚
a omtrent slik ut:
zevs# cat /usr/spool/cron/at.allow
root
operator
uucp
trondk
.
.
.
zevs#
168 KAPITTEL 17. SATSVIS KJØRING
Det eksisterer ein del enkle reglar for korleis systemet skal tillate dersom beg-
ge filane eksisterer eller berre ei av dei. Dersom at.allow eksisterer skal kun
brukarar som eksiterer i den ha lov til
˚
a bruke at og batch. Dersom at.allow ikkje
eksisterer vert at.deny sjekka om denne brukaren eksplisitt ikkje har lov
˚
a utføre
at eller batch. Enkelt sagt: dersom at.allow ikkje eksisterer s
˚
a kan alle brukarar
som ikkje er lista i at.deny eksekvere desse kommandoane. Dersom ingen av
filane eksisterer er det berre root som kan kjøre at og batch.
17.9 Klokkefunksjonen i UNIX, cron
Kommandoane at og batch brukar mulighetane av meir fundamentale mekanis-
mer som alltid kjører i eit UNIX–system. Denne funksjonen vert kalla cron,—
den kikka vi p
˚
a med kommandoen: ps -ax eller ps -ef . Faktisk er cron ein av
dei programma som vert starta opp tidleg i oppstartsekvensen for alle UNIX-
system. cron–prosessen m˚a vere konstant til stades i eit system som kjører. Ein
gong i minuttet vaknar cron opp, sjekkar kontrollfila om det er jobbar som skal
eksekverast p
˚
a dette tidspunktet og eksekverer dei. Dersom det er ingenting
som skal gjerast vil cron sove til neste minutt er passert. Programmet cron er ei-
gentleg ikkje eit brukerprogram og skal ikkje ekskverast direkte,— sjølv ikkje
av superbruker. Dersom det kjører to kopiar av cron vil maskina oppføre seg
rart og dersom cron ikkje kjører skal ein restarte maskina. Dersom cron ikkje
kjører etter ein restart,— er dette symptom p
˚
a at eit eller anna er alvorleg feil
med installasjonen. NB! Det finst versjonar av UNIX som kallar dette pro-
grammet for anna enn cron,— slik at ein vil ikkje finne ein prosess med
namnet cron i prosesslista. Sjekk dette p˚a førehand. Iallefall, funksjonen som
cron utfører er grunnleggande for at UNIX-system skal fungere, og den vil all-
tid vere tilgjengeleg under eit eller anna namn med mindre at installasjonen er
øydelagt.
17.9.1 Lage cron–jobbar
Det er to m
˚
atar ein kan legge ein kan legge inn s
˚
akalla cron–jobbar. Enten ved
˚
a
legge dei i ei fil og utføre kommandoen crontab med filnamnet som parameter
eller skrive direkte i crontab–fila.
Skal ein gjere det første kan ein berre legge kommandoane og alle direktiva til
cron i ei fil,— her er det no ein fordel
˚
a lese manualsida for cron før ein startar
opp. N
˚
ar fila er ferdig,— alt er klappet og klart utfører ein kommandoen:
zevs# crontab filnamn
zevs#
Ver oppmerksom p
˚
a at den tidlegare crontab–fila berre blir overskreven,— der-
for er det kanskje betre
˚
a bruke neste metode. Denne g
˚
ar ut p
˚
a at systemet ko-
pierer crontab–fila di til ei temporær fil,— du skriv i den temporære fila og
n
˚
ar du avsluttar vert den temporære fila lagt tilbake som ny crontab–fil for din
konto.
zevs# crontab -e
<< du editerer, lagrar og avsluttar >> zevs#
17.9. KLOKKEFUNKSJONEN I UNIX, CRON 169
Etterp
˚
a kan du ta kommandoen crontab -l for
˚
a liste crontab–fila og sj
˚
a om alt
stemmer. Som standard crontab starte opp vi som editor n
˚
ar ein skal editere p
˚
a
crontab–fila,— dette kan ein overstyre ved
˚
a sette miljøvariabelane (enten ein
eller begge, det skadar ikkje om begge er sett) VISUAL og EDITOR.
Kapittel 18
Nettverkskommunikasjon
Det som kjennetegner UNIX mest er innholdet av kommunikasjonsprogram-
vare. Nettverk og UNIX er s
˚
a
˚
a seie synonymt. P
˚
a starten p
˚
a 80–talet vart TCP/
IP utvikla for og p
˚
a UNIX.
Støtte for ethernet vart opprinneleg utvikla ved Berkley p
˚
a BSD–versjonar av
UNIX,— og dette har vorte industristandarden for samanknytning av data-
maskiner med forskjellige operativsystem. Det verdensomspennnande Internet
best
˚
ar nettopp av slike sm
˚
a LAN over heile verden som er knytta saman til eit
stort WAN (Wide Area Network). UNIX kommuniserer p
˚
a ethernet ved hjelp av
kommunikasjonsprotokollane definert i TCP/IP.
Det alternative nettverket, StarLan, er utvikla av AT & T med eigen maskin-
vare og kommunikasjonsprotokollar. Dette nettverket er lite utbreidd i Norge
og Europa,— derfor vil eg la det emnet ligge. Ethernet gir forholdsvis høge
hastigheter, fr
˚
a 1 Mb til mange hundre Mb i sekundet. Dermed kan ein bruke
programvare som gje rask respons og god ytelse, eksempel p
˚
a dette er mulig-
heten for
˚
a montere filsystem fr
˚
a andre maskiner og la dei opptre som om dei
var p
˚
a lokal disk. Montering av filsystem er veldig nyttig fordi dette medfører
færre kopiar av dei same filane,— dette medfører igjen enklare vedlikehold.
Dersom ein brukar dette skikkeleg sparer dette enormt med diskplass. Kunne
du forresten tenkje deg
˚
a ha ein heimekatalog for kvar maskin i nettverket,—
eg tippar forvirringa hadde vorte total!.
I tillegg har dette ogs
˚
a ført til utviklinga av disklause maskiner,— der alle fil-
systemer lokalisert sentralt p
˚
a ein server.
Dei to programvarepakkane som tillett montering av filsystem over nettverk
er NFS og RFS. Fr
˚
a eit brukerprespektiv ser begge ut til
˚
a vere ganske like og
ha lik funksjonalitet.
18.1 Aksess til andre maskiner
Det finst ei heil rekkje med program som enkelt og lettvint gje ein aksess til
andre maskiner i lokalnettet,— i Internet og for den del. Det kan enten vere
170
18.1. AKSESS TIL ANDRE MASKINER 171
fjerninnlogging, filoverføring eller eksekvering av kommandoar p
˚
a andre ma-
skiner. For
˚
a bruke desse kommandoane m
˚
a ein sjølvsagt ha ein lovleg bruker-
identitet p
˚
a den andre maskina som ein vil bruke.
18.1.1 Kommandoen rlogin
Kommandoen rlogin (for remote login) startar ein normal innloggingsprosedyre
p
˚
a ei anna maskin. Programmet tek namnet p
˚
a den andre maskina som para-
meter.
zevs# rlogin poseidon
passwd: << taster inn passor d >>
.
.
.
poseidon#
Dermed kan ein utføre kommandoar som ved “vanleg” innlogging,— n
˚
ar ein
ferdig og vil logge trykker ein Ctrl-d eller skriv exit.
Som standard vil rlogin lage eit miljø som er identisk med det ein vil f
˚
a dersom
ein loggar direkte p
˚
a same maskin. Kommandoen har ogs
˚
a ein spesiell eigen-
skap som ein bør merke seg,— den antek at innloggingsidentiteten er den same
p
˚
a begge maskinene. La oss sei at din identitet er “hanne” p
˚
a den maskina du
er innlogga,— s
˚
a skal du logge deg inn p
˚
a maskina “fiero”. Du tar kommando-
en rlogin fiero,— rlogin antek at du ogs
˚
a skal loggast inn som “hanne” p
˚
a “fie-
ro” og sender dette bruker-namnet,— deretter spør den berre etter ditt passord.
Dersom identitetane er er forskjellig vil sjølvsagt innlogginga feile:
zevs# rlogin arion
Password: << shhhh : don
0
t tell anyone >>
Login incorrect
login:
No kan ein enten skrive skrive den riktige identiteten eller avslutte med Ctrl-d.
Alternativt kan ein oppgje ein anna identitet som rlogin skal bruke med opsjo-
nen -l brukernamn.
zevs# rlogin arion -l troka
Password: << taste taste . . . >>
.
.
.
arion#
Dersom du brukar eit skall med jobbkontroll kan ein suspendere sessjonen p
˚
a
den andre maskina ved
˚
a trykke ˜ (tilde) og deretter Ctrl-z. Dette stoppar rlogin
sesjonen heilt til ein startar den igjen med jobbkontroll.
uranus# ˜ <Ctrl-z>
Stopped
asterix# ls
.
.
.
asterix# fg
rlogin uranus
172 KAPITTEL 18. NETTVERKSKOMMUNIKASJON
uranus#
Dersom ein tastar Ctrl-z utan tilde-tegnet vil rlogin sende Ctrl-z–tegnet til den
andre maskina,— og der vil skallet prøve
˚
a suspendere ein jobben der.
18.1.2 Kommandoen rcp
Ein av dei mest anvendlege kommandoane (spør du meg) er rcp (for Remote
CoPy) som kopierer filar mellom maskiner. Den oppfører seg p
˚
a same m
˚
ate
som cp, bortsett fr
˚
a at argumenta er p
˚
a denne formen:
maskin-namn:sti
Dersom spesifikasjonen av stinamn ikkje innheld maskin-navn: vil rcp oppfatte
det som ein referanse til lokale filsystem. Stinamn kan utelatast dersom ein skal
bruke same sti som for kjeldefila. Eks:
zevs# rcp /tmp/toill.doc uranus:
zevs#
Dersom ein oppgje opsjonen -p, vil rcp prøve
˚
a bevare aksessrettighetane og
tidsstemplinga p
˚
a fila etter kopieringa. Brukar ein opsjonen -r (for rekursiv) vil
rcp kopiere alle katalogar under stinamnet. I dette tilfellet m
˚
a m
˚
alet vere ein
katalog. Med rcp kan ein kopiere filar mellom lokal og fjern maskin, mellom to
fjerne maskiner og mellom fjern og lokal maskin. Kravet for at dette skal vere
mulig er at ein kan logge inn p
˚
a alle maskinene og at ein brukar maskin-navn:
som del av stinamnet der det trengst.
18.1.3 Kommandoen rsh
Det denne kommandoen gjer er at den kontaktar ei anna maskin og eksekve-
rer ein kommandoen som er spesifisert p
˚
a kommandolinja. Kommandoen ko-
pierer sin standard inn til kommandoen p
˚
a den andre maskina, og kopierer
standard ut og standard feilmelding fr
˚
a den andre maskina tilbake til standard
ut og standard feilmelding til den lokale maskina. Kommandoen tek maskin-
namn som første argument, deretter kommandolinja sm skal eksekverast p
˚
a
den andre maskina.
zevs# rsh uranus who
.
.
.
zevs#
Ein kan bruke redirigering og røyrlegging for
˚
a blande lokale og fjerne kom-
mandoar.
zevs# cat /text/unixkurs/r-kom.tex | uranus wc -l > r-kom.str
zevs#
P
˚
a denne m
˚
aten kan ein legge lange og tunge jobbar over p
˚
a den maskina som
har minst belastning til ei kvar tid.
zevs# rsh uranus
Password: << klikk klikk . . . >>
18.1. AKSESS TIL ANDRE MASKINER 173
.
.
.
uranus#
Dersom ein ikkje spesifiserer ein kommando vil rsh fungere som rlogin,— og
starte eit skall p
˚
a den andre maskina. Dersom ein siterer alle redirigeringsope-
ratorer p
˚
a kommandolinja,— vil dei bli intrepretert p
˚
a den andre maskina.
zevs# cat /text/unixkurs/r-kom.tex | uranus wc -l
r-kom.str
zevs#
Dette vil opprette fila r-kom.strp
˚
a maskina “uranus” (i v
˚
ar samanheng har det-
te lite
˚
a seie fordi vi har berre ein heimekatalog i nettet, dvs. at vi arbeider alltid
p
˚
a det same filsystemet uansett maskin). No har eg lyst til
˚
a vise kva vi som er
systemadministratorar set pris p
˚
a ved UNIX,— dette eksemplet viser kor en-
kelt det er
˚
a dumpe ei maskin sin disk over til tapestasjonen p
˚
a lokal maskin
(det er satt inn ein backslash (\) for
˚
a bryte linja).
zevs# rsh arion find . -depth -local -print |”cpio -ocv -C102400 | \
dd bs=100k of=/dev/nrst1
.
.
.
zevs#
Skal ein kopiere tilbake filane
zevs# dd bs=100k if=/dev/nrst1 | rsh arion cpio -icv -C102400
.
.
.
zevs#
Kravet for
˚
a kunne bruke rsh er sjølvsagt at ein har ein lovleg brukerkonto
p
˚
a den andre maskina og har tilstrekkelege rettighetar til
˚
a kunne eksekvere
kommandoane.
OBS!
Ver oppmerksom p
˚
a at denne kommandoen heiter remsh eller nsh p
˚
a ein del
system!. Den m
˚
a heller ikkje forvekslast med det s
˚
akalla restricted shell,— sjølv
om begge heiter det same. Det begrensa skallet rsh har vanlegvis stien /usr/lib/rsh
eller /sbin/rsh, medan fjern skallet rsh har stien /usr/bin/rsh eller /usr/ucb/rsh.
Kommandoen rsh har ogs
˚
a ein anna snedig vri,— dersom ein gjev programmet
eit maskinnamn vil rsh kontakte og eksekvere alle kommandoane p
˚
a maskina
med det namnet.
zevs# ln rsh toill-maskin
zevs# bfemtoill-maskin uranus
toill-maskin: unknown host
zevs# rm toill-maskin
zevs#
Det er dermed ikkje lurt
˚
a gje denne kommandoen eit nytt namn,— det enklas-
te er
˚
a lage in alias som kallar opp rsh med fullt stinamn og kanskje namnet p
˚
a
den maskina som ein brukar mest p
˚
a denne m
˚
aten.
174 KAPITTEL 18. NETTVERKSKOMMUNIKASJON
18.1.4 Kommandoen telnet
Denne kommandoen er veldig lik rlogin i funksjon,— men den kan brukast i
tilfeller der rlogin ikkje fungerer. F.eks kan rlogin berre brukast mellom maski-
ner som kjøyrer UNIX,— medan telnet kan kommunisere over nettet til andre
operativsystemer. I tillegg brukar telnet ein annan kommunikasjonsm
˚
ate enn
rlogin,— derfor kan ein bruke telnet dersom rlogin ikkje fungerer av ein aller
annan grunn.
Kommandoen tek eit maskinnamn eller internetadresse som parameter,— og
kontaktar login p
˚
a den maskina:
uranus# telnet zevs
Trying 129.241.164.12 . . .
Connected to zevs.ifi.unit.no.
Escape character is ’ˆ]’.
SunOS UNIX (zevs)
login:
Dermed kan en logge seg inn (det er jo dette ein gjer n
˚
ar ein brukar NCSA telnet
og liknande program fr
˚
a PC eller Mac). Legg merke til at telnet ikkje overfører
miljøet ditt til den andre maskina. Derfor m
˚
a ein sette opp miljøet slik ein vil ha
det ved hjelp av oppstartfilane for skall o.l. p
˚
a den maskina som ein kontaktar.
I tilleg kan telnet emulere dei mest brukte terminaltypane som VT100, og ansi
(det finst implementasjonar som skal klare
˚
a emulere det meste). P
˚
a UNIX vil
dette vere avhengig av verdien av miljø-variabelen TERM.
Kommadoen telnet har ein s
˚
akalla kommando modus som tilbyr ein del opsjonar.
Ved
˚
a trykke den s
˚
akalla esacpe character kan ein veksle mellom terminal mo-
dus og kommando modus, det s
˚
akalla escape character er vanlegvis ˆ] (Ctrl-høgre
hakeparentes).
uranus# telnet zevs
Trying 129.241.164.12 . . .
Connected to zevs.ifi.unit.no.
.
.
.
zevs# <ˆ]>
telnet> help
Commands may be abbreviated. Commands are:
close close current connection
display display operating parameters
mode try to enter line-by-line or character-at-a-time mode
open connect to a site
quit exit telnet
send transmit special characters (’send ?’ for more)
set set operating parameters (’set ?’ for more)
status print status information
18.2. INFORMASJONSKOMMANDOAR 175
toggle toggle operating parameters (’toggle ?’ for more)
z suspend telnet
? print help information
telnet> status
Connected to uranus.ifi.unit.no.
Operating in character-at-a-time mode.
Escape character is ’ˆ]’.
<retur>
zevs# logout
Connection closed by foreign host.
uranus#
Som vi ser har telnet ein del opsjonar som ein kan sette, som vi ogs
˚
a s
˚
ag hadde
telnet ein hjelpefunksjon som kan vere nyttig. Denne hjelpesida f
˚
a ein fram ved
enten
˚
a skrive help eller ?. Brukar ein kommandoen close i kommando modus
vil ein avslutte sesjonen med den andre maskina men framleis oppholde seg
i kommando modus i telnet. Brukar ein kommandoen quit vil b
˚
ade programmet
og kontakten med den andre maskina bli avslutta. I dokumentasjon for telnet
vert det anbefalt
˚
a logge ut før ein avsluttar med quit. For
˚
a avslutte kommando
modus trykker ein berre <retur> p
˚
a ei tom linje (i praksis m
˚
a ein ofte trykkje
<retur> 2 gongar).
18.2 Informasjonskommandoar
Det finst ein del kommandoar som kan gje informasjon om nettverket og om
brukarane. Dei kan f.eks fortelje deg om kor dei er logga p
˚
a og om belastninga
p
˚
a maskinene.
18.2.1 rusers
Kommandoen rusers (for Remote USERS) listar alle brukarar som er innlogga
for alle maskiner i det lokale nettverket. For
˚
a spørje ei spesifikk maskin, m
˚
a
ein oppgje maskinnamnet som parameter.
zevs# rusers
zevs.ifi.uni solberg trondk solberg
poseidon.ifi solberg trondk
hera.ifi.uni ericm ericm
uranus.ifi.u gunnar eyvindh trondk trondk
zevs#
For
˚
a f
˚
a ei lenger liste som inkluderer og n
˚
a dei logga,— kan ein bruke opsjonen
-l (for long).
zevs# rusers -l uranus
gunnar uranus.ifi.u:ttyp0 Dec 21 10:36 3:01 (abel.matstat.uni)
eyvindh uranus.ifi.u:ttyp2 Dec 20 10:53 1:38 (epsilon.ifi.unit)
trondk uranus.ifi.u:ttyp3 Dec 20 14:26 3:08 (asterix.ifi.unit)
trondk uranus.ifi.u:ttyp5 Dec 20 13:57 (asterix.ifi.unit)
zevs#
176 KAPITTEL 18. NETTVERKSKOMMUNIKASJON
Ein liknande kommando er rwho,— men denne vil ikkje verke utan at eit pro-
gram rwhod er starta p
˚
a akkurat den maskina. Vanlegvis vil ein ikkje starte
rwhod fordi den er veldig ressurskrevande. Derfor er rusers
˚
a foretrekke.
18.2.2 Kommandoen finger
Ein veldig mykje brukt nett-kommando er finger. Denne kommandoen rappor-
terer informasjon om kvar bruker, brukaren er innlogga vil det rapportere p
˚
a
kva post og n
˚
ar han/ho logga inn. Som standard vil finger berre skrive ut denne
informasjonen p
˚
a den lokale maskina.
uranus# finger
Login Name TTY Idle When Where
areh Are Hafstad a Tue 13:43
gunnar Gunnar Taraldsen p0 3:53 Tue 10:36 abel.matstat.uni
trondk Trond Kandal p3 4:00 Mon 14:26 asterix.ifi.unit
trondk Trond Kandal p5 Mon 13:57 asterix.ifi.unit
uranus#
Kolonna for Idle angje tida for siste gong brukaren utførte ein kommando. Der-
som brukaren logga inn fr
˚
a ei anna maskin med rlogin, s
˚
a blir dette oppgitt i
kolonnen Where. Dersom ein innloggingsidentitet vert oppgitt som argument
til finger, vil ein f
˚
a fleire opplysningar.
uranus# finger trondk
Login name: trondk In real life: Trond Kandal
Directory: /home/zevs/ifi/trondk Shell: /usr/local/bin/bash
On since Dec 22 10:58:34 on ttyp0 from asterix.ifi.unit
Mail last read Wed Dec 22 13:59:59 1993
No Plan.
uranus#
Det er ein del som kanskje kan forklarast litt nærare. Det som vert kalla Plan i
denne kommandoen er innholde av fila $HOME/.plan,— dersom den eksiste-
rar. Innholdet av ei anna fil som heiter $HOME/.project vil ogs
˚
a bli vist. For
˚
a
liste ut informasjon om brukarar p
˚
a andre maskiner kan ein bruke syntaksen
@maskin, brukar@maskin,@domene eller brukar@domene.
uranus# finger @runit.sintef.no
[runit.sintef.no]
User Real Name What Idle TTY Host Console Location
al Arne Langmo 0:42 *pa trost (falk.runit.sinte)
al Arne Langmo 1:01 p9 runix (falk.runit.sinte)
dispen Arve Dispen 2 week *co runix Machine room
ean EAN administrator 2 days *p7 hubro (129.241.100.13:0)
fms Feilmeldingssenter 0:11 *co trost Network op. center
fms Feilmeldingssenter 0:29 p1 runix (x-fms.runit.sint)
he Havard Eidnes 4 days p4 runix (129.241.100.18:0)
he Havard Eidnes 4 days p9 ugle (129.241.100.18:0)
he Havard Eidnes 4 days *p0 trost (129.241.100.18:0)
ilw Inge Lise Wilmann 1:38 *q2 runix (ravn)
klv Knut Lambrigt Vik 0:22 p6 ugle (x-klv.runit.sint)
18.2. INFORMASJONSKOMMANDOAR 177
mf Martin Finne 3:17 *p6 runix (trost)
mf Martin Finne 1:35 *q1 trost (svale.runit.sint)
news NetNews Administra 6 days p5 ugle (129.241.100.18:0)
pp PP installation us 0:04 pe runix (129.241.100.13:0)
rolfh Rolf Petter Halle 2:15 p1 ugle (129.241.100.73:0)
rolfh Rolf Petter Halle clear 2:19 *p0 sisik (paradoks.sintef.)
trond Trond Skjesol 3:21 p7 ugle (129.241.100.13:0)
trond Trond Skjesol *co hubro unknown
trond Trond Skjesol 1 day, pf runix (129.241.100.13:0)
uranus#
N
˚
ar det gjeld opsjonat til denne kommandoen vil eg berre vise til manual-
sidene. Som s
˚
a mange andre “nett-kommandoar krever finger at det m
˚
a g
˚
a eit
spesielt program i bakgrunne,— kommandoen vil feile dersom dette program-
met ikkje vert kjørt.
18.2.3 Kommandoen ping
Denne kommandoen vert mest brukt til
˚
a verifisere om ei maskin er “oppe” og
kjøyrer p
˚
a nettet. Dersom maskina er igang og lyttar p
˚
a nettet vil den svare og
sende ein beskjed tilbake.
zevs# ping hera
hera.ifi.unit.no is alive
zevs#
Dersom ein vil kikke p
˚
a trafikken kan ein gje opsjonen -s (for statistics), dette
vil skrive ut effektiviteten i overføringane.
zevs ping -s hera
PING hera.ifi.unit.no: 56 data bytes
64 bytes from hera.ifi.unit.no (129.241.164.41): icmp seq=0. time=2. ms
64 bytes from hera.ifi.unit.no (129.241.164.41): icmp seq=1. time=1. ms
64 bytes from hera.ifi.unit.no (129.241.164.41): icmp seq=2. time=1. ms
64 bytes from hera.ifi.unit.no (129.241.164.41): icmp seq=3. time=1. ms
64 bytes from hera.ifi.unit.no (129.241.164.41): icmp seq=4. time=1. ms
64 bytes from hera.ifi.unit.no (129.241.164.41): icmp seq=5. time=1. ms
64 bytes from hera.ifi.unit.no (129.241.164.41): icmp seq=6. time=1. ms
64 bytes from hera.ifi.unit.no (129.241.164.41): icmp seq=7. time=1. ms
64 bytes from hera.ifi.unit.no (129.241.164.41): icmp seq=8. time=1. ms
64 bytes from hera.ifi.unit.no (129.241.164.41): icmp seq=9. time=1. ms
64 bytes from hera.ifi.unit.no (129.241.164.41): icmp seq=10. time=1. ms
<Ctrl-c>
—-hera.ifi.unit.no PING Statistics—-
11 packets transmitted, 11 packets received, 0% packet loss
round-trip (ms) min/avg/max = 1/1/2
zevs#
Med opsjonen -s vil ping fortsette
˚
a sende til ein trykkjer DEL eller Ctrl-c (som
eg gjorde), etter dette vil programmet skrive ut statistikken og avslutte. Dette
kan gje deg ein peikepinn om nettverket verkar som det skal.
Kapittel 19
Secure Shell
Secure Shell har erstatta kommandoane rsh, rlogin, telnet og rcp. Dette er i første
rekkje fordi dei gamle programma ikkje kunne sende trafikken sikkert over
nett. Alle som kjende til maskinnamn eller ip–adresse og hadde tilgang same
nett som ei av maskinene sto p
˚
a kunne avlytte trafikken og snappe opp b
˚
ade
brukernamn og passord.
Første versjon av Secure Shell vart laga p
˚
a Helsinki Tekniske Universitet og
hadde ein del feil og manglar,— ogs
˚
a sikkerhetsproblem. Seinare vart Secure
Shell skreven om,— og protokollen som Secure Shell brukte vart erstatta av ein
sikrare versjon (eller kanskje ein skulle seie: ein sikker versjon).
Versjonane av protokollane vert omtala som SSH 1 protocol med variantane:
protocol 1.3 og protocol 1.5. SSH 1 protocol innheld ein algoritme for dataintegri-
tet som er mulig
˚
a knekke,— sjølv om dette har vist
˚
a vere vanskeleg i praksis.
Den nyaste protokollen er SSH 2 protocol.
Fordi Secure Shell kom fr
˚
a eit universitet var den i den første tida gratis og kun-
ne lastast ned fr
˚
a Helsinki Tekniske Universitet. I god UNIX–
˚
and vart Secure
Shell distribuert som kjeldekode som ein m
˚
atte kompilere og installere p
˚
a eiga
hand.
P
˚
a eit seinare tidspunkt gjekk ei gruppe ut av Helsinki Tekniske Universitet og
danna selskapet Datafellows fordi dei s
˚
ag kommersielle mulighetar med Secu-
re Shell. Selskapet laga ogs
˚
a ein klientversjon for MS–Windows.
P
˚
a grunn av sikkerhetsproblema med dei første versjonane av Secure Shell og
lisensbetingelsane til Datafellows vart prosjektet OpenSSH [6] starta opp. M
˚
alet
var
˚
a lage ein meir portabel, gratis og sikrare versjon av Secure Shell.
I 2000 var OpenSSH versjon 2.0 klar som b
˚
ade hadde støtte for SSH 1 protocol
og den nye og sikre SSH 2 protocol. Seinare kom ogs
˚
a sftp som implementerer
ein sikker ftp–forbindelse.
I september 2004 kjørte 88% av alle maskiner p
˚
a Internet OpenSSH [7].
Sidan 2000 har s
˚
a godt som alle UNIX–baserte eller UNIX–liknande operativ-
system ein versjon av OpenSSH. Kommersielle leverandørar inkluderer OpenS-
178
19.1. INTRODUKSJON TIL SSH 179
SH som ein del av standardinstallasjonen.
I den seinare tid har det ogs
˚
a kome nettverkselektronikk som switch–ar og
router–ar med OpenSSH.
19.1 Introduksjon til ssh
For
˚
a hindre s
˚
akalla IP–spoofing (alts
˚
a at maskiner gir seg ut for
˚
a vere ei anna
maskin enn den faktisk er),— brukar ssh nøklar i tillegg til ip–adresser. Nøklane
er basert p
˚
a s
˚
akalla PKI[23] (Public Key Infrastructure),— der ein har ein offent-
leg og ein hemmeleg nøkkel. B
˚
ade kvar enkelt brukar og vertsmaskiner m˚a ha
slike nøklar.
19.1.1 Lage nøklar for ssh
I denne omgangen vil eg ikkje ta for meg korleis ein lagar nøklar for vertsma-
skiner. Dette vil eg kome tilbake til i administrasjonsdelen av kurset.
Det første ein bruker skal gjere er
˚
a lage katalogen .ssh p
˚
a heimekatalogen,—
deretter kjøre programmet ssh-keygen. Dersom ein vil ha støtte for
˚
a kjøre b
˚
ade
SSH 1 og SSH 2 protocol m
˚
a ein lage nøklar som skal leggast i filane ˜/.ssh/
identity, ˜/.ssh/id rsa og ˜/.ssh/id dsa. SSH 1 protocol vil kun bruke RSA–nøklane[25]
i ˜/.ssh/identity og ˜/.ssh/id rsa. SSH 2 protocol kan bruke b
˚
ade RSA– og DSA–
nøklar[16],— og vil derfor bruke alle tre filane. I desse filane vil den hemmeleg
nøkkelen bli lagt og skal berre ha lesetilgang for brukaren,— i tillegg vil ssh-
keygen lage filane ˜/.ssh/identity.pub, ˜/.ssh/id rsa.pub og ˜/.ssh/id dsa.pub. Desse
sistnemnde filane vil inneholde den tilsvarande offentlege nøkkelen og kan ha
lesetilgang for alle.
M
˚
aten ein lagar nøklane p
˚
a er følgande:
breim# ssh-keygen -b 2048 -t rsa1 -f ˜/.ssh/identity
Generating public/private rsa1 key pair.
Enter passphrase (empty for no passphrase):< oppgje passphrase >
Enter same passphrase again: < oppgje passphrase igjen >
Your identification has been saved in /home/kandal/.ssh/identity.
Your public key has been saved in /home/kandal/.ssh/identity.pub.
The key fingerprint is:
f4:63:06:16:ff:c5:6e:c4:3c:3b:46:18:34:09:f5:cb
breim#
breim# ssh-keygen -b 2048 -t rsa -f ˜/.ssh/id rsa
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase): < oppgje passphrase >
Enter same passphrase again: < oppgje passphrase igjen >
Your identification has been saved in /home/kandal/.ssh/id rsa.
Your public key has been saved in /home/kandal/.ssh/id rsa.pub.
The key fingerprint is:
f2:04:6f:14:69:2d:87:cc:63:a8:ac:be:5c:0a:54:18
breim#
180 KAPITTEL 19. SECURE SHELL
For RSA–nøklar kan ein oppgje kor mange bit det skal vere i nøkkelen. Mini-
mum er 768 bit, men det ikkje anbefalt
˚
a bruke mindre enn 2048.
DSA–nøklar er alltid eksakt 1024 bit,— derfor treng ein ikkje
˚
a oppgje antall
bit.
breim# ssh-keygen -t dsa -f ˜/.ssh/id dsa
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): < oppgje passphrase >
Enter same passphrase again: < oppgje passphrase igjen >
Your identification has been saved in /home/kandal/.ssh/id dsa.
Your public key has been saved in /home/kandal/.ssh/id dsa.pub
The key fingerprint is:
25:06:b7:f4:b8:3f:3c:fc:39:cc:43:9b:1f:46:99:ae
breim#
Legg merke til at ssh-keygen brukar ordet passphrase og ikkje password. passph-
rase betyr at ein kan bruke ei langt uttrykk som inneheld fleire ord, orddelings-
teikn, nummer, mellomrom eller kva som helst slags uttrykk av teikn. Gode
uttrykk skal vere mellom 10 30 teikn og utrykket skal ikkje vere ein setning
som er lett
˚
a gjette,— og vere ei blanding av sm
˚
a og store bokstavar, nummer
og ikkje–alfanummeriske teikn.
Etter at ein har laga nøkkelfilane skal ein kopiere filane med dei offentlege
nøklane til dei vertsmaskinene ein vil logge inn p
˚
a. P
˚
a vertsmaskinene skal
desse filane ogs
˚
a ligge under katalogen ˜/.ssh.
Dersom ein vil skifte passphrase seinare kan ein gjere dette p
˚
a følgande m
˚
ate:
breim# ssh-keygen -p -f ˜/.ssh/identity
Enter old passphrase: < oppgje gamal passphrase >
Key has comment ’kandal@breim’
Enter new passphrase (empty for no passphrase): < oppgje ny passphrase >
Enter same passphrase again: < oppgje ny passphrase >
Your identification has been saved with the new passphrase.
breim#
Det er ikkje mulig p
˚
a nokon m
˚
ate
˚
a finne igjen eller f
˚
a tilbake passphrase der-
som ein p
˚
a ein eller annan m
˚
ate mister den. Dersom ein mister eller gløymer
passphrase,— m
˚
a ein lage nye nøklar og kopiere filane med den offentelege
nøklane til andre maskiner.
19.2 ssh
ssh er det programmet som er mest brukt,— og ein kan seie at dette er ein
erstatning for rsh og rlogin (mange vil ogs
˚
a argumentere for at ssh er ein er-
statning for telnet). N
˚
ar de gjeld kommandoar og opsjonar liknar ssh meir p
˚
a
rsh/rlogin enn telnet.
Dokumentasjonen seier at ssh (SSH klient) er eit program for
˚
a logge inn p
˚
a ei
anna maskin og for
˚
a eksekvere kommandoar der.
Første gang ein skal logge seg inn p
˚
a ei vertsmaskin vil ikkje nøkkelen til denne
19.2. SSH 181
maskina vere kjend. Derfor vil ein f
˚
a ein forespørsel om ein vil godta denne
maskina sin nøkkel.
breim# ssh vinsnes
The authenticity of host ’vinsnes (127.223.10.160)’ can’t be established.
RSA key fingerprint is 8f:03:08:ee:dd:f4:c3:59:f1:8d:95:67:07:2c:9b:1e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ’vinsnes,127.223.10.160’ (RSA) to the list of known hosts.
kandal@vinsnes’s password: < passord >
.
.
.
vinsnes#
N
˚
ar ein har godtatt nøkkelen til vertsmaskina vil ˜/ .ssh/known hosts bli laga
p
˚
a klientmaskina. Denne fila inneheld namnet p
˚
a vertsmaskina, ip–adressa,
nøkkeltype og den offentlege nøkkelen for vertsmaskina,— og vil bli sjekka
kvar gong ein loggar p
˚
a vertsmaskina. Dersom nøkkelen i ˜/.ssh/known
hosts
ikkje stemmer med den som er oppgitt tidlegare vil ein f
˚
a denne feilmeldinga:
breim# ssh vinsnes
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that the RSA host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
8f:03:08:ee:dd:f4:c3:59:f1:8d:95:67:07:2c:9b:1e.
Please contact your system administrator.
Add correct host key in /home/kandal/.ssh/known hosts to get rid of this message.
Offending key in /home/kandal/.ssh/known hosts:1
RSA host key for vinsnes has changed and you have requested strict checking.
Host key verification failed.
breim#
Loggar ein p
˚
a fleire vertsmaskiner og godtek nøklane for desse maskinene vil
dei bli lagt til i ˜/.ssh/known hosts. Fila ˜/.ssh/known hosts skal kun vere lesbar for
eigaren.
Dersom nøkkelen er lagt p
˚
a plass og stemmer med det som er oppgitt tidlegare,—
treng ein
˚
a oppgje passord neste gong ein loggar inn:
breim# ssh vinsnes
kandal@vinsnes’s password: < passord >
.
.
.
vinsnes#
No med det same ein er inne p
˚
a vinsnes kan ein lage katalogen der ein skal
plassere filane med dei offentlege nøklane:
vinsnes# mkdir .ssh
vinsnes# < ctrl d >
breim#
182 KAPITTEL 19. SECURE SHELL
Deretter loggar ein av vinsnes og kopierer over dei offentlege nøklane med scp
(som ogs
˚
a er ein del av Secure Shell,— men det vil eg kome tilbake til seinare).
breim# cd .ssh
breim# scp *.pub vinsnes:.ssh/.
kandal@vinsnes’s password: < passord >
id dsa.pub 100% 602 0.6KB/s 00:00
id rsa.pub 100% 222 0.2KB/s 00:00
identity.pub 100% 222 0.2KB/s 00:00
breim# cd
breim#
Etter at ein har gjort dette bør ein logge inn p
˚
a vertsmaskina p
˚
a nytt og sette
opp ei fil som heiter ˜/.ssh/authorized keys. Denne fila fortel ssh kva for nøklar
som skal brukast for
˚
a logge inn.
breim# ssh vinsnes
kandal@vinsnes’s password: < passord >
.
.
.
vinsnes# cd .ssh
vinsnes# cat id dsa.pub id rsa.pub identity.pub > authorized keys
vinsnes# < ctrl d >
N
˚
ar ein no skal logge seg inn p
˚
a vertsmaskina vil ssh bruke nøklane i ˜/.ssh/
authorized keys p
˚
a vertsmaskina, men
˚
a g
˚
a igjennom algoritma for korleis
dette blir gjort er kanskje litt for innfløkt akkurat no. Iallefall treng ssh tilgang
til din private nøkkel for
˚
a kunne logge inn p
˚
a vertsmaskina,— og derfor m
˚
a
ein l
˚
ase opp denne n
˚
ar ein skal logge inn:
breim# ssh vinsnes
Enter passphrase for key ’/home/kandal/.ssh/identity’: < passphrase >
.
.
.
vinsnes#
Dette syns du kanskje var like tungvindt som
˚
a m
˚
atte oppgje passord,— men
det finst ei løysing for dette ogs
˚
a. Det er
˚
a bruke ssh–agent,— og den vil eg
kome tilbake til seinare.
19.2.1 Opsjonar for ssh
N
˚
ar ein vil logge inn p
˚
a ei vertsmaskin tek ssh det for gitt at brukernamnet er
det same p
˚
a vertsmaskina som p
˚
a klienten. Dersom brukernamnet er forskjel-
lig kan ein oppgje det p
˚
a følgande m
˚
ate:
breim# ssh < bruker >@vinsnes
eller p
˚
a same m
˚
ate som for rsh/rlogin:
breim# ssh -l < bruker > vinsnes
P
˚
a same m
˚
ate som for rsh kan ein oppgje ein kommando som skal utførast p
˚
a
vertsmaskina og deretter returnere tilbake til klienten.
breim# ssh vinsnes hostname
19.2. SSH 183
Enter passphrase for key ’/home/kandal/.ssh/identity’:< passphrase >
vinsnes
breim#
19.2.2 Port–forwarding med ssh
Den kanskje nyttigaste mekanismen i ssh er port–forwarding.
Det er kanskje p
˚
a tide
˚
a forklare litt om TCP/IP og bruk av portar. Alle tenarpro-
gram som skal kontaktast over nett m
˚
a lytte p
˚
a ein port. Portar blir identifisert
med eit nummer. Derfor er det laga ein standard[1] som definerer samanhen-
gen mellom portnummer og tenarprogram. Standarden blir vedlikeholdt av
IANA[2] (Internet Assigned Numbers Authority). Ein heil eller delvis oversikt
kan ein ogs
˚
a finne i fila /etc/services. Dersom man kikkar i /etc/services, vil ein sj
˚
a
at ssh skal lytte p
˚
a port 22, telnet p
˚
a port 23, http p
˚
a port 80, osv. . .
Med ssh kan man sette opp ein lokal port og f
˚
a all trafikken som kjem inn
igjennom denne porten vidaresendt til ein bestemt port p
˚
a ei 3. maskin (eller
til ein bestemt port p
˚
a vertsmaskina). Kva er s
˚
a poenget med
˚
a la trafikken
g
˚
a igjennom ssh? Ved
˚
a dirigere trafikken igjennom ssh f
˚
ar man ein kryptert
forbindelse som ikkje er mulig
˚
a avlytte.
Den første formen er:
breim# ssh -L port:maskin:maskinport vertsmaskin
Dette kan ein f.eks gjere med:
breim# ssh -L 5900:localhost:23 vinsnes
.
.
.
vinsnes#
Det som skjer er at all trafikken som kjem inn p
˚
a port 5900 p
˚
a klientmaskina bli
vidaresendt til vinsnes. N
˚
ar vinsnes tek imot denne trafikken vil vinsnes sende
den vidare til localhost (alts
˚
a seg sjølv) og til port 23 (port 23 er telnetd). Det
er kanskje litt sært at eit program som let ein logge inn p
˚
a ei anna maskin
vidaresender trafikken til telnet,— men dette er berre eit eksempel.
telnetd
ssh
sshd
telnet localhost 5900
klient
ssh −L 5900:localhost:23 vertsmaskin
Port 5900
vertsmaskin
Kryptert tunnel
Figur 19.1: Portforwarding med SSH
184 KAPITTEL 19. SECURE SHELL
Eit anna scenario kan vere at ein jobbar heime og har berre tilgang til news–
server fr
˚
a nettet p
˚
a jobb (i dette tilfellet er news–serveren news.jobb.no ). News–
serverar tek imot inng
˚
aande trafikk p
˚
a port 119 (NNTP
1
).
heime# ssh -L 5900:news.jobb.no:119 vertsmaskin.jobb.no
.
.
.
vertsmaskin#
I eit anna vindu kan ein no kjøre (tin er program for
˚
a lese news):
heime# NNTPPORT=5900; export NNTPPORT
heime# NNTPSERVER=localhost; export NNTPSERVER
heime# tin -r
Dersom ein vil gjere det motsatte,— alts
˚
a vidaresende trafikk fr
˚
a vertsmaskina
i kryptert tunnel til klientmaskina gjer ein følgande:
heime# ssh -R 5900:irc.freenode.net:6667 vinsnes.jobb.no
.
.
.
vinsnes# irc -c #users -p 5900 -h localhost
Ein kan berre vidaresende portar som ikkje er priviligerte p
˚
a UNIX–maskiner,—
dvs. portnummer som er større enn 1024. Skal ein vidaresende portar fr
˚
a og
med 1024 og under m
˚
a ein logge inn som root.
Ein anna opsjon som kan vere nyttig for
˚
a verifisere forbindelsen er opsjonen
-v for verbose,— b
˚
ade for sj
˚
a om ein kobla seg til riktig vertsmaskin og kva slags
autentiseringsmekanisme som blir brukt.
breim# ssh -v vinsnes
OpenSSH 3.8.1p1, OpenSSL 0.9.7i 14 Oct 2005
debug1: Reading configuration data /etc/ssh config
debug1: Connecting to vinsnes [127.223.10.160] port 22.
debug1: Connection established.
debug1: identity file /home/kandal/.ssh/identity type 1
debug1: identity file /home/kandal/.ssh/id rsa type 1
debug1: identity file /home/kandal/.ssh/id dsa type 2
debug1: Remote protocol version 2.0, remote software version OpenSSH 3.7.1p1
debug1: match: OpenSSH 3.7.1p1 pat OpenSSH*
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH 3.8.1p1
debug1: Miscellaneous failure
No credentials cache found
debug1: Miscellaneous failure
No credentials cache found
debug1: SSH2 MSG KEXINIT sent
debug1: SSH2 MSG KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
1
Network News Transport Protocol
19.2. SSH 185
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: SSH2 MSG KEX DH GEX REQUEST(1024<1024<8192) sent
debug1: expecting SSH2 MSG KEX DH GEX GROUP
debug1: SSH2 MSG KEX DH GEX INIT sent
debug1: expecting SSH2 MSG KEX DH GEX REPLY
debug1: Host ’vinsnes’ is known and matches the RSA host key.
debug1: Found key in /home/kandal/.ssh/known hosts:19
debug1: ssh rsa verify: signature correct
debug1: SSH2 MSG NEWKEYS sent
debug1: expecting SSH2 MSG NEWKEYS
debug1: SSH2 MSG NEWKEYS received
debug1: SSH2 MSG SERVICE REQUEST sent
debug1: SSH2 MSG SERVICE ACCEPT received
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Offering public key: /home/kandal/.ssh/identity
debug1: Server accepts key: pkalg ssh-rsa blen 149
debug1: PEM read PrivateKey failed
debug1: read PEM private key done: type <unknown>
Enter passphrase for key ’/home/kandal/.ssh/identity’: < passphrase >
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
debug1: channel 0: new [client-session]
debug1: Entering interactive session.
.
.
.
vinsnes#
Dei viktigaste linjene i denne utskrifta er:
.
.
.
debug1: Enabling compatibility mode for protocol 2.0
.
.
.
Som fortel at klienten og vertsmaskina har forhandla seg fram til
˚
a bruke SSH
2 protocol.
.
.
.
debug1: Host ’vinsnes’ is known and matches the RSA host key.
debug1: Found key in /home/kandal/.ssh/known hosts:19
debug1: ssh rsa verify: signature correct
.
.
.
Den hemmelege nøkkelen til vertsmaskina stemmer overens med den tilsva-
rande offentlege nøkkelen som er lagra i ˜/.ssh/known hosts.
.
.
.
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Offering public key: /home/kandal/.ssh/identity
186 KAPITTEL 19. SECURE SHELL
debug1: Server accepts key: pkalg ssh-rsa blen 149
debug1: PEM read PrivateKey failed
debug1: read PEM private key done: type <unknown>
Enter passphrase for key ’/home/kandal/.ssh/identity’: < passphrase >
debug1: read PEM private key done: type RSA
debug1: Authentication succeeded (publickey).
.
.
.
Vertsmaskina vil no bruke metodane publickey, password og keyboard-interactive
for
˚
a autentisere. Ved publickey vil klientmaskina signere sesjonsidentiten med
sin hemmelege nøkkel som ligg i ˜/.ssh/identity (derfor m
˚
a ein l
˚
ase opp nøkkelen
ved
˚
a oppgi passphrase) og og sender resultatet til vertsmaskina. Vertsmaskina
vil leite etter den tilsvarande offentlege nøkkelen i ˜/.ssh/authorized keys og gir
tilgang dersom den finn nøkkelen og signaturen er korrekt. Den hemmelege
nøkkelen vil aldri forlate klientmaskina slik at den st
˚
ar i fare for
˚
a bli ekspo-
nert p
˚
a vertsmaskina.
Dersom ein ikkje har lagt inn dei offentlege nøklane i ˜/.ssh/authorized keys vil
ssh bruke vanleg passord.
breim# ssh -v vinsnes
.
.
.
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: publickey
debug1: Offering public key: /home/kandal/.ssh/identity
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Offering public key: /home/kandal/.ssh/id rsa
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Offering public key: /home/kandal/.ssh/id dsa
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: keyboard-interactive
debug1: Authentications that can continue: publickey,password,keyboard-interactive
debug1: Next authentication method: password
kandal@vinsnes’s password: < passord >
.
.
.
vinsnes#
Sjølv om ssh fell tilbake til
˚
a bruke det vanlege passordet vil all trafikk g
˚
a kryp-
tert over nett.
19.3 ssh–agent
N
˚
ar ein brukar ssh hadde det vore greit
˚
a ikkje m
˚
atte taste inn hverken passphar-
se eller passord,— og derfor brukar ein ssh–agent.
ssh–agent er eit program som held private nøklar for offentleg nøkkel autenti-
sering. Det vanlege er at ssh–agent startar ein X11–sesjon eller ein innloggings-
sesjon, og alle andre vindu eller program blir starta som klientar av ssh–agent.
Igjennom bruk av miljøvariable vil ein lokalisere agenten og automatisk bruke
den for autentisering n
˚
ar ein loggar p
˚
a andre maskiner med ssh.
19.3. SSH–AGENT 187
For
˚
a starte ein sesjon brukar ein ssh–agent p
˚
a følgande m
˚
ate:
ssh–agent [-a bind adresse] [-c|-s] [kommando [argumenter . . . ]]
Opsjonen –a m
˚
a ha ein parameter som er ein s
˚
akalla socket (norsk: sokkel) i filsys-
temet. Denne sokkelen blir brukt som kommunikasjonskanal mellom ssh–agent
og ssh,— og fungerer p
˚
a same m
˚
ate som portar for nettverskommunikasjon
berre at no ligg sokkelen i filsystemet.
Dersom ein ikkje predefinerer (dvs. utelater opsjonen –a og sokkelnamnet) vil
ssh–agent lage ein sokkel under /tmp–katalogen. Som regel p
˚
a formen /tmp/ssh-
XXXXXXXX/agent.<ppid>,— der XXXXXXXX er ein tilfeldig streng av tall og
bokstavar og ppid er Parent Process IDentifier. Det er ingenting i vegen for at ein
kan predefinere namnet p
˚
a denne sokkelen,— men ein bør finne eit mest mulig
unikt namn og det er vanleg
˚
a legge den under /tmp–katalogen.
Opsjonane –c er for
˚
a sette dei nødvendige miljøvariablane for csh (C–shell) og
–s for
˚
a gjere det same for sh (Bourne–shell) eller Bourne–liknande skall (f.eks
ksh eller bash). ssh–agent vil sette miljøvariablane SSH AUTH SOCK som peikar
til sokkelen i filsystemet og SSH AGENT PID som inneheld PID for ssh–agent
prosessen.
breim# env | grep SSH
SSH AUTH SOCK=/tmp/ssh-RbWbv90eGb/agent.18234
SSH AGENT PID=18235
breim#
Det som kjem sist er kommandoen med dei nødvendige opsjonar og argument
for
˚
a starte ein X11–sesjon eller ein innloggingssesjon. N
˚
ar sesjonen dør vil ssh–
agent ogs
˚
a dø.
Dersom ein brukar ssh–agent saman med X11 (side 198) og startar X–Windows
med startx(side 201) vil ˜/.xinitrc(side 201) brukt som oppstartsfil. I .xinitrc kan
man f.eks legge inn:
#! /bin/sh
if [ ! -x ${HOME}/.xinitrc ] ; then
chmod 0700 ${HOME}/.xinitrc
/usr/bin/ssh-agent ${HOME}/.xinitrc
Der ˜/.xinitrc inneheld kommandoane som for program som skal startast opp i
sesjonen. MERK! ˜/.xinitrc m
˚
a vere kjørbare for bruker.
Etter at ein har kjørt xinitrc og starta opp ein eller fleire xterm(side 200) kan ein
sjekk om ssh–agent kjører og om miljøvariablene er satt.
breim# ps -ax | grep ssh
.
.
.
18773 ?? Ss 0:00.01 /usr/bin/ssh-agent /home/kandal/.xinitrc
.
.
.
breim# env | grep SSH
SSH AGENT PID=18773
SSH AUTH SOCK=/tmp/ssh-sX6TooacNi/agent.18772
188 KAPITTEL 19. SECURE SHELL
breim#
No treng ein berre
˚
a legge dei hemmeleg nøklane inn i ssh–agent og det gjer ein
med ssh–add.
19.4 ssh–add
ssh–add legg inn RSA og DSA identitetar inn i autentiseringsagenten ssh–agent.
Dersom ein kjører den uten parametre vil den legge inn nøklane fr
˚
a filane ˜/
.ssh/id dsa, ˜/.ssh/id rsa og textasciitilde/.ssh/identity.
breim# ssh–add
Enter passphrase for /home/kandal/.ssh/id rsa: < passphrase >
Identity added: /home/kandal/.ssh/id rsa (/home/kandal/.ssh/id rsa)
Enter passphrase for /home/kandal/.ssh/id dsa: < passphrase >
Identity added: /home/kandal/.ssh/id dsa (/home/kandal/.ssh/id dsa)
Enter passphrase for /home/kandal/.ssh/identity: < passphrase >
Identity added: /home/kandal/.ssh/identity (/home/kandal/.ssh/identity)
breim#
Etter at ein har gjort dette kan ein prøve
˚
a logge inn p
˚
a ei vertsmaskin:
breim# ssh vinsnes
.
.
.
vinsnes#
Som man ser vil ssh kommunisere med ssh–agent og ein slepp
˚
a hverken oppgi
passphrase eller passord.
Dersom ein vil legge inn kun ein nøkkel i ssh–add oppgir man nøkkelfila som
parameter til programmet:
breim# ssh–add ˜/.ssh/identity
Enter passphrase for /home/kandal/.ssh/identity: < passphrase >
Identity added: /home/kandal/.ssh/identity (/home/kandal/.ssh/identity)
breim#
Andre nyttige opsjonar er –l for
˚
a liste ut alle nøklar i ssh–agent og –d for slette
ein nøkkel fr
˚
a ssh–agent. Opsjonen –D vil slette alle nøklar fr
˚
a ssh–agent.
breim# ssh–add –d ˜/.ssh/id rsa
Identity removed: /home/kandal/.ssh/id rsa (/home/kandal/.ssh/id rsa.pub)
breim# ssh–add –D
All identities removed.
breim#
Etter dette skal ein vere godt i gang med
˚
a bruke ssh.
19.5 scp
scp kopierer filar mellom maskiner p
˚
a eit nettverk. Programmet brukar ssh (side
180) for sjølve datatransporten, — og brukar den same autentiseringsmetoden
19.5. SCP 189
og tilbyr den same sikkerheten som ssh. Ulikt rcp (side 172), vil scp be om pass-
ord eller passphrase dersom det trengs for autentisering.
Den enklaste kommandoen for scp er:
breim# scp lokal–fil vinsnes:.
lokal–fil 100% 1381 1.4KB/s 00:00
breim#
Fila lokal–fil vil bli kopiert til heime–katalogen p
˚
a vinsnes. Dersom ein vil at fila
skal kopierast til ein bestemt katalog:
breim# scp lokal–fil vinsnes:bestemt–katalog/.
lokal–fil 100% 1381 1.4KB/s 00:00
breim#
No vil fila hamne p
˚
a bestemt–katalog under heimekatalogen. Vil ein at fila skal
kopierast til ein katalog som ikkje ligg under heime–katalogen m
˚
a man oppgje
ein absolutt sti.
breim# scp lokal–fil vinsnes:/tmp/.
lokal–fil 100% 1381 1.4KB/s 00:00
breim#
scp begrensar seg ikkje berre til
˚
a kopiere filar fr
˚
a lokal maskin,— men kan ogs
˚
a
kopiere mellom to ikkje–lokale maskiner.
breim# scp vinsnes:fila.txt stryn:.
breim#
For
˚
a f
˚
a til kopiering mellom 2 ikkje–lokale maskiner m
˚
a ein sl
˚
a p
˚
a opsjonen
ForwardAgent i ˜/.ssh/config p
˚
a den lokale maskina (denne fila skal kun vere
lesbar for bruker). Dette gjer ein ved
˚
a skrive følgande i ˜/.ssh/config:
ForwardAgent yes
Det er ikkje anbefalt
˚
a sl
˚
a p
˚
a denne opsjonen. Brukarar p
˚
a vertsmaskina som
kan omg
˚
a fil–aksessar kan f
˚
a tilgang til den lokale klienten igjennom den vi-
daresendte forbindelsen.
Dersom man har forskjellig brukernamn p
˚
a den lokale maskina og vertsmaski-
na kan ein oppgje brukernamn p
˚
a følgande m
˚
ate:
breim# scp lokal–fil joppe@vinsnes:.
lokal–fil 100% 1381 1.4KB/s 00:00
breim#
P
˚
a same m
˚
ate kan man oppgje brukernamn n
˚
ar ein kopierer filar mellom 2
ikkje–lokale maskiner:
breim# scp joppe@vinsnes:fila.txt bamse@stryn:.
breim#
scp støttar ogs
˚
a opsjonane –p og –r som fungerer p
˚
a same m
˚
ate som for rcp (side
172).
190 KAPITTEL 19. SECURE SHELL
19.6 sftp
sftp er eit fil overføringsprogram, veldig likt ftp, men utfører alle aksjonar over
ein kryptert ssh–forbindelse. Den brukar ogs
˚
a mange av mulighetane i ssh,—
som offentleg nøkkel–autentisering.
breim# sftp vinsnes
Connecting to vinsnes. . .
sftp>
Kommandoen ftp sin enklaste form tek kontakt med vertsmaskina og loggar
inn, skiftar til eit interaktivt kommandomiljø. I kommandomodus vil sftp tilby
eit sett av kommandoar p
˚
a same m
˚
ate som ftp. Dei interaktive kommandoane
kan kjørast b
˚
ade med store og sm
˚
a bokstavar. Fil– eller stinamn som innheld
mellomrom m
˚
a st
˚
a mellom g
˚
aseauge.
sftp> help
Available commands:
cd path Change remote directory to ’path’
lcd path Change local directory to ’path’
chgrp grp path Change group of file ’path’ to ’grp’
chmod mode path Change permissions of file ’path’ to ’mode’
chown own path Change owner of file ’path’ to ’own’
help Display this help text
get remote-path [local-path] Download file
lls [ls-options [path]] Display local directory listing
ln oldpath newpath Symlink remote file
lmkdir path Create local directory
lpwd Print local working directory
ls [path] Display remote directory listing
lumask umask Set local umask to ’umask’
mkdir path Create remote directory
progress Toggle display of progress meter
put local-path [remote-path] Upload file
pwd Display remote working directory
exit quit sftp
quit Quit sftp
rename oldpath newpath Rename remote file
rmdir path Remove remote directory
rm path Delete remote file
symlink oldpath newpath Symlink remote file
version Show SFTP version
!command Execute ’command’ in local shell
! Escape to local shell
? Synonym for help
sftp> get “fila med mellomrom”
Fetching /home/kandal/fila med mellomrom to fila med mellomrom
/home/kandal/fila med mellomrom 100% 2511 2.5KB/s 00:00
sftp> bye
Fleire m
˚
atar
˚
a bruke sftp er
˚
a hente filar utan
˚
a g
˚
a inn i interaktiv modus:
19.6. SFTP 191
breim# sftp vinsnes:fila-mi
Fetching /home/kandal/fila.mi to fila-mi
/home/kandal/fila-mi 100% 2511 2.5KB/s 00:00
breim#
Man kan starte sftp slik at den vil g
˚
a til ein bestemt katalog p
˚
a vertsmaskina og
entre interaktiv modus:
breim# sftp vinsnes:katalog
Connecting to vinsnes. . .
Changing to: /home/kandal/katalog
sftp> bye
breim#
Dersom ein startar med sftp med –b opsjon og oppgir ei batch–fil vil sftp logge
seg p
˚
a vertsmaskina og utføre kommandoane i batch–fila. Batch-fila kan f.eks
innholde:
cd katalog
get fila-mi
S
˚
a er det berre
˚
a starte sftp med –b og batch-fila som parameter:
breim# sftp -b batch-fila vinsnes
sftp> cd katalog
sftp> get fila-mi
Fetching /home/kandal/katalog/fila-mi to fila-mi
sftp>
breim#
P
˚
a same m
˚
ate som for dei andre kommandoane kan man oppgje brukernamn
p
˚
a formen <bruker>@maskin dersom brukernamnet er forskjellig p
˚
a klienten
og vertsmaskina.
breim# sftp joppe@vinsnes
Connecting to vinsnes. . .
sftp>
.
.
.
sftp> bye
breim#
Dette er det siste eg vil ta for meg n
˚
ar det gjeld Secure SHell.
Kapittel 20
Elektronisk post
Den mest vanlege kommunikasjonsverktøy mellom brukarar,— er elektronisk
post. Post kan brukast av alle brukarar p
˚
a ei maskin som kjører UNIX, og
UNIX tilbyr fleire program som igjen tilbyr forskjellige funksjonar og mulighe-
tar. Desse programma spenner fr
˚
a dei heilt enkle til store komplekse program
som har masse funksjonar. Fordi UNIX er s
˚
a god n
˚
ar det gjeld kommunikasjon
har programutvikling innanfor elektronisk post vorte ein av dei mest fruktbare
omr
˚
ada.
Eit lite hint først
I utgangspunktet vart alle system for
˚
a sende elektronisk post laga for
˚
a sen-
de korte beskjedar som kun inneheldt tekst. Etter kvart har det vorte meir
vanleg
˚
a sende fleire typar meldingar, som f.eks formatterte tekstdokument,
kjørbare filar . . . . Moderne implementasjonar av postprogram kan takle dette
utan vidare,— men skal ein sende dette over nettet (f.eks Internet) m
˚
a ein vere
sikker p
˚
a at ogs
˚
a mellomliggande maskiner kan takle dette,— ellers vil mel-
dinga vere øydelagt før den kjem fram. Derfor, skal du sende post,— bruk kun
enkle tekstmeldingar. Skal du sende andre ting, sjekk om mottakaren kan ta
imot epost med spesielle vedlegg,— eller har verktøy som kan pakke ut mel-
dingar med forskjellig innhold. Etter kvart vil den nye standarden for epost (
MIME innanfor Internet ta over slike oppg
˚
aver. Foreløpig set denne standarden
for korleis vedlegg av typen tekst, formattert tekst,lyd, bilder (GIF,JPG . . . ) og
video skal pakkast,sendast og mottakast. MIME st
˚
ar for Multipurpose Internet
Mail Extension.
20.1 Epost konseptet
Alle postprogram jobbar med den innkomne posten og legg den i ei spesiell
postkasse eller innkorg som blir eigd av mottakaren. Denne posten ligg i post-
kassa heilt til mottakaren les posten og slettar den og/eller flyttar den ein anna
plass. P
˚
a alle maskiner som kjører UNIX vil posten vanlegvis ligge p
˚
a katalo-
gen /var/spool/mail, /usr/spool/mail eller /usr/mail. Der er den vanlegvis plassert i
192
20.1. EPOST KONSEPTET 193
ei fil per brukar. Postprogrammet legg til ny post p
˚
a enden av fila, slik at fila
vert lenger etter kvart som ny post kjem inn. Programmet som les posten vil
likevel dele opp fila i beskjedar slik at det vert meir oversiktleg.
Det finst eit hav av program som skal hjelpe ein med lesing av epost,— eg
kjem ikkje til
˚
a g
˚
a gjennom alle desse. Eg har konsentret meg om programmet
mail som er ein del av standard UNIX (det er ikkje dermed sagt at eg anbefalar
mail). Det er opp til kvar enkelt
˚
a finne seg ein postleser som dei kjenner seg
fortruleg med og som passar til kvar enkelt sitt ferdighetsniv
˚
a. Det viktigaste
er
˚
a f
˚
a jobben gjort. Til slutt vil eg skrive litt om addressering innanfor Internet.
20.1.1 Sende post
For
˚
a sende post brukar ein berre programmet mail med ei liste av brukar-
namn som argument p
˚
a kommandolinja. Deretter vil mail lese fr
˚
a standard
inn,— dette vil bli innholdet i brevet. Dersom ein oppgje fleire brukarnamn
p
˚
a kommandolinja vil den same beskjeden bli sendt til alle i lista.
uranus% mail jacob
Subject: Demo
Dette er ein demostrasjon av e-post.
Helsing
Trond.
<ctrl-d>EOT
For
˚
a avslutte beskjeden trykker ein Ctrl-d eller . p
˚
a ei tom linje. I tilleg kan
bruke redirigering b
˚
ade fr
˚
a fil eller røyr.
uranus% mail jacob < e-post-fila
uranus% cat e-post-fila | mail jacob
uranus%
Begge metodane som er vist her vil fungere p
˚
a same m
˚
ate,— dvs. sende inn-
holdet av fila epostfila til brukaren jacob.
20.1.2 Lese post med mail
Dersom du har f
˚
att ny post i det siste, vil dei fleste skall gjere deg oppmerksom
p
˚
a dette. Ofte vil dei skrive ut ein beskjed som dette:
You have new mail in /usr/spool/mail/trondk
eller
You have new mail.
Ein kan sjølvsagt berre ignorere dette,— skallet vil ikkje skrive ei ny slik mel-
ding før det kjem inn meir ny post i postkassa.
Dersom ein startar mail utan argumnet vil den opne postkassa og anta at ein
vil lese post.
uranus% mail
194 KAPITTEL 20. ELEKTRONISK POST
Mail version SMI 4.0 Thu Jul 23 13:52:20 PDT 1992 Type ? for help.
”/usr/spool/mail/trondk”: 2 messages 1 new
1 Trond.Kandal Thu Dec 30 12:16 19/491 Demo
>N 2 Trond.Kandal Thu Dec 30 12:27 16/344 demo
&
Etter at mail har starta ser vi at eg har f
˚
att ei ny melding sidan sist,— det ser ved
at det st
˚
ar ein stor N framfor beskjed nummer 2. I tillegg er denne beskjeden
ogs
˚
a markert med symbolet >, som betyr at denne har fokus. Ved
˚
a trykke
<RETUR> vil eg f
˚
a liste ut innholdet.
& <retur>
Message 2:
From trondk Thu Dec 30 12:27:01 1993
Received: by zevs.ifi.unit.no id AA20831
(5.65c/IDA-1.4.4 for trondk); Thu, 30 Dec 1993 12:27:01 +0100
Date: Thu, 30 Dec 1993 12:27:01 +0100
From: Trond Kandal <Trond.Kandal>
Message-Id: <199312301127.AA20831@zevs.ifi.unit.no>
To: trondk
Subject: demo
Status: R
Dette er demostrasjon av e-post.
helsing
Trond.
&
Vil ein kikke p
˚
a ei anna melding skriv ein nummeret p
˚
a meldinga og trykker
<RETUR>.
& 1
Message 1:
From Trond.Kandal Thu Dec 30 12:16:40 1993
Received: from uranus.ifi.unit.no by zevs.ifi.unit.no with SMTP id AA20770
(5.65c/IDA-1.4.4 for <trond.kandal>); Thu, 30 Dec 1993 12:16:39 +0100
Received: by uranus.ifi.unit.no (4.1/Uninett-C-1.4)
id AA10812; Thu, 30 Dec 93 12:14:19 +0100
Date: Thu, 30 Dec 93 12:14:19 +0100
From: Trond.Kandal
Message-Id: <9312301114.AA10812@uranus.ifi.unit.no>
To: trond.kandal
Subject: Demo
Status: RO
Dette er ein demostrasjon av e-post.
20.1. EPOST KONSEPTET 195
Helsing
Trond.
&
Den kanskje viktigaste kommandoen er hjelp,— for
˚
a f
˚
a hjelp skriv ein ? og
trykker <RETUR>.
& ?
cd [directory] chdir to directory or home if none given
d [message list] delete messages
e [message list] edit messages
f [message list] show from lines of messages
h print out active message headers
m [user list] mail to specific users
n goto and type next message
p [message list] print messages
pre [message list] make messages go back to system mailbox
q quit, saving unresolved messages in mbox
r [message list] reply to sender (only) of messages
R [message list] reply to sender and all recipients of messages
s [message list] file append messages to file
t [message list] type messages (same as print)
top [message list] show top lines of messages
u [message list] undelete messages
v [message list] edit messages with display editor
w [message list] file append messages to file, without from line
x quit, do not change system mailbox
z [-] display next [previous] page of headers
! shell escape
A [message list] consists of integers, ranges of same, or user names separated
by spaces. If omitted, Mail uses the current message.
&
Personleg syns eg at denne hjelpfunksjonen er ganske bra,— derfor vil eg ikkje
g
˚
a nærare inn p
˚
a mulighetane som ligg i mail ved interaktiv bruk. Eit par lure
opsjonar til mail p
˚
a kommandolinja er -f etterfølgt av eit filnamn som betyr at
mail skal bruke denne fila som postkasse istaden for standard postkasse,— og
opsjonen -H som f
˚
ar mail til
˚
a liste ut alle brevhoder i postkassa.
uranus% mail -H
1 Trond.Kandal Thu Dec 30 12:16 19/491 Demo
U 2 Trond.Kandal Thu Dec 30 12:27 17/354 demo
uranus%
20.1.3 Adressering av elektronisk post
Som sagt tidelegare vil eg kun konsentere meg om adressering innanfor Internet
og ein adresseingsmetode som g
˚
ar under namnet RFC822. Denne metoden er
forholdvis enkel
˚
a lære og bruke. Det generelle formatet er brukar@domene, der
196 KAPITTEL 20. ELEKTRONISK POST
domene kan best
˚
a av fleire ledd separert med . (punktum). V
˚
art domene (In-
stitutt for informatikk, Universitetet i Trondheim, AVH) har namnet ifi.unit.no.
Det betyr at dersom du skal sende elektronisk post til ein person p
˚
a v
˚
art insti-
tutt skal det adresserast til : brukar@ifi.unit.no. Med mail vil dette bli:
uranus% mail brukar@ifi.unit.no
.
.
.
uranus%
Problemet med elektronisk post er ofte at ein ikkje veit mottakaren si adresse,—
dette prøvar no universitet og høgskular
˚
a rette p
˚
a ved
˚
a opprette ei katalog-
teneste. Her kan ein søke etter namn p
˚
a personar, avdeling, institusjon og land.
Foreløpig finst det klientprogram p
˚
a UNIX og Mac. P
˚
a UNIX finst det to pro-
gram, de som er tegnbasert og af som skal kjørast under X Windows. Begge er
Figur 20.1: Programmet de i aksjon
toleleg brukarvennlege. Eg tør ikkje
˚
a g
˚
a nærare inn p
˚
a dette emnet i denne
omgang,— det finst personar som har brukt heile livet p
˚
a emnet . . . .
20.1. EPOST KONSEPTET 197
Figur 20.2: Det litt meir fancyprogrammet af under X Windows
Kapittel 21
Vindussystemet X Windows
Vindussystemet X Windows starta som eit prosjekt for
˚
a lage eit grafisk vindus-
system for arbeidsstasjonar. X Windows hadde eit litt spesielt utgangspunkt,—
det vart laga p
˚
a ein høgskule som var opptatt av
˚
a spare pengar ved innkjøp
av utstyr,— derfor skulle vindussystemet g
˚
a p
˚
a dei fleste operativsystem, nett-
verk og maskinplattformer utan brukarane skulle merke forskjell i oppsett og
funksjonalitet. I tillegg skulle det vere mulig
˚
a utnytte reknekrafta fr
˚
a fleire
maskiner utan
˚
a m
˚
atte bry seg om fysisk plassering. Derfor vart X Windows
den første vindussystemet som kan brukast transparent over nettverk og var
det første systemet som utnytta klient–tenar prinsippet. Seinare har X Win-
dows vorte “industri-standard” for leverandøruavhengige vindussystem p
˚
a
arbeidsstasjonplattform.
Namnet kjem av at X Windows var ein vidareutvikling av vindussystemet W
fr
˚
a Stanford. X Windows vart utvikla ved MIT Laboratory for Computer Scien-
ce for prosjektet Athena som skulle oppfylle prosjektet sitt krav til ein distribu-
ert, maskinuavhengig grafisk plattform. Tidlege versjonar vart stort sett berre
brukt innanfor MIT og DEC,— men etter at versjon 10 kom p
˚
a bana,— s
˚
ag man-
ge dataselskap kommersielle mulighetar i produktet bl.a Sillicon Graphics og
SUN. DEC laga seinare DEC–Windows som var basert p
˚
a X Windows og skul-
le kjørast b
˚
ade p
˚
a operativsystemet VMS og Ultrix. Fleire andre leverandørar
har ogs
˚
a laga andre versjonar,— f.eks Sun Microsystems med sin “Open Win-
dows”, GL fr
˚
a Sillicon Graphics som er spesialisert for 3D (seinare OpenGL[5]),
og MOTIF fr
˚
a OSF. Pr. idag er har ein ogs
˚
a overbygg som Qt, KDE, Gnome og
Xfce mest kjent fr
˚
a Linux–verden.
Etter kvart har ogs
˚
a X Windows ført til spesielle maskiner som X Termina-
lar som er optimalisert for klient–tenar prinsippet under X Windows, enkelte
leverandørar har faktisk bygd seg opp p
˚
a dette markedssegmentet som f.eks
NCD som kun lagar X Terminalar. Vindussystemet X Window er eit leverandør
uavhengig vindussystem, for at det skal utvikle seg i riktig retning har fleire
leverandørar og MIT
1
oppretta eit konsortium, The X Windows Consortium)
som skal styre utviklinga av X Windows. I tillegg kan alle som vil, fritt ko-
piere basisdistribusjonen som kjem fr
˚
a MIT. Det meste gledelege er at etter
1
Massachusetts Institute of Technology
198
21.1. PRINSIPPET FOR VINDUSSYSTEMET X WINDOWS 199
kvart eksisterar store mengder med gratisprogramvare for X Windows som
ein kan finne p
˚
a Internet og andre stader. Denne programvaren held høg kva-
litet og funksjonalitet,— og det vanskeleg
˚
a tenkje seg teknisk programvare
som ikkje er utvikla under X Windows. Ulempa med X Windows er at det
gjer det “vansklegare”
˚
a programmere,— dette er velkjende problem b
˚
ade for
Macintosh og MS Windows,— etter kvart har det kome ein del UIMS–system
som gjer utviklinga lettare. MOTIF, Qt og OpenGL er ogs
˚
a slike steg i riktig
retning,— b
˚
ade MOTIF, Qt og OpenGL inneheld ferdige rutiner og UIMS
2
som
gjer det enklare
˚
a utvikle programvare. Etter kvart finst det ein god del verktøy
som gjer utviklinga forholdsvis enkel,— iallefall like enkel som det vi kjenner
fr
˚
a andre vindussystem.
21.1 Prinsippet for vindussystemet X Windows
Prinsippet for X Windows er at det best
˚
ar av minimum ein serverprosess og
ein klientprosess. Desse prosessane kan g
˚
a p
˚
a same maskin eller forskjellige
maskiner, med forskjellig operativsystem og med stor fysisk avstand. Server-
prosessen har ansvaret for grensesnittet for brukaren,— medan klienten er den
eigentlegeprosessen. I praksis fungerer dette slik under X Windows,— tena-
ren (server) tek seg av det implementasjonsspesifikke for den maskina som
skal vise grafikken,— mens klienten er den eigentlege applikasjonen. Bruka-
ren gjer aksjonar som tastetrykk, bevegelsar med mus osv. . . , dette køar server-
prosessen opp og sender det vidare til klientprosessen. Klientprosessen proses-
serer aksjonane og sender tilbake kva for aksjonar serverprosessen skal utføre
som reaksjon p
˚
a brukeraksjonane. X Windows startar opp med eit s
˚
akalla rot-
Figur 21.1: Tenar- og klient-prosessar
vindu. Som standard har dette vinduet eit slags gr
˚
amelert farge. Rotvinduet
kan ein forandre og gjere finare med f.eks eit grafikk-program,— f.eks slik som
figur 21.2. Rotvinduet er opphavet til alle andre vindu
3
. Derfor har alle vindu
2
User Interface Management System
200 KAPITTEL 21. VINDUSSYSTEMET X WINDOWS
Figur 21.2: Eit “fancy” root-vindu under X Windows
under X Windows dette rotvinduet som forelder. Alle andre vindu som vert
laga vil alltid forholde seg relativt til dette rotvinduet. Etter at rotvinduet duk-
kar opp kan ein starte fleire applikasjonar som g
˚
ar under X Windows. I dei
fleste tilfella vil ein starte opp iallefall minst ein xterm,— dette er terminal-
emuleringsprogrammet under X Windows. Fr
˚
a xterm kan ein igjen starte opp
fleire applikasjonar.
Figur 21.2 er eit typisk skjermbilde av ein X sesjon,— med fleire xterm–vindu,
emacs, xlogo, xclock og eit grafikkprogram xv (forresten det same programmet
som har laga skjermdumpen). I tillegg vil ein starte opp ein vindushandterer
(engelsk: Window manager), ellers vil ein ikkje kunne forandre størrelsar p
˚
a vin-
du eller flytte dei. I tillegg har ogs
˚
a vindushandtereren mulighetar for
˚
a sette
opp menyar p
˚
a museknappane. Dette kan vere nyttig til f.eks for
˚
a starte and-
re applikasjonar som ein ellers ville ha starta fr
˚
a kommandolinja, eller hjelpe
til for
˚
a lage standardiserte oppsett. Det er ogs
˚
a vindushandteraren som gjev
dei forskjellige grafiske miljø den funksjonalitet og utsj
˚
anad som dei skal ha.
Standard distribusjonen som kjem fr
˚
a MIT har to slike program, twm og fwm,—
MOTIF/OSF kallar sitt program for mwm og Open Look for SUN olwm. I tillegg
finst det ei rekkje andre med forskjellig funksjonalitet som f.eks tvtwm og min
eigen favoritt ctwm. Denne rikdomen av applikasjonar og forskjellige m
˚
atar
˚
a
handtere grensesnittet er kanskje ein kjelde til forvirring,— men nettopp dette
er det som gjer X Windows s
˚
a interessant i ein akademisk samanheng. Her kan
ein arbeide fritt og teste ut nye ide
´
ar utan innblanding fr
˚
a leverandørspesifikke
3
X Windows opererer faktisk med foreldrevindu og barnevindu, p
˚
a same m
˚
ate som med pro-
sessar under UNIX
21.1. PRINSIPPET FOR VINDUSSYSTEMET X WINDOWS 201
programmeringsgrensesnitt.
21.1.1 Starte X Windows
Det er to m
˚
atar ein kan starte ein X Windows sesjon p
˚
a, enten ved
˚
a starte
den p
˚
a kommandolinja (dette krev direkte tilgong til ei maskin som kjører
UNIX),— eller at UNIX-maskina eller X Terminalen er sett opp til
˚
a handtere
innlogging via innloggingsprogrammet under X Windows. Her er eit eksem-
Figur 21.3: Innloggingsskjerm for xdm
pel (ref. bilde 21.3) p
˚
a innlogging via innloggingsprogrammet xdm
4
under X
Windows. Set ein derimot p
˚
a ei maskin som kjører UNIX og ein loggar inn via
standard tekstbaserte program skal ein starte X Windows med kommandoen
startx. Denne kommandoen har ingen parametre p
˚
a kommandolinja. Det som
ein skal vere klar over er at resultatet av begge er ganske likt,— men dei brukar
forskjellige oppstartfilar. Oppstartsfilane inneheld kommandoar for dei pro-
gramma som skal startast opp. Loggar ein inn via X Windows (v.h.a. xdm) vil
innloggingsprosessen bruke fila $HOME/.xsession som oppstartsfil. Denne fila
m
˚
a vere kjørbar for eigar for at dette skal fungere. Dersom det ikkje eksisterer
ei slik fil p
˚
a heimekatalogen vil innloggingsprogrammet bruke ei predefinert
fil p
˚
a systemomr
˚
adet. Eg vil ikkje anbefale uvante brukarar
˚
a tukle for mykje
med $HOME/.xsession sjølv om det er fritt fram for
˚
a legge inn sine eigne kom-
mandoar. Brukar ein programmet startx for
˚
a starte X Windows vil dette bruke
$HOME/.xinitrc som oppstartfil. Her vil ein ogs
˚
a, som i foreg
˚
aande tilfelle, bru-
ke ei predefinert oppstartsfil p
˚
a systemomr
˚
adet dersom det ikkje eksisterer ei
privat oppstartsfil. $HOME/.xinitrc m
˚
a vere kjørbar for at ein skal f
˚
a starta opp
X Windows.[4]
pluto% ps -ef
4
X Display Manager
202 KAPITTEL 21. VINDUSSYSTEMET X WINDOWS
UID PID PPID C STIME TTY TIME COMMAND
root 0 0 0 Feb 21 ? 0:00 sched
root 1 0 0 Feb 21 0:04 /etc/init
root 2 0 0 Feb 21 0:04 vhand
root 3 0 0 Feb 21 ? 0:00 bdflush
trondk 104 1 0 21:14:38 console 0:02 -csh
root 154 1 0 22:10:54 vt01 0:01 /etc/getty /dev/vt01 vt01
root 140 1 0 22:09:45 vt02 0:00 /etc/getty /dev/vt02 vt02
root 80 1 0 21:14:31 ? 0:00 /etc/cron
root 86 1 0 21:14:33 ? 0:06 netsched
root 90 1 0 21:14:35 ? 0:00 /etc/netd
root 108 1 0 21:14:39 ? 0:01 /etc/inetd
trondk 141 104 0 22:10:22 console 0:00 /bin/sh /usr/X11R5/bin/startx
root 109 1 0 21:14:39 ? 0:06 /etc/rwhod
root 112 1 0 21:14:40 ? 0:00 /etc/syslogd
trondk 142 141 0 22:10:22 console 0:00 xinit /usr/trondk/.xinitrc –
trondk 143 142 1 22:10:23 ptmx 0:15 X :0
trondk 146 142 0 22:10:40 ? 0:00 sh /usr/trondk/.xinitrc
trondk 150 146 0 22:10:46 ? 0:03 xterm -geometry 80x24+20+20 -sb -sl 2000 -font *courier-medium-r*100*
trondk 151 146 0 22:10:46 ? 0:02 xterm -geometry 80x24+50+50 -sb -sl 2000 -font *courier-medium-r*100*
trondk 152 146 2 22:10:46 ? 0:02 xclock -geometry 200x200+0-1 -update 1 -chime
trondk 153 146 0 22:10:46 ? 0:03 twm
trondk 155 150 0 22:11:28 ttyp0 0:01 -csh
trondk 156 151 0 22:11:33 ttyp1 0:01 -csh
trondk 158 155 0 22:12:19 ttyp0 0:01 /usr/bin/vi x-win.tex
trondk 159 158 0 22:12:50 ttyp0 0:00 sh -c ps -ef
trondk 160 159 41 22:12:51 ttyp0 0:08 /bin/ps -ef
Slik kan det f.eks ta seg ut etter at X Windows er starta med startx. Sjølve
serverprosessen av X Windows finn ein igjen i prosesslista som X :0. Vida-
re ser vi at det er starta opp 2 forekomstar av xterm, ein forekomst av xclock
og vindushandteraren twm. Slik applikasjonar som xterm, xclock, twm osv. . . er
klientapplikasjonar som blir starta ved hjelp av oppstartfilar.
21.2 Miljøvariable under X Windows
Sidan X Windows kan kjøre transparent over nettverk m
˚
a X klientar bli fortalt
kor dei skal vise resultatet. Dette gjer ein ved
˚
a sette miljøvariablen DISPLAY.
Denne skal vanlegvis ha verdien DISPLAY=maskinnamn:0.0 eller DISPLAY=:0.0,—
der maskinnamn skal vere fullt kvalifisert maskinnamn p
˚
a Internett form eller
IP–adresse. Under sh og bashvil ein sette denne miljøvariabelen med:
$ DISPLAY=arion.ifi.unit.no:0
$ export DISPLAY
$
Under csh ville dette bli:
% setenv DISPLAY arion.ifi.unit.no:0
%
21.3. “SKRIVEBORDSMENYEN” 203
Skal ein kun sitje lokalt p
˚
a ei maskin p
˚
a konsollet kan DISPLAY settast til
unix:0.0 eller kun :0.0. Vanlegvis vil oppstartrutinene vere s
˚
apass inteligente
at denne miljøvariabelen bli sett rett (men det hender jo at ein g
˚
ar litt i surr
. . . ). Dersom DISPLAY ikkje er sette riktig vil ein f
˚
a ei feilmelding som liknar
p
˚
a dette n
˚
ar ein kjører startx.
% startx
xinit: Can’t open display
%
Dersom det oppst
˚
ar andre feil som gjer at ikkje X Windows vi starte opp skal
det ligge filar som .xsession-errors eller .startx-errors p
˚
a heime-katalogen der alle
feilmeldngar blir logga.
21.3 “Skrivebordsmenyen”
Under X Windows har ein ikkje denne menyen øverst p
˚
a skjermen som ein finn
under MS–Windows og Finder. Istaden har ein s
˚
akalla skrivebordsmeny”,—
denne blir først synleg dersom ein flyttar musemarkøren utanom vindua og
trykker p
˚
a ein museknapp. Vanlegvis vil ein ha forkjellige menyar for kvar
museknapp. Det er vanleg
˚
a legge applikasjonar under ein meny, vindusoperasjonar
p
˚
a ein annan og ein meny for gjennfinning av vindu p
˚
a den siste. Dette er ikkje
standardisert og kan konfigurerast forskjellig (som eg nemnde tidlegare s
˚
a kan
utsj
˚
anad og betening vere veldig forskjellig,— det er stort sett opp til system-
administrators og brukarane sin oppfinnsomhet korleis en vil konfigurere det
miljøet ein skal arbeide under). Denne skrivebordsmenyen set ein opp i opp-
startfila for vindushandteraren. Fr
˚
a applikasjonsmenyen vil ein typisk kunne
starte opp applikasjonar, p
˚
a vindusoperasjonar kan ein manipulere p
˚
a vindu
som f.eks ikonisere vindu, legge dei i bakgrunnen, flytte, endre størrelse eller
drepe vindu. Menyen for gjenfinning av vindu er fin
˚
a ha dersom ein har man-
ge vindu og ikkje kan finne igjen det ein er p
˚
a jakt etter . . . D
˚
a er det berre
˚
a
g
˚
a p
˚
a skrivebordsplata og trykke fram menyen og velge det vinduet ein skal
ha,— dermed vil det vinuet bli lagt fremst p
˚
a skjermen. Skrivebordmenyen
kan ha hierariske menyar slik at ein kan gruppere ting som høyrer logisk sa-
man. Figur 21.4 er eit eksempel p
˚
a korleis ein slik meny kan sj
˚
a ut,— dette er
Figur 21.4: Bordplatemeny under ctwm
204 KAPITTEL 21. VINDUSSYSTEMET X WINDOWS
standardoppsettet p
˚
a instituttet sine maskiner som kjører X Windows. Her er
det underteikna som har prøvt
˚
a lage ein oppsett som skal vere logisk og rime-
leg enkelt
˚
a bruke . . . Som ein kan sj
˚
a er menyen delt opp i nye undermenyar,—
dette er eit forsøk p
˚
a
˚
a katalogisere program/funksjonar i logiske enhetar.
21.4 Generiske X kommandolinje parametre
Alle program for X Windows har ein del kommandolinje parametre som er
felles,— dette er opsjonar som kontrollerer utsj
˚
anaden p
˚
a skjermen. Ein kan
f.eks spesifisere geometrien -geometry (dvs. størrelsen og posisjonen for vinduet
p
˚
a skjermen), farge, fontar, namnet p
˚
a vinduet og ikonet for
˚
a nemne ein del.
Desse parametrane kan vere greie
˚
a bruke for
˚
a lage ein mal for korleis vindu
skal opptre.
21.4.1 Geometry
For
˚
a kontrollere størrelse og posisjon,— brukar ein parameteren -geometry der-
etter spesifikasjonen p
˚
a forma:
KOLONNERxREKKER+XPOS+YPOS
For f.eks xterm (som er terminalemuleringsprogrammet under X Windows) vil
KOLONNER og REKKER vere antall tegn i breidde og høgde, XPOS og YPOS
vil vere den initielle posisjonen for vinduet m
˚
alt i antal pixel fr
˚
a øverste venster
hjørne av skjermen. Eksempel p
˚
a ein slik kommando:
zevs% xterm -geometry 80x24+100+200 &
For
˚
a velge ein standard plassering av eit xterm–vindu kan en f.eks berre oppgje
geometri slik som dette :
zevs% xterm -geometry 80x24 &
Plasseringa av vinduet er avhengig vindushandterer,— brukar ein twm, fvwm,
ctwm eller i det heile ein vindushandterer som er —aga etter mal av twm vil dei
som standard spørje brukaren etter plassering dersom dette ikkje er oppgitt p
˚
a
kommandolinja eller p
˚
a anna m
˚
ate. Medan andre vindushandterar som f.eks
mwm (MOTIF), olwm og olvwm (Open Look) vil plassere vindua i ein standard
posisjon p
˚
a skjermen.
I tilleg kan ein be om standard størrelse ved berre
˚
a oppgje plassering p
˚
a skjer-
men:
zevs% xterm -geometry +200+200 &
Legg merke til at alle andre klientar enn xterm krev at ein oppgje størrelse i
antall pixlar,— dersom du gjer denne tabben vil vindua sj
˚
a veldig rare ut.
Det finst ein m
˚
ate til
˚
a oppgje plassering p
˚
a skjerm og det er relativt til nedre
høgre hjørne p
˚
a skjermen,— dette gjer ein ved
˚
a sette - (minusteiknet) framfor
posisjonen.
zevs% xterm -geometry 80x24-500-400 &
I tilleg kan ein bruke kombinasjonar av dette,— som f.eks:
21.4. GENERISKE X KOMMANDOLINJE PARAMETRE 205
zevs% xterm -geometry 80+24-700+50 &
21.4.2 Fontar
Typen font som skal brukast innanfor eit vindu kan ein
`
og spesifisere p
˚
a kommando-
linja. Til dette brukar ein opsjonen font,— deretter namnet p
˚
a fonten:
zevs% xterm -font 6x10 &
Her er namnet p
˚
a fonten det namnet som er kjend for X Windows. Sidan dei
fleste X Windows implementasjonane støttar mange fontar (enkelte opp mot
600 typar),— kan det vere vanskeleg
˚
a velge. For
˚
a hjelpe ti— med dette finst
det ein klient xlsfonts (X list fonts) som kan hjelpe til med dette:
arion% xlsfonts
-adobe-courier-bold-o-normal–0-0-100-100-m-0-iso8859-1
-adobe-courier-bold-o-normal–0-0-75-75-m-0-iso8859-1
-adobe-courier-bold-o-normal–10-100-75-75-m-60-iso8859-1
-adobe-courier-bold-o-normal–11-80-100-100-m-60-iso8859-1
.
.
.
6x10
8x13
8x13bold
9x15
fixed
.
.
.
lucidasanstypewriter-bold-24
lucidasanstypewriter-bold-24
lucidasanstypewriter-bold-8
lucidasanstypewriter-bold-8
nil2
olcursor
olglyph-10
olglyph-12
olglyph-14
olglyph-19
r14
r16
r24
rk14
rk16
rk24
variable
xhextris
xmahjongg
arion%
Som ein kan sj
˚
a kjem fontnamn p
˚
a mange former, dei lange namna inneheld
opplysningar som størrelse, oppløysing (i antal punkt pr. tomme) og anna in-
formasjon. Dei kortare namna er aliasar for fontar med lenger namn,— dermed
206 KAPITTEL 21. VINDUSSYSTEMET X WINDOWS
er det mange repetisjonar av dei same fontane sjølv om namnet er forskjellig.
Dersom ein vil bruke ein font som har eit langt mamn,— kan ein spesifisere det
med jokerteikn:
*-courier-bold-o-normal–*-100-*
Som ein ser er dette tilstrekkeleg for
˚
a spesifisere namnet for den første fonten
i lista.
For
˚
a kikke nærare p
˚
a ein font, kan ein bruke programmet xfd(X font display):
arion% xfd -fn ”*-courier-bold-o-normal–*-100-*”&
Legg merke til at vi brukar g
˚
aseauge rundt jokerteikna,— dette m
˚
a vi gjere for
at ikkje skallet skal oppfatte det som jokerteikn for ei fil. Dermed f
˚
a vi opp eit
vindu som dette: Dersom ein p
˚
a same m
˚
ate spesifiserer fontar til xlsfonts vil
Figur 21.5: Valg av fontar med xfd
den prøve
˚
a finne alle fontar som passar til jokerteikna.
arion% xlsfonts “*-courier-bold-o-normal–*-100-*”
-adobe-courier-bold-o-normal–0-0-100-100-m-0-iso8859-1
-adobe-courier-bold-o-normal–10-100-75-75-m-60-iso8859-1
-adobe-courier-bold-o-normal–11-80-100-100-m-60-iso8859-1
-adobe-courier-bold-o-normal–14-100-100-100-m-90-iso8859-1
-adobe-courier-bold-o-normal–17-120-100-100-m-100-iso8859-1
-adobe-courier-bold-o-normal–20-140-100-100-m-110-iso8859-1
-adobe-courier-bold-o-normal–25-180-100-100-m-150-iso8859-1
-adobe-courier-bold-o-normal–34-240-100-100-m-200-iso8859-1
arion%
Fontane ligg spreidd p
˚
a ein eller fleire katalogar, desse katalogane kan ein liste
ut med kommandoen xset -q.
21.4.3 Fargar
P
˚
a alle X klientar kan ein sette forgrunns– og bakgrunnsfarge med henholdsvis
opsjonane -fg og -bg. Begge desse kan ta normale engelse fargenamn som f.eks
“white”, “black” osv. . .
21.5. NYTTIGE PROGRAM UNDER X WINDOWS 207
arion% xterm -bg blue -fg white &
Det skal visstnok finnast ein klient xcolors som skal liste ut alle fargar for den
aktuelle X server. Dette er muligens ein X klient som er spesifikk for Open Look.
Dersom ein brukar monochrom er det nok best
˚
a holde seg til kvit bakgrunns-
farge og svart forgrunn eller omvendt.
21.4.4 Namn p˚a vindu
For
˚
a spesifisere eit namna p
˚
a vinduet brukar ein opsjonen title, -tl eller -T, som
tek ein streng som parameter. Ein kan ogs
˚
a gje ikonet for vinduet ein namn
med opsjonen -n eller -in (for icon name).
arion% xterm -title “Dette er vinduet mitt” -in “Vinduet mitt” &
Vanlegvis vil namnet p
˚
a ikonet vere det same som namnet p
˚
a vinduet, men dei
fleste applikasjonar vil bruke applikasjonsnamnet p
˚
a ikonet.
21.4.5 Opsjonen -help
Dei fleste X klientar støttar opsjonen -help, n
˚
ar denne vert brukt skal klienten
liste ut alle mulige opsjonar p
˚
a kommandolinja og avslutte.
21.5 Nyttige program under X Windows
Det finst etter kvart ganske mange program under X Windows,— spel, hjelpe-
program som f.eks xlsfonts og større programsystem som teikneprogram, rekne-
ark, programmeringsverktøy osv. . . Eg kan prøve
˚
a sette opp ein tabell med be-
skrivelse over dei applikasjonane som vi har tilgjengeleg p
˚
a v
˚
are maskiner (eg
tek forbehold om feil i lista . . . ).
Namn Type Beskrivelse
twm Vindushandterer Kjem som del X11 fr
˚
a MIT
fvwm X11 fr
˚
a MIT
tvtwm Samme som twm men med vituell skrivebord
ctwm Tilnærma same som tvtwm
mwm Motif
olwm Open Look
olvwm Open Look med virtuell skrivebord
xauth Hjelpeprogram Vedlikeheld autorisajonsliste for tilgang
xev Viser innhold av X hendelsar
xfd Viser alle fontar
xhost Autoriserer maskiner som kan vise vindu p
˚
a skjermen
xlock L
˚
aser skjermen, passord for ny tilgang
xlsfonts Listar alle font-namn
xmodmap Lastar inn nytt tastatur-utlegg
208 KAPITTEL 21. VINDUSSYSTEMET X WINDOWS
xpr Lagar PostScript av ei bitmapfil
xrdb Lastar ressursar inn i miljøet
startxcmd Startar X klientar p
˚
a andre maskiner
xrefresh Oppfriskar skjermen
xset Set brukar preferansar
xwud Viser eit vindu som er dumpa av xwd
xwd Dumpar eit vindu som bitmap til fil
xload Vider belastning p
˚
a maskin
xedit Editor Enkel teksteditor
textedit Open Look
emacs EDITOREN !
epoch X Windows versjonen av emacs
xcctool Programmering Frontend til cc
xxgdb Debugger
xcalc Applikasjonar Kalkulator
xclipboard Klippebord
xv Vising og manipulasjon av gif,jpeg,bitmap . . .
xpaint Teikneprogram
xfig Det same her
idraw her ogs
˚
a
xspread Lotus 1-2-3 kompatibelt rekneark
xpostit Post-It for X Windows
ghostview Preview for PostScript-filar
xdvi Visning av DVI-filar
xman Visning av manual-sider
xalarm Vekkerklokke med beskjed
xcdplayer For speling av CD-er
xloadimage Visning av gif,jpeg o.l.
xmosaic WWW klient
xrn Newslesar
xgopher Gopher-klient
x3270 tn3270 emulator
xbiff Varslar n
˚
ar ein mottek e-post
xmailtool E-post-klient
mpeg play Avspeling av MPEG
xgrasp Avspeling av DL
ghostview Førehandsvisning av PostScript-filar
hexcalc Kalkulator for desimal, heksa, oktal og binær base
oleo GNU sitt rekneark
xanim Avspilling av fleire typar animasjonar
xautolock Automatisk l
˚
asing av skjerm etter inaktivitet
xbibtex Hjelpeverktøy for BibT
E
X
xcb Klippebuffer, nyttig verktøy !
xcoral Mini-emacs med full menystyring
xgraph Program for
˚
a vise grafer
21.6. X WINDOWS OG SIKKERHET 209
xless Less for X Windows
xmail Grafisk frontend til mail
xmgr Plotteprogram
xpt Det periodiske system
xviewgl Visning av .gl
xlatex Kommando-meny for L
A
T
E
X
xmahjong Leiketøy
xtetris Tetris for X Windows
xhextris Tetris med 8-kanta brikker
xlander Lander for X
xchess No comments !
spider Kabal
xbombs Bømbs!
xeyes Dei berømde augene
xlogo Den like berømde X-logoen
xblackjack Black-Jack
xpilot Krigsspel for fleire samtidige brukarar i nettet
21.6 X Windows og sikkerhet
Under X Windows operer ein med begrepet display,— dette er ein logisk kon-
septuell konstruksjon. Symbolet for eit display er denne miljø-variabelen DIS-
PLAY (jmfr. tidelegare omtale). Denne miljøvariabelen best
˚
ar av fleire delar.
Eks:
zevs# echo $DISPLAY
skjorta.ifi.unit.no:0.0
zevs#
For det første kan ein ut fr
˚
a denne DISPLAY–variabelen sj
˚
a at transportlaget er
TCP/IP. Maskin-namnet er representert p
˚
a forma maskin.eit.eller.anna.domene,—
deretter kjem representasjonen av X server og display. P
˚
a forma :0.0,— det
første tallet representerer X server og det andre display. Dette vil alt
˚
a seie at
skjorta.ifi.unit.no:0
:0.0
:0.1
Figur 21.6: Handtering av fleire skjermar
vi kan ha fleire X-server prosessar p
˚
a same maskin og fleire display. La oss ten-
kje oss at vi har feire display p
˚
a Xserver :0.
210 KAPITTEL 21. VINDUSSYSTEMET X WINDOWS
zevs# echo $DISPLAY
skjorta.ifi.unit.no:0.1
zevs#
Utan nokon form for aksesskontroll til Xserveren kan den som kjenner til dis-
play–et sende sine klientar dit,— dumpe skjermbildet eller avlytte tastetrykk.
Derfor har MIT X–Consortium laga fleire metodar for aksesskontroll.
21.6.1 Kommandoen xhost
Eigentleg er dette ein gamal kommando for
˚
a styre aksesskontrollen til begre-
pet display under X Windows. Denne kommandoen fungerer p
˚
a maskinniv
˚
a
slik at dette er ikkje ein fullgod m
˚
ate
˚
a sikre seg at ein ikkje f
˚
ar uautorisert
tilgang.
arion# xhost
access control enabled, only authorized clients can connect
localhost
arion.ifi.unit.no
arion#
Her sjekkar ein kva for maskiner som kan sende klientar til denne maskina,—
i dette tilfellet kjører vi p
˚
a maskina arion og som vi ser kan berre klientar p
˚
a
arion sende klientar til arion. Dermed hindrar vi iallefall alle andre brukarar p
˚
a
andre maskiner
˚
a sende klientar
˚
a sende til v
˚
ar maskin.
arion# xhost +
access control disabled, clients can connect from any host
arion#
Dette vert fr
˚
ar
˚
add uansett,— her har vi i praksis ingen kontroll med kven som
har tilgang. Av og til kan det vere nødvendig
˚
a gje enkelte maskiner tilgang
p.g.a at programvaren er gamal og ikkje støttar dei siste metodane for akess-
kontroll. Ver spesielt nøye med
˚
a kun gje desse maskinene tilgang og sett tilbake
aksessrettighetane etter at programmet er avslutta.
arion# xhost +zevs
zevs being added to access control list
arion#
Som standard vil alle maskinene v
˚
are kun ha tilgang slik at lokal maskin har
lov til
˚
a sende klientar til eigne X–serverprosessar. Det vil seie at i alle oppstart-
skript blir kommandoen xhost - kjørt. Det er likevel mogleg at andre bruka-
rar kan kan sende klientar kvarrandre p
˚
a same maskin,— derfor har MIT X–
Consortium laga protokollen MIT–MAGIC–COOKIE–1.
21.6.2 Protokollen MIT–MAGIC–COOKIE–1
Protokollen MIT–MAGIC–COOKIE–1 baserer seg p
˚
a mange m
˚
atar p
˚
a aksess-
rettighetane for filar i UNIX. P
˚
a heimekatalogen opprettar ein ei fil .Xauthority,
denne skal kun vere lesbar og skrivbar for eigar.
21.6. X WINDOWS OG SIKKERHET 211
zevs# ls -al .Xauthority
-rw——- 1 trondk 47 Nov 5 20:12 .Xauthority
zevs#
I denne fila ligg det innslag som inneheld følgande parametre. Det symbols-
ke namnet for display dvs. verdien av miljø-variabelen DISPLAY, protokoll
5
og
den s
˚
akalla COOKIE. Begrepet COOKIE blir brukt om ein hexadesimal streng
som er ein slags nøkkel for
˚
a kunne aksessere Xserveren. For kvar gong ein kli-
ent skal kontakte Xserveren vil Xserver-prosessen sl
˚
a opp i denne fila og hente
ut denne strengen og be om
˚
a f
˚
a tilsvarande streng fr
˚
a klienten. Dersom begge
strengane er like vil Xserveren la klienten f
˚
a tilgang. Formatet p
˚
a .Xauthority er
ikkje lesbart,— derfor m
˚
a ein bruke programmet xauth for
˚
a kunne manipulere
p
˚
a innholdet i fila.
arion# xauth
Using authority file /home/zevs/ifitrondk/.Xauthority
xauth> help
add dpyname protoname hexkey add entry
exit save changes and exit program
extract filename dpyname... extract entries into file
help [topic] print help
info print information about entries
list [dpyname...] list entries
merge filename... merge entries from files
nextract filename dpyname... numerically extract entries
nlist [dpyname...] numerically list entries
nmerge filename... numerically merge entries
quit abort changes and exit program
remove dpyname... remove entries
source filename read commands from file
? list available commands
xauth>
Her har vi starta opp xauth og utført kommandoen help. Programmet er laga
slik at ein treng ikkje
˚
a starte det opp første og gje kommandoar etterp
˚
a. Ein
kan godt bruke programmet i batch–kommandoar,— som f.eks xauth list eller
xauth remove $DISPLAY. P
˚
a v
˚
are maskiner har eg laga programmet cookie som
lagar ein tilfeldig heksadesimal streng som kan brukast for
˚
a lage nøklar til
xauth i batch–kommandoar. Den vert brukt p
˚
a følgande m
˚
ate:
zevs# xauth add :0 . ‘cookie‘
zevs#
Punktumet i kommandoen er ein alias for protokollen MIT–MAGIC–COOKIE–
1,— dei andre protokollane brukar andre tegn. Etter at ein har lagt inn nøkkel
for display kan ein sjekke med kommandoen:
zevs# xauth list
5
Det er litt feil
˚
a kun snakke om protokollen MIT–MAGIC–COOKIE–1 fordi det vert brukt fleire
slike protokollar under X Windows. I tillegg til MIT–MAGIC–COOKIE–1 vert det brukt XDM–
AUTHORIZATION–1 og SUN–DES–1. I v
˚
art tilfelle vert det kun brukt MIT–MAGIC–COOKIE–1
fordi eksportreglane i USA ikkje tillet
˚
a eksportere DES–teknologi til andre land.DES=Data En-
cryption Standard
212 KAPITTEL 21. VINDUSSYSTEMET X WINDOWS
zevs/unix:0 MIT-MAGIC-COOKIE-1 2bbc8f6f31d7147c14b9b10515de155a57a
zevs#
Ved feil i .Xauthority eller forsøk p
˚
a tilgang til ein Xserver utan nøkkel vil ein
f
˚
a:
zevs# xterm &
Xlib: connection to ”:0.0refused by server
Xlib: Client is not authorized to connect to Server
Error: Can’t open display: :0.0
zevs#
P
˚
a v
˚
are maskiner vil dette ikkje vere noko problem,— stort sett vil ein logge
inn via xdm (X Display Manager ),— dette programmet vil som standard lage
ein tilfeldig nøkkel eller COOKIE for den som loggar inn. I tilegg har ein kun
ein heimekatalog i nettet og dermed er .Xauthority–fila den samme uansett kva
maskin ein brukar. Problemet oppst
˚
ar n
˚
ar ein loggar p
˚
a andre maskiner der ein
har ein anna heimekatalog. Derfor m
˚
a ein overføre riktig innslag i .Xauthority
over til heimekataloen p
˚
a den andre maskina. P
˚
a UNIT har ein laga eit program
for
˚
a automatisk overføre COOKIE og starte klientar p
˚
a andre maskiner. Dette
programmet heiter startxcmd.
zevs# startxcmd vier.idt.unit.no
zevs#
Dersom ein startar startxcmd kun med maskinnamnet som parameter vil ein
starte opp ein xterm p
˚
a denne maskina. Ønskjer ein
˚
a starte opp noko anna enn
xterm kan ein spesifisere kommandoen etter maskinnamnet.
zevs# startxcmd vier.idt.unit.no xmaple
zevs#
Dersom ein ikkje finn denne kommandoen m
˚
a ein ta i bruk xauth sine batch–
mulighetar og programmet xon.
zevs# xauth extract - $DISPLAY | rsh vier.idt.unit.no xauth merge -
zevs# xon vier.idt.unit.no xmaple &
zevs#
Programmet xon startar klientar p
˚
a andre maskiner men er mykje meir primi-
tiv enn startxcmd,— men i prinsippet kan ein seie at xon gjer det same som
startxcmd.
I X11R6 har ein teke i bruk sikkerhetsprotokollen kerberos,— sidan dette er ri-
meleg ferskt har eg end
˚
a ikkje hatt mulighet til
˚
a sette meg inn i hverken teorien
eller korleis kerberos fungerer i praksis. Det er iallefall liten tvil om at kerberos
vil blir brukt i alle sikkerthetsmekanismer for distribuert databehandling som
X Windows, fjerninnlogging, DCE (Distributed Computing Enviroment ), osv. . .
21.7 Ressursdatabasen
Under X Windows opererer ein med begrepet ressursar,— dette er verdiar for
paramtre som kan settast i applikasjonar. Vanlegvis er dette geometri, fontar,
fargar osv. . . ,— og desse kan ein legge inn i ein ressursdatabase. Ved
˚
a bruke
21.7. RESSURSDATABASEN 213
denne databasen kan ein enkelt og greit sette desse parameterane utan
˚
a bruke
lange og innfløkte kommandolinjer. Alle innslag kan faktisk settast p
˚
a kvart
enkelt vindu.
Alle ressursar kan skrivast inn i ei vanleg testfil og vert lasta inn i miljøet n
˚
ar
ein sesjon vert starta opp. Alle applikasjonar under X Windows har ei fil som
er global.- der alle standard parametre er definert. Vanlegvis vil denne fila lig-
ge p
˚
a /usr/lib/X11/app-defaults,— men dette kan ein forandre n
˚
ar applikasjonen
vert kompilert
6
. Vil ein ha sine eigne ressursar legg ein dette i fila .Xdefaults
p
˚
a heime-katalogen. Ressursane i denne fila vert fletta saman med dei globale
ressursane.
Formatet i desse filane best
˚
ar av namn-verdi par. Desse namna kan vere spesi-
fikke for applikasjonar,— men dei kan ogs
˚
a inneholde jokerteikn som gjer at
ein kan bruke dei som globale ressursar. Namna inneheld kombinasjonar av
store og sm
˚
a bokstavar og ein m
˚
a passe p
˚
a
˚
a f
˚
a desse og jokerteikna rett for at
dei skal fungere som forventa.
zevs# cat .Xdefaults
.
.
.
SunSourceBrowser.Consider
Case: 1
SunSourceBrowser.Show Match Context: 1
SunSourceBrowser.Show Other Query Match Primary Arrow: 1
SunSourceBrowser.Wrap Match Line: 0 Scrollbar.JumpCursor: True
xterm*loginShell: true
xterm*scrollBar: true
xterm*saveLines: 5000
xterm*geometry: 80x24
xterm*font: -adobe-courier-medium-r-normal–14-140-75-75-m-90-iso8859-1
xterm*curses: true
basicLocale: C
displayLang: C
inputLang: C
numeric: C
timeFormat: C
xrn*geometry: 700x700
xrn.tmpDir: /tmp
xrn*replyTo: Trond.Kandal@ifi.unit.no
xrn*deadLetters: /dead.article
.
.
.
zevs#
Kvart innslag i denne fila m
˚
a st
˚
a p
˚
a ei linje, blanke linjer bli ignorert. Kommen-
tarar kan st
˚
a bak teiknet ! og fortsette til enden p
˚
a linja. Namn til venstre p
˚
a
linje, som endar med : (kolon),— deretter mellomrom eller tabulator og resten
av linja er verdien for ressursen. Ein kan i mange tilfeller fortsette linja dersom
6
Som regel vil dei fleste system avvike fr
˚
a dette fordi det er upraktisk
˚
a blande lokale installa-
sjonar med operativsystemet n
˚
ar ein skal oppgradere operativsystemet. Derfor vil dei fleste sys-
temadministratorar legge X Windows under /usr/local/X11 og bibliotek o.l. under /usr/local/lib/X11.
P
˚
a UNIT brukar vi store for
˚
a distribuere programvaren automatisk,— derfor vil ein finne slike
installasjonar under /store/bin og /store/lib/X11.
214 KAPITTEL 21. VINDUSSYSTEMET X WINDOWS
ein endar linja med ein \.
Namna i fila er kontruert hierarkisk med applikasjonsnamnet først, deretter
namnet p
˚
a vindu,— og til slutt ressursnamnet. Sjølv om ein kan sette ressur-
sar uavhengig av applikasjon og vindu,— kan ein erstatte alle komponentar i
namnet unntatt ressursnamnet med *,— som betyr alle desse komponentane.
*bitmapFilePath: /home/zevs/ifi/trondk/bitmap:/usr/include/X11/bitmap
Dette vil sette bitmap–stien for alle applikasjoner som kan bruke denne ressursen,—
medan
Xterm*Foreground: white
vil sette forgrunnen til kvitt for alle xterm–vindu. Vanlegvis vil ein finne dei res-
sursane som kan forandrast i manualsida for alle applikasjonar under X Win-
dows.
Kapittel 22
Systemadministrasjon
Etter at eg skreiv dette kurset har ef f
˚
att mange henvendelsar om
˚
a skrive meir
om systemadministrasjon for UNIX. Det har eg no tenkt
˚
a gjere. . .
Problemet er at UNIX er ganske kompleks og det er vanskeleg
˚
a vete kor ein
skal starte.
Eg f
˚
ar ta ein sjanse og starte med det heilt grunnleggande og s
˚
a f
˚
ar g f
˚
a kritikk
og heller omorganisere etter kvart.
215
Kapittel 23
Kjøyre-niv˚a
Den første prosesseb som blir strta opp p
˚
a ei UNIX-maskiner er swapper,- etter
denne kjem init. Det er dette programmet som løfter ei UNIX-maskiner etter
h
˚
aret slik at ein f
˚
ar kontakt med maskina. B
˚
ade BSD-UNIX og System V har
dette programmet og det fungerer stort sett likt,- bortsett fr
˚
a at System V har
7 kjøyre-niv
˚
a medan BSD-UNIX har berre 3
1
. Det er o
´
g berre System V som i
prinsippet opererer med kjøyre-niv
˚
a ( i dokumentasjon bli dette omtala som
run-levels ) og som utnyttar dette. Før vi g
˚
ar vidare med begrepa og organise-
ringa av kjøyre-niv
˚
a kan vi kikke p
˚
a kva vi meinar med dette:
0 Maskina er “nede”,- eller i boot-monitor. Ein kan sl
˚
a av straumen eller
gje ein boot-kommando p
˚
a konsollet for
˚
a forandre modus.
1 Ein-bruker,- der er kun root som f
˚
ar logge inn.
2 Fleir-brukar,- med alle baskgrunnsprosessar i gang likevel har ikkje ma-
skina full nettverkstilgang.
3 Same som niv
˚
a 2,- men no med full nettverkstilgang.
4 Ubrukt (dvs. kan brukast dersom ein definerer sitt eige niv
˚
a).
5 Naskina er “nede”,- dvs. straumen m
˚
a sl
˚
aast av og p
˚
a for at maskina skal
skifte modus.
6 Restart-modus ( dvs. maskina er p
˚
a veg ned og skal automatisk kome
opp igjen).
Kort sagt kan ein seie at alle niv
˚
a unntatt 2, 3 og 4 er dei niv
˚
a som der ei UNIX-
maskin er operasjonell. Alle andre niv
˚
a er for administrasjon eller ein form for
nedkjøyringsmodus. Korleis kan en s
˚
a vete kva for eit niv
˚
a ein befinn seg i?
Ved
˚
a kjøyre kommandoen who.
hades# who -r
run level 3 Dec 15 10:34 2 1 .
hades#
1
N
˚
ar eg seier at BSD-UNIX har 3 kjøyre-niv
˚
a,- meinar eg 0=avsl
˚
att/boot-monitor, 1=Ein-bruker,
2=Fleir-bruker
216
23.1. INITIERINGSFILA FOR INIT,- /ETC/INITTAB 217
Dei tre tala etter datoen er noverande niv
˚
a, forrige niv
˚
a og niv
˚
aet før det igjen.
For
˚
a forandre niv
˚
a m
˚
a ein ha root-tilgang og d
˚
a kan ein gjere dette med init
eller shutdown. Litt avhengig av system vil du finne init i enten /etc eller i /sbin,-
shutdown vil ein vanlegvis finne i /usr/sbin. Komamndoen init er rimeleg enkel,-
det er berre
˚
a spesifisere eit nummer som parameter,- s
˚
a vil maskina entre dette
niv
˚
aet.
hades# init 6
Dermed vil maskina g
˚
a over til niv
˚
a 6,- dette eksemplet er ein enkel m
˚
ate
˚
a
restarte maskina. Eg har sett den brukt,- men eg trur ikkje likevel at eg vil
anbefale denne metoden.
Komandoen shutdown kommuniserer med init,- men har ein del fleire paramet-
re og opsjonar. Opsjonen -g og eit nummer gjer at ein spesifisere antal sekundar
før maskina vil skifte niv
˚
a. I tillegg vil shutdown alltid kringkaste ei melding til
alle brukarar p
˚
a maskina før den skiftar niv
˚
a.
hades# shutdown -g600 -i6 -y
Dette eksemplet vil restarte maskina om 5 minutt. Opsjonen -i ( init-state) og 6
talet fortel at niv
˚
aet skal settast til niv
˚
a 6. Opsjonen -y er teke med fordi at shut-
down skal forandre kjøyre-niv
˚
a utan
˚
a be om ekstra bekreftelse. Den same kom-
mandoen med init ( som er vist i forrige eksempel ) vil ogs
˚
a sende ut ei krin-
kasta melding,- men vil forandre niv
˚
a umiddelbart utan at brukararne hadde
f
˚
att sjanse til
˚
a lagre og logge seg ut.
23.1 Initieringsfila for init,- /etc/inittab
Fila /etc/inittab er som namnet tilseier initieringsfila for init. Dem inneheld ei
liste med askjonar som skal utførast n
˚
ar ei UNIX-maskin skiftar kjøyre-niv
˚
a.
Denne fila kjem ifr
˚
a Linux,- denne er ikkje heilt typisk for UNIX System V.
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Version: @(#)inittab 2.04 17/05/93 MvS
# 2.10 02/10/95 PV
#
# Author: Miquel van Smoorenburg, <miquels@drinkel.nl.mugnet.org>
# Modified by: Patrick J. Volkerding, <volkerdi@ftp.cdrom.com>
#
# Default runlevel.
id:5:initdefault:
# System initialization (runs when system boots).
si:S:sysinit:/etc/rc.d/rc.S
# Script to run when going single user (runlevel 1).
su:1S:wait:/etc/rc.d/rc.K
218 KAPITTEL 23. KJØYRE-NIV
˚
A
# Script to run when going multi user.
rc:123456:wait:/etc/rc.d/rc.M
# What to do at the "Three Finger Salute".
ca::ctrlaltdel:/sbin/shutdown -t5 -rfn now
# Runlevel 0 halts the system.
l0:0:wait:/etc/rc.d/rc.0
# Runlevel 6 reboots the system.
l6:6:wait:/etc/rc.d/rc.6
# What to do when power fails (shutdown to single user).
pf::powerfail:/sbin/shutdown -f +5 "THE POWER IS FAILING"
# If power is back before shutdown, cancel the running shutdown.
pg:0123456:powerokwait:/sbin/shutdown -c "THE POWER IS BACK"
# If power comes back in single user mode, return to multi user mode.
ps:S:powerokwait:/sbin/init 5
# The getties in multi user mode on consoles an serial lines.
#
# NOTE NOTE NOTE adjust this to your getty or you will not be
# able to login !!
#
# Note: for ’agetty’ you use linespeed, line.
# for ’getty_ps’ you use line, linespeed and also use ’gettydefs’
c1:1235:respawn:/sbin/agetty 38400 tty1 linux
c2:1235:respawn:/sbin/agetty 38400 tty2 linux
c3:5:respawn:/sbin/agetty 38400 tty3 linux
c4:5:respawn:/sbin/agetty 38400 tty4 linux
c5:5:respawn:/sbin/agetty 38400 tty5 linux
c6:45:respawn:/sbin/agetty 38400 tty6 linux
# Serial lines
#s1:45:respawn:/sbin/agetty 19200 ttyS0 vt100
#s2:45:respawn:/sbin/agetty 19200 ttyS1 vt100
# Dialup lines
#d1:45:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS0 vt100
#d2:45:respawn:/sbin/agetty -mt60 38400,19200,9600,2400,1200 ttyS1 vt100
# Runlevel 4 used to be for an X-window only system, until we discovered
# that it throws init into a loop that keeps your load avg at least 1 all
# the time. Thus, there is now one getty opened on tty6. Hopefully no one
# will notice. ;ˆ)
# It might not be bad to have one text console anyway, in case something
# happens to X.
x1:4:wait:/etc/rc.d/rc.4
23.1. INITIERINGSFILA FOR INIT,- /ETC/INITTAB 219
# End of /etc/inittab
Grovt sett kan ein dele inn inittab i 4 delar, som er delt med kolon.
id:niv˚a:aksjon:prosess
id skal vere identifikasjon av prosessen,- kan vere fr
˚
a 1 til 4 teikn.
niv˚a kjøyre-niv
˚
aet som denne aksjonen skal utførast.
aksjon eit reservert ord som fortel init kva den skal gjere.
prosess den kommandoen som skal utførast.
Den første linja i inittab som ikkje er kommentert vekk:
id:5:initdefault:
fortel at UNIX-maskina skal opp p
˚
a dette niv
˚
aet n
˚
ar den startar,- dersom det
ikkje er oppgjeve noko anna som parametre til boot-programmet. Aksjonane
kan variere litt fr
˚
a system til system, men her dei vanlege aksjonane som ein
vil finne i /etc/inittab.
boot dette innslaget er brukt ved oppstart av maskina,- men ikkje i andre sa-
manhengar.
sysinit dette innslaget m
˚
a kjøyrast før ein kan kome i kontakt med maskina
via konsollet ( som vi ser kjøyrere init skriptet for
˚
a kome opp i ein-bruker.
bootwait dette innslaget vert brukt ved oppstart av maskina,- init skal vente
til prosessen er ferdig eller døyr. init vil heller ikkje starte prosessen p
˚
a
nytt dersom den feilar.
once n
˚
ar kjøyre-nov
˚
aet er n
˚
add vil init starte denne prosessen,- init vil ikkje
vente til prossen er ferdig.
off dersom prosessen kjøyrer vil init sende ein melding og drepe denne pros-
sen innan 20 sekund.
powerfail denne prosessen vart starta dersom maskina trur at straumen vert
broten. Signal 19 er som regel ein indikasjon p
˚
a straum-brot.
powerwait|powerokwait dersom straumen kjem tilbake før maskina har g
˚
att
ned vil init prøve
˚
a ta den opp igjen.
wait init skal starte denne prosessen og vente til den er ferdig før den g
˚
ar vi-
dare.
syncinit denne opsjonen fortel init det nye intervallet for synkronisering av
minne med disken. Dvs. kor ofte init skal skrive modifiserte buffer i min-
net ut p
˚
a disk.
respawn fortel at init skal starte denne prosessen og restarte den igjen kvar
gong den stoppar.
220 KAPITTEL 23. KJØYRE-NIV
˚
A
23.2 K* og S* skript
Kjøyre niv
˚
a hadde hatt lite
˚
a seie dersom det ikkje hadde hatt ein praktisk
betydning,- det er her K* og S* skript kjem inn. Ei UNIX System V maskin delar
inn i kjøyre-niv
˚
a fordi den skal utføre bestemte aksjonar for kvart kjøyre-niv
˚
a.
P
˚
a /etc vil det ligge skript med namn /etc/rc0, /etc/rc1, . . . ,- som igjen vil utføre
skript som ligg i katalogane etc/rc0.d, /etc/rc1.d, /etc/rc2.d, . . . P
˚
a desse katalogane
ligg dei s
˚
akalla K* og S* skripta. Alle skript som startar med K skal utførast n
˚
ar
maskina g
˚
ar ned eit kjøyreniv
˚
a og S skripta skal utførast n
˚
ar maskin g
˚
ar opp
eit kjøyreniv
˚
a.
hades# ls -l /etc/rc2.d
total 48
-rwxr--r-- 4 root 318 Sep 27 1993 K20lp
*
-rwxr--r-- 5 root 1166 Sep 27 1993 K60nfs.server
*
-rwxr--r-- 5 root 1160 Sep 27 1993 K65nfs.client
*
-rwxr--r-- 3 root 516 Sep 27 1993 K92volmgt
*
-rw-r--r-- 1 root 1369 Sep 27 1993 README
-r-xr--r-- 2 root 369 Sep 27 1993 S00sxcmem
*
-rwxr--r-- 3 root 423 Sep 29 1994 S01MOUNTFSYS
*
-rwxr--r-- 2 root 2035 Sep 27 1993 S05RMTMPFILES
*
-rwxr--r-- 2 root 883 Sep 27 1993 S20sysetup
*
-rwxr--r-- 2 root 543 Sep 27 1993 S21perf
*
-rwxr-xr-x 2 root 305 May 27 1993 S30sysid.net
*
-rwxr--r-- 4 root 1249 Sep 27 1993 S47asppp
*
-rwxr--r-- 2 root 2915 Sep 27 1993 S69inet
*
-rwxr--r-- 2 root 202 Sep 27 1993 S70uucp
*
-rwxr--r-- 4 root 3106 Jun 21 1994 S71rpc
*
-rwxr-xr-x 2 root 398 May 27 1993 S71sysid.sys
*
-rwxr-xr-x 2 root 1579 May 27 1993 S72autoinstall
*
-rwxr--r-- 2 root 1456 Sep 27 1993 S72inetsvc
*
-rwxr--r-- 4 root 557 Sep 27 1993 S73autofs
*
-rwxr--r-- 5 root 1160 Sep 27 1993 S73nfs.client
*
-rwxr--r-- 4 root 531 Sep 27 1993 S74syslog
*
-rwxr--r-- 4 root 480 Sep 27 1993 S75cron
*
-rwxr--r-- 2 root 134 Sep 27 1993 S80PRESERVE
*
-rwxr--r-- 4 root 318 Sep 27 1993 S80lp
*
-rwxr--r-- 4 root 833 Sep 27 1993 S88sendmail
*
-rwxr--r-- 4 root 408 Jun 21 1994 S88utmpd
*
lrwxrwxrwx 1 root 31 Aug 10 1994 S89bdconfig -> ../init.d/buttons_n_dials-setup
-rwxr-xr-x 2 root 975 Sep 8 1993 S91gsconfig
*
-rwxr-xr-x 2 root 1258 Sep 8 1993 S91gtconfig
*
-rwxr-xr-x 2 root 1642 Sep 8 1993 S91leoconfig
*
-r-xr-xr-x 2 root 631 Sep 8 1993 S92rtvc-config
*
-rwxr--r-- 3 root 516 Sep 27 1993 S92volmgt
*
-rwxr--r-- 4 root 388 Sep 27 1993 S99audit
*
hades#
Som vi ser har skripta namn som startar med K eller S,- deretter eit to-sifra
nummer fr
˚
a 00 til 99 og eit namn for operasjonen. Sifferet angje rekkefølgen
for n
˚
ar skriptet skal utførast. Dei med lavast nummer vert utført først ( dette
23.2. K* OG S* SKRIPT 221
er det skallet som bestemmer fordi den vil sortere filnamn etter rekkefølgen
i tegn-tabellen og der vil tal kome før bokstavar og store bokstavar før sm
˚
a
bokstavar). Eit eksempel p
˚
a korleis /etc/rc0 kan sj
˚
a ut:
#! /bin/sh
..
a=‘stty -g‘ # Save stty values for later restoration
echo ’The system is comin down.’
if [ -d /etc/rc0.d/K
*
]
then
for f in /etc/rc0.d/K
*
{
if [ -s ${f} ]
then
/bin/sh ${f} stop
fi
}
for i in /etc/rc0.d/S
*
{
if [ -s ${f} ]
then
/bin/sh ${f} start
fi
}
fi
trap "" 15
kill -15 -1
sleep 10
/etc/killall 9 2>/dev/null
sleep 10
sync;sync;sync
/etc/umountall
stty $a 2>/dev/null # restore saved stty values
sync;sync
echo ’
The system is down.’
sync
Mange gongar vil ein oppleve at S* og K* skriptet er same fil,- som regel vil
dette vere same fila som er lenka til kvarande med ei hard lenke. I tillegg ogs
˚
a
til ei fil i ein anna katalog. Under Solaris 2.x vil ein som regel legge filane i
/etc/init.d og lenke filane inn til den aktuelle katalogen. Eit eksempel p
˚
a ei fil
som skal starte xdm ( X Display Manager ),- som er programmet som set opp
innloggingbilde via X Windows.
#! /bin/sh
#set -x
#
222 KAPITTEL 23. KJØYRE-NIV
˚
A
killproc() { # kill the named process(es)
pid=‘/usr/bin/ps -ef | /usr/bin/grep $1 |
/usr/bin/grep -v grep | /usr/bin/grep -v /bin/sh |
/usr/bin/awk ’{print $2}’‘
if [ "${pid}" != "" ] ; then
echo $2
kill -TERM ${pid} > /dev/null 2>&1
fi
}
case "$1" in
’start’)
#
# Start the server-prosess
#
if [ -f /store/bin/xdm -a -f /local/lib/X11/xdm/xdm-config ] ; then
echo ’Starting xdm...\c’
/store/bin/xdm -config /local/lib/X11/xdm/xdm-config &
echo ’ Done.’
fi
;;
’stop’)
#
# Stopping the server-prosess
#
killproc \/store\/bin\/xdm "Stopping xdm..."
;;
*
)
echo "Usage: /etc/init.d/xdm.server { start | stop }"
;;
esac
exit 0
Som vi ser i dette tilfellet er K og S skriptet same skriptet,- forskjellen er at
K-skript blir kalla med “stop” som første parameter og S-skriptet med “start”,-
jmfr. eksemplet med /etc/rc0. Valgstrukturen med case . . . esac vil foreta dei nødvendige
operasjonane ut fr
˚
a parametre.
Kapittel 24
DNS
24.1 Kvifor DNS?
Kvifor treng ein DNS? S
˚
a lenge ein er tilknytta internet og brukar dei vanlege
tenestene som epost, WWW, fjerninnlogging . . . treng ein DNS. Utan DNS ville
ingen av desse tenestene fungere
1
Iallefall er det enklare for oss menneska
˚
a
huske www.coop.no enn 85.19.206.22. Medan Internet end
˚
a var ung laga ein /etc/
hosts som skulle ta seg av IP–adresse til namnkonvertering.
# @(#) ident. /etc/hosts
127.0.0.1 localhost
129.241.163.2 poseidon.ifi.unit.no poseidon
129.241.163.3 uranus.ifi.unit.no uranus
129.241.164.12 zevs.ifi.unit.no zevs
129.241.164.13 hades.ifi.unit.no hades
Dette vil fort vekse ein over hovudet dersom ein har mange maskiner
˚
a drive.
Derfor er det enklare med ein namnetenar som der alle prossessar, maskiner
og brukarar kan sl
˚
a opp.
DNS er ein stor distribuert database som deler opp Internet i eit hierarki (ogs
˚
a
kalla domener) der ein eller fleire maskiner er ansvarleg for sitt domene eller
hierarki
2
. Dersom det er fleire namnetenarar for eit domene vil ein gjerne dele
dei inn i primær og sekundær.
24.2 Hierarki
Eit typisk domene er Universitetet i Trondheim,- unit.no med ei heil rekkje
subdomener. Som f.eks ifi.unit.no, nvg.unit.no og idt.unit.no. P
˚
a øverste niv
˚
a,
unit.no vil maskina ludvig.unit.no svare p
˚
a alle forespørslar til unit.no og ved
forespørslar til f.eks ifi.unit.no vil den vere sett opp til
˚
a vidaresende dei til
zevs.ifi.unit.no. Det same med nvg.unit.no og idt.unit.no.
1
Det vil seie at det kunne fungere dersom du kan alle numeriske Internetadresser i hovudet.
2
Det vil seie at ein namnetenar kan vere ansvarleg for fleire domener,— eller delegere eit do-
mene til fleire namnetenarar.
223
224 KAPITTEL 24. DNS
no.
unit.no.
ifi.unit.no.
idt.unit.no.
.
nvg.unit.no.
...
...
...
...
Figur 24.1: Eit dns hierarki
I tillegg vil ludvig.unit.no vere sett opp som sekundær namnetenar for iallefall
dei fleste subdomena p
˚
a unit.no. Likevel vil kvart subdomene har kvar sin se-
kundære namnetenar i tillegg.
24.3 Interaksjon med /etc/hosts og /etc/resolv.conf
Kvar maskin i subdomenet m
˚
a vete b
˚
ade domeneadressa og adressa til den
namnetenaren som skal svare p
˚
a forespørslar. Denne informasjonen finn ein i
fila /etc/resolv.conf p
˚
a alle UNIX–maskiner.
domain ifi.unit.no
nameserver 129.241.164.12
nameserver 129.241.109.109
nameserver 129.241.164.41
nameserver 129.241.1.5
Systemet som prøvar
˚
a omforme eit namn til ei adresse,— eller ei adresse til eit
namn er ein del av kjernen p
˚
a ei UNIX–maskin. N
˚
ar ein kommando vert utført
f.eks ssh uranus, vil den først sjekke om /etc/resolv.conf finst,- og finne domene-
namn og namnetenar. Deretter vil den legge p
˚
a domenenamnet p
˚
a maskin-
namnet og sende det til namnetenar. Dersom namnetenaren ikkje finn namnet
skal den sl
˚
a opp i /etc/hosts
3
24.4 Konfigurasjon av DNS
Konfigurasjonen for ein namnetenar vil vanlegvis ligge p
˚
a fila /etc/named.boot .
Grunnen til at fila heiter named.boot,– kjem av at programmet som implemente-
rer sjølve namneteninga heiter named (NAMEserver Daemon). Dersom ei maskin
3
Som vanleg er mange leverandørar som lagar sin eigen vri. P
˚
a maskiner med SunOS vil den
alltid først sl
˚
a opp i /etc/hosts. Hos andre levrandørar er det vanleg
˚
a p
˚
averke rekkefølgen for opp-
slag v.h.a konfigurasjon i diverse filar.(Ultrix: /etc/svc.conf , Linux og Solaris 2.x: /etc/nsswitch.conf )
24.4. KONFIGURASJON AV DNS 225
er namnetenar vil ein finne igjen programmet i prosesslistinga som in.named el-
ler named. Fila /etc/named.boot skal:
liste alle domene som maskina er namnetenar for.
avgjere som maskina er primær eller sekundær namnetenar for dei do-
menene.
finne ut kor maskina kan finne tilleggsinformasjon som definerer rolla for
namnetenaren i alle domener.
;
; #(@) ident. /etc/named.boot for ifi.unit.no
;
directory /var/domain
;
cache . named.cache
;
; type domene fil eller maskin
;
primary 0.0.127.in-addr.arpa. pz/0.0.127
primary ifi.unit.no. pz/ifi.unit.no
primary 163.241.129.in-addr.arpa. pz/163.241.129
primary 164.241.129.in-addr.arpa. pz/164.241.129
secondary nvg.unit.no. 129.241.161.10 sz/nvg.unit.no
secondary avh.unit.no. 129.241.1.5 sz/avh.unit.no
;
forwarders 129.241.109.109 ; where to send unresolved queries
Den første linja i fila directory /var/domain gjer at namnetenarprogrammet skif-
tar katalog til /var/domain. Linja
cache . named.cache
fortel at programmet skal legge innholdet i denne fila inn i cache–bufferet. Inn-
holdet i denne fila skal fortelje kor ein kan finne maskiner som er tenarar for
“rotdomenet”(dvs. rotdomenet er blir angitt som “.”).
S
˚
a kjem det linjer som set opp primære soner og sekundære soner. For alle
primære soner vil tenarprogrammet finne dataene p
˚
a diverse filar p
˚
a katalo-
gen pz (dvs. katalogen /var/domain/pz). For dei sonene den er sekundær namne-
tenar skal den først prøve
˚
a sl
˚
a opp i dei maskinene som er oppgitt med IP–
adresse,— deretter lokale filar. Desse lokale filane vert med jamne mellomrom
henta ned fr
˚
a den primære namnetenaren (dette er alts
˚
a filar som blir automa-
tisk oppdatert).
Til slutt forwarders,- dette er maskiner som kan motta rekursive forspørslar der-
som maskina ikkje kan finne adressene sjølv.
Alle kommentarar vert innleia med teiknet ; og fortset til slutten av linja (dette
er synes kanskje rart ettersom UNIX vanlegvis brukar teiknet # for
˚
a innleie
kommentarar).
226 KAPITTEL 24. DNS
24.5 Domene filane
P
˚
a domene ifi.unit.no har eg valgt
˚
a legge filane p
˚
a katalogen /var/domain/pz.
Som vi s
˚
ag p
˚
a /etc/named.boot vil filane heite det same som sonen, dei kan godt
ha andre namn, men eg har valgt dette for eg syns det er greit.
Fila ifi.unit.no skal ein ha ein autoritetspost.
;
$ORIGIN ifi.unit.no.
;
@ IN SOA zevs.ifi.unit.no. hostmaster.ifi.unit.no. (
120023 ; serial
86400 ; refresh
600 ; retry
259200 ; expire
86400 ) ; minimum TTL
;
@ IN NS zevs.ifi.unit.no.
@ IN NS hera.ifi.unit.no.
@ IN NS ludvig.unit.no.
@ IN NS runix.runit.sintef.no.
;
;
@ 129.241.164.12
;
;
zevs IN A 129.241.164.12
;
hera IN A 129.241.164.41
IN MX 10 zevs.ifi.unit.no.
;
hades IN A 129.241.164.13
IN MX 10 zevs.ifi.unit.no.
...
Dette er fila for namn til IP–adresse oversetting,— og det er her dei fleste res-
sursane vert lagt inn.
Alle soner skal starte med SOA,— det definerer eit domene og deklarere ein
autorisert maskin for dette domenet. Alle spørsm
˚
al ang
˚
aande namnetenaren
skal rettast til hostmaster@ifi.unit.no (legg merke til at @ er bytta ut med . for
˚
a
forme ei lovleg epostadresse). I tillegg best
˚
ar posten av 5 parametre som skal
regulere aktiviteten til namnetenaren.
Den første er eit serie nummer som skal assosierast med versjonen av dataene
i fila. Dersom dataene vert forandra skal dette nummeret inkrementerast med
1 for
˚
a reflektere at fila er forandra. N
˚
ar ein sekundær namnetenar sjekkar om
dataene er forandra vil den samanlikne sitt serienummer med serienummeret
fr
˚
a den primære namnetenaren. Dersom dei er forskjellig vil den sekundære
namnetenaren hente over sonefilane.
Den neste er oppfriskingsintervall. N
˚
ar ein sekundær namnetenar har henta
24.5. DOMENE FILANE 227
over filane skal dette talet fortelje kor lenge den skal vente før den skal sjekke
p
˚
a nytt om filane er forandra. Verdien er oppgjeve i sekundar.
Det neste talet fortel kor lenge den sekundære namnetenaren skal vente før
den prøvar p
˚
a nytt dersom den f
˚
ar svar fr
˚
a den primære namnetenaren. Dette
talet er ogs
˚
a i antal sekund.
Den 4. verdien angjev kor lenge ein sekundær namnetenar skal holde p
˚
a data-
ene før den f
˚
ar ein oppdatering fr
˚
a den primære namnetenaren. Dersom den
ikkje f
˚
ar oppdatering iløpet av 3 dagar (259200 sekund) vil den anta at datane
er feil og vil forkaste dei.
For
˚
a lage minst mogleg nettrafikk vil ein namnetenar holde data lokalt,- derfor
har den ein TTL (Time To Live). All informasjon som vert halde i ein namnetenar
vil eksistere i dei antal sekund som er definert i TTL–posten.
Dataene for DNS er koda i eit standard ressursformat. Ei linje med data i det-
te formatet blir kalla ein Ressurs Post,— eller p
˚
a engelsk Resource Record (RR).
Ressurs postar har formatet:
( eigar ) ( tid
˚
a leve ) klasse type RDATA
Vanlegvis vil ein ikkje bruke TTL,- d
˚
a dette er definert som standard i SOA.
For dei fleste applikasjoner vil klassa vere IN,— som betyr Internet–system.
Det kan ogs
˚
a vere CH for CHaos. Type definerer kva slags type data som skal
representerast,— type kan vere ein av følgande:
A Adresse post. Namn til TCP/IP–adresse.
NS Namneserver post. Set denne maskina til
˚
a vere namne-server.
SOA Start Of Authority. Deklarere at denne maskina vil ha autoritet over dette
domenet.
MX Mail eXchanger. Deklarerer at maskina skal vere e–postserver for dette do-
menet.
PTR PoinTer Record. Peikar til eit domene eller ein TCP/IP til namn.
HINFO Host INFO. Dette er meir til informasjon om den aktuelle maskina.
F.eks type el. fabrikat og operativsystem.
RDATA er data for posten,— for SOA vil dataene vere epostadressa til system-
administrator og 5 numeriske verdiar. For ein NS–post, namnet p
˚
a namnetenaren,—
og for ein A–post den numeriske IP–adressa.
For at DNS skal fungere smertefritt m
˚
a ein i tillegg kunne gjere reversoppslag,—
dvs. IP–adresse til namn. Som eksempel p
˚
a dette brukar eg fila 164.241.129.
;
$ORIGIN 164.241.129.in-addr.arpa.
;
@ IN SOA zevs.ifi.unit.no. hostmaster.ifi.unit.no. (
120023 ; serial
86400 ; refresh
600 ; retry
259200 ; expire
228 KAPITTEL 24. DNS
86400 ) ; minimum TTL
;
@ IN NS zevs.ifi.unit.no.
@ IN NS hera.ifi.unit.no.
@ IN NS ludvig.unit.no.
@ IN NS runix.runit.sintef.no.
;
1 IN PTR lade-gw.unit.no.
;
12 IN PTR zevs.ifi.unit.no.
13 IN PTR hades.ifi.unit.no.
...
Kvar linje i denne fila ein peikar som til eit fullt kvalifisert namn,— n
˚
ar ein
forespørsel p
˚
a 129.241.164.13 vert motteke vil den returnere hades.ifi.unit.no.
Sonefila 0.0.127 definerer den s
˚
akalla loopback for den lokale maskina,— den
skal ogs
˚
a vere med eit namnetenaroppsett. Denne fortel korleis maskina skal
sende forespørslar til seg sjølv. Denne fila vil sj
˚
a slik ut:
@ IN SOA zevs.ifi.unit.no. hostmaster.ifi.unit.no. (
120023 ; serial
86400 ; refresh
600 ; retry
259200 ; expire
86400 ) ; minimum TTL
;
@ IN NS zevs.ifi.unit.no.
;
1 IN PTR localhost.
Den observante leser har kanskje lagt merke til at eg avsluttar alle fullt kvali-
fiserte namn med .. Dette er signalerer at namnet er eit fullt kvalifisert namn,-
dersom ein ikkje avsluttar namnet med ein . vil namnetenaren legge til dome-
nenamnet.
...
12 IN PTR zevs
...
vil vere det same som:
...
12 IN PTR zevs.ifi.unit.no.
...
Teiknet . er med andre ord den s
˚
akalla toppnoden i Internet ( p
˚
a toppnoden i
Internet er domenenamnet .).
24.6 Signal
Etter at ein har f
˚
att named opp
˚
a g
˚
a,— kan ein sende signal til programmet v.h.a
kill som vil enten andre oppførselen til programmet eller f
˚
a den til
˚
a gjere andre
24.6. SIGNAL 229
aksjonar.
HUP f
˚
ar named til
˚
a lese /etc/named.boot og alle sonefilane p
˚
a nytt.
INT f
˚
ar named til
˚
a dumpe alle data p
˚
a fila /usr/tmp/named dump.db.
USR1 inkrementere loggeniv
˚
aet med 1 kvar gong dette signalet vert sendt.
USR2 sl
˚
ar av all logging.
N
˚
ar named startar opp vil den skrive prosessidentiteten sin i fila /etc/named.pid
. Dette er veldig hendig
˚
a bruke f.eks i skallprogram.
Kapittel 25
Opprette brukarar
Noko av det første ein systemansvarleg m
˚
a lære seg er
˚
a opprette brukarar,—
derfor er dette kanskje ein av dei viktigaste kunnskapane ein treng. For
˚
a kunne
gjere dette treng ein litt bakgrunnskunnskap om formatet p
˚
a dei forskjellige
filane som ein treng
˚
a oppdatere.
Ofte er oppretting av brukarar noko av det mest innfløkte ein kan gjere fordi
det eksisterer s
˚
a mange m
˚
atar
˚
a gjere dette p
˚
a. I tillegg har mange organisa-
sjonar s
˚
a forskjellig politikk om tilgang til filar og ressursar. Ettersom fleire og
fleire organisasjonar blir meir og meir nettverksbaserte med forskjellige platt-
formar som skal dele filar og andre ressursar vert kompleksiteten end
˚
a større.
Som regel finst det begrensingar n
˚
ar ein skal kombinere forskjellige løysingar
og d
˚
a er det ofte systemansvarleg som m
˚
a finne ei løysing ved
˚
a kombinere
brukarar og brukargrupper.
25.1 NIS, NIS+ eller Yellow Pages
N
˚
ar det handlar om brukarar, UNIX og nettverk m
˚
a ein ogs
˚
a forklare om NIS
, NIS+ eller Yellow Pages. Det er litt feil
˚
a samanlikne NIS+ med Yellow Pages,—
men prinsippet er stort sett det same. Yellow Pages er eigentleg det gamle nam-
net p
˚
a NIS,— men p
˚
a grunn av at namnet er patentbeskytta m
˚
atte ein skifte
namn til NIS. Namnet NIS st
˚
ar for Network Infomation Service og er ei katalog-
teneste som UNIX–maskiner brukar for
˚
a dele passordfil, gruppefil og ein del
andre filar over nettverk. Ein god del forenkla kan ein seie at dersom ein ikkje
har denne tenesta m
˚
a ein sørge for
˚
a oppdatere alle desse filane som NIS hand-
terer p
˚
a alle maskiner i det nettverket ein skal administrere.
I eit nettverk der det blir kjøyrt NIS m˚a ein ha ein maskin som er s
˚
akalla NIS–
master der ein oppdaterer dei filane som skal blir spreidd i nettverket. I tillegg
kan ein ha s
˚
akalla NIS–slavar som ogs
˚
a fungerer som ein slags MIS–master og
kan svare p
˚
a forespørslar,— men desse maskinene f
˚
ar berre kopi av filane som
dei legg p
˚
a disk fr
˚
a den som er NIS–master. Den siste typen er s
˚
akalla NIS–
klientar som m
˚
a gjere alle oppslag i katalogtenesta til enten NIS–slavar eller til
ein NIS–master. Alle typar maskiner har sjølvsagt ein lokal kopi av alle filane
230
25.2. FORMATET P
˚
A PASSORDFILA 231
som blir distribuert av NIS,— men dersom den ikkje finn det den leitar etter vil
maskina sl
˚
a opp i NIS.
NIS+ er vidareutvikling av NIS . Mykje av svakheten til NIS var at det i utgangs-
punktet var lagt lite vekt p
˚
a sikkerhet d
˚
a det vart utvikla. For
˚
a bøte p
˚
a dette
laga Sun Microsystems eit system som har mange likhetar med NIS ,— men
som internt er veldig forskjellig. Mellom anna er det lagt p
˚
a kryptering p
˚
a
all netttrafikk og ein kan lettare detaljstyre tilgangen til tenester og informa-
sjon. NIS hadde ogs
˚
a store kapasitetsproblem dersom nettverket var stort og ei
stor mengde av maskiner heile tida skulle ha oppdatert og konsistent katalog-
informasjon. Dersom nettverket best
˚
ar av meir enn 1000 maskiner bør ein bru-
ke NIS+istaden for NIS.
25.2 Formatet p˚a passordfila
Passordfila ligg p
˚
a /etc og heiter passwd (ja,— faktisk det same som kommando-
en for
˚
a skifte passord!). Formatet p
˚
a passordfila m
˚
a ein kunne dersom ein skal
opprette brukarar,— i prinsippet er det ganske enkelt. Fila inneheld 7 felt som
blir skilt med teiknet : (kolon). Det første feltet er brukernamnet, det krypter-
te passord, den numeriske identiteten, nummerisk gruppeidentitet, fulltnamn,
full sti til heimekatalogen og full sti for skall. Eit eksempel p
˚
a dette kan vere:
nils:FGsh/Ps7b.Stz:23409:14320:Nils Nilsen:/home/nils:/bin/bash
Ikkje alle system vil bruke dette formatet,— enkelt system som i tillegg bru-
kar /etc/shadow vil ikkje ha passordet i /etc/passwd Istaden brukar den ei fil /etc/
shadow som inneheld passordet. I tillegg inneheld /etc/shadow ein del ting til
som eg ikkje vil kome nærare inn p
˚
a end
˚
a. Dersom systemet brukar /etc/shadow
vil passordfeltet inneholde teiknet x. Grunnen til at ein legg passordet i /etc/
shadow er at p
˚
a den m
˚
aten f
˚
ar eit litt sikrare system. Dette skal eg kome tilbake
til seinare.
Teiknet “*” har ein spesiell betydning i passordfeltet enten det st
˚
ar i /etc/passwd
eller i passordfeltet i /etc/shadow . Dette teiknet kan ikkje forekome i eit lovleg
passord og blir derfor brukt for
˚
a stenge ein konto. For
˚
a vere heilt sikker p
˚
a
at ein har stengt kontoen bør ein ogs
˚
a sette inn /bin/false som skall p
˚
a denne
kontoen.
25.3 Formatet p˚a /etc/shadow
Fila /etc/shadow er delt inn i 9 felt med teiknet : (kolon) som skilleteikn. Den
startar med brukarnamn, s
˚
a passord, antal dagar sidan 1. januar 1970 passordet
vart endra, minimum antal dagar før ein kan forandre passordet, maksimum
antal dagar passordet er gyldig, antal dagar brukaren skal f
˚
a melding før ein
m
˚
a endre passordet, antal dagar kontoen kan vere inaktiv før den blir stengt,
antal dagar før kontoen blir stengt og siste feltet diverse flagg (dette feltet er
pr. dags dato ikkje i bruk).
olemann:Gfs3h/9nb7Jn.:35:30:90:7:30:365:
232 KAPITTEL 25. OPPRETTE BRUKARAR
Fila /etc/shadow er vanlegvis ikkje ei fil ein vil forandre p
˚
a for “hand”. P
˚
a dei
fleste system vil ein ha kommandoar for
˚
a gjere dette,– p
˚
a SunOS 5.x ( Solaris
2.x ) finst det f.eks ein kommando pwconvsom kan brukast for
˚
a oppdatere /etc/
shadow dersom ein har forandra /etc/passwd for “hand”. /etc/shadow har dess-
utan sterke aksessrettighetar for
˚
a unng
˚
a innsyn og for at den skal hindre
˚
a bli
forandra ved vanvare,— den har kun lesetilgang for root.
25.4 Formatet p˚a /etc/group
I fila /etc/group vil ein finne alle grupper som er definert p
˚
a eit UNIX–system.
Formatet p
˚
a denne er ogs
˚
a svært likt dei andre filane. Denne fila 4 felt,— sepa-
rert med teiknet : ( kolon) som dei andre filane. Første felt er namnet p
˚
a gruppa,
gruppepassord, numerisk identitet og siste felt er ei liste med brukarnamn skilt
med komma. Eksempel p
˚
a innhold i gruppefil:
hooters:
*
:13245:nils,magnus,olemann
I passord-fila definerer ein brukarar med numerisk gruppeidentitet,— dette
er den primære gruppa for ein brukar. Dersom vedkomande brukar skal vere
medlem av fleire grupper,— og det treng ein ofte, skal ein skrive inn vedko-
mande i brukarnamnlista i siste feltet.
25.5 Brukaridentitet i UNIX
Eit brukar-namn i UNIX er kun eit symbolsk namn i UNIX. Brukaridentiteten
er fullt og heilt knytta til den numeriske identiteten som ein har f
˚
att tildelt i
passordfila. UNIX operer ikkje internt med det symbolske brukarnamnet. Det-
te er kun ein slags merkelapp som blir brukt som referanse inn i passordfila
n
˚
ar ein loggar seg inn p
˚
a systemet. N
˚
ar ein listar ut filane sine, eller kjøyrer eit
program som treng
˚
a skrive ut det symbolske brukarnamnet m
˚
a UNIX alltid ha
lesetilgang til /etc/passwd for
˚
a sl
˚
a opp i passordfila med den numeriske brukar-
identiteten og finne det symbolske namnet for
˚
a kunne skrive det ut. Dersom
ein opprettar ein brukar med numerisk identitet 0,— s
˚
a vil vedkomande vere
superbruker p
˚
a lik linje med den brukaren som har det symbolske namnet root
sjølv om vedkomande har eit anna symbolsk brukarnamn. Alle andre som har
ein numerisk brukaridentitet ulik 0 kan ikkje vere superbruker p
˚
a systemet.
P
˚
a dei fleste system vil numeriske brukaridentitar under 100 vere reservert
for spesielle form
˚
al,— dette kan for spesielle systemprosessar eller program-
pakkar. Her er eit eksempel fr
˚
a RedHat–Linux:
root:6PG27vgXgU/Bs:0:0:root:/root:/bin/bash
bin:
*
:1:1:bin:/bin:
daemon:
*
:2:2:daemon:/sbin:
adm:
*
:3:4:adm:/var/adm:
lp:
*
:4:7:lp:/var/spool/lpd:
sync:
*
:5:0:sync:/sbin:/bin/sync
shutdown:
*
:6:0:shutdown:/sbin:/sbin/shutdown
halt:
*
:7:0:halt:/sbin:/sbin/halt
mail:
*
:8:12:mail:/var/spool/mail:
25.6. OPPRETTE BRUKARAR 233
news:
*
:9:13:news:/var/spool/news:
uucp:
*
:10:14:uucp:/var/spool/uucp:
operator:
*
:11:0:operator:/root:
games:
*
:12:100:games:/usr/games:
gopher:
*
:13:30:gopher:/usr/lib/gopher-data:
nobody:
*
:99:99:Nobody:/:
Ellers er det litt forskjellig kor stor verdi ein kan velge for den største nume-
riske brukaridentiten. SunOS 5.x taklar ein verdi opp mot ca. 2.1 miliardar,—
medan under Ultrix bør den ligge under 32000. I realiteten har dei fleste system
s
˚
apass stor verdimengde at dette ikkje skulle vere noko problem for dei fleste
organisasjonar. Pr. idag har f.eks Norges Tekniske Naturvitenskaplige Univer-
sitet (som eg tilhøyrer) ca. 21000 studentbrukarar og over 2500 brukarar for
tilsette i ein felles brukardatabase. Nesten alle studentane og ein god del tilset-
te er registrert p
˚
a ei felles UNIX–maskin utan at det skapar problem. Dei fleste
levrandørar er ogs
˚
a p
˚
a god veg over til 64–bits operativsystem og dermed vert
verdiomr
˚
adet kraftig utvida. Med eit 32–bits operativsystem og dersom ein
brukar eit heiltal med forteikn skal ein teoretisk oppn
˚
a:
maxuid : 2
15
= 32768 (25.1)
Med eit 64–bits operativsystem skal ein teoretisk oppn
˚
a:
maxuid : 2
31
= 2147483648 (25.2)
Under SunOS 5.x kan ein finne maxuid ved
˚
a leite etter konstanten MAXUID
i fila /usr/include/sys/param.h. P
˚
a min SUN–maskin som kjøyrer SunOS 5.5.1 ga
dette:
# grep MAXUID /usr/include/sys/param.h
#define MAXUID 2147483647 /
*
max user id
*
/
#
Det vil alts
˚
a seie at den tillet over 2.1 milliardar ulike numeriske brukeridentitetar.
SunOS brukar eit langt
1
heiltal med forteikn som representasjon for numerisk
brukeridentitet,— ref. matematisk eksempel: 25.2.
25.6 Opprette brukarar
Det finst sikkert like mange m
˚
atar
˚
a opprette brukarar som det finst system-
administratorar,— men det ein oppdagar er at mange av dei verktøy som finst
ofte kjem til kort. Dette nemmde eg i innleiinga,— og d
˚
a st
˚
ar ofte overfor pro-
blemet enten
˚
a godta det og gjere dei nødvendige handgrep etterp
˚
a dersom det
manglar funsjonalitet. Det som oftast skjer er at ein lagar seg sitt eige program
for
˚
a legge til brukarar,— eller gjer det manuelt.
25.6.1 Programmet vipw
Dersom ein ved
˚
a gjere det manuelt bør ein bruke ein eller anna form for l
˚
asing
av passordfila. D
˚
a BSD 4.4 kom i sin tid introduserte den ein ny kommando
1
Eit langt heiltal i programmeringsspr
˚
aket C vil som regel seie at heiltalet like langt som 2
gangar ordlengden for systemet.
234 KAPITTEL 25. OPPRETTE BRUKARAR
vipw som var kommandoen ein skulle bruke for
˚
a forandre p
˚
a passordfila. Den-
ne kommandoen er veldig enkel og tek ingen parametre,— det kanskje mange
mislikar er at den startar opp vidersom ein ikkje har sett miljøvariabelen EDI-
TOR til
˚
a peike p
˚
a noko anna. vipw gjer alle nødvendige l
˚
asing av passordfila
for
˚
a hindre at andre skal oppdatere den samstundes,— i tillegg gjer program-
met ein del konsistenssjekk for
˚
a hindre at passordfila skal bli heilt øydelagt.
Det forhindrar ikkje at ein kan gjere feil p
˚
a “vanlege” brukarar,— den vil stort
sett berre sjekke innslaget for root.
Denne kommandoen vil finst p
˚
a dei aller fleste BSD–baserte system eller sys-
tem som har BSD–utvidelsar. Eksempel p
˚
a dette er SunOS 4.x, SunOS 5.x,
RedHat–Linux, Ultrix og Digital UNIX.
Etter at ein har oppdatert passordfila m
˚
a ein p
˚
a Solaris 2.x kjøyre program-
met pwconv som eg nemnde tidlegare for ogs
˚
a
˚
a f
˚
a oppdatert /etc/shadow kjøyre
passordprogrammet passwd for
˚
a sette passord p
˚
a brukaren. Dette gjer ein med:
$ passwd brukernamn
New password:
New password (again):
Password changed
passwd: all authentication tokens updated successfully
$
Dette eksemplet er henta fr
˚
a RedHat–Linux v. 4.1. P
˚
a Solaris 2.5 har denne
kommandoen ein litt anna vri,— mest p
˚
a grunn av introduksjonen av ein ny
og sikrare katalogfunksjon som Sun Microsystems kallar NIS+.
$ passwd -r files brukernamn
New password:
Re-enter new password:
$
Her m
˚
a ein spesifikt seie ifr
˚
a om ein vil oppdatere /etc/passwd og /etc/shadow for-
di skifte av passord kan ogs
˚
a skje gjennom ei katalogteneste. Dersom passordet
vart skifta p
˚
a ei maskin som ikkje er NIS+–master eller NIS+–server m
˚
a pass-
ordet bli sendt over nettverket til riktig maskin slik at passordet blir oppdatert
og dermed kan bli spreidd til alle maskiner i nettverket.
Digital UNIX har valgt
˚
a legge passordet i /etc/passwd ,— men har laga ein liten
vri for
˚
a klare
˚
a sl
˚
a fort opp i passordfila. Derfor har DEC laga eit lite pro-
gram mkpasswd som m
˚
a kjøyrast etter at ein har oppdatert passordfila med
nødvendig informasjon og passord for
˚
a legge fila over ein slags indeksert
databaseformat som er raskare
˚
a sl
˚
a opp i enn ei flat fil. Etter at programmet
er kjøyrt vert filane /etc/passwd.dir og /etc/passwd.pag oppdatert. Brukaren vert
heller ikkje tilgjengeleg før ein har gjort dette. Dette gjeld berre dersom ein ikkje
kjøyrer NIS (YP).
25.6.2 Admintool under SunOS 5.x
P
˚
a SunOS 5.x finst i tillegg eit grafisk verktøy admintool som let ein gjere ialle-
fall ein del av det enkle oppsettet. Ved
˚
a velge i menyen Browse(ref fig. 25.1) kan
ein krysse kva database ein vil kikke p
˚
a eller eventuelt oppdatere. Ved
˚
a krysse
25.6. OPPRETTE BRUKARAR 235
Figur 25.1: Admintool under SunOS 5.x.
av for Users i Browse–menyen og velge Add i Edit–menyen f
˚
ar ein opp eit vindu
(ref. fig. 25.2) med eit skjema der ein kan skrive inn dei nødvendige opplysnin-
gane. Mange av desse felta har sjølvforklarande tekst s
˚
a derfor vil eg g
˚
a nærare
inn p
˚
a korleis ein gjer dette. Det som ser ut som eit problem med denne er at
den ikkje f
˚
ar til
˚
a lage heimekatalogen n
˚
ar den er montert via NFS,— og det er
jo dei fleste idag. Dette problemet kan rettast opp med
˚
a eksportere filsystemet
med root–tilgang for den maskina som har den globale passordfila,— eller er
NIS–server (YP–server). Dette er ein rein katastrofe n
˚
ar det gjeld sikkerhet,—
men dette skal eg kome tilbake til seinare. Ellers er admintool ein hendig og
rask liten sak som er enkel
˚
a lære og bruke.
25.6.3 Kommandoane useradd, userdel og usermod for SunOS
5.x
SunOS 5.xhar ogs
˚
a teiknbaserte verktøy for
˚
a opprette, slette og forandre p
˚
a
brukarar. Typisk nok heiter desse programma useradd, userdel og usermod.
I sin enklaste form kan useradd kallast med:
$ useradd bruker
$
Den vil d
˚
a berre finne det største numeriske brukeridenteten og inkrementere
denne med 1,— dette er som regel ikkje det ein ønsker. Derfor har den ein god
del opsjonar og paramtre som ein kan sende in til kommandoen for
˚
a sette spe-
sifikke verdiar. Opsjonen -c skal i følge manualsida dette kommentar,— det er
eigentleg litt forvirrande
˚
a kalle dette kommentar for etter denne opsjonen vil
ein oppgje fullt namn p
˚
a brukaren. Opsjonen -d tek p
˚
afølgande argument som
heimekatalogen til brukaren. -g tek neste parameter som primærgruppe,— i
tillegg kan ein angje fleire grupper med opsjonen -G og p
˚
afølgande liste med
grupperidentitetar adskilt med , ( komma). Opsjonen -u tek p
˚
afølgande pa-
ramter som numerisk brukeridentitet og opsjonen -s tek neste paramter som
236 KAPITTEL 25. OPPRETTE BRUKARAR
Figur 25.2: Vinduet for
˚
a definere brukarar.
innloggingsskall.
$ useradd -c ’Olemann Nilsen’ -d /home/olemann -g student
-u 25348 -s /bin/bash olemann
$
Med
˚
a slenge p
˚
a opsjonen -D vil ein f
˚
a lista ut standard-verdiane før brukaren
vert oppretta.
Eg anser ikkje denne kommandoen som nyttig utan at den blir brukt i skall-
program n
˚
ar ein f.eks har ei heil masse brukarar som skal opprettast. Stort sett
i tilfeller n
˚
ar bruk av admintool blir for arbeidskrevande.
usermod blir som kommandonamnet indikerer brukt til
˚
a forandre ein eller flei-
re av brukarprofilen n
˚
ar det gjeld brukarnamn, primærgruppe og andre grup-
per, heimekatalog, skall,fullt namn og numerisk brukaridentitet. Den tek stort
sett dei same opsjonane som useradd.
$ usermod -u 23456 -g ansatt -G ftp,www -d /home/ole
-l ole olemann
$
(I begge eksempla er det lagt inn linjeskift for
˚
a f
˚
a ein finare formatering av
dette dokumentet.)
$ userdel -r ole
$
userdel er ein god del enklare
˚
a bruke,— einaste opsjon er -r som er valgfri for
˚
a slette heimekatalog. Før ein brukar denne opsjonen bør ein sjekke nøye om
ein kan slette heimekatalogen. Eg har fleire eksemplar p
˚
a at nokon har laga ein
25.7. SPESIELLE TRIKS 237
temporær brukar og at vedkomande har lagt denne p
˚
a /(rota) og dermed kan
ein risikere at heile systemet vert sletta.
B
˚
ade useradd, usermod og userdel vil feile dersom ein skal opprette heimekatalog,
flytte eller slette heimekatalogen og den er montert via NFS fr
˚
a anna maskin
utan at root har skrivetilgang.
25.6.4 Opprette brukarar under RedHat–Linux
P
˚
a RedHat–Linux kan ein bruke vipw (jmfr. kapittel 25.6.1) som eg nemnde
tidlegare,— eller control–panel som er grafisk basert. I dette siste tilfelle startar
ein det med kommandoen control–panel. Programmet control–panel inneheld ei
rekkje forskjellige som en kan bruke til
˚
a konfiguere systemet. Eit av valga (p
˚
a
min maskin iallefall) er User and Group Configuration. Utsj
˚
anaden og bruken er
vedlig lik admintool (jmfr. kapittel 25.6.2 og figur 25.1). Ved
˚
a dobbel–klikke p
˚
a
Figur 25.3: Control-panel under RedHat-Linux
symbolet for User and Group Configuration f
˚
ar ein opp vinduet for
˚
a admini-
strere brukarar og grupper (ref. figure 25.3). Ved
˚
a velge enten grupper eller
brukarar f
˚
ar ein opp eit vindu med eit skjema ref. figur 25.5) som ein skal fylle
ut med brukarnamn, numerisk brukeridentitet, osv. . . . Dette skulle vere meir
eller mindre sjølvforklarande. S
˚
a vidt eg veit har ikkje RedHat–Linux tilsvaran-
de tekstbaserte kommandoar for
˚
a opprette brukarar slik som f.eks SunOS 5.x
(ref. kapittel 25.6.3). I tidlegare versjonar fanst det ein kommando adduser,—
det er mulig den finst end
˚
a i andre distribusjonar enn RedHat–Linux.
25.7 Spesielle triks
Ofte kjem ein bort i problem med at brukarane ikkje skal ha tilgang til
˚
a kunne
forandre p
˚
a bestemte filar p
˚
a sin heimekatalog,— eller skal ha innsyn i heime-
katalogen til kvarrandre men likevel tilhøyre same gruppe.
Ein m
˚
ate
˚
a gjere dette p
˚
a er
˚
a opprette ei gruppe pr. bruker p
˚
a systemet. For
eksempel dersom ein opprettar brukaren “nils lagar ein ogs
˚
a gruppa “nils”,—
238 KAPITTEL 25. OPPRETTE BRUKARAR
Figur 25.4: Aministrere brukarar og grupper under RedHat-Linux
Figur 25.5: Dialog-vindu for
˚
a opprette brukarar under RedHat-Linux.
25.7. SPESIELLE TRIKS 239
men brukaren nils er ikkje medlem i gruppa. Heimekatalogen blir d
˚
a oppret-
ta med eigar nils og gruppe nils”,— og alle kjøyrer med umask (ref. 6.7) lik
007 eller 7. Dermed vil ingen andre enn brukaren “nils” ha tilgang til sin eigen
heimekatalog.
Ein kan ogs
˚
a oppn
˚
a same effekt med
˚
a opprette ei gruppe som ingen er medlem
av og opprette alle heimekatalogar med denne gruppa som gruppeeigar av
heimekatalogane.
I begge tilfella m
˚
a ein gjere ein liten vri p
˚
a heimekatalogane,— nemleg
˚
a sette
setguid p
˚
a katalogane. Dette vil seie at ein istaden for
˚
a sette kjøresettighetar (
eXecute) p
˚
a katalogen set p
˚
a den s
˚
akalla setguid biten. Dette stod ikkje omtala i
kapittel 6.6,— men det fungerer p
˚
a følgande m
˚
ate. N
˚
ar setguid er satt p
˚
a ei fil
og fila er ei kjøyrbar fil,— vil fila bli kjøyrt med rettighetane til den gruppa som
eig fila. P
˚
a ein katalog med setguid vil alle filar og katalogar blir oppretta med
same gruppe som den gruppa som eig katalogen uansett kva gruppe den bru-
karen som oppretta katalogen eller fila er medlem av. Om fila eller katalogen
er setguid blir symbolisert med ein s istadenfor ein x p
˚
a gruppeaksessen.
$ ls -ld
drwxrwsrwt 2 root root 1024 Sep 26 22:13 ./
$ id
uid=15958(trondk) gid=14430(ifi)
$ touch fila
$ ls -l fila
-rw-r--r-- 1 trondk root 0 Sep 26 22:16 fila
$ mkdir katalogen
$ ls -l
total 1
-rw-r--r-- 1 trondk root 0 Sep 26 22:16 fila
drwxr-sr-x 2 trondk root 1024 Sep 26 22:17 katalogen/
$
Legg ogs
˚
a merke til at den nye katalogen f
˚
ar ogs
˚
a setguid biten sett,— det betyr
at setguid vil ogs
˚
a gjelde for alle subkatalogar. For
˚
a sette setguid p
˚
a katalogar
eller fil brukar ein kommandoen chmod (ref. kapittel 6.6).
$ chmod g+s fila
$
den oktale verdien kan ein ogs
˚
a bruke,— d
˚
a ogs
˚
a i kombinasjon med resten av
aksessrettighetane.
$ chmod 2755 fila
$
Ellers vil chmod oppfatte det som om ein vil sette andre aksessrettighetar enn
setguid.
I den seinare tid har det vorte meir og meir vanleg at ein kjører web–server
p
˚
a iallefall UNIX–maskiner. Denne web–serveren skal kjøyre under ein upri-
viligert bruker,— dvs. den skal kjøyre med ein bruker-identitet som har mi-
nimale rettighetar p
˚
a eit system. Problemet oppst
˚
ar n
˚
ar denne skal lese filar
under brukarane sin heimekatalog. Dermed m
˚
a ein i mange tilfeller opne litt
240 KAPITTEL 25. OPPRETTE BRUKARAR
opp p
˚
a aksessrettighetane p
˚
a heimekatalogen. Slik at ein iallefall kan lese web
dokument under heimekatalogen. Det er vanleg at web–serveren leitar eter
slike dokument under katalogen public html p
˚
a heimekatalogen. For at web
serveren skal kunne lese dokumenta m
˚
a ein minimalt ha kjøretilgang for alle p
˚
a
heimekatalogen og public html–katalogen,— og i tillegg m
˚
a web—dokumenta
vere lesbare for alle. I underkatalogar p
˚
a public html skal ein ogs
˚
a kun ha kjøre-
tilgang p
˚
a katalogar. Dette er for
˚
a hindre at ein kan liste ut innholdet p
˚
a kata-
logane.
Dette problemet kan ein unng
˚
a med andre metodar,— f.eks med
˚
a kjøyre web
serveren i eit anna rot–niv
˚
a. Dette er litt for innfløkt
˚
a g
˚
a gjennom p
˚
a noverande
tidspunkt. Interesserte lesarar blir anbefalt
˚
a sl
˚
a opp i lesestoff om korleis ein
skal sette opp ein sikker web–server.
Kapittel 26
Network File System, NFS
UNIX, NFS og NIS er dei tre tinga som nærast er synomynt for ein vellykka
nettverksløysing. Dette gjer at ein kan dele filar saumlaust i eit nettverk,— kor
filane fysisk er plassert er heilt transparent. Alt er ikkje berre fryd og gam-
men n
˚
ar det gjeld sikkerhet,— men det g
˚
ar an
˚
a unng
˚
a fallgruvene dersom
ein passar p
˚
a
˚
a sette opp NFS riktig. Først vil eg gjennomg
˚
a korleis dette vart
gjennomført i BSD–UNIX og deretter System V Release 4.
NFS vart laga av SUN Microsystems og den gongen det vart laga var SunOS
ein etterfølgar av BSD–UNIX. Etter SunOS 5.x har SUN g
˚
att over til System V
Release 4 standarden.
Eksempla er henta fr
˚
a RedHat 4.1 og SunOS 2.5.1 ( eller Solaris 2.5.1).
Det første ein skal legge merke til at NFS brukar begrepet eksportering av filsystem,—
dvs. at dersom ein vil dele eit filsystem med ei anna maskin m
˚
a ein eksportere
dette filsystemet. Dersom ein vil f.eks dele /home mellom fleire maskiner vil ein
legge dette inn i fila som exporterer filsystemet og d
˚
a vil alle subkatalogar fr
˚
a
og med /home vere tilgjengeleg for dei maskinene ein har eksport dette filtreet
til
1
.
I UNIX er alle brukarar tildelt ein numerisk brukeridentitet ( ref. 25.5 ) og bru-
keridentiteten er heilt og fullt knytta til denne numeriske verdien. Derfor m˚a
den same brukaren ha den same numeriske brukaridentiteten p
˚
a alle maskiner
som skal ha tilgang til eit filsystem via NFS. Dersom ein kjøyrer NIS (ref. 25.1)
p
˚
a desse maskinene vil ikkje dette vere eit problem,— men det som er verdt
˚
a
merke seg er at root vil miste sine rettighetar p
˚
a eit filsystem som er montert fr
˚
a
ei anna maskin dersom ein spesifikt ikkje gjer unntak for dette.
For
˚
a gjere systemet sikrast mulig skal ein eksportere dei fleste filsystema med
kun lesetilgang og utan tilgang for root. Det som skjer i dette tilfellet er at
ein brukeridentitet med numerisk identitet lik 0 blir forandra til ein bruker
ved namn nobody. Brukaren nobody har ein spesiell betydning n
˚
ar ein kjøyrer
NFS,— denne brukaren er ein slags anonym bruker som ikkje skal eige ei ein-
aste fil eller katalog p
˚
a systemet. Dermed har den brukaren heller ingen re-
1
I RedHat-Linux finst det faktisk unntaksreglar for dette.
241
242 KAPITTEL 26. NETWORK FILE SYSTEM, NFS
tighetar til
˚
a kunne gjere forandringar. Dersom ein ikkje har ein slik bruker i
passordfila skal ein opprette ein slik bruker. RedHat-Linux 4.1 og Solaris har
alltid ein slik bruker i /etc/passwd.
26.1 Formatet for /etc/exports under RedHat-Linux
Formatet for /etc/exports er rimeleg enkelt,— i første kolonne vil ein skrive inn
filsystemet som skal delast. I neste kolonne maskinnamn p
˚
a dei maskinene ein
vil eksportere filsystemet til. Formatet for maskin-namn i RedHat-Linux kan
ein oppgje p
˚
a fleire former,— b
˚
ade med s
˚
akalla jokerteikn,— jokerteikn saman
med domene–namn og nettgruppe
2
, s
˚
akalla IP-nettverk og maskinnamn.
Dersom ein ikkje oppgjev ei maskin i 2. kolonne vil filsystemet vere exportert
til heile verden. Dette vil eg p
˚
a det sterkaste fr
˚
ar
˚
ade!.
maskinnamn Dette er vel det mest brukte formatet. Her kan ein oppgje en-
ten maskinnamnet, det fullt kvalifiserte maskinnamnet med domene el-
ler IP–adressa til maskina.
nettgruppe Ei nettgruppe blir oppgjeve som @gruppenamn.
jokerteikn Maskinnamn som inneheld teikna * og ?. Dette kan spare ein for
ein hel del skriving og eventuelle feil. Maskinnamnet *.eit.domene.no vil
ekspandere til alle maskiner i domenet eit.domene.no. Legg merke til at
dette ikkje vil ekspandere til fleire.maskiner.eit.domene.no.
IP-nettverk Ein kan eksportere til maskiner p
˚
a eit s
˚
akalla (sub-)nettverk. Dette
vert gjort ved
˚
a oppgje eit adresse og maske par p
˚
a formen addresse/maske,—
som f.eks 158.38.61.0/255.255.255.0. Som vil eksportere eit filsystem til
alle maskiner med IP–adresse som inneheld 158.38.61. Eller 158.38.61.0/
255.255.254.0 som tilsvarar alle maskiner med adresser p
˚
a nett 158.38.61.0
og 158.38.62.0.
I tilleg kan ein legge p
˚
a spesielle opsjonar som innverkar p
˚
a korleis maskiner
har tilgang,— det kan f.eks vere at andre maskiner skal kun ha lesetilgang.
RedHat–Linux har utvida desse opsjonane ganske kraftig og har mange opsjo-
nar som gjer at ein kan fintrimme m
˚
aten dette vert gjort p
˚
a.
Dei vanlegaste opsjonane er:
rw Eksporter filsystemet med lese– og skrivetilgang.
ro Eksporter filsystemet med kun lesetilgang.
noaccess Dette gjer ein bestemt (sub)katalog utilgjengeleg for bestemte maski-
ner. Dette er nyttig dersom ein vil eksportere eit heilt katalog-tre,– men
vil gjere unntak for bestemte katalogar.
I tillegg finst det ein del “sære” opsjonar,— n
˚
ar eg no brukar uttrykket sære
meinar eg namnet p
˚
a opsjonane.
root squash Gjer om bruker– og gruppeidentitet 0 til bruker– og gruppeiden-
titeten til nobody p
˚
a det monterte filsystemet. Det er ofte ikkje nok
˚
a bruke
2
Dette er eit begrep i NIS,— det er ikkje s
˚
a farleg om du ikkje veit dette end
˚
a. . .
26.1. FORMATET FOR /ETC/EXPORTS UNDER REDHAT-LINUX 243
denne opsjonen,— det finst ogs
˚
a andre reserverte brukeridentitetar som
har spesielle rettighetar som kan opne for sikkerhetsproblem.
no root squash Det motsette av foreg
˚
aande opsjon.
squash uids og squash gids Denne opsjonen spesifiserer ei liste av numeris-
ke brukeridentitetar som skal bli gjort om til brukeridentiteten til nobody.
all squash Betydninga av denne opsjonen skulle vel vere innlysande.
anonuid og anongid Sett eksplisitt den anonyme brukaridentiteten til den s
˚
akalla
anonyme brukaren nobody til ein bestemt numerisk verdi.
Eit eksempel p
˚
a /etc/exports fr
˚
a RedHat–Linux:
/home massa(rw) mina(rw) misa(rw)
/home/prosjekt (noaccess)
/local massa(ro) mina(ro) misa(ro)
/pub massa(ro,all_squash)
/privat mina(rw,all_squash,anonuid=150,anongid=100)
/ spesiell(rw,no_root_squash)
Den første linja eksorterer /home til maskinene massa,mina og misa med b
˚
ade
lese– og skrivetilgang for alle andre enn root.
Linje to gjer eit unntak for katalogen /home/prosjekt,— ingen maskiner skal ha
tilgang til subkatalogar under /home/prosjekt
3
.
Linje tre eksporterer filsystemet /local til massa,mina og misa med kun lesetilgang.
Linje fire eksporterer katalogen /pub til maskina massa med kun lesetilgang og
alle brukarar som aksesserer det monterte filsystemet skal gjerast om til nobody.
Linje fem eksporterer filsystemet /privat med lese- og skrivetilgang til maski-
na mina, alle brukaridentitetar skal gjerast om til den numeriske brukar– og
gruppeidentiteten som er oppgjeve med opsjonane anonuid og anongid.
Den siste linja er eksportert til maskina spesiell og root p
˚
a spesiell skal ha full
tilgang til det monterte filsystemet.
3
Legg merke til at her treng ein ikkje
˚
a oppgje maskinnamn.
Kapittel 27
Secure Shell (sshd)
sshd er tenarprogrammet for ssh. Tilsaman erstattar desse 2 programma rsh og
rlogin,— og tilbyr kryptert kommunikasjon mellom to maskiner over eit usik-
kert nettverk.
sshd lyttar etter oppkoblingar fr
˚
a klientar. Vanlegvis blir programmet starta
ved oppstart av vertsmaskina. Den startar ein ny prosess for kvar ny oppkob-
ling. Desse prosessane handterer nøkkelutveksling, kryptering, autentisering,
utføre kommandoar og datatransport.
OpenSSH[6] støttar b
˚
ade SSH 1 protocol og SSH 2 protocol samstundes. Standard–
installasjonen er gjerne konfigurert slik at den vil prøve SSH 2 protocol først og
falle tilbake p
˚
a SSH 1 protocol dersom klienten ikkje støttar SSH 2 protocol. Det
er ikkje anbefalt
˚
a kjøre SSH 1 protocol.
27.1 SSH protokoll 1
Kvar vertsmaskin har ein spesifikk RSA[25]–nøkkel (vanlegvis p
˚
a 1024–bits)
for
˚
a identifisere maskina. I tillegg, n
˚
ar prosessen blir starta opp, vil den lage
ein ny RSA–nøkkel. Denne nøkkelen blir regenerert kvar time dersom den har
vore i bruk,— og den blir aldri lagra til disk.
N
˚
ar ein klient tek kontakt, vil sshd svare med sin offentlege RSA[25]–nøkkel og
prosessnøkkelen. Klienten samanliknar den offentlege nøkkelen med den som
finst i sin eigen database for
˚
a verifisere at den ikkje har vorte forandra sidan
sist.
No vil klienten lage eit tilfeldig nummer p
˚
a 256–bits. Klienten krypterer det-
te nummeret med b
˚
ade den offentlege nøkkelen til vertsmaskina og proses-
snøkkelen. Begge sider vil bruke dette nummeret som sesjonsnøkkel og all
kommunikasjone vil bli kryptert med dette nummeret s
˚
a lenge sesjonen va-
rer. Resten av sesjonen blir kryptert med ei konvensjonell algoritme, som Blow-
fish[13] eller 3DES[28], standard algoritme er 3DES. Klienten vel algoritme ut
fr
˚
a det som blir tilbydd fr
˚
a tenaren.
No g
˚
ar klienten og tenaren inn i ein autentiseringsdialog. Klienten vil prøve
244
27.2. SSH PROTOKOLL 2 245
˚
a autentisere seg sjølv ved
˚
a bruke .rhosts, .rhosts kombinert med RSA[25]–
nøkkelen for klienten, RSA[25] utfordring–response autentisering, eller ein pass-
ordbasert autentisering.
Uansett autentiseringsmetode, vil kontoen bli sjekka om den er aksesserbar.
Ein konto er ikkje tilgjengeleg dersom den l
˚
ast, er lista opp i DenyUsers, eller
gruppetilhørigheten for kontoen er lista opp i DenyGroups.
rhosts autentisering er normalt sl
˚
att av fordi den er fundamentalt usikker,—
men den kan sl
˚
aast p
˚
a i tenarkonfigurasjonen. Systemsikkerheten er ikkje for-
betra utan at rshd, rlogind og rexecd er sl
˚
att av.
27.2 SSH protokoll 2
Protokoll 2 fungerer veldig likt. Kvar vertsmaskin har ein spesifikk nøkkel
(RSA[25] eller DSA[16]) for
˚
a identifisere vertsmaskina. Men, n
˚
ar prosessen
startar vil den ikkje lage ein nøkkel. Ved oppkobling vil man bruke Diffie–
Hellman[15]–metoden for
˚
a bli einige om ein nøkkel. Denne avtalen resulterer i
ein sesjonsnøkkel.
Resten av sesjonen blir kryptert med ei symmetrisk algoritme. Som regel 128–
bit AES [12] , Blowfish[13] , 3DES[28] , CAST128 [14] , Arcfour [24] , 192–bit AES
[12] eller 256–bit AES [12] .
Klienten velger algoritme fr
˚
a den lista tenaren tilbyr. I tillegg vil integriteten bli
sjekka ved help av kryptografisk autentiseringskode, som hmac–sha1[19] eller
hmac–md5 [18] .
27.3 Kommando–eksekvering og vidaresending av
data
Dersom klienten kan autentisere seg, g
˚
ar begge sider inn i ein dialog for
˚
a for-
berede seg til ein sesjon. No kan klienten kreve at den vil ha ein terminalenhet,
vidaresending av X11[30] forbindelse, vidaresending av TCP/IP[9][11][8][10]
forbindelsar eller vidaresending av autentiseringsagenten sin forbindelse.
Til slutt kan klienten be om eit skall eller at den vil ha utført ein kommando.
Begge sider entrar no ein sesjon. I ein sesjon kan begge sider sende data og da-
taene blir sendt til/fr
˚
a skallet, kommandoen p
˚
a tenarmaskina eller terminalen
hos klienten.
N
˚
ar klienten ber om
˚
a f
˚
a avslutte, og alle X11[30]– og/eller andre forbindelsar
har blitt avslutta, sender tenarprogrammet retur–statusen fr
˚
a kommandoen til
klienten og begge sider koblar ned forbindelsen.
27.4 Autentiseringsmetodar
sshd kan bruke forskjellige autentiseringsmetodar,— men dette er avhengig av
korleis sshd blir kompilert og installert.
246 KAPITTEL 27. SECURE SHELL (SSHD)
passord ein metode for
˚
a sende passord mellom klient og tenar. Inkluderer
ofte eit program der ein kan skifte passord. Denne metoden er ikkje til-
gjengeleg i alle versjonar av Secure SHell.
publickey offentleg nøkkel basert autentisering som minimum støttar RSA[25]–
og/eller DSA[16]– nøkkelpar. Nokre implementasjonar støttar ogs
˚
a X.509[29]
sertifikat.
keyboard–interactive ein tilpasningsdyktig metode der tenarprogrammet sen-
der ein eller fleire forespørslar etter autentiseringsinformasjon. Klienten
vil vidaresende forespørslane til brukaren og sende tilbake informasjo-
nen som blir gitt. P
˚
a denne m
˚
aten kan man bruke “eingangspassord”
fr
˚
a S/Key[27] eller SecureID[26] . OpenSSH kan konfigurerast til
˚
a bruke
PAM[22] som kan implementere autentisering v.h.a.eingangspassord,—
som igjen kan føre til at man ikkje kan bruke “vanlege” passord.
GSSAPI ein autentiseringsmetode som brukar eksterne mekanismer som Kerberos[20]
eller NTLM[21],— og gjev “single-sign-on” mulighetar for Secure SHell.
Desse metodane er vanlegvis implementert i kommersielle versjonar av
Secure SHell,— men OpenSSH har faktisk ein fungerande GSSAPI[17] im-
plementasjon.
27.5 Opsjonar for sshd
sshd kan konfigurerast ved
˚
a bruke opsjonar p
˚
a kommandolinja eller f
˚
ar ei kon-
figurasjonsfil (standard er sshd config ). Opsjonar p
˚
a kommandolinja overstyrer
verdiar i konfigurasjonsfila.
sshd les konfigurasjonsfila p
˚
a nytt dersom mottek eit hangup signal ( SIGHUP).
Vanlege opsjonar er:
–4 Tvingar sshd til berre
˚
a bruke IPv4[8][10] adresser.
–6 Tvingar sshd til berre
˚
a bruke IPv6 adresser.
–b bits Spesifiserer antal bits for den midlertidige server–nøkkelen n
˚
ar ein bru-
kar protokoll versjon 1. Standard er 768 bits.
Litteratur
[1] iana Internet Assigned Numbers Authority. Application for System
(Well–Known) Port Number. http://www.iana.org/assignments/
port-numbers. Last visited 2006-06-10.
[2] iana Internet Assigned Numbers Authority. Internet Assigned Num-
bers Authority. http://www.iana.org/. Last visited 2006-06-10.
[3] Bill Lewis, Dan LaLiberte, and Richard Stallman. GNU Emacs Lisp Refe-
rence Manual. Free Software Fundation, Inc. http://www.gnu.org/
software/emacs/manual/elisp.html, Last visited 2011-09-25.
[4] Linda Mui and Eric Pearce. X Window System Administrator‘s Guide for
X11 release 4 and release 5, volume Eight of The X Window System Series.
O‘Reilly & Associates, Inc., O‘Reilly & Associates Inc., 632 Petaluma Ave-
nue, Sebastopol CA 95472, first edition, October 1992.
[5] OpenGL. OpenGL The Iindustry’s Foundation for High Performance
Graphics. http://www.opengl.org/. Last visited 2011-08-28.
[6] OpenSSH. OpenSSH. http://www.openssh.org/. Last visited 2006-
06-29.
[7] OpenSSH. SSH Usage profiling. http://www.openssh.org/usage/
index.html. Last visited 2006-06-29.
[8] Jon Postel. RFC760, DOD STANDARD, INTERNET PROTOCOL. Tech-
nical report, Information Sciences Institute, University of Southern Ca-
lifornia, Information Sciences Institute, University of Southern Califor-
nia, 4676 Admiralty Way, Marina del Rey, California 90291, USA, January
1980. http://rfc.net/rfc760.html, Last visited 2007-02-16.
[9] Jon Postel. RFC761, DOD STANDARD,TRANSMISSION CONTROL
PROTOCOL. Technical report, Information Sciences Institute, Univer-
sity of Southern California, Information Sciences Institute, University of
Southern California, 4676 Admiralty Way, Marina del Rey, California
90291, USA, Januar 1980. http://rfc.net/rfc761.html, Last visited
2007-02-16.
[10] Jon Postel. RFC791, INTERNET PROTOCOL, DARPA INTERNET PRO-
GRAM, PROTOCOL SPECIFICATION. Technical report, Information
Sciences Institute, University of Southern California, Information Sciences
247
248 LITTERATUR
Institute, University of Southern California, 4676 Admiralty Way, Marina
del Rey, California 90291, USA, September 1981. Last visited 2007-02-16.
[11] Jon Postel. RFC793, TRANSMISSION CONTROL PROTOCOL, DARPA
INTERNET PROGRAM, PROTOCOL SPECIFICATION. Technical report,
Information Sciences Institute, University of Southern California, Infor-
mation Sciences Institute, University of Southern California, 4676 Ad-
miralty Way, Marina del Rey, California 90291, USA, September 1981.
http://www.ietf.org/rfc/rfc793.txt, Last visited 2011-11-09.
[12] Wikipedia, the free encyclopedia. Advanced Encryption Stan-
dard. http://en.wikipedia.org/wiki/Advanced_Encryption_
Standard. Last visited 2007-02-15.
[13] Wikipedia, the free encyclopedia. Blowfish cipher. http://en.
wikipedia.org/wiki/Blowfish_cipher. Last visited 2007-02-15.
[14] Wikipedia, the free encyclopedia. CAST–128. http://en.wikipedia.
org/wiki/CAST-128. Last visited 2007-02-15.
[15] Wikipedia, the free encyclopedia. Diffie–Hellman key exchange. http:
//en.wikipedia.org/wiki/Diffie-Hellman. Last visited 2007-02-
15.
[16] Wikipedia, the free encyclopedia. Digital Signature Algorithm. http://
en.wikipedia.org/wiki/Digital_Signature_Algorithm. Last
visited 2006-06-09.
[17] Wikipedia, the free encyclopedia. Generic Security Services Application
Program Interface. ://en.wikipedia.org/wiki/GSSAPI. Last vi-
sited 2007-02-16.
[18] Wikipedia, the free encyclopedia. HMAC–MD5. http://en.
wikipedia.org/wiki/HMAC-MD5. Last visited 2007-02-15.
[19] Wikipedia, the free encyclopedia. HMAC–SHA1. http://en.
wikipedia.org/wiki/HMAC-SHA1. Last visited 2007-02-15.
[20] Wikipedia, the free encyclopedia. Kerberos(protocol). http://en.
wikipedia.org/wiki/Kerberos_protocol. Last visited 2007-02-16.
[21] Wikipedia, the free encyclopedia. NTLM. http://en.wikipedia.
org/wiki/NTLM. Last visited 2007-02-16.
[22] Wikipedia, the free encyclopedia. Pluggable Authentication
Modules. http://en.wikipedia.org/wiki/Pluggable_
Authentication_Modules. Last visited 2007-02-16.
[23] Wikipedia, the free encyclopedia. Public key infrastructure. http://en.
wikipedia.org/wiki/Public_key_infrastructure. Last visited
2011-07-17.
[24] Wikipedia, the free encyclopedia. RC4 (ARC4 or ARCFOUR). http:
//en.wikipedia.org/wiki/Arcfour. Last visited 2007-02-15.
[25] Wikipedia, the free encyclopedia. RSA. http://en.wikipedia.org/
wiki/RSA. Last visited 2006-06-09.
LITTERATUR 249
[26] Wikipedia, the free encyclopedia. SecureID. http://en.wikipedia.
org/wiki/SecurID. Last visited 2007-02-16.
[27] Wikipedia, the free encyclopedia. S/Key. http://en.wikipedia.
org/wiki/S/Key. Last visited 2007-02-16.
[28] Wikipedia, the free encyclopedia. Triple DES. http://en.wikipedia.
org/wiki/3DES. Last visited 2007-02-15.
[29] Wikipedia, the free encyclopedia. X.509. http://en.wikipedia.org/
wiki/X.509. Last visited 2007-02-14.
[30] X.Org Foundation. X Window System. http://www.x.org/. Last vi-
sited 2007-02-16.
Kolofon
Trond Kandal
Applikasjonsseksjonen
IT–Avdelingen
Norges Tekniske Naturvitenskaplige Universitet
7491 Trondheim
Copyright ©1993 – 2015 Trond Kandal
Dette dokumentet er satt med Palatino ved hjelp av T
E
XLive.
Dockumentstilen er a4paper, twoside og report.
Tilleggspakker er ifthen, ucs, inputenc, rcs, amssymb, babel, palatino, fancy-
hdr, parskip, fancybox, url, graphicx, thumbpdf og hyperref.
250