Logger man ind på DIKUs førstedelssystem, åbnes et enkelt vindue med følgende tekst:

Relaterede dokumenter
Sproget Six. Til brug i rapportopgaven på kurset Oversættere. Vinter Abstract

SÅDAN BRUGER DU TEKST- BEHANDLING INTRODUKTION

ALMINDELIGT ANVENDTE FUNKTIONER

ViKoSys. Virksomheds Kontakt System

DM507 Algoritmer og datastrukturer

FC-intranet: FC-intranet er et fælles mail- og konferencesystem, hvor lærere og elever kan kommunikere.

Gem dine dokumenter i BON s Content Management System (CMS)

I denne artikel, vil der blive gennemgået de grundlæggende PHP-funktioner, såsom udskrift til skærmen, tid og dato og if-sætningen.

Indledning. MIO er optimeret til Internet Explorer. Læs endvidere under Ofte stillede spørgsmål.

Vejledning til DTU DOC & RSS Feeds

DM507 Algoritmer og datastrukturer

Indholdsfortegnelse. EasyIQ IDM 5.4 Brugermanual

Ruko SmartAir. Updater installation

09/ Version 1.4 Side 1 af 37

Vejledning til Teknisk opsætning

Quick guide til oprettelse af Oprindelsescertifikater

Fable Kom godt i gang

DI-Plot. Brugervejledning

Brugermanual Netværkoptager (NVR)

18/ Version 2.0 Side 1 af 36

Hjemmesiden er opdelt i et sidehoved, en sidefod og mellem disse 3 kolonner: venstre, midterste og højre. Højre kolonne vises dog kun på forsiden.

Oprettelse og brug af i Jubii

Indhold. Indholdsfortegnelse

DANSK SKOLEDATA APS. Tlf DSA-Ventelisten

Web Admin 5.5. Brugsvejledning for User admin. Copyright 2003 Gullestrup.net

Programmering C RTG

Web Admin 5.5. Brugsvejledning for Domain admin. Copyright 2003 Gullestrup.net

How to do in rows and columns 8

Indholdsfortegnelse. 1. Installation af LØN Introduktion til LØN Indtastning af lønseddel Udskrifter...

TravelTales; håndtering af konfigurationsfil

Kapitel 4 Løkker i C#

Vejledning. Opsætning af Trio Web Vers 2.0 feb. 2010

Kort om CoinDB (Mønt- og seddelsamling):

Opsætning af Backup. Hvis programmet registreres korrekt vises nedenstående skærmbillede. Genstart herefter programmet.

DIVISIONSMATCHBEREGNING VERSION 1.07

Maple. Skærmbilledet. Vi starter med at se lidt nærmere på opstartsbilledet i Maple. Værktøjslinje til indtastningsområdet. Menulinje.

DI Online løsning: Quick guide til oprettelse af Oprindelsescertifikater

VDI Manual v. 5 Indhold

Sikkerhedskopiering. Sikkerhedskopiering til harddisk.

Kort til Husdyrgodkendelse / Excel data og Næsgaard Markkort

REDIGERING AF REGNEARK

Udlæsning af stregkodefil til scanneren 1. Opret mappen pdt på C-drevet (c:\pdt).

Guide til VandData for kommuner

3. Menuen Start -> Programs -> OpenVPN åbnes, og "My Certificate Wizard" vælges:

DE Online løsning: Quick guide til oprettelse af ATA Carnet

DI Online løsning: Quick guide til oprettelse af ATA Carnet

5.0 Velkommen til manualen for kanalen HTML-grab Introduktion til kanalen HTML-grab kanalside Hvad er et spot?

Introduktion til CD ere og Arkivdeling Gammel Dok - September-oktober Jonas Christiansen Voss

Manual til Kundekartotek

Excel-2: Videre med formler

Fejlsikret Windows Fejlsikret start

IsenTekst Indhold til Internettet. Manual til Wordpress.

Fable Kom godt i gang

Indholdsfortegnelse Opret engelsk version af hjemmesiden... 2

Installation af kalibreringsprogrammet. (BDE versionen)

INDHOLDSFORTEGNELSE. INDLEDNING... Indledning. KAPITEL ET... Kom videre med Excel. KAPITEL TO Referencer og navne

Manual til Wordpress. 1. Log ind på din Wordpress-side. Indhold:

Umbraco installationsvejledning

MANUAL TIL. OptitecRS CIPHERLAB SCANNER

Vejledning til. Svejsevisitering. Oprettelse af kursister i testsystemet Opret Booking Kursisten tager test... 10

Brugervejledning til Doc2Mail

Fælles testmiljøer. Dato: Version: 1.1

Denne artikel er en detaljeret gennemgag af det fundamentale i batchfiler til hjemmebrug :-) FEEL THE POWER! ;-)

Kom godt i gang med Fable-robotten

Kom godt igang med Inventar registrering

UC Syddanmark

Kom godt igang med Inventar registrering

BRUGERMANUAL TIL N-PDF

Huskesedler. Design og automatisering af regneark. Microsoft Excel 2013

PDFxChange. Skriv i, tegn i og udfyld dine PDF'er på skærmen. Version: Oktober 2015

Manual til administration af online booking

Opsætning af MobilePBX med Kalenderdatabase

National sprogscreening af EUD-elever. skolens egne logins

Kursusbog 2. Vejledning i brug af DIKUs EDB-system. af Jesper Holm Olsen & Søren Debois Revideret 2002 af Jesper Louis Andersen & Sidsel Jensen

Velkommen på kursus hos Microworld

Indholdsfortegnelse for kapitel 2

FB #2908: Slet bruger På "Slet bruger" siden kan der nu sættes et filter på, der gør det muligt at vise elever og ansatte hver for sig.

Vejledning til Office 365 for skoleelever i Aarhus Kommune, Børn og Unge

Emini PeopleTrust. Kandidatweb

DE Online løsning: Quick guide til oprettelse af ATA Carnet

MAG5.dk En brugervejledning

Sådan bruger du BK- 9 Performance List. Formatering af USB- Memory. "Performance List" er en liste over dine registreringer.

Manual og Hjælp Skoletasken 2

Kom godt i gang med I-bogen

AgroSoft A/S AgroSync

Vejledning til de bydende

