Filbehandling i linux

Fra TermvaktWiki
Revisjon per 12. jun 2008 kl. 08:32 av Siljebj (Diskusjon | bidrag)
Gå til: navigasjon, søk

Denne rettleiinga tek for seg filbehandling i operativsystemet Linux.

Den tradisjonelle måten er å opna eit terminalvindauge og skriva inn kommandoar for å få gjort det ein vil. I nyare tid har det dukka opp gode skrivebordsmiljø for Linux. Dei to mest kjende er KDE og GNOME. Desse miljøa inkluderer kvar sin grafiske filbehandlar, ikkje heilt ulike Explorer i Windows.

Denne rettleiinga fokuserer på den tradisjonelle kommandostyrte måten å ordna filer på, sidan dette er ein nokså vanskeleg del av Linux-systemet, men som alle kjem i kontakt med i løpet av INF1000.

Innhold

Mapper og orden

Å leggja alt du skriv og lastar ned rett på heimeområdet fungerer brukbart dei fyrste vekene, men det blir fort rotete. Anta t.d. at heimeområdet ditt ser slik ut:

~ > ls
bomb_recipes.doc     minuteman.jpg          Oblig3.java         ss20.gif
dommedagsvaapen.pdf  oblig1-andre_innlev.m  Oblig4.java         Student.class
frieri-1.txt         Oblig1.class           onkelungar.jpg
frieri-2.txt         oblig1.m               opp_mot_veggen.txt
frieri-3.txt         oblig2.m               saturn-v.jpg
~ >

Kommandoen 'ls' listar opp filene. '~ >' er eit såkalla 'prompt', ein kommandolinjemarkør. Det du skriv i terminalen dukkar opp etter dette teiknet.

Her er filer frå fleire ulike felt blanda, og det kan vera greit å rydda opp. T.d. er det ein god idé å samle filer frå same kurs og emne i same mappe.

Filene Oblig1.class, Oblig3.java, Oblig4.java og Student.class kjem frå INF1000, så dei kan vera ein god idé å samla.

~ > mkdir inf1000

Kommandoen 'mkdir' lagar mapper. No er mappa «inf1000» oppretta. Merk at i Linux er det skilnad på store og små bokstavar: «inf1000» er ikkje det same mappenamnet som «INF1000» (men det er det i Windows, og dette kan derfor utnyttast til å laga rot for seg sjølv).

~ > mv *.class Oblig?.java inf1000/

Denne kommandoen flyttar filene til mappa inf1000.

Teikna ? og * er jokerteikn. Det kan vera lurt å lesa forklaringa av desse.

Og så resten av oppryddinga:

~ > mkdir mat1100
~ > mv *.m mat1100/
~ > mkdir rakettar
~ > mv minuteman.jpg saturn-v.jpg ss* rakettar/
~ > mkdir familie
~ > mv o*g familie/
~ > mkdir kjaeleiksbrev
~ > mv f*er*xt kjaeleiksbrev/
~ > mkdir revlusjon
~ > mv *.* revlusjon/
~ > ls
familie/  inf1000/  kjaeleiksbrev/  mat1100/  rakettar/  revlusjon/

Det kan vera nyttig å lesa om jokerteikn og kontrollera at du forstår kommandoane over.

Du kan også byta namn på mapper:

~ > mv kjaeleiksbrev/ kjaerleiksbrev/
~ > ls
familie/  inf1000/  kjaerleiksbrev/  mat1100/  rakettar/  revlusjon/

Kanskje ei mappe burde vore inni ei anna?

~ > mv rakettar/ revlusjon/
~ > ls
familie/  inf1000/  kjaerleiksbrev/  mat1100/  revlusjon/
~ > ls revlusjon/
bomb_recipes.doc  dommedagsvaapen.pdf  opp_mot_veggen.txt  rakettar/

Jokerteikn

Jokerteikn er nyttige når mange filer skal flyttast eller slettast.

Når du skriv

~ > mv *.class Oblig?.java inf1000/

vil skalet ditt tolka kommandolinja før kommandoen blir utført.

