Bild ABC80

ABC-Klubben är en internetreklambefriad förening. Klubben bidrar inte till nättracking och försöker motverka nätets spårnigstjänster.



En liten introduktion till Unix


Innehållsförteckning:

början ...

... fortsättning

Allmänt Processer
Historien bakom operativsystemet UNIX Kompilering under UNIX
UNIX från första början Kompilera ett C-program
Kommandon Kompilera ett Pascal-program
Filsystemet Kompilera ett Fortran-program
Filtyper Signaler
Filskydd Programfel
Matchning av filnamn i shellen Några hjälpmedel under UNIX
Shellen i UNIX Kommunikation under UNIX
Datasäkerhet Kryptiska kommandonamn
Editorer och textbehandling Kompatibilitet mellan olika versioner av UNIX
On-line manualen UNIX och shellar
Systemfunktioner UNIX och GNU

Allmänt

Materialet är hämtat från böcker, tidningar och från en UNIX-kurs som gavs i datorföreningen Lysator's (i Linköping) regi under våren 1987 av Lars Aronsson. I texten kommer jag att skriva vänsterhakar (">") för att indikera utseende på skärmen i mina exempel. Jag använder mig dessutom av Bourne-shell i mina exempel ("sh"). Datorn jag använder är en ABC1600 med en variant av UNIX som kallas ABCenix. När det gäller UNIX-litteratur så finns det idag en hel uppsjö med böcker av olika kvalitet, och det är svårt att välja den rätta boken att lära sig UNIX med. Att lära sig UNIX förutsätter att man framförallt har en god portion tålamod, det är inte så lätt som det kanske ser ut, och det tar en del tid. Dessutom krävs det att man sätter sig och tillämpar det man lärt sig i teorin. Det är karakteristiskt för UNIX att det tar tid att lära sig grunderna, men när man väl gjort det så upptäcker man den kreativa miljön som inte finns någon annanstans.

Slutligen ett stort tack till dem som på olika sätt hjälpt till med denna text.

Lycka till!

Johan Persson, medlem <2397> i ABC-klubben. jp@abc.se
medlem 430 i Lysator (jp@lysator.liu.se).

Överföring till HTML mm Bengt Sandgren <2776> m2776@abc.se


Historien bakom operativsystemet UNIX

Unix har sina anor från 1960-talet, närmare bestämt från ett annat operativsystem vid namn Multics som hade utvecklats vid M.I.T. År 1969 skriver Ken Thompson ett enanvändaroperativsystem som han kallar Unics till en PDP-7. Dennis M. Ritchie blir intresserad och ansluter sig. År 1971 flyttas UNIX till PDP-11, och året därpå kommer The UNIX Programmer's Manual (även kallad UPM), 2nd edition. År 1973 skriver Dennis M. Ritchie den första C-kompilatorn på PDP-11, Dennis M. Ritchie och Ken Thompson skriver då om UNIX-kärnan i C. År 1975 börjar UNIX 6th edition bli populär på universiteten, den blir sedan också den första att lanseras kommersiellt. År 1978 kommer UNIX 7th edition, den bildar grunden till de UNIX-varianter som finns ute idag (t.ex. 4.3BSD, System5.3, Ultrix, Linux, 386BSD, SCO-Unix, MACH och Minix).

UNIX från första början

Det första man får lära sig under UNIX är att för att få tillgång till datorn så måste man starta en session. Det kallas att "logga in". Man kan då se följande text på skärmen:

>
> elena login:
>

Datorn förväntar sig nu att man anger sin användar-identitet. Skriver man då in t.ex. "jp" som svar ser man följande: (var noggrann, man kan troligen inte sudda ut fel!)

>
> elena login: jp
> password:
>

Datorn begär nu ett lösenord (kallat "password"), skriv nu in "jpdemo". Notera att nu ekas inte texten. Nu ser man följande på skärmen:

>
> elena login: jp
> password:
>
> elena - ABCenix ver 5.18 Virtual,Window version
>
> $
>

Datorn har nu accepterat lösenordet och är redo att acceptera kommandon.

