Lokal guide til Linux og UNIX

Forfatter: Trond Hasle Amundsen
Kontakt: unix-drift@usit.uio.no
Dato: 2011-10-06
Computer

1   Hva er UNIX?

Først og fremst et operativsystem (OS).

UNIX er:

  • Det første operativsystemet som kunne kjøre på maskiner fra flere leverandører (arkitekturer).
  • Et av de eldste operativsystemene som er i bruk i dag. Versjon 1 ble laget av Dennis Ritchie og Brian Kernighan, og kom i 1973.
  • Et ledende operativsystem i bruk for kraftige maskiner innen forskning og ulike former for ingeniørarbeid.
  • Et ekte flerbrukersystem, dvs. at flere brukere kan utføre flere oppgaver samtidig på den samme maskinen.

UNIX er et ganske gammelt operativsystem. Midt på 60-tallet startet AT&T et prosjektet de kalte MULTICS for å utvikle et datasystem som skulle kunne gjøre flere ting på en gang. Selv om dette prosjektet ble mislykket, så fikk det likevel stor betydning fordi noen av de som var med i prosjektet tenkte videre på ideen. I 1969 presenterte en av dem, Ken Thompson, et lite program, faktisk et rom-spill, som nettopp fungerte slik at flere prosesser kunne dele på CPU-tid slik at det så ut som om de kjørte samtidig. Dette ble utviklet videre og UNIX ble født. Navnet UNIX er nok et ordspill på MULTICS - det ene programmet som kunne gjøre mange ting samtidig.

Det geniale i den videre utviklingen av UNIX var at AT&T ikke hadde økonomi til å utvikle det alene. Hele programkoden ble derfor delt gratis ut til universitetene, der studenter og forskere kunne utvikle det videre. UNIX fikk raskt et solid fotfeste på universitetene. UNIX ble designet for at mange personer skulle kunne være innlogget på samme tid og gjøre mange arbeidsoppgaver samtidig. UNIX-maskiner egner seg derfor ypperlig som tjenermaskiner, eller servere som skal betjene store brukermasser. UNIX er en av de viktigste byggesteinene i datanettverket ved UiO. På Universitetet ligger de store brukerdatabasene på UNIX, og hver gang du logger deg inn sjekkes ditt brukernavn og passord mot denne. Andre eksempler er hele e-postsystemet, backupsystemet, web-informasjon og mye, mye mer. IT-brukere ved UiO får personlig brukerkonto på UNIX.

Når får tilgang til IT-ressursene ved UiO får du sammen med brukernavn og passord automatisk opprettet et eget hjemmeområde på en UNIX-maskin. Her kan du logge deg inn og få tilgang til privat lagringsplass på harddisk, men også til en stor verktøykasse med morsomme UNIX-kommandoer.

2   Hvorfor UNIX?

  • Distribuerte tjenester i en åpen, leverandøruavhengig arkitektur
  • Lagvis oppbygning; kjerne og minst ett skall
    • Kjernen ligger fast i datamaskinens hukommelse.
    • Skallet tar seg av kommunikasjonen mellom programmene og brukeren (deg). Skallet oversetter og tolker input fra brukeren.
  • Det finnes mange tilgjengelige programmer
  • Kommunikasjon/internett
  • Virusfritt (Nesten. Vanlige "PC-virus" virker ikke på UNIX)
  • Svært utbredt på MatNat
  • LaTeX og Emacs: Mye brukt innen matematikk, fysikk og kjemi
  • Brukervennlig
  • Det beste fra begge verdener: GUI (Graphical User Interface) og kommandolinje

2.1   Varianter av UNIX

UNIX- og Linux-varianter som støttes ved UiO:

  • Red Hat Enterprise Linux 5 (klient og server)
  • Red Hat Enterprise Linux 4 (kun server)
  • Ubuntu 10.04 og nyere (foreløpig kun i pilot)
  • Apple MacOS X
  • Sun Solaris 8 og 10 for SPARC

2.2   GNU -- GNU's Not UNIX

GNU startet som et prosjekt av Richard Stallman, som grunnla Free Software Foundation (FSF). Hensikten var å lage en helhetlig operativsystem-løsning som skulle være fullstendig fri, ikke bundet av restriktive lisenser. GNU har laget mange av de nyttige programmene som finnes for UNIX i dag, bl.a. Emacs. Så mange bruker GNU-programmene at de av mange blir sett på som "standard".

I tillegg har GNU laget en lisens GPL (Gnu Public License) som er "fri", og som mange programmer benytter. Denne sier stort sett at du kan benytte programmet til hva som helst (også modifisere det), så lenge du også distribuerer kildekoden til programmet.

2.3   Kjernen

Kjernen

Operativsystemet er lagvis oppbygd. Vanlige programmer har lov til å snakke med kjernen gjennom et sett med predefinerte systemkall. Kjernen snakker direkte med maskinvaren.

Kjernen er hjertet i operativsystemet, og har bl.a. til oppgave å

  • implementere filsystemet og rettighetskontroll til filer
  • håndtere maskinressurser; prosessor (CPU), minne, nettverk, disker osv. og gjøre disse tilgjengelige for programmer via et kjent grensesnitt
  • håndtere prosesser. En prosess er et program under utførelse.

2.4   Filsystemet

Filsystemet i UNIX er ordnet i et hierarki/trestruktur, der den øverste noden kalles roten, og skrives /.

Et typisk filsystem i UNIX

Filsystemet i UNIX. Dette er et forenklet eksempel. Som alle trær i data-verden vokser filsystem-treet nedover og har roten på toppen.

Alt på kommandolinjen i UNIX, inkludert filer, er case sensitive, dvs. at det er forskjell på store og små bokstaver.

