In- och utmatning i Unix Program i Unix skriver och läser till och från filer. En fil betyder här en vanlig fil med text eller binära data, ett tangentbord, en skärm, ett annat program etc. Innan ett program kan använda en fil, måste filen öppnas, mer om det i senare programmerings. Då ett program startas i Unix finns redan tre öppna filer: stdin öppet för läsning, normalt kopplat till tangentbordet stdout öppet för skrivning, normalt kopplat till skärmen stderr öppet för skrivning, normalt också kopplat till skärmen Många program använder endast dessa tre filer. Unix 2005 / Copyright Inge Frick 21 Omkoppling av in- och utmatning Tecknen > och < i shellet tillåter omkopplig av stdin och stdout på följande sätt: >echo $PATH > apa kör echo kommandot med stdout kopplat till filen apa >tr : \n < apa kör tr kommandot med stdin kopplat till filen apa Man kan också koppla om stderr, men det gör man vanligen inte. Program skriver vanlig utmatning till stdout, men felmeddelanden till stderr. Detta gör att om stdout kopplas till en fil så hamnar felmeddelanden fortfarande på skärmen. Man kan koppla ihop två program på följande sätt: >echo $PATH tr : \n Här blir utmatningen från echo kommandot, inmatning till tr kommandot Unix 2005 / Copyright Inge Frick 22 Kommando exempel, ls, pipe Kommando exempel, ls, pipe forts >ls emacs screens unix.pdf unix.ps >ls -l total 2149 drwxr-xr-x 2 inge usr 2048 Sep 2 16:12 emacs drwxr-xr-x 2 inge usr 2048 Sep 1 16:27 screens -rw-r--r-- 1 inge usr 404154 Sep 1 16:41 >ls -l sed 1d drwxr-xr-x 2 inge usr 2048 Sep 2 16:12 emacs drwxr-xr-x 2 inge usr 2048 Sep 1 16:27 screens -rw-r--r-- 1 inge usr 404154 Sep 1 16:41 Unix 2005 / Copyright Inge Frick 23 >ls -l sed 1d grep unix -rw-r--r-- 1 inge usr 404154 Sep 1 16:41 >ls -l sed 1d grep unix awk '{print $5}' 300077 1483952 404154 >ls -l sed 1d grep unix awk '{print $5}' awk '{sum += $1} END {print sum / NR}' 729394 Unix 2005 / Copyright Inge Frick 24
AFS På våra datorer används filsystemet AFS. AFS är ett distribuerat filsystem, (nästan) alla filer finns tillgängliga på nästan alla våra datorer. De flesta filer ligger på centrala servrar men av effektivitetsskäl finns en kopia av vanliga program och filer på de flesta datorer. Det här kan i princip ge problem om flera personer vill ändra på samma fil men i praktiken är problem sällsynta. Unix 2005 / Copyright Inge Frick 25 AFS Säkerhet I AFS finns ett säkerhetssystem där man för varje katalog kan bestämma vem som får göra vad med katalogens filer. De rättigheter som kan anges är : r Rätt att läsa innehållet i filer l Rätt att läsa katalogen, dvs visa vilka filer som finns i Rätt att skapa nya filer d Rätt att ta bort filer w Rätt att ändra i redan existerande filer k Rätt att låsa filer, så andra tillfälligt inte kommer åt dem a Rätt att ändra rättigheter Unix 2005 / Copyright Inge Frick 26 Unix säkerhet Unix traditionella säkerhetssytem fungerar annorlunda. Rättigheterna anges separat för varje fil, men man kan inte ange lika nogrant vem rättigheterna gäller. I Unix delas användare in i tre grupperingar avseende en fil: Ägaren av filen Filens grupp (där ägaren oftast ingår, men det är inte nödvändigt) Grupper behöver ni vanligen inte bry er om. Alla andra För varje gruppering finns det tre rättigheter (som visas av ls -l kommandot): r Rätt att läsa filen w x Rätt ändra eller ta bort filen Filen är exekverbar. Rätt att exekvera (köra) filen. Observera att man inte behöver ha rätt att läsa filen för exekvera den. Unix 2005 / Copyright Inge Frick 27 Säkerhet på våra datorer På våra datorer används en kombination av AFS och traditionella Unix rättigheter. För att t.ex. kunna exekvera filen myprog måste man dels ha rättighet enligt AFS att läsa filerna i katalogen där myprog ligger och dels ha rätt enligt Unix att exekvera filen. Om man inte vill att andra skall kunna läsa myprog eller andra filer i katalogen så ser man till att andra inte har Unixrättighet att läsa filerna. Genom att utnyttja kombinationen av AFS och Unix rättigheter kan man ange noga, för varje fil, vem som får göra vad. Unix 2005 / Copyright Inge Frick 28
Länkar Det som gör att en fil ligger i en katalog är att det finns en länk från katalogen till filen. Pilarna i figuren är länkar. Filens namn är egentligen en egenskap hos länken och inte hos filen så egentligen borde namnet stå på pilen och inte på rektangel i figuren men man brukar rita så här eftersom det blir klumpigt annars. En fil kan ha flera länkar så att den ligger (eventuellt med olika namn) i flera kataloger och/eller flera gånger, med olika namn, i samma katalog. En länk till. ligger i katalogen Två länkar till. ligger både i katalogen och katalogen Unix 2005 / Copyright Inge Frick 29 Hårda och mjuka länkar En fil kan ha hårda och mjuka länkar. En fil har minst en hård länk som den får då den skapas men den kan ha fler vilket vi dock inte tar upp här. Då man refererar till filer beter sig hårda och mjuka länkar på samma sätt men internt är det olika. En mjuk länk är egentligen en speciell sorts liten fil som innehåller en absolutreferens till den egentliga filen. Den här lilla filen ser man normalt inte. En mjuk länk anger alltså i vilken katalog filen egentligen ligger och vad den heter där. Det här har några konsekvenser: AFS-rättigheterna hos filen bestäms inte av katalogen där den mjuka länken ligger, utan där filen egentligen ligger. En mjuk länk kan vara rutten dvs referera till en fil som inte finns, precis som på WWW. På samma sätt som för en hård länk kan filen få ett nytt namn av den mjuka länken. /afs/nada.kth.se/ home/teach/ inge/// En mjuk länk Unix 2005 / Copyright Inge Frick 30 Program i miljön På labben kommer ni att få pröva program för några av de saker ni kommer att använda datorer till: Editering av text, se nästa bild. Webbläsare för att surfa på webben Mailhanterare för att skicka och ta emot datorbrev Nyhetsläsare för att skicka och läsa meddelanden i diskussionsgrupper. Kompilering (i detta fall kompilering av Javaprogram) Unix 2005 / Copyright Inge Frick 31 Editor En mycket stor del av er användning av datorer handlar om att skriva och ändra text. Det gäller både programmering och rapportskrivning. För att behandla text används en editor. I Unix-världen är det huvudsakligen två editorprogram som används, vi och emacs. Att tala om editorer brukar leda till heta diskussioner. vi är en betydligt mindre editor som speciellt är bra vid viss systemprogrammering. Många använder vi till all programmering, men det kan jag inte säga så mycket om, då jag själv är expert på emacs. Unix 2005 / Copyright Inge Frick 32
Emacs Emacs är en del av GNU-projektet. GNU-projektet står för en grundläggande del av Linux-miljön. Emacs är fri programvara som kan fås för nästan alla datorer i nästan alla operativsystem. Emacs kan göra nästan allt som har med text (och i viss mån multimedia) att göra. Emacs kan bland annat: Editera text i många format. Filhantering. Det man normalt gör med shell-kommandon Hantera programmering, med kunskap om de flesta språk Hantera felmeddelanden från avlusare Köra program Mailhantering Läsa och skriva i nyhetsgrupper Webbläsare Unix 2005 / Copyright Inge Frick 33 Emacs forts Emacs har av både tillskyndare och belackare beskrivits som ett operativsystem förklätt till editor. Hur åstadkommer Emacs allt detta? Emacs innehåller fyra saker : Grundläggande metoder för att hantera text Viss förmåga ett hantera bilder Förmåga att köra separata program Ett inbyggt språk, Emacslisp, som har tillgång till förmågorna i de tidigare punkterna Tillsammans med Emacs hör ett stort antal moduler skrivna i Emacslisp som kan hantera allt det som nämts tidigare och mer. Unix 2005 / Copyright Inge Frick 34 Att lära sig Emacs Emacs kan göra mycket och det finns många många Emacskommandon, men det är ändå inte så svårt att komma igång med Emacs. Till en början räcker det att kunna några av de vanligaste kommandona. Så småningom lär man sig fler kommandon genom användning. Kommandon är tangentkombinationer. Vissa kommandon finns också i menyer, men jag rekomenderar att ni använder tangentkombinationer så mycket som möjligt, man arbetar snabbare på det sättet. Det lönar sig att investera lite tid i att lära sig Emacs ordentligt! Ni kommer att ha igen det under hela er tid vid KTH. Unix 2005 / Copyright Inge Frick 35 Kommandon i Emacs Emacs arbetar med buffertar. Man läser in en fil i en buffert (ett utrymme i datorns minne), arbetar med den där och sparar resultatet som en fil. Alla tangentkombinationer är kommandon för Emacs. Tangenten a är ett kommando som vanligen betyder sätt in ett a i bufferten, men som allt i Emacs kan man ställa om så att a betyder sätt in b i bufferten vilket ju inte är så praktiskt. Vanliga kommandon som inte bara sätter in ett tecken är oftast någon av följande kombinationer C-<tecken>, C-x <tecken>, M-<tecken>. C-<tecken> betyder håll ner Control-tangenten och tryck på <tecken> M-<tecken> kan göras på två sätt: tryck först på Esc-tangenten och sedan på <tecken> Håll ner en tangent (finns på båda sidor närmast mellanslagstangenten) och tryck på <tecken> Unix 2005 / Copyright Inge Frick 36
Då man startar Emacs ser man efter ett tag följande: Observera att ni inte skall börja skriv in text här, ni skall först öppna en fil, gammal eller ny där er text skall stoppas in. Emacs måste veta vad filen heter. Filnamnet anger vad för typ av text ni skriver så att Emacs kan ställa in rätt mod för att hantera denna typ av text. Första kommandot blir alltså: C-x C-f för att läsa in en fil Emacs start Då man startar Emacs ser man efter ett tag följande: Unix 2005 / Copyright Inge Frick 37 Här har vi läst in filen.fvwm2rc Nu kan vi ändra i filen och sedan spara resultatet. Emacs börja editera Unix 2005 / Copyright Inge Frick 38 Emacs som IDE Då man säger till Emacs att editera filen prog.java som skall innehålla ett java-program händer följande: Emacs ser namntilläget.java, tolkar det som att filen skall innehålla java och laddar en modul som vet mycket om java: Vet hur javaprogram bör formatteras Kan hitta och förflytta sig till olika delar av javaprogram Kan hantera kommentarer Kan kompilera javaprogram och hantera felmeddelanden Kan provköra program och hantera felmeddelanden Kan leta i manualer På detta sätt kan Emacs fungera som IDE (Integrated Development Environment). En skillnad mot andra IDE är att Emacs kan hantera många programmeringsspråk och potentiellt alla språk. Saknas kunskap om ett språk är det bara att skriva en ny modul. Unix 2005 / Copyright Inge Frick 39 Här har vi läst in Helloworld.java, kompilerat med compilekommandot i JDE menyn. Kompileringsresultatet ses i den undre vyn. Vi har med kommandot C-x ` gått till det första felet och står här. Den undre vyn visar överst det första felmeddelandet. Om det finns flera fel så tar oss kommandot C-x ` till nästa fel osv Emacs editera java Unix 2005 / Copyright Inge Frick 40