När man sedan vill avsluta sessionen ("logga ut") trycker man på Control-D (håll ned tangenten märkt "CTRL" och tryck på "D"):

>
> $
>
> elena login:
>

Kommandon

I UNIX finns det många kommandon, och en hel del av dem har ganska kryptiska namn. Vem skulle t.ex. gissa att kommandot för att lista filer heter "ls" ?. Dessutom brukar de flesta kommandon ta parametrar. Nu är det faktiskt inte så farligt som det låter. Det finns en manual tillgänglig on-line som kan förklara en del. Det rekommenderas att man använder den flitigt, framför allt i början.

I UNIX skriver man sina kommandon till en shell. Shellen är ett program vars uppgift är att läsa in kommandon och exekvera dem. Ett kommando i shellen består av ett kommando (första ordet man skriver in) och eventuella argument till kommandot (resten av raden). Antag t.ex. att man vill exekvera kommandot "echo" (som ekar sina argument) och ge argumenten "Hello world" till det:

> $ echo Hello world
> Hello world
> $
>

Shellen har som sin prompt tecknet "$"

Man bör iaktta en viss försiktighet när man använder kommandon i UNIX, slå hellre upp i manualen innan! Under UNIX finns det t.ex. ingen möjlighet att återfå filer som blivit raderade genom oförsiktighet.

Det finns speciellt några grundläggande kommandon som kan vara bra att bekanta sig med. Kika först i manualen hur de används. Det man gör med kommandot "man kommando" om kommandot man undrar över heter "kommando".

De grundläggande kommandona är:

Namn Kort förklaring
banner eka argumentet på skärmen i stort format
bc liten kalkylator med "normal" notation
cd byt directory (kommando i shellen!)
cat skriv ut innehållet i en fil på skärmen
chmod ändra skyddskod på filer
cmp jämför filer
cp kopiera filer
date visa dagens datum och tid
dc liten kalkylator med RPN-notation
df visa diskutrymme på anslutna diskar
diff visa skillnader mellan filer
du visa använt diskutrymme
echo eka argumenten på skärmen
find sök efter filnamn
grep sök efter text i filer
head visa första raderna i fil(er)
id visa användar-identitet och grupp-identitet
kill skicka signaler till processer
ln skapa länkar mellan filer (användbart!)
login logga in som ny användare
lpr skriv ut filer på skrivare
ls lista filer
mail skriv brev till användare
man titta i manualen
mesg tillåt eller vägra dialoger
mkdir skapa directories
more som "cat", men sidvis på skärmen
mv byt namn på, eller flytta fil(er) eller directories
passwd byt lösenord
ps visa aktiva processer
pwd skriv ut aktuellt directory
rm ta bort filer
rmdir ta bort directories
set visa variablers värde i shellen
sort sortera text
stty ändra eller visa terminalparametrar
tail visa sista raderna i fil(er)
tee kopiera utskrift från ett program till fil och samtidigt till skärmen
umask visa eller ändra mask för skapande av filer (manualen)
uniq visa unika delar av text
wc räkna ord, tecken och rader
who visa vilka användare som är inloggade
write tarta dialog med användare

Andra program som brukar följa med UNIX-installationen är en del spel:

arithmetic, ching, fish, hangman, quiz, words, backgammon, fortune och wump

Prova gärna!

Att slå i manualen gör man med kommandot "man". För att få reda på hur kommandot "date" fungerar skriver man "man date" till shellen."

Filsystemet

Under UNIX lagrar man information i filer. Filerna formar en trädliknande struktur. Alla filer har namn och ett tilldelat lagringsutrymme på en disk. Längden på namnet varierar mellan olika implementationer av UNIX men brukar få vara minst 14 tecken långa. Det finns olika typer av filer, lite förenklat sett så finns det två typer av filer, directories (innehållsförteckning över filer) och (vanliga) filer. Trädstrukturen har en root som brukar kallas "root" (filnamnet på root-directoriet är "/").

Några exempel på de filer som brukar finnas på "root" är följande:

