Linux:Kommandolinja
Tilbake til Linux
Bash, tradisjoner. Praktisk bruk. Piping. Unix-filosofi (små, enkle komponenter). Filsystem/hiarki. Rett og slett en grunnleggende opplæring av hvordan en kommandolinje fungerer (første "ord" er programmet, deretter følger argumentene etc). Dobbelttabbing. "man man" - eller hører den hjemme i "hvordan finne informasjon? bruker:kyrsjo
Kommandolinja er det feltet UNIX og UNIX-liknende operativsystemer skiller seg mest fra andre - de kan vise til en imponerende kraftig kommandotolk. Dette er et program som (enkelt forklart) tar i mot kommandoer brukeren skriver inn og tolker dem. Utseendemessig er den ikke helt ulik DOS, men der slutter også de fleste likhetene - UNIX-kommandotolken er et imponerende kraftig verktøy, og sannsynligvis opphavet til ryktet om at UNIX-administratorer er late...
Nok prat. Åpne et kommandovindu (ofte kalt et "shell" eller en "terminal") og hiv deg inn i det. Du får opp ett vindu som ser ca. slik ut:
Du ser at det står "[brukernavn@pcnavn ~]$" etterfulgt av en blinkende markør - nøyaktig hva som står her kan variere, men legg merke til dollartegnet. Dette er et "klartegn" - noe som betyr at maskinen er klar til å motta en kommando - en kortere eller lengre "settning" avsluttet med linjeskift (enter). En slik settning kalles en kommando. Hvis dollartegnet er erstattet med et siffertegn ("#") betyr det at du er logget inn som adminstrator ("root") i terminalen (kommandolinjen).
Vi skal nå gå igjennom de vanligste og viktigste kommandoene. Den viktiste kommandoen av dem alle er uten tvil "ls" - list directory contents. Denne vil vise deg innholdet i den mappen du akkurat nå står i (på samme måte som "dir" i DOS, for de som er kjent med dette).
Men hvor i katalogstrukturen er vi hen? Trikset her heter "pwd" - Print Working Directory.
[kyrre@testpc ~]$ pwd /home/kyrre
Vi ser at vi står i mappa /home/kyrre - "hjemmemappen" til brukeren kyrre. Når du logger inn på en UNIX-maskin vil du alltid starte i hjemmemappen din. Alle innstillingene og filene mine er lagret i denne mappen.
Legg merke til at UNIX bruker tegnet "/" for å skille mellom forskjellige mapper.
Vi får også nok et hint om at dette vha krøllstreken ~ foran klartegnet - denne krøllstreken er en forkortelse av navnet til brukermappen. Vi skal høre mer om dette senere.
En annen svært viktig kommando er "cd" - change directory. Som navnet anntyder benytter vi denne til å bytte hvilken katalog vi jobber i. Denne bruker vi slik:
cd katalog-vi-øsnker-å-bytte-til
Dersom vi f.eks. ønsker å bytte til underkatalogen linuxbok, skriver vi:
[kyrre@testpc ~]$ cd linuxbok/ [kyrre@testpc linuxbok]$
Legg merke til at det nå står "linuxbok" foran klartegnet - vi har altså byttet katalog. Vi kan se hvilken katalog vi nå er i:
[kyrre@testpc linuxbok]$ pwd /home/kyrre/linuxbok
og hva som er i denne katalogen:
[kyrre@testpc linuxbok]$ ls slettmeg terminal-ls.png terminal.png
Vi ser her at vi har tre filer - hvor den ene heter "slettmeg". La oss gjøre akkurat det - kommandoen for dette er "rm" - remove, og brukes slik:
rm filnavn
eksempel:
[kyrre@testpc linuxbok]$ ls slettmeg terminal-ls.png terminal.png [kyrre@testpc linuxbok]$ rm slettmeg [kyrre@testpc linuxbok]$ ls terminal-ls.png terminal.png
Vi ser at fila ble borte.
Kataloger er en fin ting å ha - og disse kan vi også lage fra kommandolinja. Her heter det "mkdir" - make directory:
[kyrre@testpc linuxbok]$ mkdir katalog [kyrre@testpc linuxbok]$ ls katalog terminal-ls.png terminal.png
Vi ser at vi har fått opprettet en ny katalog "katalog". La oss nå prøve å slette denne:
[kyrre@testpc linuxbok]$ rm katalog rm: cannot remove «katalog»: Er en filkatalog
Det gikk dårlig. Vi prøver med et lite triks "rm -rf filnavn":
[kyrre@testpc linuxbok]$ rm -rf katalog/ [kyrre@testpc linuxbok]$
Dette gikk bedre!
Men hva gjorde vi nå? Hva betyr "rm -rf filnavn"? Eller for den saks skyld - "rm filnavn" eller "mkdir nykatalog"? For å vite dette, må vi kunne litt grunnleggende unix-gramatikk.
"rm" er ikke bare en kommando, det er også ett program. På samme måte som at du starter programmet "rm" ved å skrive "rm" i kommandolinja og trykke enter, kan du f.eks. starte firefox ved å skrive "firefox" i kommandolinja og trykke enter.
Nå er det bare slik at "rm" alene ikke gir noen særlig mening. Hva er det som skal slettes? La oss prøve:
[kyrre@testpc linuxbok]$ rm rm: for få argumenter Prøv med «rm --help» for mer informasjon. [kyrre@testpc linuxbok]$
Som vi ser, skjønner ikke stakars rm stort. For å fortelle den dette, sender vi "rm" argumentet "filnavn". Sagt på en annen måte - vi kjører "rm" med argumentet "filnavn". rm ser dette, og handler ut i fra det - den sletter det som den er blitt bedt om å slette i argumentet "filnavn".
Andre argumenter har en eller to bindestreker ("-") foran seg - disse kalles brytere. Brytere gjør akkurat det du tror de gjør - slår av eller på funksjoner til programmet de hører til. Noen brytere har lange navn, og da skrives de som regel med to streker:
[kyrre@testpc linuxbok]$ rm --help Usage: rm [OPTION]... FILE... Remove (unlink) the FILE(s). -d, --directory unlink FILE, even if it is a non-empty directory (super-user only; this works only if your system supports `unlink' for nonempty directories) -f, --force ignore nonexistent files, never prompt -i, --interactive prompt before any removal --no-preserve-root do not treat `/' specially (the default) --preserve-root fail to operate recursively on `/' -r, -R, --recursive remove the contents of directories recursively -v, --verbose explain what is being done --help vis denne hjelpteksten og avslutt --version vis programversjon og avslutt To remove a file whose name starts with a `-', for example `-foo', use one of these commands: rm -- -foo rm ./-foo Note that if you use rm to remove a file, it is usually possible to recover the contents of that file. If you want more assurance that the contents are truly unrecoverable, consider using shred. Report bugs to <bug-coreutils@gnu.org>. [kyrre@testpc linuxbok]$
Et annet eksempel enn "--help" (som kan brukes på de aller, aller fleste programmer) er --force og --recursive. Men det er jo kjedelig å skrive "rm --force --recursive katalog" hver gang vi skal slette en katalog - så disse flaggene (et annet, mer generellt navn på en bryter) kan trekkes sammen til "-f" og "-f" - eller settes bak en enkelt strek, slik som vi så i stad ("rm -rf filnavn").
La oss nå utforske options'ene til "ls". De vanligste her er:
- -l: Liste med mer informasjon
- -a: Vis alle filer (også skjulte)
- -R: Rekursivt (vis innhold i undermapper)
La oss prøve. Vi står igjen i katalogen "linuxbok", og kjører "ls" på vanlig måte:
[kyrre@testpc linuxbok]$ ls enmappe terminal-ls.png terminal.png
Vi ser at mappen inneholder tre filer - hvorav en er en mappe (enmappe). Hva hvis vi prøver oss med noen "options"?
[kyrre@testpc linuxbok]$ ls -a . .. enmappe .skjult-og-hemmelig-fil terminal-ls.png terminal.png
Her kom det fram tre nye filer:
- ".": Denne refererer til mappen vi står i. Derfor vil f.eks. "cd ." resultere i at vi skifter til den mappen vi akkurat nå står i.
- "..": Mappen den mappen vi står i er undermappe i. F.eks. vil ".." sett fra inne i mappen "/home/kyrre/linuxbok/enmappe" være "/home/kyre/linuxbok/.". Dermed vil kommandoen "cd .." bety "gå en mappe opp" - og kjørt fra ~/linuxbok/enmappe vil man ende i "~/linuxbok".
- ".skjult-og-hemmelig-fil": Akkurat det navnet anntyder - en skjult fil. I UNIX er filer som begynner med "." skulte. Dersom du ser i hjemmemappen din, vil du se en hel haug av slike skjulte filer - hos meg ser det slik ut:
[kyrre@testpc ~]$ ls -a . .evolution .kde retro.psd snitt.xls .. .gaim kjemibilder .rhn-applet .ssh .anjuta .gconf linuxbok .rhn-applet.cache stoffer i kretsløp.odt .bash_history .gconfd linuxprosjekt stikkord .rhn-applet.conf .themes .bash_logout .gimp-2.2 .local Skjermdump2.png .thumbnails .bash_profile .glade2 .mcop Skjermdump3.png .Trash .bashrc .gnome .metacity Skjermdump4.png .uqm .bittorrent .gnome2 .mozilla Skjermdump-oo10.png VenusColony_STAIF03.pdf .bkchem .gnome2_private .mplayer Skjermdump-oo1.png .viminfo .cache .gnome-system-monitor.kyrre .nautilus Skjermdump-oo2.png workspace .cddbslave gnome-vfs Ny database.odb Skjermdump-oo3.png .Xauthority .config .gstreamer-0.8 .openoffice.org2.0 skjermdump-oo4.png .xchat2 Deer Park_wallpaper.png .gtkrc oppgaver ons 11 mai.odt Skjermdump-oo5.png .xmms Desktop .gtkrc-1.2-gnome2 programmering Skjermdump-oo6.png .xscreensaver .dmrc .hxplayerrc Projects Skjermdump-oo7.png .eclipse .ICEauthority .qt Skjermdump-oo8.png .eggcups .inkscape .recently-used Skjermdump-oo9.png .esd_auth java-1.4.2-gcj-compat retro.jpg Skjermdump.png
Vi ser at vi har en hel haug med filer med navn á la ".programmnavn". Dette er konfigurasjonsfiler for et program - f.eks. er ".gaim" en mappe som inneholder filene til direktemeldingsprogrammet gaim.
"ls -R" er også svært nyttig - den viser innholdet i en hel trestruktur. La oss prøve i "linuxbok"-mappa:
[kyrre@testpc linuxbok]$ ls -R .: enmappe terminal-ls.png terminal.png ./enmappe: annen-fil-i-mappe fil-i-mappe
Vi ser at mappen vi står i (".") inneholder tre filer - "enmappe", "terminal-ls.png", "terminal.png". En av disse filene er en mappe ("enmappe"), og inneholder selv filene "fil-i-mappe" og "annen-fil-i-mappe".
Legg spesielt merke til at det står "./enmappe" - vi husker at "." var den mappen vi sto i (i dette tilfellet "~/linuxbok/", og at UNIX brukte tegnet "/" til å skille mellom mapper. Dermed betyr "./enmappe" "fil-i-denne-mappen som heter enmappe".
Det siste flagget "-l", er ekstremt nyttig. Vi får da opp mye mer informasjon om filene:
[kyrre@testpc linuxbok]$ ls -l totalt 976 drwxrwxr-x 2 kyrre kyrre 4096 aug 27 12:49 enmappe -rw-rw-r-- 1 kyrre kyrre 458215 aug 23 16:43 terminal-ls.png -rw-rw-r-- 1 kyrre kyrre 526642 aug 23 16:12 terminal.png
Den første linja indikerer plassen filene i denne mappen tar (i kilobyte). (????) De neste linjene (en linje for hver fil) er noe mer interessante. La oss se på linje nr. 3:
-rw-rw-r-- 1 kyrre kyrre 458215 aug 23 16:43 terminal-ls.png
Vi ser at den er delt inn i en rekke felter. Det føste feltet:
-rw-rw-r--
spesifiserer tilgangen til denne filen. Den er egentlig kun interessant lest sammen med felt #3 (fileier) og felt #4 (fileiergruppe). For å forstå dette må man altså kunne litt om brukere, grupper og rettigheter på et UNIX-system.
Alle filer er eid av en bruker og en brukergruppe. Som du kansje vet, er UNIX et såkalt "ekte flerbrukeroperativsystem" - det vil si at at flere brukere kan bruke maskinen samtidig, uten å forstyrre hverandre (forhåpentligvis ikke over samme tastatur, men via "fjerntilkoplinger" - det være seg Internett, flere tastatur/skjermer koplet til samme maskin, seriellport-konsoller etc.). For å få til dette må man ha et system for hvem som har hvilke rettigheter til hvilke filer, slik at Per ikke (med vilje eller ikke) overskriver Påls filer, og at Pål ikke kan lese Pers hemmelige kjærlighetsbrev.
Så når jeg med min bruker (som heter kyrre) oppretter en ny fil på disken, blir den automatisk eid av brukeren "kyrre", og av gruppen "kyrre" ettersom det er min "standardgruppe". På noen systemer er alle brukerene meldt inn i en stor gruppe som heter "users" - filen ville da blitt eid av "kyrre.users". Det å bruke punktum for å skille mellom bruker og brukergruppe er en vanlig notasjon. En bruker kan godt være medlem i mer enn en gruppe - men kun ha en standardgruppe.
Vi kan nå begynne å titte litt mer på det første feltet. Vi legger merke til at det er delt inn i 1+3 felt - først et lite, en-bokstavs "forfelt" som blant annet brukes til å fortelle om det er en katalog eller en vanlig fil (pluss et par ting til - "sticky" og "suid" er stikkord du kan google selv.). Deretter følger tre felt på tre bokstaver - "r", "w", og "x". Dette er flagg som kan slås av og på - "-" betyr avskrudd, og en bokstav betyr påskrudd.
Det første trebokstavers-feltet er for filens eier, det andre for filens eiergruppe, og det tredje for alle andre. Merk at kun filens eier, og ingen andre (unntak: en spesiell bruker som heter "root" og brukes til administrasjons-oppgaver - men dette snakker vi mer om senere) kan sette rettigheter for en fil.
- Den første bokstaven i disse feltene, "r", betyr "read" (les). Dersom denne er slått på, vil de brukerene tripletten gjelder for ha mulighet til å lese innholdet i filen.
- Den andre bokstaven i disse feltene, "w", betyr "write" (skriv). Dersom denne er slått på, vil de brukerene tripletten gjelder for ha mulighet til å skrive til filen.
- Den tredje bokstaven i disse feltene, "x", betyr "execute" (kjør). Dersom denne er slått på, vil de brukerene tripletten gjelder for ha muligheten til å kjøre filen dersom det er et program, og gå inn i mappen dersom det er en mappe.
Disse gir langt mer mening for et system med mange brukere (f.eks. en webserver eller en stormaskin på en bedrift eller et universitet).