F.eks. er Minfil.txt ikke det samme som minfil.txt.

Viktig

Unngå bruk av spesialtegn, mellomrom og særnorske tegn i fil- og katalognavn! Dette fordi enkelte programmer og gamle UNIX-varianter kan ha problemer med dem.

3   Inn- og utlogging

UiO har mer enn 2000 UNIX- og Linux-maskiner. De fleste av dem er ikke tilgjengelige for alle brukere ved UiO, men vi har p.t. to maskiner som alle UiO-brukere kan logge inn på. Disse er

  • login.uio.no (2 x Dell PowerEdge M600 med RHEL5)
  • ulrik.uio.no (Sun Enterprise 450 med Sun Solaris 8)

3.1   Innlogging

Man må alltid logge inn på en UNIX-maskin, og skrive inn sitt brukernavn og passord. Når du logger inn på UNIX, vil du komme direkte inn på ditt eget hjemmeområde, kjent som M:\ i Windows-verdenen.

Innlogging kan gjøres på mange måter:

  • via X-Windows (f.eks. med xdm eller gdm)
  • fra en PC, Mac eller annen UNIX-maskin via SSH (Secure SHell)
  • rett på kommandolinje-modus (konsoll)

3.1.1   Grafisk innlogging

Innlogging med GDM (GNOME Display Manager)

Red Hat sitt opplegg (GDM) med RPM-pakken gdm-uio. Eneste synlige kjennetegn på at gdm-uio er installert er Apollo-logoen øverst i høyre hjørne.

Når du logger inn via GDM (eller XDM) vil du få opp UiOs standardoppsett for grafiske arbeidsstasjoner (X-Windows).

3.1.2   Rett på konsoll (Linux)

Innlogging rett på konsoll

Dette er mest vanlig på Linux

3.2   Utlogging

For å logge ut dersom du har logget inn via SSH eller konsoll, gi kommandoen exit, eller bruk tastetrykket Ctrl+d.

Dersom du har logget inn via X-Windows, er det normalt en meny eller lignende hvor du kan velge å logge ut.

3.3   Standardoppsett

Standardoppsettet er et sett med predefinerte regler for hvordan kommandotolker, vindussystemet (i X-Windows), etc. skal oppføre seg. Standardoppsettet er tilpasset av USIT, og definerer derfor en standard ved UiO, men lokale avdelinger kan lage egne tilpasninger over UiOs standardoppsett. I tillegg er det mulig for den enkelte bruker å gjøre endringer, men det er ikke et tema i denne guiden.

Dersom du ved å tilpasse ditt eget standardoppsett har kommet i skade for å gjøre endringer du ikke vet hvordan du skal reversere, eller hvis du har slettet filer som inngår i standardoppsettet, kan du oppleve feilsituasjoner som skyldes feil i oppsettet ditt. Du kan alltid gjenopprette standardoppsettet på ditt eget hjemmeområde ved å kjøre kommandoen:

/local/bin/installsetup

I standardoppsettet brukes nå bash som kommandotolker (tidligere brukte man tcsh). Sjekk hvilken kommandotolker du har som standard med følgende kommando:

user@hostname$ echo $SHELL
/local/gnu/bin/bash

For å endre kommandotolker permanent må du starte &bofh; og gi kommandoen user shell. For å teste en ny en, f.eks. hvis du normalt bruker tcsh og vil teste bash, bare kjør programmet /local/gnu/bin/bash.

4   Kommandolinje

Kommandoer i UNIX gis på kommandolinjen, og tolkes av kommandotolkeren (f.eks. bash). Dersom kommandoen er navnet på et program, vil bash kjøre programmet hvis det er tilgjengelig. Hvis ikke bash skjønner kommandoen, vil en passende feilmelding blir printet ut på skjermen.

4.1   Kommandoformat

Kommandoer i UNIX har følgende format:

kommando [opsjon(er)] [argument(er)]

Opsjoner brukes til å justere oppførselen til kommandoen eller programmet, dvs. hvordan den virker. Noen kommandoer og programmer har mange opsjoner, andre har ingen. Argumenter er objekter som kommandoen eller programmet skal utføre arbeidet på. Det kan være en fil, en tekst, eller hva som helst.

Eksempler på enkle kommandoer:

Kommandoen "ls"
user@hostname$ ls
mail  pc
Kommandoen ls med opsjonen "-a"
user@hostname$ ls -a
.              .bash_logout  .login        .rsrc   mail
..             .bashrc       .netscape     .trash  pc
.bash_history  .cshrc        .pine-debug1  .xauth
.bash_login    .envir        .pinerc       .xfm

Opsjonen -a forteller ls at filer som begynner med punktum også skal vises. Dette er filer som vanligvis ikke forandrer seg mye, og brukes som regel til konfigurasjon av programmer. Har man hatt UNIX-konto en stund kan man godt ha mange slike, og siden man normalt ikke ønsker å vite om dem vil ikke ls vise dem automatisk.

Legg også merke til katalogene "." og "..". Disse er henholdsvis aktiv katalog (katalogen der du "står") og katalogen ett hakk opp i katalog-hierarkiet.

Kommandoen ls med opsjonen "-l"
user@hostname$ ls -l
drwx------    2 user group     4096 Sep 11 16:56 mail
drwx------    6 user group     4096 Aug 27 17:48 pc

Opsjonen -l forteller ls at man skal bruke "long listing format" når filene vises fram. Da får man mer informasjon om hver fil, som rettigheter, eier, gruppe og størrelse.