! +-------+--------+----------+--------------+ ! ! ! ! ! bin/ dev/ etc/ tmp/ usr/ ! ! ! ! ! cat mem motd sort01234 bin/ ! ! ! ! who null passwd games/ ! ! ! wc tty spool/

Alla directory-namn avslutas med"/"

För att beskriva var i trädet filer ligger räcker det med att ange dess namn. Filen "mem" i directoriet "dev" adresseras som "/dev/mem". Den typen av adressering kallas absolut adressering. Ett alternativ är relativ adressering som innebär att man utgår från det directory där man befinner sig och anger vägen till filen därifrån. Principen är att absolut adressering alltid utgår från root-directoriet ("/"), och relativ adressering utgår från det directory där man befinner sig, även kallat aktuellt directory (något man kan ta reda på "med kommandot "pwd").

Det finns två filer som har underliga namn. Det är "." (aktuellt directory) och ".." (directoryt ovanför aktuellt directory i trädstrukturen). Att gå upp en nivå i trädstrukturen kan man göra med kommandot "cd ..".

Exempel: den absoluta adresseringen "/usr/games/lib/fortunes" kan adresseras som "lib/fortunes" om man befinner sig i (har som sitt aktuella directory) directoryt "/usr/games".

Notera att man sätter snedstreck ("/") mellan directory-namnen.

Filtyper

Det finns flera olika slags filer i UNIX. Textfiler innehåller läsbar text, binärfiler innehåller binära data (oläsbart format), exekverbara filer (som ju också är binärfiler) samt specialfiler (device-filer, som skrivare och terminaler).

Exempel på textfiler är "/etc/passwd". Exempel på binärfiler är vilken exekverbar fil som helst, t.ex. "/etc/mount". Exempel på specialfiler är de flesta filerna i directoriet "/dev", t.ex. "/dev/tty". En specialfil som man använder sig ofta av är "/dev/null". Mer om det senare.

Man använder sig ofta av extension för att markera filtyp, men det är inte allmängiltigt. Kom ihåg att man inte behöver använda sig av extension om man inte vill.

fil.c   C-program
fil.p   Pascal-program
fil.f   Fortran-program
fil.s   Assembler-program
fil.o   Objekt-program
fil     Exekverbar fil

Filskydd

I UNIX har varje fil en skyddskod som avgör vem som kan göra vad med den. Skyddskoden för filer visas t.ex. när man exekverar kommandot "ls -l".

>
> $ ls -l
> total 46
> drwxr-xr-x 2 jp      128 Apr  4 09:35 disc
> drwxr-xr-x 2 jp      784 Apr 20 09:35 etc
> drwxr-xr-x 5 jp      464 Apr 22 19:27 tmp
> -rw-r--r-- 1 jp    21241 Apr 22 19:24 unix
> $
>

Skyddskoden består av 4 delar och är listad på skärmen 10 tecken lång. I första tecknet betyder '-' att det är en vanlig fil, 'd' betyder att det är ett directory. De resterande tecknen anger rättigheterna för olika användare vid access av filen. Rättigheterna tar vardera upp tre tecken. I följd är det användarens (ägaren av filen), gruppens och övrigas rättigheter.

Användarens egna rättigheter berör bara den som skapat filen (eller rättare sagt, den nuvarande ägaren till filen), vars namn syns senare på raden ("jp"). Gruppens rättigheter berör alla som är medlemmar i den grupp (har samma grupp-id) som äger filen. Slutligen har man rättigheterna för övriga (ALLA andra användare i systemet).

Rättigheterna består av tre bokstäver som har följande betydelse:

"-"     Rättigheten är inte giltig.
"r"     Läsrättighet, man har rätt att läsa filen.
"w"     Skrivrättighet, man har rätt att skriva till filen.
"x"     Exekveringsrättighet, man har rätt att exekvera filen.

Var och en av möjligheterna kan slås av eller på individuellt. Det finns fler möjligheter vad beträffar rättigheterna som vi för närvarande hoppar över.

Ibland händer det att man anger rättigheterna som ett (oktalt) tal. Det är helt enkelt så att man kan representera rättigheterna på bägge sätten. Inget sätt är mer rätt än det andra.

Det oktala talet består av tre siffror (man kan ibland använda fyra siffror, men det går vi inte in på nu), som representerar, i tur och ordning, användarens, gruppens och övrigas rättigheter. Man räknar med att ett "r" är värt 4, ett "w" är värt 2 och ett "x" är värt 1. För "rwx" ger det då 7.

Skyddskoder kan man modifiera med kommandot "chmod".

I exemplet ovan har filen "unix" skyddskoden "-rw-r--r--", oktalt blir det (rw- = 6, r-- = 4) skyddskoden 644.

"Några exempel på användningen av "chmod":

> $ ls -l unix
> -rw-r--r-- 1 jp    24308 Apr 30 19:51 unix
> $ chmod o-r unix
> $ ls -l unix
> -rw-r----- 1 jp    24308 Apr 30 19:51unix
> $ chmod g=rw unix
> $ ls -l unix
> -rw-rw---- 1 jp    24308 Apr 30 19:51 unix
> $ chmod u=rw,g=r,o=r unix
> $ ls -l unix
> -rw-r--r-- 1 jp    24308 Apr 30 19:51 unix
> $ chmod 600 unix
> $ ls -l unix
> -rw------- 1 jp    24308 Apr 30 19:51 unix
> $ chmod a+wr unix
> $ ls -l unix
> -rw-rw-rw- 1 jp    24308 Apr 30 19:51 unix
> $ chmod 644 unix
> $ ls -l unix
> -rw-r--r-- 1 jp    24308 Apr 30 19:51 unix
> $
>

För utförligare förklaringar av kommandot "chmod", se manualen.

Inom UNIX pratar man om användar-id och rättigheter. Användar-id är ett unikt id som identifierar dig som användare. Det är ett heltal som dock oftast också identifieras med ett namn. Det är det namnet man "loggar in" som. I vårt fall är det "jp". I UNIX-nomenklaturen kallas detta nummer för user-id (uid). Dessutom är alla användare, vare sig de vill det eller inte, medlemmar i en grupp. Detta id kallas grupp-id, vilket i UNIX-nomenklaturen kallas group-id (gid). Man kan använda UNIX-kommandot "id" för att undersöka sina identiteter:

>
> $ id
> uid=40(jp) gid=1(other)
> $
>

Mitt eget användar-id är alltså 40. Användarnamnet är "jp" och mitt grupp-id är 1. Gruppens namn är "other".

Matchning av filnamn i shellen

I UNIX kan man matcha flera filer med s.k. jokertecken i shellen. De jokertecken som kan användas är:

"*"     Matchar allt (inget eller flera tecken)
"?"     Matchar ett (1) tecken.

Dessutom kan man ange urval på vissa speciella tecken:

"[unix]*"       matchar alla filer som börjar på "u", "n", "i" eller "x".
"[a-e]*"        matchar alla filer som börjar på något tecken i intervallet
                "a" ... "e".
"[^ps]*"        matchar alla filer som INTE börjar på "p" eller "s"."

Glöm inte att det i UNIX är skillnad på små och stora bokstäver. Dessutom kan man normalt sett inte använda de svenska tecknen åäöÅÄÖ i filnamn.

Några exempel på användningen av fil-matchning:

> $ wc [ad]*.[cp]
>.....
> $
>

Räkna ord, tecken och rader på de filer som börjar på "a" eller "d" och har extension ".c" (C-fil) eller ".p" (Pascal-fil).

>
> $ ls a*
> .....
> $
>

Lista de filer som börjar på "a".

Shellen i UNIX

Den shell man kör under UNIX har mer möjligheter än vad som syns vid första anblicken. Man har stora möjligheter att programmera den att utföra olika konster. Bl.a. så har man följande möjligheter:

I nedanstående exempel skriver alla kommandon normalt sett sina resultat till skärmen, och tar indata från tangentbordet.

>
> $ kommando <infil >utfil
>

Kommandot "kommando" tar indata från filen "infil" och skriver sina resultat till filen "utfil".

> $ kommando >>utfil
>

Kommandot "kommando" skriver sina resultat i slutet på filen "utfil".

>
> $ date
> Wed Apr 22 20:19:08 MET 1992
> $ date >datum
> $ cat datum
> Wed Apr 22 20:19:18 MET 1992
> $ date >>datum
> $ cat datum
> Wed Apr 22 20:19:18 MET 1992
> Wed Apr 22 20:19:44 MET 1992
> $ wc < datum
>    2   12  58
> $
>

Ibland är man inte intresserad av att se resultatet av ett kommando:

>
> $ time date >/dev/null
>
> real       1.1
> user       0.0
> sys        0.1
> $
> 

Genom att använda sig av utfilen "/dev/null" försvinner alla utdata.

>
> $ kommando1 | kommando2
>

Kommandot "kommando2" läser som infil resultaten från "kommando1".

Detta är en pipe, efter pipeline - engelska för "rör", en sammankoppling av två skilda kommandon.

Som exempel på användning kan man tänka sig att "kommando1" är ett statistik-program som producerar resultatet i siffer-form, och "kommando2" är ett program som tar de siffrorna och producerar en graf som sedan kan användas vid en presentation.

>
> $ ls -l
> total 47
> drwxr-xr-x 2 jp 128 Apr 4 09:35 disc/
> drwxr-xr-x 2 jp 784 Apr 20 09:35 etc/ 
> drwxr-xr-x 5 jp 464 Apr 22 19:27 tmp/
> -rw-r--r-- 1 jp 21611 Apr 22 20:00 unix
> $ ls -l | wc
> 5 34 199 
> $ 
>

Utskriften av "wc" anger här att utmatningen från "ls -l"-kommandot utgjordes av 5 rader, 34 ord och 199 tecken.

>
> $ kommando1 & & kommando2
>

Kommandot "kommando2" körs endast om "kommando1" körs utan fel.

>
> $ kommando1 || kommando2
>

Kommandot "kommando2" körs endast om "kommando1" misslyckas.

>
> $ kommando1 ; kommando
>

Sekvens, kör först "kommando1", sedan "kommando2".

>
> $ kommando &
>

Kör kommandot "kommando" som "bakgrundsjobb" (pröva!)

Sedan finns en hel del andra möjligheter, för att se dessa rekommenderas att man tittar i manualen ("man sh"). En sak som måste nämnas är betydelsen av vissa viktiga variabler i shellen som man kan se med kommandot "set":

HOME            definierar ditt hemdirectory.
PATH            definierar sökvägar till kommandon.
MAIL            definierar namn på filen där din e-mail samlas.
TERM            definierar den terminaltyp man använder sig av.

För att få se värdet på en variabel med namnet "var" ger man kommandot echo $var. Man kan se alla variabler med kommandot "set".

Variabeln "HOME" behöver man inte sätta till något speciellt, det brukar vara uppsatt till rätt värde vid inloggningen, samma sak gäller variabeln "MAIL".

Användningen av "HOME" kan t.ex. vara att ge en möjlighet att se vilka filer man har på sitt hem-directory oberoende av var i filsystemet man befinner sig.

>
> $ ls
> proj
> $ cd /tmp
> $ ls
> sort01234
> $ ls $HOME
> proj
> $
>

MAIL är en variabel som mail-programmet använder sig av för att leta upp din brevlåda för elektronisk post (e-mail).

PATH är en variabel som man själv ska påverka, den styr vilka kommandon man kan ge genom att definiera var i filsystemet datorn ska leta efter motsvarande program.

>
> $ echo $PATH
> /bin:/usr/bin:.
> $ wump
> wump: not found
> $ PATH=$PATH:/usr/games
> $ wump
> ...............

I variabeln ligger alla sökdirectories efter varandra, separerade med ett kolon (":"). Sökning efter kommandon sker i den ordning directories ligger i "PATH".

I exemplet ovan ser man att datorn först inte hittar "wump", ett spel som finns i directoryt "/usr/games", efter att man lagt till det directoryt till "PATH" så hittar datorn det.

TERM är också en variabel som man själv ska påverka, den anger vilken terminaltyp man har. Detta är något som styr hur datorn kommer att agera när man startar t.ex. en skärmorienterad editor.

Det finns ett kommando som heter "export", vars funktion är att se till att de variabler man anger efteråt kommer att vara tillgängliga för alla program man startar. Normalt sett är alla variabler lokala och deras värden kommer inte att vara tillgängliga för andra program.

>
> $ export PATH MAIL HOME TERM
>

En slutlig kommentar om variabler är att för att få behålla värdena på dessa variabler så måste man se till att de ligger i den initierings-fil som shellen använder, annars försvinner värdena efter denna session (!). Initierings-filen för shellen heter ".profile". Den läses endast vid inloggning.

Ett annat kommando som är bra att känna till är "umask". Det styr vilken skyddskod filer får om man inte ändrar den med "chmod" vid nyskapande:

>
> $ umask
> 022
> $ date >tmp1
> $ ls -l tmp1
> -rw-r--r-- 1 jp    29 May 1 07:41 tmp1
> $ umask 0
> $ date >tmp2
> $ ls -l tmp2
> -rw-rw-rw- 1 jp    29 May 1 07:41 tmp2
> $ umask 027
> $ date >tmp3
> $ ls -l tmp3
> -rw-r----- 1 jp    29 May 1 07:41 tmp3
> $ umask 077
> $ date >tmp4
> $ ls -l tmp4
> -rw------- 1 jp    29 May 1 07:41 tmp4
> $
>

Skyddskoden man anger efter "umask" anger de rättigheter man ska ta bort för att få den slutliga skyddskoden. Normalt när man skapar vanliga textfiler är 666 den vanliga skyddskoden (777 för exekverbara filer). Se manualen.

Exempel på vad som kan finnas i initierings-filen:

>
> $ cat .profile
> stty -lcase -tabs cr0 ff0 nl0 erase ^H kill ^U intr ^? echoe
> PATH="/user/bin:/bin:/usr/bin:/etc:/usr/games:."
> MAIL="/usr/spool/mail/jp"
> TERM=abc1600p
> export PATH MAIL TERM
> umask 022
> $
>

Uppsättning av terminal-parametrar ("stty"), PATH, MAIL, TERM, "exportering av variablerna, "umask" (mask för skapande av filer).

Det finns mer att lära sig om shellen i manualen ("man sh").

Datasäkerhet

Vad beträffar säkerhet så gäller det givetvis att man bör akta sig för alltför lättgissade lösenord. Sitt eget personliga lösenord kan man ändra med kommandot "passwd". Lösenord som man speciellt bör undvika är t.ex. test, demo, system, unix, root, secret, secure, love, sex, sys, qwerty, gazonk, asdf, 123 m.m.

Dessutom bör lösenord inte innehålla namn, ha anknytning till arbetet eller vara telefonnummer. Allra viktigast är att inte ha lösenordet uppskrivet t.ex. under tangentbordet. Vill man hålla saker skyddade för andra bör man också tänka på att skydda sina filer på rätt sätt. Informationen om alla användare finns i filen "/etc/passwd" som kan läsas av alla. Lösenorden är dock krypterade med en irreversibel algoritm kallad DES.

I UNIX finns det en super-användare, en användare som har alla rättigheter och kan gå förbi alla skyddskoder. Det är användaren som heter "root" och som har användar-id (uid) 0.

Editorer och textbehandling

I de flesta UNIX-system finns det flera editorer. Standard är att "ed" som är radorienterad och "vi" som är skärmorienterad finns med. Men ofta finns det en "emacs", förkortning av Editing MACroS, skärmorienterad eller någon av dess kloner t.ex. MicroEmacs, jove, Jonathan"s Own Version of Emacs.

Då det gäller textbehandling finns det en formaterare som heter "nroff" förkortning av New RunOFF som är avsedd för utskrift på vanlig radskrivare, och troff (Typesetter RunOFF) som är avsedd för laserskrivare. Ibland finns också andra formatterare som t.ex. "aform".

On-line manualen

Hittills har vi endast i förbifarten nämnt att det finns en on-line manual på alla UNIX-system. Det vi inte nämnt är att den är indelad i avdelningar (sections). Det finns åtta avdelningar i manualen, och de är:

  1. Exekverbara program (som startas från shellen)
  2. Systemanrop
  3. Biblioteksfunktioner
  4. Speciella filer och hårdvarustöd
  5. Filformat
  6. Spel- och demoprogram
  7. Diverse information
  8. Systemunderhåll

Ett exempel på ämnen som återfinns under flera avdelningar är "tty", det finns dels under avdelning 1, exekverbara program, och dels under avdelning 4, filen "/dev/tty. När man anger "man kommando" så innebär det att datorn söker igenom avdelningarna tills den hittar manualsidan för "kommando". Så långt är det inga problem. Men antag nu att man söker efter ett kommando som har flera referenser, t.ex. "tty", då kommer man alltid att få se den manualsida som finns i den första avdelningen där den påträffas. För "tty" är det 1 trots att man kanske ville se en helt annan manualsida, t.ex. den i avdelning 4 för tty. För att lösa sådana problem anger man dessutom avdelningens nummer, kommandot heter då inte "man kommando" utan "man avdelning kommando". I vårt exempel med "tty" skriver man alltså "man 4 tty".

Man kan dessutom få lite allmän information om varje avdelning genom att be att få se en manualsida som heter "intro". Den finns i alla avdelningar och ger en allmän översikt av vad avdelningen innehåller.

Om man söker information om något kan man också använda "man"-kommandot, men då anger man en switch (option) som heter "-k". Om man t.ex. söker efter ett kommando som har något med lösenord att göra ("password" på engelska) kan man prova med att ge kommandot "man -k password".

Systemfunktioner

UNIX innehåller ett interface av funktioner som alla, med vissa undantag, kan använda sig av för att utföra olika saker, t.ex. öppna filer, skriva till fil, allokera minne, byta directory m.m.

Några exempel på sådana funktioner är read, write, open, close, creat, link, unlink, chdir, mknod, chmod, chown, stat, mount, umount, utime, ioctl, kill, break, ptrace, alarm, getpid, setuid, setgid, sync, dup, pipe, chroot.

Man använder sig oftast av dessa funktioner när man programmerar, t.ex. i språket C. Ibland använder man sig av biblioteksfunktioner, som i sin tur anropar funktionerna.

Processer

Allt man gör i UNIX och alla program man kör innebär att man kommer i kontakt med processer. Även inloggningen utförs av ett program. En process är helt enkelt ett jobb som datorn exekverar liksom shellen man skriver in kommandon till är det, oftast samtidigt som tiotals andra gör det.

Processerna använder sig av systemanrop, anrop av systemfunktioner i UNIX-kärnan, för att göra det de vill (öppna filer, ändra prioritet på processen, m.m.). Alla processer har ett id (process-id, kallat pid) som unikt identifierar processen bland de övriga.

För att se vilka processer som körs under systemet vid en given tidpunkt kan man använda kommandot "ps".

Kompilering under UNIX

>
> $ cc fil.c
>

Kompilera ett C-program

>
> $ pc fil.pas
>

Kompilera ett Pascal-program

>
> $ f77 fil.f
>

Kompilera ett Fortran-program

Alla dessa kommandon genererar en exekverbar fil som heter "a.out". För att slippa döpa om den för hand kan man vid kompileringen skriva:

>
> $ cc -o fil fil.c
>

Signaler

Under UNIX finns det något som kallas för signaler. En signal är ett meddelande till en process, oftast om att något gått fel eller att någon önskar terminera processen. Vad som händer då en signal kommer är styrt av tillämpningsprogrammet (med undantag för signal nummer 9 som aldrig kan stoppas). Man kan skicka signaler till andra processer om man har rätt till det med kommandot "kill". Exempel:

>
> $ kommando &
> 42
> $ kill 42
> $ 
>

Efter att man startat "kommando" som bakgrundsjobb med tecken "&" i shellen så skrivs dess process-id (pid) ut. Det använder man sedan som argument till programmet "kill" för att skicka en signal till programmet.

Programfel

Om något allvarligt fel uppstår under körningen av ett program görs en kopia av processens minne till filen "core". Denna kan undersökas med kommandot "adb", som är en debugger (se manualen). Observera att det INTE är en bra ide att döpa filer till "core" eller "a.out".

Några hjälpmedel under UNIX

"lint" är ett program som letar efter fel och brister i C-program Det är ett bra test på hur bra koden man skrivit är. Anledningen till att denna finns är att C-kompilatorn ("cc") inte är så sträng vid kompileringen.

"lex" är en lexikalisk analysator-generator, den genererar första delen av en kompilator.

"yacc" är en s.k. parsergenerator, som ofta men inte nödvändigtvis, används tillsammans med "lex". Den underlättar avsevärt konstruktionen av kompilatorer och liknande program.

Kommunikation under UNIX

Det finns en hel mängd utilities avsedda för kommunikation mellan datorer under UNIX. Bl.a. finns det ett paket med programvara ("uucp", Unix to Unix CoPy) som är avsett för kopiering av data mellan datorer, e-mail som fungerar mellan datorer. Idag kan man enkelt skicka e-mail över hela världen och läsa elektroniska nyheter från USEnet via programvaran "news", "rn", "nn", "trn" eller någon annan nyhetsläsare. Idag finns det helt enkelt mängder av meddelanden som skickas elektroniskt. Ett filöverföringsprogram som används flitigt över hela världen är C-Kermit.

Kryptiska kommandonamn

UNIX är dessvärre ganska dåligt på att ge namn på kommandon. Det är inte lätt att vara nybörjare när kommando-namnen är så korta och koncisa. Några exempel:

Namn            Kort förklaring av namnet
----------------------------------------------------------------
awk             Aho, Weinberger, Kernighan
cat               CATenate
egrep           Extented grep
fgrep            Fixed grep
grep             Global Regular Expression and Print
pwd              Print Working Directory
wc                WordCount

Kompatibilitet mellan olika versioner av UNIX

Kompatibiliteten mellan olika versioner av UNIX är ganska bra, dock finns det en del saker som kan orsaka problem för programmerare vid överföring, portering, av kod från en UNIX-variant till en annan):

