Kommandoer
Arbejde med filer

Indhold

  • Grundlæggende
    • nano - rediger i filer
    • touch – opret fil eller forny tidsstempel
    • mkdir – opret mappe
    • cp – kopier og flyt
    • rm – slet ...
    • find – find ...
    • wget – hent fil fra netværk
  • Indhold af filer
    • cat - catenade
    • more - vis indholdet af filer
    • tail / head - vis slutningen / starten af filer
    • grep - Pibes og filtre
  • Redirect
    • pipes – lav output til nyt input...
    • redirect – send output til ...
  • Erstat indhold
    • echo – indsæt tekst i filer
    • tee – indsæt i filer
    • sed – erstat indhold i filer
  • Lukke computer
    • reboot – genstart maskine
    • shutdown – luk og genstart maskine
  • Pakkeprogrammer
    • Pakkeprogammer – hent fil fra netværk

Grundlæggende

nano

På en Linuxserver bliver alle tjenester og hardware initialiseret og konfigureret igennem tekstfiler. Derfor skal du kende nano, et effektiv terminal tekstredigeringsprogram. Programmet har også farvekodning, hvis det genkender formatet. nano startes med kommandoen:

nano *filnavn*

Herefter bliver ændres terminalen til nedestående, hvor menuen ligger i bunden af skærmen.

  GNU nano 2.2.6                New Buffer                                                          











^G Get Help      ^O WriteOut      ^R Read File     ^Y Prev Page     ^K Cut Text      ^C Cur Pos
^X Exit          ^J Justify       ^W Where Is      ^V Next Page     ^U UnCut Text    ^T To Spell

Du navigerer rundt i nano med piletaster og tabulatorknappen. Programmets funktioner tilgår du med en kombination af [Ctrl] og et bogstav. Det bliver af nano angivet som f.eks. ^X

Kommandoerne er selvforklarende, men herunder er de meste basale funktioner

Ctrl+w Find
Ctrl+y En side op
Ctrl+v En side ned
Ctrl+w+v Til filens sidste linie
Ctrl+k Klip
Ctrl+u Indsæt
Ctrl+x Afslut nano

Når du har redigeret din tekst færdig afslutter du med Ctrl+x, hvorefter nano i bunden svarer:


    
Gem ændret buffer (AT SVARE "Nej" VIL ØDELÆGGE ÆNDRINGER)?                                                              
 J Ja
 N Nej          ^C Annullér

Når du svarer y vil nano skrive filnavnet med den fulde sti, hvortil du taster Enter.

Får du en fejlmelding om at du ikke kan gemme skyldes det oftest, at man redigerer i en fil man ikke har rettigheder til. Oftes skyldes det at man glemmer at anvende sudo når man redigerer i systemfiler.

touch

touch er en kommando der anvendes til at forny en fils tidstempel. På den måde kan se hvornår en fil sidst er kørt eller opdateret. Ofte bruger man også kommandoen til at oprette filer med, som vi gør herunder.

Eksempel:

touch ~/testfil

Man kan også oprette en række af filer på en gang:

touch ~/testfil2 ~/testfil3 ~/testfil4

Lad os få et overblik over de oprettede filer med kommandoen: ls -al | grep testfil

tj@tj-VirtualBox:~$ ls -al | grep testfil
-rw-rw-r--  1 tj   tj      0 mar 15 20:06 testfil
-rw-rw-r--  1 tj   tj      0 mar 15 20:08 testfil2
-rw-rw-r--  1 tj   tj      0 mar 15 20:08 testfil3
-rw-rw-r--  1 tj   tj      0 mar 15 20:08 testfil4

Med den kommando filtrerer vi output fra ls med tekststrengen "testfil". Som du kan se er den første testfil 2 minutter bag de andre. Lad os opdatere dem alle til samme tidsstempel med touch testfil*.

tj@tj-VirtualBox:~$ ls -al | grep testfil
-rw-rw-r--  1 tj   tj      0 mar 15 20:14 testfil
-rw-rw-r--  1 tj   tj      0 mar 15 20:14 testfil2
-rw-rw-r--  1 tj   tj      0 mar 15 20:14 testfil3
-rw-rw-r--  1 tj   tj      0 mar 15 20:14 testfil4