Kommandoen ls med opsjoner "-la"
user@hostname$ ls -la
total 92
drwxr-xr-x   9 user group    4096 Sep 11 16:56 .
drwxr-xr-x  28 root root     4096 Aug 27 17:48 ..
-rwxr--r--   1 user group     442 Jun 23  1998 .bashrc
-rwxr--r--   1 user group     448 Jun 23  1998 .cshrc
-r-xr--r--   1 user group    1168 Oct 15  1998 .envir
-rwxr--r--   1 user group     534 Jun 23  1998 .login
drwx------   4 user group    4096 Aug 27 17:48 .netscape
-rw-------   1 user group   13682 Sep 11 16:56 .pinerc
drwxr-xr-x   2 user group    4096 Aug 27 17:48 .rsrc
drwx------   2 user group    4096 Aug 27 17:48 .trash
drwx------   2 user group    4096 Sep  4 19:28 .xauth
drwx------   2 user group    4096 Aug 27 17:48 .xfm
drwx------   2 user group    4096 Sep 11 16:56 mail
drwx------   6 user group    4096 Aug 27 17:48 pc

I eksemplet er opsjonene -a og -l kombinert. Ikke alle kommandoer støtter kombinasjon av opsjoner på denne måten, men mange gjør det. Vi kunne gitt samme kommando ved å skrive "ls -l -a" eller "ls -a -l".

Kommandoen ls med opsjoner "-laR"
user@hostname$ ls -laR

   (Prøv denne selv...)

Opsjonen -R forteller ls at den skal traversere filsystemet rekursivt og liste opp. Gjør vi dette på hjemmeområdet vil ls liste opp samtlige filer på hjemmeområdet.

Kommandoen ls med ett argument
user@hostname$ ls /local
X11    build  etc       include  libexec     opt           share  var
X11R6  diffs  examples  info     lost+found  palantir-1.9  ssl
bin    doc    gnu       lib      man         sbin          store

Her har vi ett argument, men ingen opsjoner til ls. Man kan ha vilkårlig antall argumenter, og kombinere dem med opsjoner. Prøv!

4.2   Manøvrering på kommandolinjen

Piltastene kan brukes til å manøvrere på kommandolinjen, og backspace og delete kan brukes til å fjerne bokstaver eller tegn. Husk også at markøren ikke trenger å være på slutten av linjen for at man skal kunne trykke ENTER for å eksekvere en kommando.

Tabulator-tasten TAB kan brukes til å fullføre en kommando eller et filnavn for det på kommandolinjen. Dette er et meget nyttig hjelpemiddel.

I tillegg har vi spesielle tastekombinasjoner. Her er et lite utdrag:

Tastekombinasjon Effekt
Ctrl+e Gå til slutten av linjen
Ctrl+a Gå til begynnelsen av linjen
Ctrl+k Slett resten av linjen
Ctrl+u Slett begynnelsen av linjen

De samme tastekombinasjonene fungerer også i Emacs.

4.3   Jokertegn

Jokertegn er tegn som kan bety ett eller flere andre vilkårlige tegn.

  • * = vilkårlig antall vilkårlige tegn
  • ? = ett vilkårlig tegn

Jokertegn er et kraftig verktøy når man jobber i kommandolinje, spesielt når man arbeider med filer. Her er et par eksempler:

Jokertegn: *
user@hostname$ ls pc/e*
pc/etc:

pc/eudora:
attach  eudora.ini
Jokertegn: ?
user@hostname$ ls pc/e?
ls: pc/e?: No such file or directory

user@hostname$ ls pc/e?dor?
attach  eudora.ini

4.4   Vanlige filsystem-kommandoer

Kommando Kort forklaring
ls Liste fil(er)
cp Kopiere en eller flere filer
mv Flytte en eller flere filer. Brukes også til å gi en fil et annet navn, dvs. man flytter filen til en annen fil med et annet navn
rm Slette fil(er)
cd Endre aktiv katalog (change directory)
mkdir Lage katalog
rmdir Slette (tom) katalog
pwd Print Working Directory. Viser aktiv katalog i filsystemet

4.5   Standard inn og standard ut

Forenklet kan man si at

  • STDIN -- Standard inn er tastaturet til brukeren
  • STDOUT -- Standard ut er skjermen

Kommandoer tar inn data fra STDIN og sender resultatet til STDOUT.

Det er mulig å omdirigere STDOUT, f.eks. til en fil:

user@hostname$ ls /local > minfil.txt

Resultatet av kommandoen ls /local er dirigert til filen minfil.txt istedenfor til skjerm. Filen minfil.txt blir opprettet dersom den ikke finnes fra før. Dersom den finnes fra før, blir den overskrevet.

Vi kan så lese tekstfilen vi nettopp laget, f.eks. med programmet cat:

user@hostname$ cat minfil.txt
X11
X11R6
bin
build
diffs
doc
etc
examples
gnu
include
info
lib
libexec
lost+found
man
opt
palantir-1.9
sbin
share
ssl
store
var

I eksemplet over bruker vi tegnet > for å omdirigere output fra ls til minfil.txt. Dersom minfil.txt finnes fra før, og vi kun ønsker å legge til tekst på slutten av den, istedenfor å overskrive filen, kan vi bruke >> istedenfor >. Da vil ny tekst bare legges til:

user@hostname$ ls -la >> minfil.txt

Vi kan så sjekke innholdet i minfil.txt:

user@hostname$ cat minfil.txt
X11
X11R6
bin
build
diffs
doc
etc
examples
gnu
include
info
lib
libexec
lost+found
man
opt
palantir-1.9
sbin
share
ssl
store
var
drwxr-xr-x   9 user group    4096 Sep 11 16:56 .
drwxr-xr-x  28 root root     4096 Aug 27 17:48 ..
-rwxr--r--   1 user group     442 Jun 23  1998 .bashrc
-rwxr--r--   1 user group     448 Jun 23  1998 .cshrc
-r-xr--r--   1 user group    1168 Oct 15  1998 .envir
-rwxr--r--   1 user group     534 Jun 23  1998 .login
drwx------   4 user group    4096 Aug 27 17:48 .netscape
-rw-------   1 user group   13682 Sep 11 16:56 .pinerc
drwxr-xr-x   2 user group    4096 Aug 27 17:48 .rsrc
drwx------   2 user group    4096 Aug 27 17:48 .trash
drwx------   2 user group    4096 Sep  4 19:28 .xauth
drwx------   2 user group    4096 Aug 27 17:48 .xfm
drwx------   2 user group    4096 Sep 11 16:56 mail
drwx------   6 user group    4096 Aug 27 17:48 pc

Som vi ser er resultatet av kommandoen ls -la lagt til på slutten av minfil.txt. Hadde vi brukt > istedenfor >> ville det eksisterende innholdet i minfil.txt blitt overskrevet.

Det finnes også en tredje verdi: STDERR. Kommandoer og programmer lister vanligvis ut feilmeldinger til STDERR og ikke til STDOUT. Derfor kan du få en overraskelse hvis du omdirigerer STDOUT og en feilmelding fra kommandoen likevel skrives ut til skjerm. Omdirigering av STDERR ligger utenfor skopet til dette guiden.

Tips

Prøv også kommandoene head og tail på filen minfil.txt.

4.6   Manipulering av tekstfiler

  • Lese tekstfil: cat, more, less

  • Programmet cat har vi allerede sett eksempler på. Den lister opp innholdet av en fil fra begynnelse til slutt. Det kan være upraktisk hvis tekstfilen er stor. Derfor eksisterer programmer som less og more. Den førstnevnte er å foretrekke, ettersom den er en videreutvikling av more (less is more). I less bruker du piltastene til å manøvrere opp og ned i filen, space for en side ned og w for en side opp, mens q avslutter.

    For mer informasjon om disse kommandoene, se manualsidene ved å skrive man <kommando>. Når du bruker man brukes less eller more til å vise frem manualsiden. Se for øvrig Hjelpesider (manualsider).

  • Søke i tekstfil: grep

    user@hostname$ grep rc minfil.txt
    -rwxr--r--   1 user group     442 Jun 23  1998 .bashrc
    -rwxr--r--   1 user group     448 Jun 23  1998 .cshrc
    -rw-------   1 user group   13682 Sep 11 16:56 .pinerc
    drwxr-xr-x   2 user group    4096 Aug 27 17:48 .rsrc
    

    Her lister grep opp alle linjer i filen minfil.txt som inneholder strengen rc. Dersom strengen du skal søke etter inneholder spesialtegn eller mellomrom er det lurt å sette strengen inn i single-quotes (enkle anførselstegn):

    user@hostname$ grep '27 17:48' minfil.txt
    drwxr-xr-x  28 root root     4096 Aug 27 17:48 ..
    drwx------   4 user group    4096 Aug 27 17:48 .netscape
    drwxr-xr-x   2 user group    4096 Aug 27 17:48 .rsrc
    drwx------   2 user group    4096 Aug 27 17:48 .trash
    drwx------   2 user group    4096 Aug 27 17:48 .xfm
    drwx------   6 user group    4096 Aug 27 17:48 pc
    

4.7   Hjelpesider (manualsider)

Nesten alle kommandoer (programmer) i UNIX har egne manualsider. Disse sidene får man frem ved å bruke programmet man, slik:

man [opsjon(er)] program

Manualsidene (vanligvis sier vi "man-sider") forutsetter en viss forkunnskap om UNIX-kommandoer, men er som regel meget hjelpsomme. Ofte kan vi også få en mer kortfattet hjelpetekst ved å gi opsjonen --help til en kommando. Prøv f.eks. cat --help på en Linux-maskin.

4.8   Flere spesielle tegn

Vi har allerede fortalt om jokertegn og tegn for omdirigering av standard ut. Men det finnes flere, her er et utdrag:

Tegn for omdirigering
Tegn Forklaring
> Standard ut (STDOUT)
< Standard inn (STDIN)
>> Standard ut (append)
<< Standard inn (append)
| Rør (engelsk "pipe")
Tegn for substitusjon
Tegn Forklaring
$ Variabelsubstitusjon
* Jokertegn (vilkårlig antall tegn)
? Jokertegn (ett tegn)
Tegn for prosesskontroll
Tegn Forklaring
& Sende prosess til bakgrunnen

Flere av disse har vi ikke diskutert ennå. Det kommer.

4.9   Bruk av rør (pipe)

Et rør brukes til å sende standard ut fra en kommando inn til standard inn til en annen kommando:

kommando1 | kommando2

Her vil standard ut fra kommando1 ikke bli sendt til skjerm, men heller gå som standard inn til kommando2. Eksempel:

user@hostname$ ls -la | grep rc
-rwxr--r--   1 user group     442 Jun 23  1998 .bashrc
-rwxr--r--   1 user group     448 Jun 23  1998 .cshrc
-rw-------   1 user group   13682 Sep 11 16:56 .pinerc
drwxr-xr-x   2 user group    4096 Aug 27 17:48 .rsrc

user@hostname$ ypcat passwd | grep trondham
trondham:Lnq9LzW8vNSlo:45150:55150:Trond Hasle Amundsen:/usit/saruman/bsd-u1/trondham:/local/gnu/bin/bash

4.10   Variable i skallet

Variable i skallet har navn som begynner med dollartegn ($). En rekke variable blir satt når du logger inn, og avgjør f.eks. hvilken skriver du bruker som standard. Eksempler på vanlige variable er:

