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.
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:
Eksempel 2. 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.
Eksempel 3. 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.
Eksempel 4. 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".
Eksempel 5. 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.
Eksempel 6. 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!
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 GNU Emacs.
Jokertegn er tegn som kan bety ett eller flere andre vilkårlige 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:
Eksempel 8. Jokertegn: ?
user@hostname$ls pc/e? ls: pc/e?: No such file or directoryuser@hostname$ls pc/e?dor? attach eudora.ini
| 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. |
Forenklet kan man si at
STDIN -- Standard inn er tastaturet
til brukerenSTDOUT -- Standard ut er
skjermenKommandoer tar inn data fra STDIN og
sender resultatet til STDOUT.
Det er mulig å omdirigere
STDOUT, f.eks. til en fil:
Eksempel 9. Omdirigering av STDOUT
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:
Eksempel 10. Omdirigering av STDOUT med '>>'
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
|
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 Seksjon 4.7, “Hjelpesider (manualsider)”.
Søke i tekstfil: grep
Eksempel 11. Søke i tekstfil med 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
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.
Vi har allerede fortalt om jokertegn og tegn for omdirigering av standard ut. Men det finnes flere, her er et utdrag:
Tabell 1. Tegn for omdirigering
| Tegn | Forklaring |
|---|---|
> | Standard ut (STDOUT) |
< | Standard inn (STDIN) |
>> | Standard ut (append) |
<< | Standard inn (append) |
| | Rør (engelsk "pipe") |
Tabell 2. Tegn for substitusjon
| Tegn | Forklaring |
|---|---|
$ | Variabelsubstitusjon |
* | Jokertegn (vilkårlig antall tegn) |
? | Jokertegn (ett tegn) |
Flere av disse har vi ikke diskutert ennå. Det kommer.
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 12. Bruk av rør
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
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.
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:
Eksempel 13. Liste opp variable med env
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.
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.
Eksempel 15. Sette innholdet i variabel
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.