Sproget Limba. Til brug i G1 og K1. Dat1E 2003

Carry it Easy Brugermanual

HUMANWARE BRAILLIANT INSTALLATIONSVEJLEDNING

PDFxChange. Skriv i, tegn i og udfyld dine PDF'er på skærmen. Version: August 2012

Brugervejledning. ClaroRead fra Dictus (Windows PC)

Kan f.eks. være en stor hjælp for læsesvage elever, der kan skrive direkte ind i opgaver, udfylde kopiark og få hjælp af oplæsningssoftware undervejs!

Windows XP. Tilpasning af computeren

DET NYE ARKIVALIERONLINE

Vejledning, teknik, tips and tricks

Brugerindstillinger M-QS-11DK

Pensioneringsprocessen/Statens Administration

Transkript:

Kapitel 4 Kommandofortolkeren High-tech computers, such as those used by NASA, the CIA, or some such governmental institution, have easy-to-understand graphical interfaces. Those that don t will have incredibly powerful text-based command shells that can correctly understand and execute commands typed in plain English. INTERESTING THINGS THAT YOU LEARN ABOUT COMPUTERS IN MOVIES Logger man ind på DIKUs førstedelssystem, åbnes et enkelt vindue med følgende tekst: Det program, der kører i vinduet, kaldes en kommandofortolker (eng. shell), og ovenstående tekst kaldes kommandoprompten. Kommandoprompten læses kommandofortolkeren er klar til at modtage kommandoer, der vil blive udført på datamaten datamat. Det er tilfældigt, hvilken maskine man kobles til, når man logger ind, så kommandoprompten kunne ligesåvel have refereret til datamaten datamat2: I en tid, hvor peg-og-klik har gjort datamaten til et værktøj, der benyttes af lægfolk, synes det måske forældet eller ligefrem arkaisk at have en tekstbaseret grænseflade. Forhåbentlig vil det længere inde i dette kapitel blive klart, at netop den tekstbaserede grænseflade giver fleksibilitet og muligheder, som man ikke med rimelighed kan håbe på at opnå i en grafisk brugergrænseflade. Men det kommer vi til; lad os først gøre os bekendt de mest brugte kommandoer. I det følgende vil vi komme til at strejfe en del emner og koncepter, der har konsekvenser for langt mere end blot kommandofortolkeren, men som det ligger ligefor at introducere i dette kapitel. Som ny UNIX-bruger kan man sagtens klare sig, uden at sætte sig grundigt ind i kommandofortolkeren. Gør man det ikke, afskærer man sig dog fra mange af UNIX-miljøets styrker. Læsere der føler, at de ikke behøver at vide mere end det allermest rudimentære, kan nøjes med at læse til og med afsnit 4.4. For ikke at komplicere fremstillingen mere end højst nødvendigt, vil vi i det følgende undertiden tillade os lemfældig omgang med sandheden. Flere eksempler i dette kapitel omhandler en tænkt rapportopgave i kryptering; interesserede kan finde filer fra en tænkt løsning af den fiktive opgave i kataloget! " # %$! &'!'' 17

18 KAPITEL 4. KOMMANDOFORTOLKEREN 4.1 Filsystemet Mange kommandoer tager filnavne som argumenter. Filsystemet i UNIX består af filer og kataloger organiseret i et træ. Under kørsel af kommandofortolkeren vil et bestemt katalog altid være udpeget til arbejdskatalog. Når kommandofortolkeren starter, vil det aktive katalog altid være brugerens hjemmekatalog, dvs. det katalog, der indeholder brugerens egne filer. Man refererer til en fil ved at angive dens stinavn (eng. pathname), som består af navnene på de kataloger, man skal igennem for at komme frem til filen, samt til slut filens navn. Navnene adskilles af. Stinavne kan være enten absolutte eller relative. Et absolut stinavn indeholder navnene på alle kataloger mellem filsystemets rod (der i UNIX kaldes ) og filen selv. Et absolut stinavn begynder altid med. Et relativt stinavn indeholder navnene på katalogerne mellem det aktive katalog og filen. Eksempelvis refererer det absolutte stinavn # til filen # i kataloget, som igen befinder sig i rodkataloget. Hvis det aktive katalog f. eks. er #, refererer stien # & til filen med det absolutte stinavn # ' #%& '. Filsystemet kan illustreres sådan: ' " % # (root) #! '# '!"# %$ &('*),+.-0/ 1 &(')2+.-0/ 1 &('*),+.-0/ 1 "! Bemærk, at ovenstående diagram kun skitserer dele af DIKUs system. 4.2 Kommandoer Lad os forsøge en kommando: 43!576 '!!"#% '' Vi har her angivet den tekst, som brugeren tænkes at have skrevet, med 68(9.9:8<;(= >@? AB9:;(C? 9, og kommandofortolkerens tekst med *D.