$HOME, $PRINTER, $PATH, $SHELL

men du kan også definere dine egne variable om du vil.

4.10.1   Lese innholdet i variable

Det er flere måter å finne innholdet i variable i skallet, men de to viktigste er med env og echo.

Kommandoen env lister opp alle variable som er definert for deg:

user@hostname$ env | head -n 3
TZ=MET
PAGER=less
HOSTNAME=ulrik

I dette eksemplet lister vi bare opp tre av dem, ved å rør-dirigere (pipe) resultatet av env gjennom head -n 3.

For å lese innholdet i en enkelt variabel brukes echo.

user@hostname$ echo $HOME
/usit/saruman/bsd-u1/trond

4.10.2   Sette innholdet i variable

Gjøres slik:

VARIABELNAVN=verdi
export VARIABELNAVN

eller slik:

export VARIABELNAVN=verdi

Vi bruker export for at barneprosesser av skallet (programmer vi starter i skallet) skal kjenne til variabelen. Hvis vi ikke bruker export er variabelen kun kjent av skallet selv. Her er et eksempel:

user@hostname$ echo $PRINTER

Her har variabelen PRINTER ingen verdi. Vi setter en verdi:

user@hostname$ export PRINTER=francois

Og etterpå vil vi se at variabelen er satt:

user@hostname$ echo $PRINTER
francois

Siden vi brukte export, dvs. eksporterte variabelen, vil programmer vi starter fra skallet vite om variabelen. F.eks. er ppr (program for å skrive ut til skriver) interessert i hvilken skriver som skal brukes.

5   Filsystemet

5.1   Ulike typer filer

I UNIX finnes flere typer filer, som identifiseres ved det første tegnet på linjen fra kommandoen ls -l fil. De vanligste er

  • regulære filer, som vi har sett et par eksempler på
  • kataloger, som egentlig bare er filer med den egenskap at de kan"inneholde" andre filer
  • symbolske lenker, som er pekere til filer eller kataloger.

5.2   Relativ og absolutt sti

  • Absolutt sti er katalogstien til en fil med utgangspunkt i roten av filsystemet. F.eks. er /usit/saruman/bsd-u1/trondham den absolutte stien til brukeren trondham sitt hjemmeområde.
  • Relativ sti er stien til en fil relativt til hvor i kataloghierarkiet du befinner deg (aktiv katalog). Relativ sti benytter seg ofte av "..", som er navnet til katalogen ett hakk opp.

Her er et eksempel på absolutt og relativ sti:

Først kan vi se hva som er aktiv katalog med kommandoen pwd (Print Working Directory):

user@hostname$ pwd
/usit/saruman/bsd-u1/trond

Vi bruker ls for å illustrere forskjellen på relativ og absolutt sti. Først relativ sti:

user@hostname$ ls -a ../../../
.       ernst        saba    spfs     tetrable
..      gravenstein  sauron  sunsite  texhost
condor  morgoth      sp0     tag      ulrik

Og så med absolutt sti:

user@hostname$ ls -a /usit
.       ernst        saba    spfs     tetrable
..      gravenstein  sauron  sunsite  texhost
condor  morgoth      sp0     tag      ulrik

Resultatet av de to kommandoene over er nøyaktig likt. Det er logisk, hvis man teller antall kataloger opp mot roten med utgangspunkt i aktiv katalog, som vi fikk med kommandoen pwd øverst.

5.3   Symbolske lenker (symlinker)

Symlinker er peker til filer eller kataloger, og brukes til mange ting i UNIX. På UiO brukes symlinker bl.a. til å gjøre det enklere for brukerne å gi en sti til sitt hjemmeområde. For alle brukerne på UiO finnes det en symlink /hom/<brukernavn> som peker på hjemmeområdet, uansett om hjemmeområdet flytter seg fordi brukeren gjør endringer i studietilhørighet e.l.

Vi titter på filen /hom/trondham:

user@hostname$ ls -l /hom/trondham
lrwxrwxrwx    1 root     root           29 Jul 12 08:16 /hom/trondham -> /usit/saruman/bsd-u1/trondham

For å verifisere, leser vi innholdet i variabelen HOME, som alltid forteller hva hjemmeområdet er:

user@hostname$ echo $HOME
/usit/saruman/bsd-u1/trondham

Vi diskuterer ikke symlinker ytterligere, annet enn å vise at de eksisterer, og at de kan være nyttige i den daglige bruk av UNIX. Symlinker lages med kommandoen ln. Interesserte lesere kan se manualsiden til denne.

5.4   Andre triks med stier

De fleste kommandotolkere (shell) definerer tilde "~" til å peke på enten ditt egen hjemmeområde, hvis du kun bruker "~", eller en annen brukers hjemmeområde, hvis du bruker "~brukernavn".

Eksempel: Mitt eget hjemmeområde:

user@hostname$ ls -d ~
/usit/saruman/bsd-u1/trondham

En annen brukers hjemmeområde:

user@hostname$ ls -d ~sm
/usit/saruman/bsd-u3/sm

Opsjonen -d til ls spesifiserer at vi kun ønsker å liste opp selve katalogen (hvis det er en katalog, som i dette tilfellet) istedenfor innholdet av katalogen.

I tillegg har kommandoen cd en fin egenskap. Hvis du bruker den uten argument, havner du på ditt eget hjemmeområde.

5.5   Tilgangsrettigheter

Vi tar utgangspunkt i resultatet av kommandoen ls -l på filen minfil.txt:

user@hostname$ ls -l minfil.txt
-rw-------    1 trondham ucore         872 Aug  2 11:32 minfil.txt