Teiknet '?' betyr 'alle moglege teikn', og gjeld for eitt teikn. Då skal ? erstattast med nøyaktig eitt teikn slik at resultatet vert namnet på ei fil som finst. Skalet (kommandotolkaren) vil då utvida strengen 'Oblig?.java' til 'Oblig3.java Oblig4.java'.

Teiknet '*' betyr 'alle moglege kombinasjonar av alle moglege teikn'. Då vil skalet utvida strengen '*.class' til 'Oblig1.class Student.class'.

Så kommandoen som faktisk blir køyrt er:

~ > mv Oblig1.class Student.class Oblig3.java Oblig4.java inf1000/

Kopiering av filer og katalogar

Kommandoen 'cp' tek seg av kopiering. Denne er ganske lik 'mv', men med ein viktig skilnad: Han kopierer ikkje mapper utan vidare. For å kopiera ei fil:

   cp fil1.txt filer/fil1.txt

For å kopiera ei mappe:

   cp -r hovudfag/ hovudfag-kopi-2005-01-01/

Endring av filnamn

Da bruker man 'mv'-kommandoen. Han flytter innhaldet frå den gamle filen til den nye. Den gamle filen blir da slettet.

    mv gammel_filnavn.txt nytt_filnavn.txt

Sletting

Kommandoen 'rm' slettar filer og katalogar. Ver varsam med denne. Du kan ikkje gjenoppretta noko du slettar med 'rm'. Viss du gjer noko feil må du spørja USIT om dei har tryggleikskopi. Sletta filer:

    rm fil1.txt fil2.txt fil3.txt

Sletta katalogar:

      rm -r filer/ fjas/ tull/ waads/

'-r' står for 'rekursiv' og betyr at alle underkatalogar skal slettast.

Ver svært varsam med denne kommandoen. Det er veldig lett å skriva feil og dermed sletta feil ting. T.d.: Kommandoen

    rm -r fjas/teikningar* bopp/

slettar mappa bopp og alle filene som byrjar med 'teikningar' i mappa fjas. Legg så inn ein liten skrivefeil:

    rm -r fjas/teikningar * bopp/

Det ekstra mellomrommet gjer at alle filene dine vert sletta. Det er stort sett lite triveleg.

Norske teikn i filnamn

Norske teikn i filnamn fungerer heilt fint i Windows. Det vil ofte fungera heilt fint i Linux også, men av og til vil det ikkje. Det finst ymse lure ting ein kan gjera for å få det til, men kort sagt så er det ofte nyttig å unngå norske teikn i filnamn.

Mellomrom i filnamn

Mellomrom i filnamn er veldig enkelt på Windows. På Linux er det meir krøkkete, sidan mellomrom vert brukt til å skilja mellom filnamn på kommandolinja. For å fortelja kommandotolkaren at eit mellomrom er ein del av eit filnamn brukar du bakoverskråstrek: '\' T.d. slik:

    mv Filnamn\ med\ mellomrom.txt filnamn-med-bindestrekar.txt

Filgrupper og tilgang

Kvar fil har ein eigar. Eigaren er normalt den som opprettar fila. Du kan ikkje gje filene dine andre eigarar enn deg sjølv.

Kvar fil har også ei filgruppe. Denne gruppa kan du endra.

Adgangen til ei fil er regulert på tre nivå: Eigaren, medlemmer av gruppa og alle andre.

Kvar brukar har normalt ei filgruppe, og kan melda andre brukarar inn og ut av denne med programmet bofh (sjå eiga rettleiing).

Kommandoen 'ls -l' viser informasjon om kvar fil.

~ > ls -l
total 20K
drwxrwxr-x    2 jb       dg           4.0K Jan  5 19:48 familie/
drwxrwxr-x    2 jb       dg           4.0K Jan  5 19:47 inf1000/
drwxrwxr-x    2 jb       dg           4.0K Jan  5 19:50 kjaerleiksbrev/
drwxrwxr-x    2 jb       dg           4.0K Jan  5 19:47 mat1100/
drwxrwxr-x    3 jb       dg           4.0K Jan  5 19:53 revlusjon/