mkdir

Til at oprette mapper bruges kommandoen mkdir (make directory). ~ henviser til brugerens hjemmemappe.

Eksempel:

mkdir ~/testmappe

Man kan også oprette flere mapper på en gang

mkdir testmappe2 testmappe3 testmappe4

Vi ser mapperne med kommandoen: ls -al | grep testmappe.

tj@tj-VirtualBox:~$ ls -al | grep testmappe
drwxrwxr-x  2 tj tj 4096 mar 15 20:18 testmappe1
drwxrwxr-x  2 tj tj 4096 mar 15 20:18 testmappe2
drwxrwxr-x  2 tj tj 4096 mar 15 20:18 testmappe3
drwxrwxr-x  2 tj tj 4096 mar 15 20:19 testmappe4

Har man brug for at oprette mapper under hinanden indsætter man et -p i kommanoen. Herunder vil vi oprette mappestien testmappe5/undermappe/underundermappe.

mkdir -p ~/testmappe5/undermappe/underundermappe

Vi anvender tree til at se mapperne

tj tj  tree -L 3 ~/testmappe5
/home/tj/testmappe5
└── undermappe
    └── underundermappe

2 directories, 0 files

Man kan også oprettere flere undermapper med en kommando:

mkdir -p ~/testmappe6/{undermappe1,undermappe2,undermappe3}
tj@tj-VirtualBox:~$ mkdir -p ~/testmappe6/{undermappe1,undermappe2,undermappe3}
tj@tj-VirtualBox:~$ tree ~/testmappe6/
/home/tj/testmappe6/
├── undermappe1
├── undermappe2
└── undermappe3

3 directories, 0 files

cp

For at holde fast i overvejelserne ovenfor er kopiering af filer den første kommando vi skal lære.

cp fil1 fil2 Laver en kopi af fil1 i fil2
cp -R ~/dir1 ~/dir2 Laver en kopi af dir1 i dir2
mv fil1 fil2 Ændrer fil1 til at hedde fil2
mv ~/dir1 ~/dir2 Flytter indholdet af dir1 til dir2 (dir1 forsvinder)

Læg mærke til at man flytter filer og mapper for at ændre deres navne.

Hvis du ønsker at være sikker på at kunne vende tilbage til din gamle konfiguration kan du altså blot lave en kopi af den fil du redigerer i og navngive kopien med et sigende efternavn f.eks.

cp ~/testfil ~/testfil.backup

På denne måde kan du hurtigt gå tilbage til den oprindelige opsætning ved at køre kommandoen modsat.

cp ~/testfil.backup ~/testfil

rm

Til at slette filer og mapper anvendes kommandoen rm (remove). Det er god vane, at anvende den fulde sti til det man sletter, for at undgå at slette noget forkert.

Eksempel: Slet filen testfil2 i din hjemmemappe der er oprettet ovenfor

rm ~/testfil

For at slette en mappe skal man tilføje -R til kommandoen (-R betyder recursive)

Eksempel: slet testmap1 og alle dens filer/undermapper der blev oprettet ovenfor

rm -R ~/testmap1

Teoretisk set kan den kommando slette hele ens harddisk, hvis man får / til at stå alene, da det er roden på hele systemet. Heldigvis er der indbygget en "failsafe" i kommandoen, sådan at man skal tilføje --no-preserve-root til kommandoen for at den vil køre. Man skal tvinge kommandoen sudo rm -R til at køre.

tj@tj-VirtualBox:~$ sudo rm -R /
rm: det er farligt at operere rekursivt på '/'
rm: brug --no-preserve-root for at tilsidesætte denne sikring

find

For at søge efter filer og mapper anvendes kommandoerne find og locate. Hvis du ønsker at lave en søgning i hele filstrukturen bør du søge ved hjælp af sudo eller som root. Læg også mærke til at søgningen skelner mellem små og store bogstaver. En søgning på mappen apt giver flere resultater - APT giver ingen.

