På denna sida beskrivs hur man kopierar, flyttar och tar bort filer. Med kommandona cp, mv, och rm är det lätt hänt att man blir av med filer utan att det finns någon möjlighet att få tillbaka dem.
Jag kommer att avsluta alla namn som syftar på en katalog med / (slash), detta för att öka läsbarheten. Tecknet / är inte en del av katalogens namn utan bara en markör som visar att det rör sig om en katalog. Vi skapar en katalog för att visa principen:
[olle@dev1]$ mkdir newdir/
[olle@dev1]$ ls
a.txt b.txt c.txt newdir
|
cd
Flagga | | Betydelse | | Beskrivning |
cd | | | | Byter arbetskatalog till din hemkatalogen. |
cd ~david | | | | Byter arbetskatalog till användaren davids hemkatalog. |
cd - | | | | Byter arbetskatalog till den förra arbetskatalogen. |
cd dir1 | | | | Byter arbetskatalog till dir1 (som ligger i arbetskatalog). |
Detta kommando står för change directory och byter arbetskatalog. Genom att ställa sig i en viss arbetskatalog kan man förkorta skrivandet när du vill komma åt en fil. Tänk dig att du vill titta på innehållet i filen /home/david/hej.txt. Det första sättet är:
[olle@dev1]$ cat /home/david/hej.txt
Hej, välkommen till min katalog.
|
Det andra sättet är att man byter arbetskatalog till /home/david/ och sedan tittar i filen:
[olle@dev1]$ cd /home/david/
[olle@dev1]$ cat hej.txt
Hej, välkommen till min katalog.
|
pwd
Detta kommando står för print working directory och skriver ut namnet på arbetskatalogen. Det kan vara bra om man har tappat bort sig i filstrukturen.
[olle@dev1]$ cd /home/olle/foo/
[olle@dev1]$ pwd
/home/olle/foo
|
ls
Flagga | | Betydelse | | Beskrivning |
ls -a | | all | | Listar alla filer och kataloger, även dolda. |
ls -c | | change | | Listar filer och kataloger sorterade efter när de senast modifierades. |
ls -d | | directory | | Listar bara kataloger. |
ls -F | | full | | Listar filer och kataloger med ett / efter katalognamn och ett * efter körbara filer. |
ls -Gl | | group | | Som -l men utan att visa grupp. |
ls -hl | | human | | Som -l men visar storlek mer läsbart, t. ex. 4.8k. |
ls -i | | inode | | Listar filer och kataloger med inodens nummer framför varje namn. |
ls -l | | long | | Visar en detaljerad lista av filer och kataloger med rättigheter, ägare, grupp, storlek, modifieringstid och namn. |
ls -nl | | number | | Som -l men visar ägarens UID och gruppens GID istället för namn. |
ls -o | | | | Samma som -Gl. |
ls -r | | reverse | | Listar filer och kataloger sorterade i omvänd ordning. |
ls -R | | recursive | | Listar filer och kataloger och allt som katalogerna innehåller rekursivt. |
ls -S | | size | | Listar filer och kataloger sorterade efter storlek. |
ls -t | | time | | Listar filer och kataloger sorterade efter när de senast ändrades. |
ls -u | | used | | Listar filer och kataloger sorterade efter när de senast användes. |
ls -ul | | used | | Som -l men åtkomsttid visas istället för modifieringstid. |
ls -w20 | | width | | Listar filer och kataloger med en bredd på 20 tecken. |
ls -x | | | | Listar filer och kataloger i rader istället för kolumner. |
ls -X | | extension | | Listar filer och kataloger sorterade efter ändelse. |
Detta kommando står för list och radar upp de filer och kataloger som finns i en katalog. Om man inte ger något argument till ls kommer de filer som ligger i arbetskatalogen visas:
[olle@dev1]$ ls /home/olle/foo/
a.txt b.txt c.txt dir1
[olle@dev1]$ cd /home/olle/foo/
[olle@dev1]$ ls
a.txt b.txt c.txt dir1
|
Ofta vill man se en detaljerad lista över katalogers innehåll. Då kan man använda flaggan l (long). Denna flagga används så ofta att det finns ett alias för ls -l som heter ll.
[olle@dev1]$ ls -l
-rw-rw-r-- 1 olle olle 9 aug 7 13:00 a.txt
-rw-rw-r-- 1 olle olle 61 aug 7 13:06 b.txt
-rw-rw-r-- 1 olle olle 22 aug 7 13:19 c.txt
drwxrwxr-x 2 olle olle 4096 aug 7 13:25 dir1
|
De olika kolumnerna beskrivs i följande tabell:
Kolumner | | Beskrivning |
1. Rättigheter | | Denna kolumn beskriver vem som får läsa, skriva och köra filen. Om bokstaven längst till vänster är ett d betyder det att det rör sig om en katalog. Om bokstaven är ett l är det en symbolisk länk. (Rättigheter diskuteras under webbsidan användare.) |
2. Länkar | | Följande siffra berättar hur många hårda länkar som refererar till filen. Siffran kan minst vara 1, som står för filnamnet självt. Om det rör sig om en katalog berättar siffran istället hur många filer som katalogen innehåller. |
3. Användare | | Vilken användare som äger filen. |
4. Grupp | | Vilken grupp som har tillgång till filen. |
5. Storlek | | Hur många Byte filen tar upp. |
6. Modifikationsdatum | | När filen senast ändrades. |
7. Namn | | Filens namn. |
Ett filnamn som börjar med punkt gör filen osynlig. Många konfigurationsfiler är osynliga och kan visas men flaggan a (all):
[olle@dev1]$ cat > .hemlis.txt
Detta är en hemlig fil.
[olle@dev1]$ ls
a.txt b.txt c.txt dir1
[olle@dev1]$ ls -a
a.txt b.txt c.txt dir1 .hemlis.txt
|
Ofta är det praktiskt om vi kan se de filer som modifierades senast, här använder vi long, time, reversed:
Med detta kommando visas den senast ändrade filen underst i listningen.
ln
Flagga | | Betydelse | | Beskrivning |
ln a.txt a_link | | | | Skapar en hård länk till a.txt. |
ls -s a.txt a_link | | soft | | Skapar en mjuk länk till a.txt. |
Detta kommando står för link och skapar en länk. Det finns två sorters länkar; hårda och mjuka.
En hård länk är ett nytt namn på filen. Efter att man skapat en hård länk går det inte att veta vilken av de två namnen som är det "äkta" namnet på filen. För att den riktiga filen ska försvinna måste båda namnen tas bort. Båda namnen är nämligen kopplade till samma inod som unikt pekar ut filen. Nu ska jag testa att skapa en hård länk:
[olle@dev1]$ ln a.txt a_link
[olle@dev1]$ ls -l
-rw-rw-r-- 2 olle olle 9 aug 7 13:00 a_link
-rw-rw-r-- 2 olle olle 9 aug 7 13:00 a.txt
-rw-rw-r-- 1 olle olle 61 aug 7 13:06 b.txt
-rw-rw-r-- 1 olle olle 22 aug 7 13:19 c.txt
drwxrwxr-x 2 olle olle 4096 aug 7 13:25 dir1
|
Här ser vi att den hårda länken a_link ser ut som vilken fil som helst, och har samma modifieringstid som a.txt (eftersom det är samma fil). Både a.txt och a_link har siffran 2 i andra kolumnen, vilket betyder att det finns 2 namn som refererar till den filen. Hur kan vi då bevisa att det är samma fil? Jo genom att jämföra inodernas nummer:
[olle@dev1]$ ls -i
500048 a_link 500049 b.txt 634619 dir1
500048 a.txt 500050 c.txt
|
En mjuk länk är en egen liten fil som pekar ut en annan fil. Om du tar bort den utpekade filen kommer den att försvinna och den mjuka länken ligger kvar men är bruten. Jag skapar en mjuk länk:
[olle@dev1]$ ln -s a.txt a_soft
[olle@dev1]$ ls -l
lrwxrwxrwx 1 olle olle 5 aug 7 13:47 a_soft -> a.txt
-rw-rw-r-- 1 olle olle 9 aug 7 13:00 a.txt
-rw-rw-r-- 1 olle olle 61 aug 7 13:06 b.txt
-rw-rw-r-- 1 olle olle 22 aug 7 13:19 c.txt
drwxrwxr-x 2 olle olle 4096 aug 7 13:25 dir1
|
Vi ser att det är mycket som skiljer den mjuka länken från den utpekade filen. Rättigheterna börjar med l, storleken är bara 5, modifikationstiden är satt till då länken skapades och i namnet ser man en pil som visar vilken fil som refereras. I mitt tycke är mjuka länkar att föredra framför hårda, eftersom man inte blir lika förvirrad.
touch
Flagga | | Betydelse | | Beskrivning |
touch -a a.txt | | access | | Ändrar åtkomsttiden till nu. |
touch -m a.txt | | modification | | Ändrar modifikationstiden till nu. |
touch a.txt -r b.txt | | reference | | Ändrar modifikationstiden och åtkomsttiden på a.txt till samma som b.txt. |
Detta kommando ändrar åtkomsttiden och modifikationstiden på en fil till den tid som klockan står på när kommandot körs. Om filen inte finns så skapas filen. Detta är alltså det snabbaste sättet att skapa en tom fil.
[olle@dev1]$ ls -l
-rw-rw-r-- 1 olle olle 9 aug 7 13:00 a.txt
-rw-rw-r-- 1 olle olle 61 aug 7 13:06 b.txt
-rw-rw-r-- 1 olle olle 22 aug 7 13:19 c.txt
drwxrwxr-x 2 olle olle 4096 aug 7 13:25 dir1
[olle@dev1]$ touch b.txt
[olle@dev1]$ ls -l
-rw-rw-r-- 1 olle olle 9 aug 7 13:00 a.txt
-rw-rw-r-- 1 olle olle 61 aug 8 17:11 b.txt
-rw-rw-r-- 1 olle olle 22 aug 7 13:19 c.txt
drwxrwxr-x 2 olle olle 4096 aug 7 13:25 dir1
|
cp
Flagga | | Betydelse | | Beskrivning |
cp -f a.txt foo/ | | force | | Kopierar a.txt till foo/ utan att fråga innan en existerande fil skrivs över (default). |
cp -i a.txt foo/ | | interactive | | Kopierar a.txt till foo/ men frågar innan en existerande fil skrivs över. |
cp -p a.txt foo/ | | preserve | | Kopierar a.txt till foo/ men bevarar modifikationstid från a.txt. |
cp -P src/a.txt foo/ | | path | | Kopierar src/a.txt till foo/, alltså både a.txt och katalogen src/. |
cp -r src/ foo/ | | recursive | | Kopierar katalogen src/ och allt innehåll till foo/. |
cp -u a.txt foo/ | | updated | | Kopierar a.txt till foo/ då a.txt är nyare än foo/a.txt (om den redan finns). |
cp -v a.txt foo/ | | verbose | | Kopierar a.txt till foo/ och skriver ut en kommentar. |
Kommandot står för copy och kopierar en eller flera filer. OBS: Om man inte använder flaggan i raderas destinationsfilen om den redan existerar. Man bör alltså vara försiktig med kopieringar ty om en fil skrivs över finns det inget sätt att få tillbaka den. Med flaggan r (recursive) kan man kopeiera hela strukturer i ett svep:
[olle@dev1]$ ls
src
[olle@dev1]$ ls foo/
a.txt b.txt c.txt dir1
[olle@dev1]$ cp -r foo/ foo_copy/
[olle@dev1]$ ls
foo foo_copy
[olle@dev1]$ ls foo_copy/
a.txt b.txt c.txt dir1
|
Som exemplet ovan visar skapas alltså katalogen foo_copy/ och fylls med samma innehåll som finns i foo/.
När man kopierar inom samma katalog så skriver man det nya namnet som andra parameter:
[olle@dev1]$ cp a.txt a_copy.txt
[olle@dev1]$ ls
a.txt a_copy.txt
|
scp
Flagga | | Betydelse | | Beskrivning |
scp -r src/ root@10.0.0.4:/home/olle/foo/ | | recursive | | Kopierar katalogen src/ och allt innehåll till maskinen 10.0.0.4 in i mappen /home/olle/foo/. Användaren loggar in som root på 10.0.0.4. |
scp -v a.txt root@10.0.0.4:/home/olle/foo/ | | verbose | | Kopierar a.txt till maskinen 10.0.0.4 in i mappen /home/olle/foo/ och skriver ut en kommentar. Användaren loggar in som root på 10.0.0.4. |
Kommandot står för secure copy och kopierar en eller flera filer över nätverket. scp använder ssh (secure shell) för dataöverföringen, och användaren måste skriva in lösenord i samband med kopieringen. För att kopiering mellan datorer ska vara möjlig krävs alltså dessa saker:
- Den avlägsna datorn har en ssh-server rullande.
- Om datorerna inte har utbytt nycklar (som krävs för RSA-krypteringen) måste de göra detta i samband med kopieringen.
- Användaren känner till en användare och ett lösenord på den avlägsna datorn eftersom en inloggning ofta krävs.
Med flaggan r (recursive) kan man kopeiera hela strukturer i ett svep.
mv
Flagga | | Betydelse | | Beskrivning |
mv -b a.txt foo/ | | backup | | Flyttar a.txt till katalogen foo och gör en backup (a.txt~) om det redan finns en a.txt i foo. |
mv -f a.txt foo/ | | force | | Flyttar a.txt till katalogen foo och skriver över a.txt om det finns en sådan fil finns i foo. |
mv -i a.txt foo/ | | interactive | | Flyttar a.txt till katalogen foo men frågar innan den skriver över någon fil. |
mv -u a.txt foo/ | | updated | | Flyttar a.txt till katalogen foo men bara om a.txt inte existerar i foo eller är äldre än den filen som flyttas. |
mv -v a.txt foo/ | | verbose | | Flyttar a.txt till katalogen foo och skriver ut en kommentar. |
Kommandot står för move och flyttar mycket riktigt en fil eller katalog. OBS: Om man inte använder flaggan i (interactive) raderas destinationsfilen om den redan existerar. Förutom att man kan råka radera en existerande fil med mv, så förändras ingenting förutom sökvägen till filen/katalogen. Under ytan så flyttar inte Linux på en fil när man gör mv, endast sökvägen till filen ändras. Filen behåller sin gamla inod. Om man flyttar en fil/katalog innom en katalog byter man egentligen bara namn på filen/katalogen:
[olle@dev1]$ ls -l
-rw-rw-r-- 1 olle olle 9 aug 7 13:00 a.txt
-rw-rw-r-- 1 olle olle 61 aug 7 13:06 b.txt
-rw-rw-r-- 1 olle olle 22 aug 7 13:19 c.txt
drwxrwxr-x 2 olle olle 4096 aug 7 13:25 dir1
[olle@dev1]$ mv a.txt aa.txt
[olle@dev1]$ ls -l
-rw-rw-r-- 1 olle olle 9 aug 7 13:00 aa.txt
-rw-rw-r-- 1 olle olle 61 aug 7 13:06 b.txt
-rw-rw-r-- 1 olle olle 22 aug 7 13:19 c.txt
drwxrwxr-x 2 olle olle 4096 aug 7 13:25 dir1
|
Som vi ser förändras inget förutom namnet på filen a.txt.
rm
Flagga | | Betydelse | | Beskrivning |
rm -f a.txt | | force | | Raderar a.txt utan att fråga. |
rm -i a.txt | | interactive | | Frågar om man vill radera a.txt, om man svarar y raderas a.txt. |
rm -r foo/ | | recursive | | Raderar katalogen foo med allt innehåll. |
rm -v a.txt | | verbose | | Raderar a.txt och skriver ut en kommentar om hur det gick. |
Kommandot raderar en eller flerar filer. Med flaggan r (recursive) kan man radera en katalog med allt innehåll. OBS: När du raderat en fil finns det inget sätt att ångra detta. Linux har ingen papperskorg som man brukar finna i andra operativsystem. Nu ska vi testa att radera lite filer interaktivt:
[olle@dev1]$ ls /home/olle/foo/
a.txt b.txt c.txt dir1
[olle@dev1]$ rm -ir /home/olle/foo/
rm: descend into directory `/home/olle/foo`? y
rm: descend into directory `/home/olle/foo/dir1`? n
rm: remove `/home/olle/foo/a.txt`? y
rm: remove `/home/olle/foo/b.txt`? y
rm: remove `/home/olle/foo/c.txt`? y
rm: remove directory `/home/olle/foo/` (might be nonempty)? n
[olle@dev1]$ ls /home/olle/foo/
dir1
|
I exemplet ovan valde vi att radera alla filer i foo/ men inte katalogen själv och inte heller katalogen foo/dir1/.
Vill man ta bort rubbet utan att behöva svara på en massa frågor gör man såhär:
[olle@dev1]$ rm -r /home/olle/foo/
[olle@dev1]$ ls /home/olle/
jox tester
|
Nu försvann katalogen foo/ med allt innehåll.
mkdir
Flagga | | Betydelse | | Beskrivning |
mkdir -m 744 foo/ | | permission mode | | Skapar katalogen foo/ där alla förutom ägaren bara har läsrättigheter (läs mer om rättigheter under användare). |
mkdir -p foo/foo2/ | | parent | | Skapar katalogerna foo/ och foo2/ där foo/ innehåller foo2/. |
Detta kommando står för make directory och skapar en katalog. Vi kan välja vilka rättigheter vi vill att andra användare ska ha i katalogen genom flaggan m:
[olle@dev1]$ mkdir -m 700 mydir/
[olle@dev1]$ ls -l
-rw-rw-r-- 1 olle olle 9 aug 7 13:00 aa.txt
-rw-rw-r-- 1 olle olle 61 aug 7 13:06 b.txt
-rw-rw-r-- 1 olle olle 22 aug 7 13:19 c.txt
drwxrwxr-x 2 olle olle 4096 aug 7 13:25 dir1
drwx------ 2 olle olle 4096 aug 8 18:45 mydir
|
I exemplet ovan skapades en katalog (mydir/) som bara kan läsas och skrivas i av ägaren.
rmdir
Flagga | | Betydelse | | Beskrivning |
rmdir -p foo/ | | parent | | Raderar katalogen foo/ och alla underkataloger om ingen av dessa innehåller någon fil. |
Detta kommando står för remove directory och radera tomma kataloger. Med flaggan p (parent) så raderas även tomma underkataloger.
tar
Flagga | | Betydelse | | Beskrivning |
tar -xvf a.tar | | eXtract | | Packar upp filen a.tar och skriver ut namnet på alla filer som packas upp. |
tar -xzvf a.tar.gz | | zip | | Packar upp filen a.tar.gz (som är komprimerad med gzip) och skriver ut namnet på alla filer som packas upp. |
tar -cvf a.tar * | | create | | Packar ihop alla filer i den aktuella mappen till filen a.tar och skriver ut namnet på alla filer som packas ihop. |
tar -czvf a.tar.gz * | | zip | | Packar ihop alla filer i den aktuella mappen och komprimerar arkivet med gzip. |
tar -tvf a.tar | | table | | Listar allt innehåll i filen a.tar. |
Med detta kommando kan man packa ihop flera filer till en akrivfil ( en så kallad tar-fil ). I normala fall komprimeras inte filerna i arkivfilen. Vill man att filerna ska komprimeras kan man göra på två sätt:
- Du skapar först arkivfilen okomprimerad, och komprimerar den sedan med "compress" eller "gzip".
- Du skapar akrivfilen och komprimerar den på samma gång med flaggan "z". Komprimeringen du får nu är "gzip".
gzip
Flagga | | Betydelse | | Beskrivning |
gzip a.tar | | (ingen) | | Packar filen a.tar till a.tar.gz. |
Med gzip komprimerar du en fil så att den tar mindre plats. Man packar sedan upp filen med gunzip.
gunzip
Flagga | | Betydelse | | Beskrivning |
gunzip a.tar.gz | | (ingen) | | Packar upp den komprimerade filen a.tar.gz till a.tar. |
Med gunzip packar du upp en fil som har komprimerats med gzip.
zip
Flagga | | Betydelse | | Beskrivning |
zip a.zip a.txt b.txt | | (ingen) | | Komprimerar filen a.txt och b.txt till filen a.zip. |
zip -r a.zip a/ | | recursive | | Komprimerar mappen a/ och allt innehåll till filen a.zip. |
Med zip komprimerar du en fil så att den kan packas upp av någon som sitter på Windows. Om den ska packas upp kan du använda unzip.
unzip
Flagga | | Betydelse | | Beskrivning |
unzip -a a.zip | | ascii | | Packar upp den komprimerade filen a.zip till a.txt. |
Om man får en fil som har packats med zip i Windows, hur gör man då?
Med unzip packar du upp en eller flera filer som har komprimerats med zip. Den största fördelen med detta kommando är att du kan köra med flaggan -a som automatiskt konverterar textfiler från Windows textformat till Unix textformat.
bunzip2
Flagga | | Betydelse | | Beskrivning |
bunzip2 a.tar.gz | | (ingen) | | Packar upp den komprimerade filen a.tar.gz till a.tar. |
Med bunzip2 packar du upp en fil som har komprimerats med bzip2.