Dei viktige kolonnene er fyrste, tredje og fjerde. Tredje kolonne viser eigaren av fila (jb) og fjerde viser filgruppa til fila (dg). Fyrste kolonne viser korleis adgangen til fila er regulert.

Det fyrste teiknet viser kva slags filtype det er. 'd' betyr mappe og '-' betyr vanleg fil. Deretter er det tre bolkar.

d rwx rwx r-x

Fyrste bolk er kva løyve eigaren av fila har, andre bolk er løyva til medlemmer av filgruppa og siste bolk er kva løyve alle andre har.

Det er tre typar løyve: Lesing, skriving og køyring.

Leseløyve betyr at du kan lesa fila med t.d. emacs, eller, for mapper, lista opp filene i mappa. Leseløyve er merka med 'r'. '-' betyr at løyvet ikkje er gitt.

Skriveløyve betyr at du kan endra fila. For mapper betyr det at du kan oppretta og sletta filer i mappa. Skriveløyve er merka med 'w'.

Køyreløyve er merka med 'x'. Du må ha køyreløyve til eit program for å køyra det, det er ikkje nok å kunna lesa programfila. Omvendt treng du ikkje leseløyve for å køyra eit program.

Du må ha køyreløyve til ei mappe for å lesa filer i mappa.

For å lesa ei fil må du ha leseløyve til fila, og lese- og køyreløyve til mappa fila er i og alle mapper over fila.

Du kan endra filløyve med kommandoen 'chmod'.

  chmod u=rwx,g=rx,o=x fil.txt

gir eigaren fulle løyve til fila, filgruppemedlemmer lese- og køyrerettar, og alle andre berre køyrerettar. For å forandra løyva til eit katalogtre brukar du -R:

   chmod -R u=rwX,g=rX,o=X filer

Ved å bruka stor X vil berre mapper og filer som alt er merka køyrbare får køyreløyve. Viss 'chmod' tek vekk køyreløyvet til ei mappe, vil det ikkje kunna endra løyva i den mappa.

Du kan endra filgruppa til ei fil med kommandoen 'chgrp'.

  chgrp labfyl fil1.txt fil2.txt fil3.txt
   

endrar filgruppa til filene til 'labfyl'.

Tallkoder

Filrettigheter kan også endres ved hjelp av tallkoder. For eksempel gjør

  chmod 751 fil.txt

det samme som

  chmod u=rwx,g=rx,o=x fil.txt

Tallkodene lages slik:

bokstav verdi
r 4
w 2
x 1

Når man ønsker en kombinasjon av tilganger, kan man da bare legge sammen. Til chmod angir man da tre sifre, det første for eier, neste for gruppen og til slutt for alle andre.

Access Control Lists

ACL er en utvidelse av filtilgangene i UNIX. Programmene getfacl og setfacl håndterer acl. Getfacl skriver ut tilgangene. Prøver man dette på en tilfeldig fil, får man:

   $ getfacl fil 
  # file: fil
  # owner: roberth
  # group: roberth
  user::rw-
  group::---
  other::---

Dette er minimum av ACL-tilganger, og det er de samme som vises når man bruker ls:

   $ ls -l fil
  -rw-------  1 roberth roberth 7 2007-03-26 11:33 fil

Det spesielle med ACL er at jeg kan gi bestemte brukere eller filgrupper tilgang. Hvis jeg ønsker å gi brukeren termvakt lesetilgang til filen, gjør jeg slik:

   $ setfacl -m u:termvakt:r fil

Kommandoen setfacl kan endre ACL for en fil. -m betyr modifisér, u er kort for user (man kan gi grupper tilgang med g) og r markerer lesetilgang som vanlig.

   $ getfacl fil
  # file: fil
  # owner: roberth
  # group: roberth
  user::rw-
  user:termvakt:r--
  group::---
  mask::r--
  other::---

Resultatet synes her. To nye linjer har kommet til: user:termvakt:r-- og mask::r--. Den første er enkel å forstå: Brukeren termvakt har nå fått lesetilgang.

  termvakt@kadabra ~ $ cat ~roberth/fil
  Dette er innholdet

