12. december

Filværktøjer

I dag skal vi lære om basal filhåndtering. Hvordan man kopierer filer, sletter dem og giver dem nye navne (flytter dem eller omdøber dem). Vi skal desuden se lidt på links. Til alt dette bruges kommandoerne cp, rm, mv og ln.

Da disse kommandoer udfører lignende opgaver kaldes de også på næsten samme måde og har nogle flag til fælles. Kommandoerne kaldes først med eventuelle flag, så en kilde der skal kopieres fra, flyttes fra eller linkes fra, og endelig en destination. Hvis destinationen er et katalog kan kilden være flere filer på en gang og de vil da få de samme navne bare i det nye katalog.

De fælles flag for kommandoerne er:

-f
Hvis kommandoen skal overskrive nogle filer fjernes disse uden spørgsmål (force)
-i
Spørg altid inden kommandoen overskriver filer
--target-directory=katalog
Giver mulighed for at flytte destinationen op foran. Kan være nyttigt i forbindelse med xargs(1). Virker selvfølgelig ikke for rm.

cp

cp bruges til at kopierer filer. Skal man have en kopi af /tmp/sushi der hedder /tmp/sake skriver man:

$ cp /tmp/sushi /tmp/sake

Har man en masse filer liggende i et katalog man ønsker at slette skriver man bare flere filer som kilde og et katalog som destination:

$ cp /tmp/sushi /tmp/basmatiris /tmp/suppe /home/makholm/mad

Hvor mad selvfølgelig er et katalog der ligger i mit hjemkatalog.

Man kan kopiere en hel katalogstruktur ved at sætte flager -R. Følgende vil kopiere kataloget /home/makholm/mad ned som et underkatalog til /tmp

$ cp -R /home/makholm/mad /tmp

Da /tmp er et katalog vil dette lave kataloget /tmp/mad/

Hvis man bruger cp som en simpel backup-metode, kan man bruge flaget -a. Dette vil blandt andet sørge for at kopierer rekursivt og beholde rettighederne fra de originale filer:

$ cp -a /home/makholm/mad /home/makholm/backup

En sidste mulighed, der skal nævnes her er flaget -u. Bruges dette vil cp prøve at opdaterer filer i stedet for bare at kopierer filer over. Det vil sige at hvis kildefilen allerede eksisterer og er nyere vil der ikke blive kopieret noget.

mv

mv flytter eller omdøber filer. Hvis destinationen er et katalog bliver alle filer bare flyttet dertil, ellers bliver filen omdøbt. mv har standardflagene og flaget -u

mv er egentligt ligeglad om den arbejder på filer eller kataloger. Den skal bare ændre navnet på tingen. Derfor er der ikke noget flag til at få mv til at virke rekursivt

rm

rm bruges til at slette filer. Ud over standardflagene understøtter rm kun flaget -R, der lader rm rekursivt slette underkataloger

Der er ingen let måde at genskabe slettede filer på, så huske lige at se hvad I sletter.

ln

ln bruges til at lave links. Links er en slags aliaser for samme fil, altså at samme fil kan tilgås med flere forskellige navne.

Der findes to forskellige slags links, gårde links og symbolske links. Hårde links peger på den fysiske fil på disken mens symbolske links peger på et filnavn. Det er ikke muligt at skelne den originale fil fra et hårdt link (det originale filnavn er også bare et hårdt link). Først når alle hårde link til en fil bliver slettet bliver filen rent fysisk slettet. Med symbolske links kan man opnå links, der peger ingen steder hen, da filen ikke selv ved at der bliver linket til den.

Følgende laver et hårdt link fra filen /tmp/peter til /tmp/makholm

$ ln /tmp/peter /tmp/makholm

Jeg kan nu slette /tmp/peter og stadigvæk tilgå indholdet via /tmp/makholm.

I det følgende laver jeg et symbolsk link, der hedder /tmp/pelle, til /tmp/makholm:

$ ln -s /tmp/makholm /tmp/pelle

Hvis jeg så kommer til at slette /tmp/makholm vil /tmp/pelle give en fejl, hvis jeg prøver at læse indholdet af den.

Symbolske links kan laves til alle filer på ens system, mens hårde links kun kan laves til filer der ligger på samme filsystem. Skal man bruge et link til et katalog skal man også bruge symbolske links.

Derudover har ln de samme flag som de andre kommandoer nævnt her.