find / -type f -name fstab Finder alle filer der hedder fstab
find . -type d -name apt Finder alle mapper der hedder noget med apt i den mappe du står i.
find . -type f -perm /a=x Finder alle filer der er eksekverbare i den mappe du står i
find . -type d -empty Finder alle tomme mapper i den mappe du står i.

man-page more: http://manpages.ubuntu.com/manpages/trusty/en/man1/find.1.html

Kommandoen find kan også anvendes til at søge og slette filer i samme kommando. Hvis du f.eks. har en mappe med både RAW og JPG billeder kan du med denne kommando slette alle jpg billederne

find . -type f -name "*.JPG" -exec rm -f {} \;

VIGTIGT: Som med alle andre slette kommandoer skal du være varsom, da du risikerer at slette mere end du ønsker. F.eks. vil et / i stedet for et . betyde at du sletter alle JPG billeder på harddisken, i stedet for dem der ligger i dine undermapper. Derfør bør du altid have styr på hvor i filstrukturen du er. Er du i tvivl så anvend pwd, så får du den fulde sti som output.

wget

For at hente filer på nettet anvendes programmet wget. For at hente filer på nettet skal du kende deres adresse. Herunder hentes Linux distributionen TinyCorePlus til computeren.

wget -c http://tinycorelinux.net/6.x/x86/release/CorePlus-current.iso

-c gør sådan, at hvis filhentningen afbrydes, så vil den kunne fortsætte fra hvor forbindelsen blev afskåret. Vær opmærksom på, at den hentede fil bliver gemt i den samme mappe som du kørte kommandoen i.