Signalering, Processstyrning, Grupp-identiteter, Tidsfunktioner m.m.

I övrigt kan dessutom syntaxen och utskrifterna från kommandon skilja lite. Det rör t.ex. kommandot "ls". I UNIX-varianter som kommer ifrån AT&T finns inte alltid manualen on-line utan kanske bara i tryckt form.

UNIX och shellar

I UNIX finns det inte bara en enda shell att arbeta mot. Den shell vi hittills visat exempel på kallas "Bourne-shell". Programnamnet är "sh" och skaparen heter Steven Bourne. Det finns också "C-shell". Programnamnet är "csh". Den har en C-liknande syntax. I "Korn-shell" är programnamnet "ksh" och skaparen heter David Korn. För att se vad som skiljer shellarna från varandra så får man titta i manualen (t.ex. "man csh").

UNIX och GNU

"GNU", förkortning av "GNU is not UNIX", är en organisation som strävar efter att programvara ska vara fri från patent, vara tillgänglig för alla, ha fri källkod och endast ha en distributionskostnad.

GNU är baserat på bidrag från utomstående och är inriktat på att producera programvaror för i första hand UNIX. De är fria versioner av copyrightade program under UNIX.

GNU har producerat en hel rad mycket bra programvaror som alltid är åtskilligt effektivare än originalen. Några exempel på detta är:

"Emacs" en fullskärmseditor som är väldigt populär, "gcc" en bra C-kompilator, "bison" en ersättare för "yacc", "flex" ersättare för "lex" m.fl.

En av de ledande personerna bakom GNU är Richard M. Stallman.

Till Innehållsförteckningen


- ABC-klubben, Box 1046, 114 79 STOCKHOLM -

Bilder
ABC80
AMD-Ryzen
Open BSD
Intel-logo