På denna sida beskrivs hur man kopierar, flyttar, raderar och länkar filer. 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
|
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.
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.
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.