wget -c *filadresse* Henter filen, med mulighed for at genstarter hentningen.
wget -P ~/*mappe* *filadresse* Henter filen, men gemmer den i mappen ~/*mappe*
wget -o ~/*hentetfil* *filadresse* Henter filen, men gemmer den som "hentetfil*
wget -b *filadresse* Henter filen i baggrunden - frigiver kommandolinien med det samme.

Optionerne kan stackes. På den måde vil wget -cob minfil *filadresse* hente i baggrunden, gemme den som minfil og sikre at download kan genoptages ved afbrydelse.

man-page wget: http://manpages.ubuntu.com/manpages/trusty/man1/wget.1.html

Indhold af filer

cat

cat laver et output af filen, men stopper ikke når skærmen er fyldt. Derfor er programmet ikke altid velegnet til at vise indholdet af filer. F.eks:

cat /etc/hosts
tj@tj-VirtualBox:~$ cat /etc/hosts
127.0.0.1	localhost
127.0.1.1	tj-VirtualBox

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
tj@tj-VirtualBox:~$

man-page cat: http://manpages.ubuntu.com/manpages/trusty/man1/cat.1.html

more

Ved hjælp af more kan man få indholdet af en fil skrevet ud på skærmen. Når skærmen er fyldt kan man se hvor stor en procentdel af filen man har fået vist. Man går en linie frem ad gangen ved at trykke på Enter og en side længere ned med Mellemrum.

more /etc/passwd Vis indhold af filen /etc/passwd

man-page more: http://manpages.ubuntu.com/manpages/trusty/man1/more.1.html

tail / head

Kommandoen er god til at se om noget er blevet korrekt tilføjet til en fil.

tail /etc/passwd Vis de sidste 10 linier af /etc/passwd
tail -5 /etc/passwd Vis de sidste 5 linier af /etc/passwd
head -5 /etc/passwd Vis de første 5linier af /etc/passwd

man-page tail: http://manpages.ubuntu.com/manpages/trusty/en/man1/tail.1.html

man-page head: http://manpages.ubuntu.com/manpages/trusty/man1/head.1.html

grep

grep - anvendes til at finde tekststrenge i en fil.

grep backup /etc/passwd
tj@tj-VirtualBox:~$ grep backup /etc/passwd
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin

man-page grep: http://manpages.ubuntu.com/manpages/trusty/man1/grep.1.html

Redirect

Pipes

Pipes er en måde at overføre output fra en kommando til en anden. Hvis man f.eks. vil finde ud af hvor mange gange bogstavkombinationen "lib" forekommer i filnavne på roden, vil kommandoen ls - / blot liste alt indholdet op.

tj@tj-VirtualBox:~$  ls -l /
totalt 104
drwxr-xr-x   2 root root  4096 maj 27 00:58 bin
drwxr-xr-x   3 root root  4096 maj 27 00:59 boot
drwxrwxr-x   2 root root  4096 apr 22 13:53 cdrom
drwxr-xr-x   3 root root  4096 maj 31 08:50 data
drwxr-xr-x  19 root root  4320 jun  2 04:03 dev
drwxr-xr-x 143 root root 12288 jun  2 04:03 etc
drwxr-xr-x   4 root root  4096 maj 27 11:07 home
lrwxrwxrwx   1 root root    32 apr 22 13:53 initrd.img.old -> boot/initrd.img-4.8.0-36-generic
drwxr-xr-x  21 root root  4096 apr 22 13:53 lib
drwxr-xr-x   2 root root  4096 apr 22 14:14 lib64
drwx------   2 root root 16384 apr 22 13:52 lost+found
drwxr-xr-x   3 root root  4096 apr 22 14:12 media
drwxr-xr-x   2 root root  4096 feb 15 21:17 mnt
drwxr-xr-x   4 root root  4096 apr 22 14:37 opt
dr-xr-xr-x 223 root root     0 jun  2 04:03 proc
drwx------   5 root root  4096 maj 27 16:15 root
drwxr-xr-x  28 root root   880 jun  2 04:03 run
drwxr-xr-x   2 root root 12288 maj 27 00:58 sbin
drwxr-xr-x   2 root root  4096 jan 14 16:06 snap
drwxr-xr-x   3 root root  4096 maj 27 15:39 srv
dr-xr-xr-x  13 root root     0 jun  2 04:03 sys
drwxrwxrwt  11 root root  4096 jun  2 04:17 tmp
drwxr-xr-x  10 root root  4096 feb 15 21:17 usr
drwxr-xr-x  15 root root  4096 maj 27 01:05 var
lrwxrwxrwx   1 root root    29 apr 22 13:53 vmlinuz.old -> boot/vmlinuz-4.8.0-36-generic

Ved at anvende pibes (Den lodrette streg | ), kan vi "filtrere" output ved hjælp af grep.

tj@tj-VirtualBox:~$ ls -l / | grep lib
drwxr-xr-x  21 root root  4096 apr 22 13:53 lib
drwxr-xr-x   2 root root  4096 apr 22 14:14 lib64

Pipen leder outputtet fra ls / ind i grep-kommandoen, som giver vores output.

Herunder er nogle flere eksempler med anvendelse af grep.

tail -10 /etc/passwd | grep var Find linier med forekomsten af tekststrengen "var" i de sidste 10 linier af /etc/passwd
lspci | grep Ethernet Find informationer om dit netkort. Læg mærke til at søgningen er case-sensitiv (det store E i "Ethernet").

redirect

Nogen gange har man brug for at omdirigere indhold. Det kan f.eks. være at indsætte et output i en fil. Til at omdirigere anvender man > og >>. En pil erstatter alt indhold og 2 pile tilføjer til slutningen af filen.

cat fil1 > fil2 Erstat indholdet af fil2 med indholdet af fil1
cat fil1 >> fil2 Tilføj indholdet af fil1 til slutningen af fil2
cat -n fil >> fil_med_numre sæt linienumre i file

Omdirigering anvendes også til at omdirigere fejlmeddelelser. Her anvender man 1, 2 og & til at angive typen af output man vil omdirigere. Se følgende skema

1 > fil Sætter "godkendte" output ind i fil
2 > fil Sætter fejl-output ind i fil
& > fil sætter både rigtig og fejl-output ind i fil

Herunder er vist nogle eksempler med eksempler med kommandoen id:

Her bliver output fra kommandoen ledt direkte ind i filen ~/test, hvilket vi viser ved at køre cat ~/test.

tj@tj-VirtualBox:~$ id tj 1> ~/test
tj@tj-VirtualBox:~$ cat ~/test
uid=1000(tj) gid=1000(tj) grupper=1000(tj),4(adm),24(cdrom),27(sudo),30(dip), 46(plugdev),108(lpadmin),124(sambashare)

Her leder vi fejloutput ind i filen ~/test. Derfor bliver output fra kommandoen vist, men der er intet i filen ~/test, fordi der ikke er noget fejloutput

tj@tj-VirtualBox:~$ id tj 2> ~/test
uid=1000(tj) gid=1000(tj) grupper=1000(tj),4(adm),24(cdrom),27(sudo),30(dip), 46(plugdev),108(lpadmin),124(sambashare)
tj@tj-VirtualBox:~$ cat ~/test

Her leder vi et fejloutput ind i filen ~/test. Læg mærke til at det ikke bliver betragtet som en fejl at id ikke ikke finder en bruger. Herunder prøver vi at anvende en kommando systemet ikke kender. I stedet for at vise fejlen i terminalen skubber den fejl-output ind i filen ~/test

tj@tj-VirtualBox:~$ id hugo 2>/dev/null
id: 'hugo': ingen sådan bruger
tj@tj-VirtualBox:~$ cat ~/test

Man kan også sende output til /dev/null, som bedst kan beskrives som sort hul. På den måde kan man fjerne meddelelser fra et program. Det kan være praktisk hvis man anvender kommandoer i scripts eller man ønsker at køre programmer usynligt i baggrunden.

tj@tj-VirtualBox:~$ ifd hugo 2> ~/test
tj@tj-VirtualBox:~$ cat ~/test
Ingen kommando ved navn "ifd" blev fundet. Mente du istedet:
 Kommandoen "fid" fra pakken "id-utils" (universe)
 Kommandoen "id" fra pakken "coreutils" (main)
 Kommandoen "xfd" fra pakken "x11-utils" (main)
 Kommandoen "if1" fra pakken "ctsim" (universe)
 Kommandoen "if2" fra pakken "ctsim" (universe)
 Kommandoen "fd" fra pakken "fdclone" (universe)
 Kommandoen "ifp" fra pakken "ifp-line-libifp" (universe)
ifd: kommando ikke fundet
tj@tj-VirtualBox:~$ 

Vil man kvæle alle putput fra en kommando anvender man &>/dev/null. Anvender man & som argument i et scripts, så kan man se at intentionen er at kvæle alle output.

tj@tj-VirtualBox:~$ id tj 
uid=1000(tj) gid=1000(tj) grupper=1000(tj),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lpadmin),124(sambashare)
tj@tj-VirtualBox:~$ id tj 1>/dev/null
tj@tj-VirtualBox:~$ id hugo 2>/dev/null

En sidste praktisk måde at anvende omdirigering er til at indsætte tekststrenge ved hjælp af echo. På denne måde kan man indsætte tekstrenge i filer:

echo "tekststreng" > *fil_navn* Sletter filens indhold og indsætter "tekststreng" som nyt indhold
echo "tekststreng" >> *fil_navn* Indsæt "tekststreng" i bunden af en fil - anvendeligt til logs.

Læs mere: http://askubuntu.com/questions/350208/what-does-2-dev-null-mean

Erstat indhold

echo

echo er en simpel kommando som blot gentager sit input f.eks:

tj@tj-VirtualBox:~$ echo "hej"
hej
tj@tj-VirtualBox:~$ echo "En længere tekstreng"
En længere tekstreng

Umiddelbart virker det lidt tosset at man har sådan en kommando, men senere skal vi se hvordan den kan bruges til at indsætte tekststrenge i andre kommandoer.

tee

Kommandoen virker lidt som >>, men arbejder med output af en forudgående kommandoe f.eks:

date | tee ~/klokken

Kommandoen vil skrive tidsangivelsen ind i filen klokken. Herunder er mit output fra filen ( cat ~/klokken):

tir apr 12 08:35:42 CEST 2016

Hvis du kører kommandoen flere gange vil du opdage, at den erstatter filens indhold, så der hele tiden kun er en en linie i filen. Hvis du gerne vil have det nye output lagt ind neders i filen anvender du optionen -a

date | tee -a ~/klokken

Herunder er filens indhold efter 3 kørsler:

tir apr 12 08:36:33 CEST 2016
tir apr 12 08:39:19 CEST 2016
tir apr 12 08:39:21 CEST 2016

tee kan også anvendes til at indsætte tekstrenge i filer. Herunder opretter vi filen testtee i vores hjemmemappe og indsætter tekststrengen hej.

touch ~/testtee echo "hej" | tee ~/testtee
tj@tj-VirtualBox:~$ touch ~/testtee
tj@tj-VirtualBox:~$ echo "hej" | tee ~/testtee
hej
tj@tj-VirtualBox:~$ tail ~/testtee
hej

Vær opmærksom på at tee som standard erstatter indholdet af filen. Hvis vi vil indsætte en ny linie skal vi anvende omdirigering (markeret med rødt herunder):

tj@tj-VirtualBox:~$ echo "hej (linie nummer 2)" | tee >> ~/testtee
hej (linie nummer 2)
tj@tj-VirtualBox:~$ tail ~/testtee
hej
hej (linie nummer 2)

Hvis man vil indsætte tekststrenge i filer der ikke er ejet af en selv skal man også anvende tee.

echo "hejsa root" | sudo tee /root/hej
tj@tj-VirtualBox:~$ echo "hejsa root" | sudo tee /root/hej
hejsa root
tj@tj-VirtualBox:~$ sudo cat /root/hej
hejsa root

Læg mærke til at der først skal sudo på efter pipen. Det skyldes at det først er under skrivningen af filen vi skal anvende root's rettigheder.

sed

sed anvendes til at filtrere og transformere tekst i filer. Her vil vi kun se hvordan vi kan erstatte tekst ved hjælp af sed. Generelt fungerer kommandoen på følgende måde hvis man vil erstatte a med b:

sed -i s,a,b,*filnavn*
  1. Opret sedfil
  2. touch sedfil
  3. Skriv tekst ind i filen
  4. echo "Hej jeg hedder Kurt-Georg" > sedfil
  5. Erstat Kurt-Georg med dit eget navn
  6. sed -i s,Kurt-Georg,Thomas, sedfil
tj@tj-VirtualBox:~$ touch sedfil
tj@tj-VirtualBox:~$ echo 'Mit navn er Kurt-Georg' > sedfil
tj@tj-VirtualBox:~$ cat sedfil
Mit navn er Kurt-Georg
tj@tj-VirtualBox:~$ sed -i s,Kurt-Georg,Thomas, sedfil 
tj@tj-VirtualBox:~$ cat sedfil
Mit navn er Thomas

Hvis du kommer i en situation, hvor du skal indsætte kommaer (,) i teksten kan du bruge / som separator.

sed -i s/a/b/*filnavn*

sed er velegnet til at bruge i scripts.

Lukke computer

reboot

Denne kommando genstarter computeren. Den skal køres med root-rettigheder.

sudo reboot

shutdown

En server lukkes ned med kommandoen:

sudo shutdown [Optioner] tid [besked]

Eksempel

shutdown -h 0 Computeren lukkes ned nu
shutdown -h 10 Computeren lukkes ned om 10 minutter Computeren lukkes ned om 10 minutter med budskabet ”Computeren lukkes ned om 10 minutter”
shutdown -r 0 Serveren genstartes om 0 minutter

man-page: shutdown http://manpages.ubuntu.com/manpages/trusty/en/man8/shutdown.8.html

man-page: reboot http://manpages.ubuntu.com/manpages/trusty/man8/reboot.8.html

Pakke programmer

tar

Når man skal downloade Linuxprogrammer vil man ofte downloade dem som tar-filer. tar står for Tape Archive og er i sin oprindelige form blot en måde at lægger sekventielt efter hinanden, så de kan læses fra et bånd. Selvom man ikke anvender bånd til at lagre filer mere, er komprimerede tar-pakker standard for at pakke programmer på Linux. tar-filer bliver også kaldt tarballs.

Som standard pakker man filer ned i mapper. På den måde sikrer man sig også at filerne ligger i den samme mappestruktur, som det blev pakket ned i.

Man pakker filer ned på følgende måde:

tar *optioner* *denPakkedeFil* *mappenDerSkalPakkes*

For at pakke ud (her tar.gz) anvendes:

tar *optioner* *denPakkedeFil*

Man kan kende komprimeringsalgoritmen på endelse efter tar f.eks. tar.gz. Herunder er de mest anvendte algoritmer gennemgået efter graden de komprimerer, samt eksempler hvor mappen gif bliver pakket og udpakket igen.

Se indhold

For at se indholdet af tar filer anvendes optionerne -tvf

tj@tj-VirtualBox:~$ tar -tvf gif_backup.tar.gz
drwxr-xr-x tj/tj         0 2016-07-10 12:26 gif/
-rw-r----- tj/tj    805949 2016-07-10 12:26 gif/slow_clap_citizen_kane.gif
drwxr-xr-x tj/tj         0 2016-07-10 12:26 gif/tegnefilm/
-rw-r----- tj/tj    986614 2016-07-10 12:26 gif/tegnefilm/run_simpson_run.gif
drwxr-xr-x tj/tj         0 2016-07-10 12:26 gif/the bird/
-rw-r----- tj/tj   3080999 2016-07-10 12:26 gif/the bird/thebird02.gif
-rw-r----- tj/tj   1890379 2016-07-10 12:26 gif/the bird/thebird01.gif
-rw-r----- tj/tj    121990 2016-07-10 12:26 gif/the bird/thebird03.gif
-rw-r----- tj/tj   6313886 2016-07-10 12:26 gif/the bird/thebird04.gif
-rw-r----- tj/tj    954706 2016-07-10 12:26 gif/mordor.gif
-rw-r----- tj/tj    137685 2016-07-10 12:26 gif/lachifre.gif

Man kan også finde teksstrenge i tar-filerne ved hjælp af grep.

tj@tj-VirtualBox:~$ tar -tvf gif_backup.tar.gz | grep simpson
-rw-r----- tj/tj    986614 2016-07-10 12:26 gif/tegnefilm/run_simpson_run.gif

Udpak enkeltfiler

For pakke en enkelt fil ud sætter man blot filnavnet til sidst. Læg mærke til at man skal bruge den fulde sti.

tj@tj-VirtualBox:~$ tar -xvf gif_backup.tar.gz gif/tegnefilm/run_simpson_run.gif
gif/tegnefilm/run_simpson_run.gif

Hvis man vil udpakke flere filer sætter man blot hvert filnavn ind som en tekststreng:

tj@tj-VirtualBox:~$ tar -xvf gif_backup.tar.gz gif/tegnefilm/run_simpson_run.gif gif/mordor.gif
gif/tegnefilm/run_simpson_run.gif
gif/mordor.gif

Eller med wildcards *

tj@tj-VirtualBox:~$ tar -xvf gif_backup.tar.gz --wildcards *bird*
gif/the bird/
gif/the bird/thebird02.gif
gif/the bird/thebird01.gif
gif/the bird/thebird03.gif
gif/the bird/thebird04.gif

Generelt gælder følgende options:

Option Beskrivelse
c Lav (create) et arkiv
x Udpak (extract)
v Vis fremgangen når der arbejdes
f Arkivets filnavn
t Se indholdet af filen
j Opret en bzip2 pakket fil
z Opret en gzip pakket fil
wildcards Udvælg filer ved hjælp af *

Læs mere: http://www.tecmint.com/18-tar-command-examples-in-linux/

gzip

gzip er en simpel og effektiv komprimeringsalgoritme. Den har den bedste hastigheds/filstørelses ratio. Kan genkendes på at gz eller gzip indgår i den pakkede fils navn.

Pakning med gzip tar cvfz gif_backup.tar.gz gif
tj@tj-VirtualBox:~$ tar cvzf gif_backup.tar.gz gif
gif/
gif/slow_clap_citizen_kane.gif
gif/tegnefilm/
gif/tegnefilm/run_simpson_run.gif
gif/the bird/
gif/the bird/thebird02.gif
gif/the bird/thebird01.gif
gif/the bird/thebird03.gif
gif/the bird/thebird04.gif
gif/mordor.gif
gif/lachifre.gif
Udpakning af gzip tar xvf gif_backup.tar.gz
tj@tj-VirtualBox:~$ tar xvf gif_backup.tar.gz
gif/
gif/slow_clap_citizen_kane.gif
gif/tegnefilm/
gif/tegnefilm/run_simpson_run.gif
gif/the bird/
gif/the bird/thebird02.gif
gif/the bird/thebird01.gif
gif/the bird/thebird03.gif
gif/the bird/thebird04.gif
gif/mordor.gif
gif/lachifre.gif

bzip2

bzip2 er komprimerer hårdere end gzip - men også langsommere. Algoritmen kræver også mere CPU og RAM end gzip. Kan genkendes på at bz2 eller bzip2 indgår i den pakkede fils navn.

Pakning med bzip2 tar cvfj gif_backup.tar.bz gif
tj@tj-VirtualBox:~$ tar cvzf gif_backup.tar.gz gif
gif/
gif/slow_clap_citizen_kane.gif
gif/tegnefilm/
gif/tegnefilm/run_simpson_run.gif
gif/the bird/
gif/the bird/thebird02.gif
gif/the bird/thebird01.gif
gif/the bird/thebird03.gif
gif/the bird/thebird04.gif
gif/mordor.gif
gif/lachifre.gif
Udpakning af bzip2 tar xvf gif_backup.tar.bz
tj@tj-VirtualBox:~$ tar xvf gif_backup.tar.gz
gif/
gif/slow_clap_citizen_kane.gif
gif/tegnefilm/
gif/tegnefilm/run_simpson_run.gif
gif/the bird/
gif/the bird/thebird02.gif
gif/the bird/thebird01.gif
gif/the bird/thebird03.gif
gif/the bird/thebird04.gif
gif/mordor.gif
gif/lachifre.gif

lzma

lzma komprimerer hårdest af disse 3, men er også meget langsommere. Til gengæld dekomprimerer det rigtigt hurtigt. Fordelen ved at anvende lzma er, at man har en meget hård komprimering, og en rimelig hurtig udpakningstid. Formatet er især velegnet til backup af store mængder data. Kan genkendes på at lz eller lzma indgår i filnavnet.

Pakning med lzma tar cvf gif_backup.tar.lz --lzma gif

Læg mærke til at --lzma skal stå før mappen der skal pakkes

tj@tj-VirtualBox:~$ tar cvf gif_backup.tar.lz --lzma gif
gif/
gif/slow_clap_citizen_kane.gif
gif/tegnefilm/
gif/tegnefilm/run_simpson_run.gif
gif/the bird/
gif/the bird/thebird02.gif
gif/the bird/thebird01.gif
gif/the bird/thebird03.gif
gif/the bird/thebird04.gif
gif/mordor.gif
gif/lachifre.gif
Udpakning af lzma tar xvf gif_backup.tar.lz
tj@tj-VirtualBox:~$ tar xvf gif_backup.tar.lz
gif/
gif/slow_clap_citizen_kane.gif
gif/tegnefilm/
gif/tegnefilm/run_simpson_run.gif
gif/the bird/
gif/the bird/thebird02.gif
gif/the bird/thebird01.gif
gif/the bird/thebird03.gif
gif/the bird/thebird04.gif
gif/mordor.gif
gif/lachifre.gif

Herunder kan du se en sammenligning taget fra: http://tukaani.org/lzma/benchmarks.html. Testen er lavet på en mappe med i alt 203 Mb filer:

Algoritme Pakket af oprindelig Pakning Udpakning
gzip 79,2 MB 37,2% 24,5 s ⇒ 8,3 MB/s 3,2 s ⇒ 63 MB/s
bzip 72,2 MB 34% 2m 37s ⇒ 1,3 MB/s 38,2s ⇒ 0,4 MB/s
lzma 54,1 MB 26,1% 8m 24s ⇒ 0,4 MB/s 10,1s ⇒ 20 MB/s
Kort opsumeret

Hvis man skal konkluderer noget må det være, at forskellen mellem gzip pg bzip2 er minimal. Det man vinder ved at anvende bzip2 er at de pakkede filer fylder lidt mindre. lzma kan anvendes med fordel når det drejer sig om backup af store mængder af data, så vil det fylde mindre end ved gzip og stadig have en god udpakningshastighed. En ren win-win.