, 4.2. KOMMANDOER 19 Kommandoen & angiver det aktive katalog ( pwd står for print working directory). Når man udsteder en kommando, der arbejder på en eller flere filer, vil kommandoen lede efter disse filer i det aktive katalog, med mindre andet er angivet. Lad os prøve at kopiere en fil; hvis du netop har fået din konto, har du nok ikke nogle filer liggende, som vi har lyst til at pille ved. Vi henter derfor en fil fra kursusbogens hjemmekatalog: *3 6? = 9:8? C = > ; ; *8 3 8(; A A Formatet for kommandoen & er &D % ', så vi kopierer her filen D ## fra kursusbogens hjemmekatalog til filen D ## i det aktive katalog. Læg mærke til, at der ikke kommer noget egentligt svar fra kommandoen. Kommandoprompten kommer blot tilbage uden nogle beskeder à la D '! #%&%. Under UNIX giver langt de fleste kommandoer kun uddata, hvis noget gik galt. Dette kaldes på engelsk silent accept. 4.2.1 Fil- og katalogmanipulering Her er en liste over de mest almindelige kommandoer. En længere liste findes i appendiks B. & print working dir. Viser det aktive katalog. % "% ' # change dir. Skifter det aktive katalog. ' list Viser en liste af filer i det aktive katalog. ' $#' list long Viser en detaljeret liste af filer i det aktive katalog. % %D '% remove Sletter de angivne filer. &D $ %' copy Kopierer filen D til filen '. D $ %' move Flytter filen D til filen % '. '% make dir. Opretter et nyt katalog ved navn % '% remove dir. Sletter kataloget ved navn. "D '% concatenate Viser indholdet af D '%. '(D %'% (efterfølger # ) Bladrer i indholdet af D '%. Langt de fleste kommandoer er dokumenteret elektronisk. Den elektroniske dokumentation er inddelt i forskellige afsnit. Der er tradition for, at man, når man præsenterer en ny kommando, samtidigt angiver hvilken sektion den er dokumenteret i, så det vil vi også gøre. For fremtiden vil vi præsentere kommandoer som & (1), istedet for blot &. Vi kommer tilbage til den elektroniske dokumentation i afsnit 4.4. 4.2.2 Særlige kataloger Der findes forkortelser for kataloger, som man ofte har behov for at tilgå:, %" (punktum) Det aktive katalog ()+* punktum) Folderen over det aktive katalog (tilde) Den aktive brugers hjemmekatalog (tilde-bruger) Brugeren bruger s hjemmekatalog Hvis man til eksempel ønsker at skifte det aktive katalog til brugeren %"# s hjemmekatalog, udsteder man kommandoen (6.-68? ;

20 KAPITEL 4. KOMMANDOFORTOLKEREN 4.2.3 Usynlige filer Kommandoen ' viser, som nævnt, en liste af filnavne. I UNIX betragtes filer, hvis navn starter med., som usynlige, og vil ikke blive vist af '. Sådanne filer kaldes på engelsk dot-files eller hidden-files, og de bruges mest af programmer, der behov for at gemme konfigurationsfiler eller lignende i ens hjemmekatalog. Til eksempel gemmer & (1) ens "## % osv. i kataloget &. Hvis man ønsker at se alle filer, inklusive de usynlige, kan man give ' argumentet # for all. 4.2.4 Mønstre Ønsker man at udpege en række filnavne, f. eks. som argumenter til en kommando, kan man gøre brug af forskellige mønstre. Mønstret betyder en vilkårlig tegnfølge (inklusive den tomme) og mønstret står for netop ét vilkårligt tegn. Kommandoen ' D ## vil således producere en liste af filnavne, der begynder med D ##, mens ' D ## vil vise de af filnavne, der består af D ## og et ekstra tegn. Brugen af mønstre kaldes på engelsk globbing. Kommandoen & ovenfor kan også kopiere flere filer ad gangen; hertil kan man anvende & som &D 2 D. '# Da vil alle de første filer blive kopieret ind i den sidste, der så helst skal være en katalog. Hvis vi f.eks. har lavet en førstedelsrapport, der består af en masse forskellige filer, der ligger i kataloget &&#, kan vi ved hjælp af mønstre og dette særlige format for & lave os en sikkerhedskopi: =6,? > > 33 > 9 *= 3 *3 > 3 3 > 9 > 33 > 9 = 3 Hvis %&&# -kataloget indeholder underkataloger, kan vi bede & tilføje parameteren # (Recursive): om at tage dem med ved at *3 > 33 > 9 > 33 > 9 *= 3 Flyt-kommandoen accepterer det samme format, så hvis vi vil lægge $ -kildeteksterne 1 til rapporten i et katalog for sig selv, kunne vi forsøge med =6,? > > 33 > 9 9:8 > 33 > 9 9:8 > 3 3 > 9 9:8 Med mønstre ser vi for første gang en facilitet, der kun vanskeligt lader sig forene med en grafisk brugerflade. Selvom visse moderne grafiske har ligeså fleksible metoder til på en gang at udvælge mange filer, falder disse metoder aldrig flydende ind i resten af grænsefladen. I et tekstbaseret system bliver de derimod en del af den måde, som man udtrykker sig på. 1 Der kommer mere om -filer, og i kapitel 9

4.3. FILRETTIGHEDER 21 4.3 Filrettigheder Alle DIKUs brugere arbejder på det samme UNIX-system, så der er naturligvis behov for nogen beskyttelse. F.eks. skal studerende helst ikke kunne læse et kommende eksamenssæt, blot fordi de er lumske nok til at lede efter det i en forelæsers hjemmekatalog. For at kunne give selektivt adgang til filer, har UNIX såkaldte rettigheder (eng. permissions). Vi har tidligere set kommandoen ', der giver en oversigt over hvilke filer, der er i et katalog. Giver man ' flaget #', får man detaljerede oplysninger om de enkelte filer. Lad os prøve at se på mit hjemmekatalog: ; $ # $ # $ "# D && # # ##% ## "# "# # ###### " # % & 7 % ' Alle filer har under UNIX en ejer; ejerens brugerid (her debois ) står i den tredje kolonne. Ligesom alle filer har en ejer, har hver fil også en gruppe; grupper lader udvalgte brugere deles om filer og kataloger. EDB-afdelingen kan oprette og nedlægge grupper efter behov, men gør det ikke i forbindelse med rapportgrupper på førstedelen. Gruppenavnet findes i fjerde kolonne. Herefter følger filens størrelse, dato og tidspunkt for sidste ændring og tilsidst filnavnet. Filrettighederne kan læses ud af den første kolonne. Det første bogstav angiver, om filen er et katalog (d) eller en almindelig fil (-). De efterfølgende bogstaver angiver rettigheder. Rettighederne er grupperet tre og tre, således at de første tre bogstaver angiver ejerens rettigheder, de midterste tre gruppens rettigheder, og de sidste tre alle andres rettigheder. Et betyder, at læsning er tilladt (read), et at skrivning (og herunder sletning) er tilladt (write), og et $ at filen må afvikles, hvis den er et program, eller hvis filen er et katalog, at man må gå ind i kataloget (execute). F.eks. er filen 7 % ' en HTML-udgave af min karakterudskrift. Mine karakterer er en privat sag, så ingen andre end jeg kan læse eller skrive denne fil. Filen "# indeholder mine -makroer. Jeg selv kan både læse og skrive i den, og jeg har ikke noget imod at andre bruger mine makroer, så alle andre har lov til at læse filen. Jeg tillader imidlertid ikke andre at skrive til den, da nogen ved et uheld kunne komme til at slette den. 4.3.1 Ændring af rettigheder Filrettigheder kan ændres med programmet! # (1), der har følgende syntaks: # # # #! $ D ' Den første klamme angiver hvis rettigheder der ændres: ejerens (user), gruppens (group) eller andres (other). Fortegnet angiver om rettighederne skal gives ( ) eller trækkes tilbage ( # ), og den sidste klamme angiver hvilke rettigheder det drejer sig om. Så hvis jeg f.eks. ønsker at lade en god bekendt ændre i min! -pakke, kunne jeg midlertidigt give andre skriverettigheder:,6 " 5 68? ; ; 9$#

22 KAPITEL 4. KOMMANDOFORTOLKEREN Jeg vil måske gerne sikre mig, at der rent faktisk skete noget: ; 68? ; ; 9$# # # ##% # "# "# Tilføjer man # til # -kommandoen vil den rekursivt arbejde sig ned igennem kataloger. F.eks. har jeg på min instruktorkonto et katalog ved navn #, der indeholder underkatalogerne D #, D # og, der hver især indeholder skriftlig kritik, karakterlister og andet godt, som jeg er kontraktligt forpligtiget til at hemmeligholde. Derfor er der selvfølgelig ingen andre, der kan læse kataloget, eller nogle af dets underkataloger eller filer. Det kunne imidlertid godt tænkes, at jeg havde behov for at lade en anden instruktor kigge disse kataloger igennem. Instruktorer er alle i samme gruppe, så ved at ændre grupperettighederne kan jeg tillade medinstruktorer men ikke studerende læsning. Jeg kan bruge # -parameteren til at ordne både! # - kataloget og alle dens filer og underkataloger i et hug:,6. " >? C;:9 > =(9 > 9 4.3.2 Standardrettigheder Laver man en ny fil, kommer man automatisk selv til at eje den, og filen får rettighederne # # ##% ## Man kan ændre standardrettighederne med kommandoen. Denne er dokumenteret i % - siden for (1), og det særlige oktale rettighedsformat i -siden for # (1). Vi behandler -sider i næste afsnit. 4.4 Elektronisk dokumentation I virkeligheden er de fleste kommandoer vi har set ovenfor ikke indbygget i kommandofortolkeren. Istedet er kommandoerne selvstændige programmer, som kommandofortolkeren finder og kører for en, når man angiver deres navne. Kommandofortolkeren leder efter filer, der kan gøre det ud for programmer, i nogle på forhånd fastsatte kataloger. Nogle få kommandoer, f.eks. & håndterer kommandofortolkeren direkte. Disse kommandoer kaldes built-ins. Langt de fleste programmer er dokumenteret on-line ved hjælp af (1). Man finder dokumentation af et program med kommandoen "%& #!. Man bladrer i dokumentationen for et program med følgende taster: ;!3!8 6 C Bladrer fremad. Bladrer fremad (down). Bladrer tilbage (up). Søger fremad. Søger tilbage. (Efter søgning) finder næste. (Efter søgning) finder forrige. Hop til toppen. Hop til slutningen. Afslut.

4.4. ELEKTRONISK DOKUMENTATION 23 > 8!9 > C. I Efter begge søgetasterne skal man indtaste det ord man søger efter, og afslutte med virkeligeheden benyttes ' (1) til at vise dokumentation; se dokumentationen af ' for flere muligheder. Vil jeg f.eks. vide mere om ', der til trods for sin simple funktionalitet har virkeligt mange parametre, prøver jeg C ; der resulterer i ' + ' ' '' ' D ' ' $"# ' # #D! # % ' # " D %'! # &! $ ' ' ' # & %#! '' ' #%& %# ' D ' # & # ' ' # & # ' $ ' # & # #! # ' # ' # # D # # D ' ' &! #! D # % # # & #!! #'' # # " D '%, # % "' "'# # # ' ' Den elektroniske dokumentation dækker ikke kun programmer, men også C-standardbiblioteket, standardbiblioteker for en mængde andre programmeringssprog samt en masse andet. Hvis man skal vide noget, om et eller andet der har et navn, kan man som regel finde noget dokumentation med "%. Til tider er der desværre overlap imellem f.eks. et programnavn og et funktionsnavn i et eller andet standardbibliotek, så -siderne er delt ind i afsnit. De fleste programmer befinder sig i afsnit 1. Når man slår op i -siderne ved hjælp af -programmet kan man afgive, hvilken del af dokumentationen man ønsker at slå op i: C!,6 Som nævnt er der tradition for, at man i UNIX-dokumentation angiver et programs man-afsnit sammen med dets navn, når man introducerer det. En man-side har tilknyttet nogle nøgleord, og på visse af DIKUs datamater man kan få en liste af -sider, der dækker et bestemt nøgleord med programmet %#%, og man kan få en en-linies beskrivelse af et program med programmet (1), f.eks.: 5 90? ; C '% # '! " D ' C 0=<3 8>? ; ;%? C;

24 KAPITEL 4. KOMMANDOFORTOLKEREN % # # D ' % & # % # D! # # & % %# # D D ' %#%& % # &#!& #% & & % %#% Læg her mærke til, at # optræder både som program (1) og C-funktionskald (2). NB! RESTEN AF DETTE KAPITEL ER VIDEREGÅENDE! 4.5 Indtastning af kommandoer Det er selvfølgelig altid simplere at bruge et grafisk værktøj, som f.eks. Microsofts Explorer, end at bruge en tekstbaseret kommandofortolker. Bruger man grafiske værktøjer behøver man ikke at huske lange kommandoer, eller møjsommeligt sidde og taste lange stinavne ind. Moderne kommandofortolkere gør imidlertid hvad de kan, for at være behagelige at arbejde med, til trods for deres tekstbaserede natur. 4.5.1 Redigering på kommandolinien Selve kommandolinien opfører sig omtrent som man skulle forvente. Hvis man er vant til et Microsoft Windows miljø, vil man måske alligevel blive en smule overrasket; tasterne er de samme som i GNU Emacs (se afsnit 8.3): 9 > 9 > 8 =(;!3!8 9 > 6 9 > = 9 > # Flyt markøren til venstre Flyt markøren til højre Flyt markøren til begyndelsen af linien Flyt markøren til enden af linien Slet tegnet på markørens venstre side. Slet tegnet under markøren. Slet til linieslut (gem i udklipsbuffer). Kopier udklipsbuffer til markørposition. 4.5.2 Kommandohistorie Ofte kommer man i den situation, at man har brug for atter at udføre en kommando, som man udførte for 10 minutter siden. Kommandofortolkeren husker tidligere udførte kommandoer, så istedet for møjsommeligt at indtaste kommandoen igen, kan man bladre igennem de tidligere kommandoer med og. Denne facilitet kaldes historie (eng. history). Ydermere kan man få kommandofortolkeren til at finde den sidst udførte kommando der starter med en bestemt tegnsekvens ved at skrive tegnsekvensen og trykke 8(; 3. Så hvis jeg f.eks skriver '%& 8(; 3, finder kommandofortolkeren den tidligere kommando '%&# && " $ Hvis jeg mente en endnu tidligere kommando kan jeg blot endnu en gang trykke kommandofortolkeren giver mig nu muligheden '%& og så videre. 8(; 3, og

4.5. INDTASTNING AF KOMMANDOER 25 4.5.3 Automatisk udfyldning På bare halvstore UNIX-installationer skal er man ofte nødt til at skrive meget lange stinavne, for at nå frem til den fil, man har brug for. F.eks. er den fulde sti for den fil, der ligger bag den tekst du læser netop nu! " # ''!7 $ hvad der i længden bliver temmelig træls at skrive. Heldigvis implementerer kommandofortolkeren automatisk udfyldning (eng. completion), der betyder, at man nøjes med at indtaste en del af en kommando eller et filnavn, hvorefter man ved at taste 9 beder kommandofortolkeren gøre det færdigt. Eksempelvis vil ' '# 9 blive udfyldt til ' '# '. Ofte er der selvsagt flere muligheder for udfyldning. I så fald vil kommandofortolkeren fylde så mange tegn ind som muligt og signalere ved et blink på skærmen, at der fandtes flere muligheder. Man kan få en liste over alle muligheder ved at taste 9 > 6. Kommandofortolkeren genskriver kommandolinien bagefter. Hvis jeg f.eks. skriver (6 6? = 9:8? C = > ; ;!9 >,6 ""'%# & "!" $,! '' D ' D # & "' $ $ ' $ & "' $, " 7 $ &! %!!! "# Automatisk udfyldning virker som nævnt ikke kun på filnavne men også på kommandoer: 3 9 > 6 '%& # D '%& ' & ' & % '%& '%&' # 4.5.4 Aliaser Et alias er en forkortelse for en kommando. Hvis man f. eks. tit anvender kommandoen ' #, kan man oprette aliaset ' for den. Herefter vil kommandoen ' '# blive opfattet som ' # ' #. Aliaset oprettes med kommandoen '% ' ' #. Aliaser, der er oprettet på kommandolinien, gemmes ikke når der logges ud. Vil man have en varig oprettelse af et alias, skal oprettelsen af aliaset indsættes i konfigurationsfilen, der er placeret i hjemmekatalog se afsnit 4.11. Ovenstående eksempel var simpelt, fordi argumentet '# blot skulle indsættes til sidst i kommandoen. Man kan sagtens forestille sig, at det er ønskeligt at få placeret argumenterne et andet sted. Her anvendes tegnfølgen som forkortelse for argumenterne, der efterfølger navnet på aliaset. Antag, at aliaset D er defineret ved ' % D! & ' Kommandoen D! bliver da fortolket som & ' Man kan se sine aliaser ved at give kommandoen ' % uden argumenter og fjerne aliaser med '%.

26 KAPITEL 4. KOMMANDOFORTOLKEREN 4.6 Ind- og uddata til programmer Et UNIX-program, der startes fra kommandofortolkeren, har to muligheder for at kommunikere med brugeren: Enten kan det lave sig et nyt vindue, eller det kan overtage kommandofortolkerens. De fleste små programmer til filmanipulering, f.eks. ' (1) og (1), overtager kommandofortolkerens vindue. Når man udfører programmet ', så standser kommandofortolkeren midlertidigt, idet den overlader vinduet til programmet '. Når ' er færdig, dvs. når den har vist en liste af filer, så kører kommandofortolkeren videre i vinduet. Programmer som ' der overtager vinduet kender i virkeligheden slet ikke til vinduer. De har blot en kanal, som de forventer at kunne skrive uddata på. Kommandofortolkeren sørger for at koble denne kanal til dens eget vindue. Denne kanal kaldes # (standard output). Når man starter et program, kan man bede kommandofortolkeren om at binde programmets # til en fil istedet for kommandofortolkerens vindue; dette kaldes på engelsk redirection. Man gør dette ved at skrive D %'% efter kommandoen. Så hvis jeg gerne vil have en detaljeret oversigt over hvilke filer, der ligger i mit hjemmekatalog, og jeg gerne vil have oversigten placeret i filen!!#d ' $, så bruger jeg kommandoen ' #'!!#D ' 7 $ Hvis filen findes i forvejen nægter kommandofortolkeren. I så fald kan man med et udråbstegn angive at filen skal overskrives: ' #'!!#D ' $ Man kan også tilføje til enden af en fil istedet for at overskrive. Det gør man med to større-end tegn: ' #'!!#D ' $ Programmer har også en kanal til inddata, som kommandofortolkeren almindeligvis binder til dens eget vindue. På den kommer tastetryk igennem vinduet og ind til programmet. F.eks. spørger % (1) om lov, så man ikke ved et uheld kommer til at slette filer: 4> A.> # 9:8?? 90? 9:8 D ' #! # D %' $ Denne indkanal kaldes! (stand input), og også denne kan bindes om. De fleste programmer kan ikke se forskel på, om de får inddata fra tastaturet eller fra en fil. Man binder! om ved at skrive D '% efter kommandoen. Man kan på engang bruge både og, hvis man vil omdirigere både! og # : 4= C*6? C*66 9 6 6 9 Programmer har også en tredie ud-kanal, (standard error), til hvilken de skriver egentlige fejlmeddelelser. Denne kan omdirigeres med. Man kan koble til #, og sende begge dele ud i en fil med.

4.7. JOBSTYRING 27 4.6.1 Eksempel i omdirigering Mange af de ting, som man kan få kommandofortolkeren til, bliver rigtigt anvendelige i forbindelse med afprøvning af programmer. Lad os til eksempel sige, at vi i forbindelse med en Dat0-rapport er blevet bedt om at skrive to ML-programmer, et der krypterer en tekst, og et der dekrypterer. Vi tænkter os, at vi har løst opgaven ved at skrive to ML-programmer & og &, der hver især læser fra!, henholdsvis krypterer og dekrypterer, og udskriver deres resultat på #. Vi skal selvfølgelig foretage en afprøvning, hvad der sædvanligvis kræver, at vi kører programmet på forskellige inddata, og undersøger, om vi får det rigtige uddata. Istedet for møjsommeligt at indtaste data til programmet hver gang vi ønsker at foretage en afprøvning, kan vi indtaste data i en fil, og så hægte datafilerne på! : ; > # 39 ;? C*6 6 9 9 9 # ' Vi kan endvidere omdirigere resultatet af kørslen til en fil. Normalt skriver en startlinie, en prompt samt typerne af erklæringer på #. Vi vil imidlertid kun have uddata fra vort eget program, så vi får # ' til ikke at skrive noget selv med parameteren # % : ;? 8(9 68 > # 39 ;? C*6 6 9 9 9 = > #39:8 > 8!9 9 9 Vi kan selvfølgelig dekryptere på samme måde: ;? 8(9 68 68 > # 39 ; => # 39:8> 8(9 9 9 6 6 9 9 9 Idet vi foretager en afprøvning, vil vi selvfølgelig gerne undersøge, om $ er identisk med! $ *D D. Det kan gøres automatisk med programmet (1) 2 : 6?? C6 6 9 9 9 *66 9 9 9 *D D Resultatet af er enten ingenting, eller en markering af hvilke linier i de to filer der er forskellige. Det giver os mulighed for at forsøge at kryptere og dekryptere meget store filer, uden at vi manuelt behøver at gennemgå resultatet. Vi kunne f.eks. prøve med stavekontrollens ordbog 3. 4.7 Jobstyring Et kørende program kaldes i UNIX en proces. Et UNIX system multitasker, dvs. kører flere processer på en gang. I realiteten kan en datamat med kun een processor ikke gøre mere end een ting ad gangen, men ved at skifte imellem de aktive processer f.eks. hvert millisekund giver datamaten indtryk af at gøre flere ting på en gang. Når man instruerer kommandofortolkeren om at udføre en kommando, stopper kommandofortolkeren midlertidigt, og en ny proces startes til kommandoen. Denne nye proces overtager!, # og fra kommandofortolkeren. Når kommandoen terminerer, genstartes kommandofortolkeren, der samtidigt får sine kanaler igen. 2 Den engagerede læser, der prøver nedenstående, vil konstatere en fejl i vores program. 3 Man skal dog være opmærksom på at store testtilfælde/mange testtilfælde og god afprøvning ikke er synonymer.

28 KAPITEL 4. KOMMANDOFORTOLKEREN 4.7.1 Processer i baggrunden Selvom man har omdirigeret alle en proces kanaler, venter kommandofortolkeren alligevel. Til tider er man ikke interesseret i at vente, f.eks. hvis det program, man har sat igang skal stå og regne i lang tid, eller hvis programmet ikke benytter nogle af de tre kanaler, men istedet laver sit eget vindue. En proces der startes, uden at kommandofortolkeren venter på den, siges at køre i baggrunden. En proces startes i baggrunden ved at tilføje i slutningen af kommandolinien. Hvis vi fortsætter eksemplet ovenfor, kunne vi kryptere en stor fil i baggrunden: ;? 8(9 68 > # 39 ; ;(>? 5 > 6; 5 >B6; 8 C *> #39:86 En proces har et såkaldt proces-id, et tal der identificerer processen. Dette tal er i ovenstående eksempel 28462. For nemheds skyld nummererer kommandofortolkeren de processer den har startet fortløbende fra 1 i ovenstående eksempel er den nået til nummer 3. Når en baggrundsproces er kørt færdig, gør kommandofortolkeren opmærksom på det: #% # '# % '!" # # % & 4.7.2 Processer i forgrunden Har man startet et program i forgrunden, dvs. uden at sætte det i baggrunden med, kan man suspendere programmet midlertidigt og vende tilbage til kommandofortolkeren ved at trykke!9 > : ;? 8(9 68 & ;(>? 5 > 6; 5 >B6; 8 C *> #39:86!9 > & Har man fortrudt kan man også standse programmet helt med!9 >! :? 5 >!9! ;? 8(9 68 & ;(> 5 > 6; >B6; 8 C *> #39:86 4.7.3 Jobkontrol Kommandoen # " eksempel: *6? viser en liste af programmer, kommandofortolkerne har startet for en. For ;? 8(9 68 & ;(>? 5 > 6; 5 >B6; 8 C *> #39:86!9 > & ; #! $ & # ' # % '!" # # &

4.8. SØGNING 29 Job nummer 1, $ (1), kører i baggrunden (derfor ampersanden), mens job nummer 2, & - kørslen, er suspenderet (eng. suspended), dvs. har fået frataget sine kanaler, og er sat til at vente. Hvis en proces er suspenderet, kan programudførelsen genoptages enten i forgrunden (med kommandoen D, foreground) eller i baggrunden (med kommandoen ", background). Ud for hver kommando viser #%" et jobnummer, der med tegnet som prefix, kan bruges som argument til D, " og til kommandoen '' (1), som slår processen ihjel. Processer har mulighed for til en hvis grad at vægre sig ved at blive slået ihjel. Man kan insistere ved at give '' parameteren #. Ville jeg standse $ -processen kunne jeg gøre dette ved 4=?! 4.8 Søgning I det følgende præsenteres kort nogle af de vigtigste værktøjer, som UNIX stiller til rådighed i forbindelse med søgning efter eller i filer. Værktøjerne gennemgås ikke i detaljer; dette afsnit tjener mest til at gøre opmærksom på deres eksistens. Vi håber at læseren ved senere lejligheder vil tænke f.eks. ah, det kunne man da vist med dette-eller-hint værktøj og så selv ved hjælp af -systemet vil kunne hitte en løsning. 4.8.1 Find Især hvis man programmerer, har man fra tid til anden brug for at finde filer med bestemte karakteristika, f.eks. at de har samme efternavn. Ligger filerne i samme katalog kan man bruge mønstre. Er de derimod spredt over flere kataloger tyr man sædvanligvis til værktøjet D! (1): D "! ' Søgningen starter i kataloget, og går rekursivt ned igennem alle underkataloger. Hvis der ikke angives nogle " ' %, skriver D! på # alle de filnavne den møder. Angivelsen af "! ' er en lille videnskab i sig selv, så vi nøjes her med at give et enkelt eksempel; interesserede henvises til % -siden. Ønsker jeg at finde alle filer med efternavn ' i det aktive katalog og dets underkataloger skriver jeg blot: C6 C 8 ; # 7 ' & ' % ' & & % 7 ' &! D!$ # % %"7 ' ' Der skal være en skråstreg før, ellers vil kommandofortolkeren opfatte asterisken som et mønster den skal lave om til et antal filnaven og give til D! ; her er vi imidlertidigt interesserede i at give asterisken selv som parameter. 4.8.2 Fastfind Desværre er D! noget langsom. Skal man finde filer, som man overhovedet ingen anelse har om hvor er, er det for langsomt at lade D! søge igennem hele filsystemet. Da kan man bruge D,D! (1), der ved hjælp af en database meget hurtigt kan lede hele filsystemet igennem. Databasen opdateres imidlertid kun en gang i døgnet, så hvis man leder efter nye filer, kan det meget vel være, at man ikke finder dem. Formatet for D,D er

30 KAPITEL 4. KOMMANDOFORTOLKEREN D,D! % og D,D finder så alle filnavne, der indholder den angivne streng. F.eks. kunne jeg lede efter # systemordbogens ordliste, : A ;:9 C*6 5 > 6; # ' % # " # # #!# # & '# ' # '" & '! &%' % # #! 7 ' # # # % # & # # # # % # # #%!&' # # # % D & # #%' # ' '!" # # ' '!# &' # # ' & & # Systemordbogen er den næstsidste fil i listen. Man kan se det på at den ligger i kataloget. 4.8.3 Grep Tilsvarende kan man nogle gange have brug for at søge efter en bestemt tekststreng inden i en eller flere filer. Lad os f.eks. tænke os, at jeg var i færd med at skrive et ML-program til en førstedelsrapport. Lidt større programmer fordeler man gerne på flere forskellige filer, så lad os sige, at mit program er spredt over en hel masse forskellige filer, der alle sammen hedder ' til efternavn: ; ; & ' ' " # # ' 7 ' & ' " ' ' " ' ' ' #!# 7 ' %, #% #D ' &!#D %# #D 7 ' *D #D ' ' " # # ' ## " ' &!#!#D ' Hvis jeg nu vil finde den fil, der indeholder funktionen ' %" &, kan jeg bruge programmet %& (1): > 8 3 A C 8 # 3 8 *; ' " # # ' D ' %" & % Hvis jeg vil have linienummeret med, så tilføjer jeg blot #% : > 8 3 0C *A C 8 # 3 8 ; ' " # # ' D ' %" & % Værktøjet & har generelt formatet &" $& D %'% hvor $& er et såkaldt regulært udtryk (eng. regular expression). Alle strenge 4 er regulære udtryk, så i eksemplet ovenfor finder & alle forekomster af strengen fun elabtype i alle filer, hvis efternavn er '. Regulære udtryk kan imidlertid meget, meget mere end blot at finde faste strenge. Interesserede henvises til -siden for &, on-line hjælp til regulære udtryk eller [10]. 4 for de teoretisk inklinerede: alle endelige strenge.

4.9. PIPES 31 4.9 Pipes! Ligesom vi kan lade binde en proces til en fil, kan vi også binde den til en anden proces #. Man hælder så at sige uddata fra et program ind i et andet. Man foretager bindingen ved at skrive to kommandoer adskilt af en lodret streg. Som et helt simpelt eksempel kunne vi kryptere og herefter dekryptere en fil i et hug, ved først at kryptere den, og herefter sende det krypterede uddata ind i dekrypteringsprogrammet: ;? 8!9 68 *> #39 ;? C*6 6 9 9 9 ;? 8!9 68 768 *> #39 ; %( *66 9 9 9 Med pipes kan man, ved at kombinere programmer der hver især gør meget simple ting, udføre komplicerede kommandoer. Dette er en af de absolut allerstærkeste features ved kommandofortolkeren og er i allerhøjeste grad i tråd med UNIX-filsofien, så vi demonstrerer med et antal eksempler. Pipes i sig selv er selvsagt ikke rigtigt interessante før man sætter dem imellem programmer, så vi introducerer nogle kommandoer undervejs. Alle de følgende eksempler har jeg gjort brug af; visse bruger jeg dagligt. Der er altså på ingen måde tale om konstruerede eller tænkte eksempler. 4.9.1 Eksempler på pipes Vi kaster os hovedkuls ud i det: > 83 = C*6 A > 9 = 8 > 9:8 5 Kommandoen (1) læser fra!, indtil der ikke er mere at læse, og udskriver (givet parameteren #' ) antallet af læste linier på #%. Den første del af kommandoen, &, udskriver for hver fil hvis navn slutter med $ alle de linier i filen, der indeholder strengen kommandofortolker. Så ovenstående tæller (ca.) hvor mange gange ordet kommandofortolker optræder i kildeteksten til dette kapitel. Måske jeg istedet har lyst til at finde ud af, ca. hvor mange linier kursusbog vi har skrevet ialt, ikke kun dette kapitel. Hvert kapitel ligger i et katalog for sig, så jeg samler sammen med D! : C*6 0C 8 9:8 > ;75 Den middel-obskure $ (1) kommando tager en anden kommando, i dette tilfælde, som parameter, og giver alt hvad den læser på som parametre til denne anden kommando. Så får altså alle filer der slutter på $ som kommandolinie-parameter. Vi tager et $ eksempel til. Lad os tænke os tilbage til & -eksemplet i afsnit 4.8.3, men lad os denne gang antage, at alle ' filerne ligger i forskellige underkataloger af det aktive katalog. Vi kan finde alle ' -filerne med D, og herefter bruge $ til at give & disse filer som kommandolinie-parametre: C6 C 8 ; > ; > 83 C A C 8 Til det næste eksempel benytter vi programmet (1), der skifter brugerid. Man skriver simpelthen ; <68,? ; & # # 3 8

32 KAPITEL 4. KOMMANDOFORTOLKEREN Hvis man indtaster det rigtige password, ville man ved ovenstående blive til "#, dvs. få " # rettigheder mht. filer osv. Hvis man blot ønsker at udføre en enkelt kommando under en påtaget identitet, kan gøre dette med argumentet # ( # #. Ønsker man ved samme lejlighed at skifte til den nye brugers hjemmekatalog og få den nye brugers opsætning, tilføjer man argumentet #. Vi kan udnytte dette til at kopiere en fil fra en konto til en anden uden at behøve at fedte med filrettigheder. Antag, at vi ønsker at kopiere filen #%& #% ' #D ' fra brugeren "# hjemmekatalog til det aktive katalog: ; 9 3? 9 3? ; 68,? 9 8 8 8 8 & # Hvis jeg er på min sandkassekonto, og gerne vil skrive en fil ud, må jeg på en eller anden måde få hekset filen over på min di-konto. Vi benytter essentielt set samme trick som før: ; <6,?! 3 > + CC8 > 3 8 C C 9:8 & # Vi tager et sidste eksempel: Lad os tænke os, at jeg har skrevet et program, hvis afviklingshastighed på afgørende vis afhænger af størrelsen konstanten "'#. Jeg ønsker eksperimentelt at bestemme, hvor stor denne blok skal være, for at programmet kører hurtigst muligt, så jeg skriver programmet en lille smule om, så det prøver alle blokstørrelser fra ) til. Programmet giver uddata på følgende format: % "'# "' # "' "' # ' "' # ' % " " ' "' # " " % "'# "' # "' 2 : "' # ' "' # ' % " " ' "' # " " Lad os finde den blokstørrelse, der giver den bedste "' -tid. Hertil benytter vi programmet # (1) der sorterer inddata. Først piller vi med & de linier ud, der indeholder "' - tiden. Herefter sorterer vi dem, og tilsidst udskriver de 5 første (dette sidste er funktionaliteten af (1)): > 8 3 ; *> 8 90? 8(; 6 9 ; > 9 0= 8 *6 "' # "' "' # "' "' # "' "' # "' "' # "' Parameteren til # vælger den tredie kolonne; interesserede henvises (atter!) til % -siden.

4.10. KOMMANDOFILER 33 4.10 Kommandofiler Kommandoer kan samles i en fil og udføres samlet med kommandoen #% D %'% Programmet source har aliaset punktum, så man kan også skrive D '% En kommandofil kaldes gerne et script. Kommandofortolkeren har faktisk et helt lille programmeringssprog indbygget, der gør det muligt at få selv meget avancerede operationer foretaget automatisk. På den måde kan man nemt lave små scripts, der foretager f.eks. automatisk afprøvning. Kommandofortolkerens indbyggede sprog ligger dog noget udover denne bogs mål. Interesserede henvises til -siderne for kommandofortolkeren, (1). Der findes iøvrigt mange andre værktøjer, der kan hjælpe en til at lave automatisk afprøvning; interesserede henvises til sprogene & ' (1), & #% (1) eller '. 4.11 Konfiguration Kommandofortolkeren har variabler. En variabel er en tekststreng, der har tilknyttet en værdi. Man kan inspicere variables værdier med kommandoen #, og man kan tildele en værdi til en variabel med kommandoen %, : 8 D! % "' ; 8(9:8 C A 8 D ## Kommandofortolkeren går ud fra, at strenge der starter med et $ -tegn er variable. Variable bruges typisk til at konfigurere kommandofortolkeren eller programmer man kører, eller til at indeholde basal brugerinformation. F.eks. indeholder variablen navnet på den nuværende bruger, og stien til ens hjemmekatalog: 8 %"# 8 # "# Enkelte variable har særlig betydning for kommandofortolkeren. Variablen indeholder f.eks. stien til alle de steder, kommandofortolkeren skal lede efter programmer, mens variablen indeholder stien til systemets % -sider. Alle nødvendige variable sættes automatisk op, når man logger ind. Finder man det nødvendigt at ændre nogle af standardopsætningerne, kan man ændre i filen!. Når kommandofortolkeren starter, læser den denne fil, og udfører alt hvad der står i den som kommandoer. Man skal være lidt forsigtig med at pille i!, for piller man de forkerte steder, kan man pludselig komme i den situation, at intet virker. Skulle det ske, kan man udstede kommandoen #, der flytter ens tilbage til standardopsætningen. Kan man slet ikke logge ind, kan man efter at 8 C9:8 > have indtastet sit password trykke ;? AB9 8 C9:8 > istedet for blot det vil gøre, at ens konfigurationsfiler ikke bliver læst, og man får så en chance for at rette op på eventuelle ulykker. Hvis alt andet svigter, kan man henvende sig på operatørkontoret, se afsnit 10.1.

34 KAPITEL 4. KOMMANDOFORTOLKEREN 4.12 Referencer Kommandofortolkeren! (1) er blot en blandt mange forskellige. Den udspringer af (1), der igen udspringer (1), den oprindelige kommandofortolker. Vil man vide mere om kommandofortolkere, er % -siderne for disse et godt sted at starte. Ønsker man istedet en egentlig bog om at benytte UNIX, er [10] en omfattende og nogenlunde tilgængelig gennemgang af de mange, mange muligheder der er i UNIX. På Det Verdensomspændende Internet findes talløse UNIX-introduktioner. Et godt sted at starte er & #% ' #!. På DIKUNIX (se afsnit 10.7) er der installeret en anden kommandofortolker, nemlig! (1). DIKUs system tillader ikke umiddelbart at man skifter kommandofortolker, så det kan ikke anbefales for begyndere at forsøge sig med. Til de der ikke lader sig skræmme så let, skal det blot nævnes, at er en aggressiv kommandofortolker; rygtet vil vide, at det er den foretrukne blandt visse af EDB-afdelingens medlemmer. UNIX is the answer, but only if you phrase the question very carefully UKENDT