Hvis vi ser litt nærmere på resultatet ser vi at ls gir oss syv felter med informasjon:

-rw-------    1 trondham ucore         872 Aug  2 11:32 minfil.txt
     1        2     3      4            5       6           7

Her er en forklaring til alle feltene i listingen over:

  1. De 10 første tegnene angir

    Tegn nr.

    Verdi

    Forklaring

    1.tegn

    -

    Type fil:

    • - = regulær fil
    • d = katalog (mappe)
    • l = symlink

    Det finnes flere, men de ignoreres i denne guiden og vanlige brukere kommer aldri borti dem.

    2.-4.tegn

    rw-

    Tilgangsrettighet for eier (her: trondham)

    5.-7.tegn

    ---

    Tilgangsrettighet for gruppe (her: ucore)

    8.-10.tegn

    ---

    Tilgangsrettighet for alle andre

  2. Antall hardlinker til filen (ignorer denne)

  3. Eier av filen (her: trondham)

  4. Filens gruppe (her: ucore)

  5. Filens størrelse i antall bytes

  6. Tidspunkt da filen sist ble modifisert

  7. Filens navn

Det er de 10 første tegnene, samt eier og gruppe som først og fremst angår oss i dette avsnittet. Filen minfil.txt over er en regulær fil som er skrivbar for eier og lesbar for eier, gruppe og alle andre.

Vi sier også at filen har "adgangs-bits". Hver av bokstavene r, w og x kan angis med et bit i det binære tallsystemet, og assosieres i det oktale tallsystemet. Det høres komplisert ut, men er det egentlig ikke.

Her er en tabell som viser de åtte ulike verdiene for adgang man kan gi til eier, gruppe eller alle:

Oktalt Binært Adgang Forklaring
0 000 --- Ingen tilgang overhodet
1 001 --x Kun eksekvering
2 010 -w- Kun skrivetilgang
3 011 -wx Skriving og eksekvering
4 100 r-- Kun lesing
5 101 r-x Lesing og eksekvering
6 110 rw- Lesing og skriving
7 111 rwx Lesing, skriving og eksekvering

5.5.1   Betydningen av read/write/execute for filer og mapper

I UNIX har man tre ulike tilganger til filer og kataloger (mapper). Disse er lesing, skriving og eksekvering. Hver av dem har en egen betydning for tilgangen til filen/katalogen, og man kan sette en hvilken som helst kombinasjon av de tre man ønsker.

5.5.1.1   Betydning av lesetilgang
Filer:
Filen er lesbar. Den eller de som adgangen gjelder for, dvs. eier, gruppe eller alle, kan lese innholdet i filen.
Kataloger (mapper):
Katalogen er lesbar. Den eller de som adgangen gjelder for, dvs. eier, gruppe eller alle, kan lese innholdet i katalogen. F.eks. kan man bruke ls til å liste opp innholdet. Merk at det ikke gis tilgang til å lese innoldet i katalogen med mindre eksekvering for katalogen også er satt.
5.5.1.2   Betydning av skrivetilgang
Filer:
Filen er skrivbar. Den eller de som adgangen gjelder for, dvs. eier, gruppe eller alle, kan endre innholdet i filen.
Kataloger (mapper):
Katalogen er skrivbar. Den eller de som adgangen gjelder for, dvs. eier, gruppe eller alle, kan opprette filer i katalogen. Merk at det ikke gis tilgang til å opprette filer i katalogen med mindre eksekvering for katalogen også er satt.
5.5.1.3   Betydning av eksekveringstilgang
Filer:
Filen er eksekverbar. Den eller de som adgangen gjelder for, dvs. eier, gruppe eller alle, kan kjøre filen. Dette har bare mening hvis filen er et program.
Kataloger (mapper):
Katalogen er eksekverbar. Eksekvering må være satt for kataloger for at lese- og/eller skrivetilgang skal ha noen mening. Kun eksekvering gir den/de som adgangen gjelder for adgang til å skrive/lese/eksekvere filer i katalogen dersom adgangen til selve filene tillater det.

5.5.2   Endring av tilgangsrettigheter

Kommandoen chmod brukes til å endre tilgangsrettigheter på filer. Det gjøres på følgende måte:

chmod [opsjon(er)] MODE fil(er)

Her er MODE enten

  • ett eller flere av tegnene ugoa, ett av symbolene +-= og ett eller flere av tegnene rwx (Egentlig rwxXstugo, men det er kun rwx som er av interesse for oss i denne guiden); eller
  • et sett av tre eller fire oktale tall. Bruker man fire tall, angir det første spesielle ting som vi ikke går inn på. Bruker man tre tall, antas det at man mener de tre siste, mens tall nummer fire settes til null (0). Det er mest vanlig å bruke tre tall.

Her er en del eksempler på bruk av chmod:

Vi vil at gruppen ucore skal ha lese- og skriverettighet:

user@hostname$ chmod g=rw minfil.txt
user@hostname$ ls -l minfil.txt
-rw-rw-r--    1 trondham ucore         872 Aug  2 11:32 minfil.txt

Vi vil fjerne leserettighet for alle andre enn eier og gruppe:

user@hostname$ chmod o-r minfil.txt
user@hostname$ ls -l minfil.txt
-rw-rw----    1 trondham ucore         872 Aug  2 11:32 minfil.txt

Vi vil at eier skal ha rettighet til å lese, skrive og eksekvere, at gruppe skal lese og eksekvere og null tilgang til alle andre:

user@hostname$ chmod u=rwx,g=rx,o= minfil.txt
user@hostname$ ls -l minfil.txt
-rwxr-x---    1 trondham ucore         872 Aug  2 11:32 minfil.txt

Det samme, men vi bruker tall istedenfor symboler:

user@hostname$ chmod 750 minfil.txt
user@hostname$ ls -l minfil.txt
-rwxr-x---    1 trondham ucore         872 Aug  2 11:32 minfil.txt

Vi vil at alle skal ha lesetilgang, i tillegg til de rettighetene som allerede eksisterer for filen:

user@hostname$ chmod a+r minfil.txt
user@hostname$ ls -l minfil.txt
-rwxr-xr--    1 trondham ucore         872 Aug  2 11:32 minfil.txt

5.5.3   Kommandoen umask

Du kan angi hvilke filrettigheter nye filer automatisk skal få ved å bruke umask. Endringen skjer kun i den instansen av bash du kjører akkurat da. Starter du bash på nytt, f.eks. ved å logge inn på nytt, er umask satt tilbake som definert i standardoppsettet.

umask er en kommando som er innebygd i bash, og er som navnet sier en maske for filrettigheter. Kommandoen brukes slik:

umask [-S] [MODE]

MODE kan være enten oktale tall, eller symbolverdier slik vi kjenner dem fra chmod. De oktale tallene er da "omvendt" av de tallene du ville gitt til chmod, siden det er en maske.

Dersom du ikke angir MODE, vil bash skrive ut nåværende umask. Opsjonen -S skriver ut den korresponderende symbolverdien:

user@hostname$ umask
077

user@hostname$ umask -S
u=rwx,g=,o=

Hvis man vil sette en umask slik at alle nye filer får rettighet rwxr-xr-x, gjøres det slik:

user@hostname$ umask 022

Eller, ved bruk av symboler:

user@hostname$ umask u=rwx,g=rx,o=rx

Hvis man vil se hva man setter umask til, gir man opsjonen -S:

user@hostname$ umask -S 022
u=rwx,g=rx,o=rx

For mer informasjon om umask, se manualsiden til bash.

Notat

Det er normalt (og anbefalt) å ha eksekveringsrettigheter med i umask. Det er kun kataloger som vil få x-bit satt, ettersom kataloger må ha x-bit for at man skal kunne liste opp innholdet i dem.

5.5.4   Endring av eier og gruppe

Endring av eier gjøres med kommandoen chown:

chown [OPTION]... OWNER[:[GROUP]] FILE...

Vi vil at brukeren sm (ikke trondham) skal eie minfil.txt:

user@hostname$ chown sm minfil.txt
chown: minfil.txt: Operation not permitted

Det får vi altså ikke lov til... kun superbrukeren root har lov til å gjøre slikt.

Endring av gruppe foregår vha. kommandoen chgrp:

chgrp [OPTION]... GROUP FILE...

Dette kan vi gjøre forutsatt av vi er medlem av den filgruppen vi vil endre til.

Vi vil at usit, ikke ucore, skal være gruppe for minfil.txt:

user@hostname$ ls -l minfil.txt
-rwxr-xr-x    1 trondham ucore         872 Aug  2 11:32 minfil.txt*

user@hostname$ chgrp usit minfil.txt

user@hostname$ ls -l minfil.txt
-rwxr-xr-x    1 trondham usit          872 Aug  2 11:32 minfil.txt*

5.5.5   Egen hjemmeside og filrettigheter

På UiO bruker vi katalogen www_docs til våre personlige hjemmesider. Vi får da adgang til hjemmesiden vår ved å bruke URL-en:

http://folk.uio.no/<brukernavn>/

Web-tjeneren kjører som en upriviligert bruker, slik at for at den skal kunne lese filene under www_docs må alle filer under www_docs som skal nås fra internett være lesbare for alle. I tilleg må katalogen www_docs hvor hjemmesiden ligger, og selve hjemmeområdet ditt, må i tillegg være eksekverbare.

5.6   Komprimering av filer

Vi komprimerer filer for å gi oss selv og andre som har hjemmeområdet sitt på samme disk som oss, bedre plass. Mange filer kan komprimeres til en brøkdel av størrelsen, mens noen filer, blant dem .jpg og .mp3, allerede er så komprimert at ekstra komprimering har minimal effekt.

Komprimering og dekomprimering i UNIX gjøres henholdsvis med gzip og gunzip. Det finnes også andre programmer til (de)komprimering, bl.a. bzip2 og bunzip2, og compress og uncompress, men gzip og gunzip er mest brukt. Det er lurt å bruke opsjonen -v til begge kommandoene.

Vi komprimerer filen minfil.txt:

user@hostname$ gzip -v minfil.txt
minfil.txt:              64.9% -- replaced with minfil.txt.gz

Som man ser har filen endret navn. Vi kan dekomprimere filen igjen:

user@hostname$ gunzip -v minfil.txt.gz
minfil.txt.gz:           64.9% -- replaced with minfil.txt

Filen er som før, og har fått tilbake sitt opprinnelige navn.

5.7   Flere nyttige kommandoer

Det finnes haugevis av kommandoer som manipulerer filer, kataloger eller andre aspekter ved filsystemet. Mange av dem er lite brukt, noen er mye brukt. Under er en liste over kommandoer vi (USIT) bruker mye i vårt daglige arbeid, til smått og stort.

Kommando/Program Forklaring
df Gir informasjon om filsystemene på maskinen
du Disk Usage. Se eksempel under
find Finne filer på filsystemet

For mer informasjon om disse kommandoene, se manualsidene. Spesielt find er svært kraftig, men kan være vanskelig å bruke i begynnelsen.

Eksempel på bruk av kommandoen du:

For å finne ut hvor mye plass du bruker totalt på hjemmeområdet ditt kan du kjøre kommandoen under. Her er vi interessert i total størrelse, i et format passelig for oss mennesker. Derfor bruker vi opsjonen -h (human readable).

