Den här handledningen är tänkt att ge en enkel introduktion till hur man använder Linux på datorerna i datorsalarna i Teknikhuset på Örebro universitet. Jag har provkört i T120, men det kan fungera i andra salar. Introduktionen vänder sig till studenter som läser kurser vid Institutionen för naturvetenskap och teknik på Örebro universitet, och som inte tidigare använt Linux eller något annat Unix-system. Den förutsätter dock att läsaren har en del datorerfarenhet, särskilt från Windows-datorer.
Linux är inte installerat på datorns lokala disk, utan det som händer är att Linux hämtas via nätverket.
Linux startar med fönstersystem och allt. Logga in med samma loginnamn och lösenord som på Windows. Tänk på att Linux skiljer på stora och små bokstäver.
Det är meningen att man ska få tillgång till samma hemkatalog när man kör på Linux som på Windows, och att alla ändringar som man gör på det ena systemet ska synas på det andra systemet. Till exempel ska kataloger och filer som man skapar i Linux sen också finnas på Windows.
Tänk på!
Linux i våra datorsalar är nytt,
och det |
Tänk också på! Även om det är meningen att man ska få tillgång till samma hemkatalog när man kör på Linux som på Windows, och att alla ändringar som man gör på det ena systemet ska synas på det andra systemet, så skulle det kunna krångla, särskilt nu i början. Var därför försiktig med dina filer. Gör gärna egna säkerhetskopior, till exempel på USB-minne. |
Det är sant att Unix innehåller många verktyg som underlättar för experten, och som kräver att man läser en del i manualer innan man använder dem första gången, men moderna Unix-system, som Linux, är ganska lätta att använda även för nybörjaren. Man har arbetat mycket med att göra verktyg och fönstersystem som ska vara enkla att komma igång med.
Fönstersystemet är inte en del av operativsystemet i Linux, som det är i (nyare) Windows, utan om man vill kan man köra Linux i ett rent textläge. Men det finns flera olika fönstersystem till Linux, och nästan alla användare kör något av dem.
Här är ett exempel på hur skärmen kan se ut i Linux. Bilden är hämtad från datorerna i T120. (Klicka på bilden för att se den i stort format.)
Det finns flera olika grafiska gränssnitt som man kan använda i Linux. Det här är Unity, som vi använder på Linux-datorerna här. Det påminner ganska mycket om skrivbordet i Windows och på Mac. Det finns ett antal ikoner på skrivbordsytan och i listen till vänster, som man kan klicka på för att starta program eller öppna foldrar och filer.
En skillnad mot Windows-skrivbordet är att det finns fyra olika virtuella skrivbord, på engelska "workspaces", som man kan välja mellan genom att klicka i det fyrdelade fönstret i listen till vänster:
Det finns förstås en "filbläddrare" där man kan öppna kataloger och titta på filer, som på Windows och Mac:
Unix har alltid haft kraftfulla textverktyg, så kallade skal, där man kan arbeta effektivt med hjälp av kommandon och egenskrivna programsnuttar. I den här handledningen ska vi bara titta på några av de enklaste kommandona.
Man startar ett skal i ett "terminalfönster" eller "skalfönster", som är motsvarigheten till kommandofönstret ("DOS-prompten") i Windows. I Unity kan man starta nya program, som Terminal, genom att klicka på Ubuntu-symbolen längst uppe till vänster och börja skriva namnet på programmet. Klicka sen på rätt ikon.
Ett skalfönster startas, och där kan man ge kommandon, till exempel ls som helt enkelt listar vilka filer som finns i aktuell katalog:
Prompten tpy-e@live:~$ betyder att det är användaren tpy-e som är inloggad på datorn live, och att aktuell katalog är den användarens hemkatalog (visas som ~). I Unix kan man enkelt logga in på andra datorer, och då är det bra att ha datornamnet i prompten så man kommer ihåg vilken det är.
Man skapar nya kataloger med mkdir och byter aktuell katalog med cd:
I Unix finns bara ett enda träd av filer, som börjar i rotkatalogen. Den heter /. Diskar, cd-skivor, kataloger på servrar och allt annat stoppas in i trädet. Till exempel är det vanligt att användarnas hemkataloger ligger som underkataloger under katalogen home. I stället för till exempel M:\, som man kanske är van vid från Windows, heter hemkatalogen kanske /home/kajsa, om ens användarnamn råkar vara kajsa.
I Windows har alla filer normalt en ändelse, och vilken ändelse filen har avgör vad det är för typ av fil. Till exempel är filer som slutar på .exe körbara filer. I Unix behöver man inte ha filändelser, även om många enskilda verktyg tittar på ändelsen för att avgöra vad det är för fil.
Även fysiska enheter, som diskar, finns med i filträdet. Till exempel heter datorns huvudhårddisk ofta /dev/sda. Man kan alltså öppna hårddisken som vilken fil som helst, och läsa dess innehåll direkt. <(Om man har läsrättigheter till den, vilket du förmodligen inte har.)
Linux skiljer på stora och små bokstäver i filnamn.
De flesta skal förstår jokertecken ("wildcards") i filnamn. Som vanligt betyder ? ett godtyckligt tecken, och * står för noll, ett eller flera godtyckliga tecken. Det fungerar som i Windows, men med fler möjligheter och mer konsekvent.
Haklamrar, som i [abcde], kan användas för att ange ett av flera tecken. Samma sak kan skrivas [a-e]. Fiskmåsklamrar kan användas för att ange alternativa delar av ett namn: {abc,de} betyder antingen abc eller de.
Tilde-tecknet, ~, som står för användarens hemkatalog. ~bengt står för användaren bengts hemkatalog.
Exempel: Om din hemkatalog heter /home/kajsa, så matchar mönstret ~/*/a*?.{c,cc} filerna /home/kajsa/koi/ax.c och /home/kajsa/C++/arbete.cc, men inte /home/kajsa/koi/labb1/ax.c eller /home/kajsa/koi/a.c.
Kommando | Funktion | Exempel |
---|---|---|
ls | Lista filer |
ls
ls bilder ls prog*.c ls ~/prog*[1-4].{c,C,cpp,cc} |
mv | Byt namn på en fil |
mv gammal ny
mv prog1.c pro2.c katalogen mv *.c c-programskatalogen |
cp | Kopiera filer |
cp program.c kopia.c
cp prog1.c prog2.c katalogen cp *.c c-programskatalogen |
cp -r | Kopiera rekursivt | cp -r en-katalog en-annan-katalog |
rm | Ta bort en eller flera filer |
rm foo
rm apa.txt foo blaj.c rm /tmp/blaj.c |
cd | Byt aktuell katalog |
cd koi/labb2
cd /usr/local/bin cd .. |
mkdir | Skapa en katalog | mkdir min-nya-katalog |
rmdir | Ta bort en katalog |
rmdir koi
rmdir koi ../gammalt |
cat | Skriv ut en fil i skalfönstret |
cat foo
cat /etc/passwd |
more | Skriv ut en fil i skalfönstret en sida i taget |
more foo
more koi/*.c |
exit | Avsluta ett skal | exit |
man | Titta på manualbladet för (exempelvis) ett kommando |
man rmdir
man -k time |
alias | Definiera nya kommandon |
alias ll='ls -l'
alias e='emacs' |
Varning: Kommandot rm tar bort filer. Det flyttar dem inte till en papperskorg, utan det tar bort dem. "Bort" som i "borta för evigt". Man kan visserligen omdefiniera kommandon i Linux, och det är ganska vanligt att man omdefinierar just kommandot rm så att det flyttar filerna till en papperskorgskatalog. Men om ingen varit snäll och gjort det, så kan man inte få tillbaka en fil som man raderat. |
Bägge tar bland annat dessa flaggor:
En stor hjälp är programmet make, som kan göra mycket av detta automatiskt. Om man skriver make foo, och det finns en källkodsfil som heter foo.c, inser make att foo.c ska kompileras för att skapa det körbara programmet foo. Om foo är nyare än foo.c, har det tydligen inte gjorts några ändringar sen senaste kompileringen, och då behöver filen inte kompileras på nytt.
Kommando | Funktion | Exempel |
---|---|---|
gcc | Kompilera och länka C-program |
gcc -c foo.c
gcc -c -Wall foo.c gcc -g foo.c fum.o fie.o -o foo |
g++ | Kompilera och länka C++-program |
g++ -c foo.cpp
g++ -c -Wall foo.cpp g++ -g foo.cpp fum.o fie.o -o foo |
make | Kompilera och länka program | make foo |
Här nedan byter vi katalog med cd till katalogen debug-exercise, där vi sen bugger programmet metamatic med hjälp av kommandot make. Till sist startar vi programmet med kommandot ./metamatic (alltså inte bara metamatic).
för att börja editera filen filen.c. &-tecknet betyder att kommandot körs i bakgrunden, så man kan ge nya kommandon i skalfönstret. Program som öppnar sina egna fönster är det ofta praktiskt att göra så med.emacs filen.c &
Så här ser ett Emacs-fönster ut i vår Unity-omgivning. Emacs är känt för sina många korta kommandon, som till exempel CTRL-B för att flytta markören ett tecken bakåt, och ESCAPE b för att flytta markören ett ord bakåt, men som syns på bilden finns det även vanliga menyer (File, Edit och så vidare) som man kan klicka på.
En annan editor, som är mer i stil med Notepad, är gedit. Starta den med kommandot gedit:
Varning! Editorn gedit gör ibland konstiga saker med tidsstämplarna på de filer den skapar. Den tid som anges för när filen senast ändrades blir fel. Det gör att programmet make kan bli förvirrat om vilka filer det behöver kompilera om. Om man har ett mål i make-filen som heter clean, och som tar bort alla temporärfiler, kan man skriva make clean och sen make för att kompilera om hela projektet. |
Jag själv, och andra Unix-människor jag känner, har i stället flera små fönster. Det kan vara ett fönster att editera i, ett fönster att köra programmet i, ett fönster för att läsa manualen i en webbläsare, och kanske ett kompileringsfönster. Varje fönster är bara så stort som det behöver vara, och eftersom alla får plats på skärmen behöver man sällan bläddra mellan fönstren.
Därför upplever jag det som frustrerande när jag ska kommunicera med någon Windows-person vid datorn, och hon ägnar den mesta tiden åt att bläddra bland sina (onödigt stora) fönster.
Jag tror att det kan finnas flera orsaker till den här vanan med maximerade fönster, bland annat att Windows-människor är vana vid integrerade system (som Visual Studio i stället för Emacs + xterm + gcc + gdb), vilket gör att de oftast inte har mer än ett enda fönster att hålla reda på.
Tänk på att det kan vara praktiskt att ha flera små fönster bredvid varandra på skärmen. I synnerhet när man programmerar.
Ett gott råd: Automatisera alltid så mycket som möjligt när du programmerar. Manuella steg, som till exempel att komma ihåg att köra bison eller byta namn på en fil, glömmer man förr eller senare alltid bort. Och sen sitter man där i sex timmar på natten och letar efter fel som inte finns. |
Vi antar att vi har ett C-program, med källkoden i filen foo.c, som kan kompileras till den körbara filen foo. En enkel Makefile för detta kan se ut så här:
(Notera att raden med gcc-kommandot måste börja med ett tab-tecken, inte med mellanslag!)foo: foo.c gcc -g -Wall foo.c -o foo
Detta betyder att vi kan skapa filen foo utgående från filen foo.c, genom att köra kommandot gcc -g -Wall foo.c -o foo. Filen foo är också beroende av filen foo.c, så om foo.c har ändrats sen foo skapades, så måste kommandot köras på nytt.
Om vi nu ger kommandot make, i katalogen där filerna foo.c och Makefile finns, så kommer kompileringen att köras:
Om vi skriver samma kommando en gång till direkt, utan att ha ändrat i filen foo.c, så är make tillräckligt smart för att inse att programmet inte behöver kompileras om:tpy@live:~/koi$ make foo gcc -g -Wall foo.c -o foo tpy@live:~/koi$
Här är en lite mer avancerad Makefile:tpy@live:~/koi$ make foo make: `foo' is up to date. tpy@live:~/koi$
Körexempel:# Makefile för debug-övningsuppgiften # Skriv bara "make" för att kompilera programmet metamatic! OFILES = metamatic.o a.o abc.o abscissa.o absurdum.o ack.o CPPFLAGS += -g metamatic: $(OFILES) g++ -g $(OFILES) -o metamatic clean: rm -f $(OFILES) metamatic
tpy@live:~/koi$ make g++ -g -c -o metamatic.o metamatic.cc g++ -g -c -o a.o a.cpp g++ -g -c -o abc.o abc.cpp g++ -g -c -o abscissa.o abscissa.cpp g++ -g -c -o absurdum.o absurdum.cpp g++ -g -c -o ack.o ack.cpp g++ -g metamatic.o a.o abc.o abscissa.o absurdum.o ack.o -o metamatic tpy@live:~/koi$ make clean rm -f metamatic.o a.o abc.o abscissa.o absurdum.o ack.o metamatic tpy@live:~/koi$