Mask er ikke like lett å forstå, men her er forklaringen: Mask begrenser hva ACL-oppslagene kan gjøre (unntatt user:: og other::), så for at termvakt skal ha lesetilgang må r være satt både i linjen user:termvakt og i linjen mask::.

Skulle jeg ha behov for å slette linjer i filens ACL, kan dette gjøres slik:

   $ setfacl -x u:termvakt fil
   $ getfacl fil
  # file: fil
  # owner: roberth
  # group: roberth
  user::rw-
  group::---
  other::---

Tryggleikskopiar

Snapshot

Studentar som har heimeområdet sitt på maskinen platon kan finna ein katalog som heiter .snapshot på heimeområdet. Denne katalogen er aldri synleg når du listar opp filene, du må vita om han. Under denne finn du kopiar av heimeområdet ditt frå dei siste dagane, og du kan bruka denne katalogen til å finna att filer du har sletta ved eit uhell. Meir om detta kan du finna her: USIT forklarar .snapshot


restore@usit.uio.no

Viss du har mista ei fil på heimeområdet ditt, og du ikkje finn henne under .snapshot eller ikkje har .snapshot, kan du ta kontakt med backup-avdelinga på USIT. Send ein e-post til restore@usit.uio.no. I e-posten skriv du så fullstendig bane som mogleg til fila eller mappa du vil ha gjenoppretta, og håpar det beste. Viss fila var meir enn ein dag gamal då ho vart sletta eller overskriven er det nesten sikkert at du kan få henne igjen.

Det er ikkje backup av alt

Området /tmp på Linux-maskinane er reservert til mellombelse filer. Alt du lagrar her vil berre liggja på den maskinen du brukar, og vil ikkje vera synleg på andre maskinar. Dessutan vil det verta sletta i løpet av natta. Det finst ikkje backup av dette området

Områda C: og D: på Windows-maskinar er berre delvis tilgjengelege, og det som er lagra her vert sletta med jamne mellomrom.

Filkomprimering

I Unix/Linux er det vanlegast å bruka eit program som heiter tar i samarbeid med eit anna program som heiter gzip. Tar er nemleg slik at det ikkje komprimerer filene, men derimot kan 'lime saman' mange filer til ei større fil. Gzip komprimerer, men kan berre jobbe med ei fil om gangen. Derfor passar desse to programma saman som hand i hanske.

Du kan sjølvsagt velge å berre bruka gzip på kvar og ei fil alene, men resultatet av dette vil ta mykje meir plass enn om ein først bruker tar til å gjere alle filene om til ei.

Pakke inn

Eksempelet under visar to kommandolinjer der vi først bruker tar for å lima saman alle filene i den fiktive mappen test til ei ny fil som vi i dette eksempelet kaller fil.tar. I den neste kommandolinja brukes gzip for å komprimera fil.tar.

   asah@isolde ~/test> tar -cvf fil.tar * 
   asah@isolde ~/test> gzip -v fil.tar

Resultatet av den siste kommandoen vil være ei fil som heiter fil.tar.gz.

Forøvrig kan det være mer hensiktsmessig å stå i katalogen over for å pakken en hel katalog.

   ~> tar zcvf fil.tar.gz test

Denne kommandoen slår også sammen tar og gzip i en kommando, så man slipper en temporær tar-fil. Fordelen med å stå utenfor katalogen er at du får med deg alle filene i katalogen (* tar ikke med seg filer som starter på .), og at også katalognavnet blir lagret i filen (noe som er praktisk når man skal pakke ut igjen siden filen da vil havne i en slik katalog igjen).

Pakke ut

For å pakka ut ei tar.gz-fil gjør ein følgende:

   asah@isolde ~/test> gunzip -v fil.tar.gz
   asah@isolde ~/test> tar -xvf fil.tar

Når desse kommandoane vert utførde vil du sjå nokre linjer med informasjon som seier om operasjonane vert vellykka utførde, og kor mange prosent mindre/større plass filene tek. Dette kjem av opsjonen -v som er tatt med som argument i begge kommandoane.