user@hostname$ du -sh ~
1.9G    /usit/saruman/bsd-u1/trondham

du kan kombineres med sort og head for å gi en liste over de største filene/katalogene på hjemmeområdet ditt:

user@hostname$ du -kx ~ | sort -nr | head -n 10
1981648 /usit/saruman/bsd-u1/trondham
911704  /usit/saruman/bsd-u1/trondham/Mail
426208  /usit/saruman/bsd-u1/trondham/Mail/Usit
210380  /usit/saruman/bsd-u1/trondham/Mail/Usit/logs
193316  /usit/saruman/bsd-u1/trondham/latex
153464  /usit/saruman/bsd-u1/trondham/Mail/linux
153192  /usit/saruman/bsd-u1/trondham/Mail/Privat
144104  /usit/saruman/bsd-u1/trondham/cvs
143096  /usit/saruman/bsd-u1/trondham/cvs/bsd
134920  /usit/saruman/bsd-u1/trondham/Mail/Osi

I eksemplet over sorterer vi på kB, angitt med opsjonen -k til du.

6   Brukere og grupper

Nyttige kommandoer om brukere og grupper:

Kommando Forklaring
whoami Hvem er jeg pålogget som?
who am i Samme som over
who Lister opp brukerne som er pålogget maskinen
w Samme som over, men med mer informasjon

6.1   Filgrupper

Filgrupper har vi allerede dekket. Filgruppene styrer adgang til filer og intet annet.

6.2   NIS og nettgrupper

NIS står for Network Information Service, og brukes til å gruppere brukere og maskiner, slik at det blir enklere for administrator å styre adgangskontroll til bl.a. maskiner.

I dette utdraget fra passordfilen til maskinen arken.uio.no er nettgrupper brukt for å gi bestemte grupper av brukere tilgang til maskinen:

+@unix-drift::::::
+@tf-users::::::
+@tfstud-users::::::

Resten av informasjonen som maskinen trenger for å autentisere brukere, får den ved å kontakte en NIS-server.

Vi kan også spørre NIS-serveren om mange forskjellige ting:

Hvem er med i filgruppen "ucore"?

user@hostname$ ypmatch ucore group.byname
ucore:*:330:hakon,exim,ok,torstei,trondham,baardj,oisene,frankjs,larsha,larso,
pre,mathiasm,sturles,cerebrum,alicer,steira,kborge,kjetilho,kjetilth,ureg2000,
sm,dagtan,robert,kktest,kjetilk,kjetilo,hbf,palantir,meh,mari,jb,botnen,
hakonon,runefro,store,klausw,staalej,torfridl,odberg

Er maskinen tux.uio.no med i noen nettgrupper?

user@hostname$ ypmatch tux.* netgroup.byhost
usit-pc-unix-clients1,usit-archive-hosts,allmachines,uio-pc-unix-hosts,
usit-hosts,usit-pc-unix-clients,allhosts,allclients,usit-pc-unix-hosts,usit-clients

Gi meg en liste over NIS-serverne på UiO:

user@hostname$ ypcat ypservers | head -n 3
alun.uio.no
radium.uio.no
cerius.uio.no

7   Prosesser

En prosess er et program under utførelse

En prosess eller jobb (vi snakker om prosesser og jobber, men det er faktisk akkurat det samme) kan kjøre enten i forgrunnen, i bakgrunnen eller være stoppet.

For å sende en prosess i bakgrunnen, kan vi starte den med tegnet & bak, slik:

kommando &

Dersom vi skulle ønske å få programmet i forgrunnen igjen, kan vi kjøre kommandoen fg.

For å stoppe programmet, som nå er i forgrunnen, kan vi trykke tastekombinasjonen Ctrl+z. Deretter kan vi sende det i bakgrunnen med kommandoen bg.

7.1   Liste opp prosesser

Du kan liste opp dine egne prosesser ved hjelp av kommandoen ps, som lister enten opp dine prosesser som kjøres i denne instansen av bash, eller alle prosessene dine på maskinen, avhengig av hvilken ps du bruker.

Hver UNIX-variant har også sin variant av ps, som gir litt forskjellig output. De tar også litt ulike opsjoner, men for å liste opp alle prosessene som kjører på maskinen, fungerer alltid en av disse:

  • ps ax (evt. ps axuww for mer info)
  • ps -ef

7.2   Drepe prosesser: kommandoen kill

Hver prosess har en unik Process ID (PID). Hvis du bruker ps eller ps ax står denne først på hver linje. Du kan drepe en prosess ved å gi kommandoen kill PID, der PID byttes ut med den faktiske PID'en. Du kan også gjøre kill jobbnummer, jobbnummeret får du av kommandoen jobs.

Dersom en prosess har løpt løpsk, og er ute av stand til å svare, kan du bruke en litt slemmere versjon av kill for å drepe den, nemlig kill -KILL PID. Med opsjonen -KILL eller -9 (de betyr det samme) får ikke prosessen en sjanse til å forsvare seg. Operativsystemet avslutter den tvert.

7.3   Programmet top

top er et meget nyttig program, som gir masse informasjon om maskinen du sitter på. top er et interaktivt program, som tar imot spesielle kommandoer under kjøring. Desverre er top ulik på forskjellige UNIX-varianter, akkurat som ps. Følgende gjelder for Linux:

Tastetrykk Effekt
P Sortere etter prosessorbruk (default)
M Sortere etter minnebruk
k Drepe en prosess (du blir spurt om PID)
1 Veksle mellom å vise alle CPU-er eller totalt
h Hjelp
q Avslutt
Publisert 5. okt. 2011 21:49 - Sist endret 6. okt. 2011 15:02