Forfatter: | Trond Hasle Amundsen |
---|---|
Kontakt: | unix-drift@usit.uio.no |
Dato: | 2011-10-06 |
Innhold
- 1 Hva er UNIX?
- 2 Hvorfor UNIX?
- 3 Inn- og utlogging
- 4 Kommandolinje
- 5 Filsystemet
- 5.1 Ulike typer filer
- 5.2 Relativ og absolutt sti
- 5.3 Symbolske lenker (symlinker)
- 5.4 Andre triks med stier
- 5.5 Tilgangsrettigheter
- 5.6 Komprimering av filer
- 5.7 Flere nyttige kommandoer
- 6 Brukere og grupper
- 7 Prosesser
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 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 /.
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
Når du logger inn via GDM (eller XDM) vil du få opp UiOs standardoppsett for grafiske arbeidsstasjoner (X-Windows).
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:
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
Antall hardlinker til filen (ignorer denne)
Eier av filen (her: trondham)
Filens gruppe (her: ucore)
Filens størrelse i antall bytes
Tidspunkt da filen sist ble modifisert
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 |