Vil man også her slippe å ha tar-filen liggende så kan man gå direkte til utpakking med:

   > tar zxvf fil.tar.gz

Tar og Gzip i én kommando

Faktisk så finst det noko som heiter GNU tar, som har en Gzip-funksjonalitet innebygd, slik at ein slipper unna med ein kommando. GNU tar finst på alle maskinar ved UiO under /local/gnu/bin/tar.

Eksempelet under viser tar og gzip i same kommando ved hjelp av GNU tar:

   asah@isolde ~/test> /local/gnu/bin/tar -czvf fil.tar.gz *

For å pakka ut igjen gjer ein som følger:

   asah@isolde ~/test> /local/gnu/bin/tar -xzvf fil.tar.gz

Viss du ikkje får GNU tar til å fungera, men fortsatt ønsker å pakka ut ei .tar.gz-fil på ein kommandolinje, kan du gjere som følger for å pakka ut ei .tar.gz-fil:

   asah@isolde ~/test> gunzip -dc fil.tar.gz | tar -xvf -

GNU tar har også støtte for bzip2, som pakker litt bedre men bruker litt mer tid. Har man en tar-fil kan man bytte ut gzip med bzip2, eller hvis man vil gå direkte fra og til med tar, bytter man ut z i opsjonene med j:

   > tar jcvf test.tar.bz2 test
   > tar jxvf test.tar.bz2

For meir informasjon om tar, skriv:

   asah@isolde ~/test> man tar

Oppsummering: Kommandoar

ls

       listar opp filene i mappa
       Nyttige parameterar: -l, -a, -h, -p

cp

       kopierer filer. T.d. slik:
                cp fil1.txt fjas/fil2.txt
       kopierer fila fil1.txt til mappa fjas, og kallar kopien fil2.txt

Kommandoen 'mv' flyttar filene. og endrar namn på dei. For å byta namn på filer gjer du slik:

        mv gamaltnamn.txt nyttnamn.txt

        då forsvinn gamaltnamn.txt, og nyttnamn.txt dukkar opp.

For å flytta filer gjer du slik:

        mv fil.txt filer/

Då forsvinn fil.txt og dukkar opp i mappa 'filer'. Merk at kommandoen mv skriv over gamle filer utan å nøla. Så viss du har to filer fil1.txt og fil2.txt, og gjer:

        mv fil1.txt fil2.txt

så vil fila som heiter 'fil2.txt' bli sletta, og 'fil1.txt' byta namn til 'fil2.txt'.

rm

       Slettar filer.

rm -r

       Slettar filer og katalogar.

Oppsettfiler

Dei fleste Linux-program lagrar oppsettet sitt i filer eller mapper med namn som byrjar med punktum. T.d. har du fila .bashrc og mappa .mozilla på heimeområdet ditt. Du ser dei ikkje til vanleg, men du kan sjå dei med ls med parameteren -a:

~ > ls -a
./   .bashrc   inf1000/         mat1100/   revlusjon/
../  familie/  kjaerleiksbrev/  .mozilla/
                                                                                                                                                                                 

Viss du slettar desse filene eller mappene vil du mista oppsettet ditt i dei aktuelle programma, men av og til (særleg i nettlesarar) kan du spara ein del diskplass på å rydda opp i slike filer. Spør gjerne termvakten om hjelp.

Diskgris

Av og til går ein disk full. Då får dei ti som brukar mest plass ein streng e-post med varsel om å rydda. Ting som ofte brukar mykje plass er:

  • Mellomlageret til nettlesaren
  • Kompendier
  • Powerpoint-presentasjonar
  • Fotografi

For å sjekke hvor mye diskplass du bruker kan du bruke kommandoen: du -sh

Viss du har fått diskgrisbrev bør du sjå gjennom desse og sletta det du ikkje treng. Spør gjerne termvakten om hjelp.

Personlige verktøy
Navnerom
Varianter
Handlinger
Navigasjon
Kategorier
Programvare
Andre
Translate
Verktøy