Elemente de bază pentru gestiunea fișierelor

Cheatsheet

Comandă Descriere
. directorul curent
.. directorul părinte
cd schimbă directorul curent
cp copiază un fișiere sau director dintr-o locație în alta
stat afișează statistici fișier
file determină formatul unui fișier
tree listează conținutul directoarelor într-un format arborescent
mkdir creează un director
ln creare de link-uri
ls listează conținutul unui director
ls -l listează informații despre intrări, printre care și tipul intrărilor
rmdir șterge un director gol
tar creează o arhivă de tip tar
dd realizează copierea la nivel de byte
gzip creează o arhivă comprimată gzip
bzip2 creează o arhivă comprimată bzip2
find caută fișiere ce corespund criteriilor specificate
mv mută/redenumește un fișiere/director
rm șterge un fișiere/director
touch schimbă timpul de creare/acces/modificare a unui fișier/director
cpio crează o arhivă de tip cpio
gunzip dezarhivează un fișier de tip gzip
xz arhivează și dezarhivează fișiere de tip xz sau lzma
lzma echivalent cu xz --format=lzma

Operații de bază cu fișiere

Listare/Creare/Ștergere fișiere

Listare

Filosofia UNIX ne spune că totul este un fișier, acest lucru însemnând de fapt că orice intrare pe hard-disk ne este expusă printr-o înșiruire de octeți oferită de sistemul de fișiere (putem interacționa cu ea).
Comanda ce afișează conținutul directorului curent este ls.
Dacă se dorește afișarea conținutului directorului curent + alte informații (tipul fișierelor, dimensiunea, drepturi, owner etc.) se poate utiliza argumentul -l al comenzii ls.

george@whatever:~/LPIC/files$ ls -l
total 1048580
-rw-rw-r-- 1 george george          0 mar  3 01:51 new_file
-rw-rw-r-- 1 george george 1073741824 mar  3 01:55 test_zero

Se poate observa însă că spațiul este afișat ca număr de bytes. Pentru afișarea dimensiunii într-o altă formă, mai ușor de citit, se pot utiliza argumentele -lh.

george@whatever:~/LPIC/files$ ls -lh
total 1,1G
-rw-rw-r-- 1 george george    0 mar  3 01:51 new_file
-rw-rw-r-- 1 george george 1,0G mar  3 01:55 test_zero

Dacă se dorește verificarea informațiilor (într-un mod mai amănunțit despre fișiere) se poate utiliza comanda stat.
Acesta oferă utilizatorului diferite informații. Unele dintre acestea sunt:

Pentru căutarea fișierelor pe disc se poate utiliza comanda find.
În exemplul următor se caută toate fișierele care încep cu f.

find locație -name nume_fișier
 
george@whatever:~/LPIC/find$ tree
.
├── file10
└── folder
    ├── director
    │   ├── file0000
    │   ├── nimic
    │   └── stuff
    ├── file3
    ├── file4
    └── file5
 
2 directories, 7 file
george@whatever:~/LPIC/find$ find . -name "f*"
./file10
./folder
./folder/file3
./folder/file5
./folder/file4
./folder/director/file0000

Utilitarul tree este folosit precum ls, pentru listarea conținutului unui director, însă având o afișare mai frumușică.

Creare

Pentru a crea fișiere obișnuite (regular files) se poate folosi comanda touch urmată de numele fișierului (fișierul nu va conține nimic):

Dacă veți verifica pagina de manual a comenzii touch (man touch) se poate observa că ea modifică timestampul fișierului, setându-l la momentul în care a fost dată comanda comandă. Acest lucru se întâmplă în cazul în care fișierul există, iar în caz contrar se va crea un nou fișier (nu conține date).

Pentru a crea directoare se utilizează comanda mkdir urmată de numele directorului.

Sa presupunem că dorim să creăm directoarele ana, are, mere, stricate.
Cum am face chestia asta?


Pentru a crea link-uri se utilizează comanda ln:

Mutare

Pentru mutarea fișierelor (atât fișiere simple cât și directoare/link-uri) se utilizează comanda mv.
De asemenea pentru redenumirea fișierelor se utilizează tot comanda mv.

mv name_file nume_nou_fișier (mv nume_fișier directoare/nume_nou_fișier - dacă doriți să îl mutați în alt director)
george@whatever:~/LPIC/mutare$ ls
file1
george@whatever:~/LPIC/move$ mv file1 file2
george@whatever:~/LPIC/move$ ls
file2

Atenție! Comanda mv poate suprascrie fișierelele existente dacă se mută/redenumește un fișier într-o locație unde există deja un fișier cu același nume. Dacă doriți o avertizare, în caz ca există deja un fiser cu acea denumire puteți utiliza argumentul -i (se va afișa un mesaj de confirmare a suprascrierii).


Copiere

Pentru copiere fișierelor obișnuite și a link-urilor se utilizează comanda cp urmată de fișierul ce urmează să se copieze și locația unde acesta va fi copiat (dacă se dorește se poate și redenumi).

george@whatever:~/LPIC/copy$ ls
file
george@whatever:~/LPIC/copy$ cp file ../file_new
george@whatever:~/LPIC/copy$ ls
file
george@whatever:~/LPIC$ ls
file_new

Dacă dorim să mutăm un director trebuie să adăugam argumentul -r (recursive).

george@whatever:~/LPIC/create$ ls -lh
total 4,0K
drwxrwxr-x 2 george george 4,0K mar  3 15:45 test_directory
george@whatever:~/LPIC/create$ cp test_directory/ ..
cp: omitting directory ‘test_directory/’
george@whatever:~/LPIC/create$ cp -r test_directory/ ..
george@whatever:~/LPIC/create$ ls ..
create test_directory

Ștergere

Pentru ștergerea fișierelor simple și a link-urilor se utilizeaza comanda rm urmată de numele fișierului.

george@whatever:~/LPIC/delete$ ls
file
george@whatever:~/LPIC/delete$ rm file
george@whatever:~/LPIC/delete$ ls

Se poate utiliza și comanda unlink atât pe fișiere simple, cât și pe link-uri.

Pentru ștergerea directoarelor se utilizează comanda rmdir urmată de numele folderului.

george@whatever:~/LPIC/delete$ ls
folder
george@whatever:~/LPIC/delete$ rmdir folder
george@whatever:~/LPIC/delete$ ls

Comanda rmdir nu va funcționa dacă directorul are fișiere în el (chiar și ascunse). Pentru aceasta se poate utiliza tot comanda rm la care se adaugă argumentul -r.

File Globbing

O parte importantă a lucrului cu fișiere o reprezintă file globbing-ul.

Expresie Descriere
* se expandează la orice și oricâte caractere
? se expandează la orice caracter
[] se expandează la orice caracter din interiorul parantezelor
{} se expandează la un șir de caractere din interiorul acoladelor

Spre exemplu, pentru a lista toate fișierele care încep cu numele lp și se termină cu orice/oricâte caractere:

george@whatever:~/LPIC/globbing$ ls
file1  file2  file3  file4  file5  lpic101-1  lpic101-10  lpic101-2  lpic101-3  lpic101-4  lpic101-5  lpic101-6  lpic101-7  lpic101-8  lpic101-9
george@whatever:~/LPIC/globbing$ ls lp*
lpic101-1  lpic101-10  lpic101-2  lpic101-3  lpic101-4  lpic101-5  lpic101-6  lpic101-7  lpic101-8  lpic101-9

Pentru a afișa toate fișierele care se termină cu o cifra de la 4 la 9:

george@whatever:~/LPIC/globbing$ ls *[4-9]
file4  file5  lpic101-4  lpic101-5  lpic101-6  lpic101-7  lpic101-8  lpic101-9

Iar pentru a afișa toate fișierele care nu se termină cu o cifra de la 4 la 9:

george@whatever:~/LPIC/globbing$ ls *[!4-9]
file4  file5  lpic101-4  lpic101-5  lpic101-6  lpic101-7  lpic101-8  lpic101-9

Atenție! Globbing != Regex (expresii regulate), deși acestea seamănă prin setul de simboluri utilizat. Globbing-ul este folosit pentru nume de fișiere, în timp ce expresiile regulate sunt folosite pentru a găsi pattern-uri în fișierele text. În Regex caracterul * înseamnă că numărul de apariții al caracterului precedent poate fi oricât (chiar și 0), iar în Globbing semnifică orice caracter de oricâte ori (globbing * = .* regex; . - semnifică în regex orice caracter). More info in man 7 glob and și man 7 regex (Ce semnificație avea cifra 7? De ce nu merge să dăm simplu man glob?)

O chestie mișto de care dispune shell-ul se numește brace expansion utilizată pentru generarea de șiruri.
Să presupunem că trebuie să creăm 10 fișiere cu denumirile file0, file2, …, file9. Cum putem face asta? (lăsând la o parte dând comanda touch cu 10 nume de fișiere). Ceea ce se poate observa destul de ușor este că fișierele au același prefix ca nume, deci trebuie să creeam fișiere ca încep cu file și se termină cu o cifră.
Putem utiliza atât comanda seq care afișează o serie de numere:

george@whatever:~/LPIC/brace_expansion$ ls
george@whatever:~/LPIC/brace_expansion$ touch $(seq -f "file%.0f" 0 9)
george@whatever:~/LPIC/brace_expansion$ ls
file0  file1  file2  file3  file4  file5  file6  file7  file8  file9

Fie putem utiliza brace expansion:

george@whatever:~/LPIC/brace_expansion$ ls
george@whatever:~/LPIC/brace_expansion$ touch file{0..9}
george@whatever:~/LPIC/brace_expansion$ ls
file0  file1  file2  file3  file4  file5  file6  file7  file8  file9

Utilizând acest mecanism putem exprima și toate combinările posibile între diferite șiruri, spre exemplu toate combinațiile între litere de la a la h și cifrele de la 3 la 7:

george@whatever:~/LPIC/brace_expansion$ echo {a..h}{3..7}
a3 a4 a5 a6 a7 b3 b4 b5 b6 b7 c3 c4 c5 c6 c7 d3 d4 d5 d6 d7 e3 e4 e5 e6 e7 f3 f4 f5 f6 f7 g3 g4 g5 g6 g7 h3 h4 h5 h6 h7
Convertire și copiere de fișiere

Pentru acest lucru vom folosi utilitarul dd.
dd poate fi utilizat specificând ca intrare/ieșire atât fișiere simple cât și:

  • /dev/null - utilizat la aruncarea outputul nedorit
  • /dev/zero - utilizat la suprascierea cu valoarea 0 a zonelor de memorie sau pentru a încărca un fișier doar cu valori de 0
  • /dev/urandom - la fel ca /dev/zero utilizat pentru suprascrierea discului sau pentru a crea fișiere cu date aleatoare (valori pseudorandom)</note>
  • /dev/full - utilizat pentru a simula un hard-disk care nu mai deține spațiu pentru alte fișiere

	george@whatever:~/LPIC/dd$ cat test_null 
	/dev/null este mișto dacă vrei sa arunci erorile
	george@whatever:~/LPIC/dd$ cat test_null > /dev/null 
	george@whatever:~/LPIC/dd$  
 
	george@whatever:~/LPIC/dd$ dd if=/dev/zero of=test_zero bs=1G count=1
	1+0 records in
	1+0 records out
	1073741824 bytes (1,1 GB) copied, 18,133 s, 59,2 MB/s
	george@whatever:~/LPIC/dd$ ls -lh test_zero 
	-rw-rw-r-- 1 george george 1,0G mar  3 01:09 test_zero
 

  • /dev/random și /dev/urandom pot fi ușor confundate. /dev/urandom este utilizat pentru a produce valori aleatoare într-un mod continuu (dacă nu este suficient randomness creat, se va folosi un număr pseudorandom ca seed pentru a crea restul de date), pe când /dev/random furnizează un random mai bun deoarece acesta se blochează până când este colectat suficient randomness pentru a continua generarea numerelor.Puteți încerca acest lucru utilizând comenzile: cat /dev/urandom (să aveți pregătit CTRL+C și cat /dev/random (observați că se blochează, însă dacă așteptați puțin se va observa în terminal cum se vor genera noi valori.

Pentru convertirea fișierelor se utilizeaza argumentul conv urmat de un simbol predefinit (see man dd).
Exemplu de utilizare, se convertesc caracterele lowercase în uppercase:

george@whatever:~/LPIC/dd$ cat test_conv 
ala bala PortocALA
george@whatever:~/LPIC/dd$ dd if=test_conv of=test_conv_upp conv=ucase
0+1 records in
0+1 records out
19 bytes (19 B) copied, 0,000416704 s, 45,6 kB/s
george@whatever:~/LPIC/dd$ cat test_conv_upp 
ALA BALA PORTOCALA
Exerciții
  1. Creați trei fișiere, denumite unu, doi și trei în directorul propriu (home) și validați că acestea există si au dimensiunea corectă folosind comanda ls.
    • Fișierul unu nu va conține nimic.
    • Fișierul doi va conține 1MB de date (zero-uri).
    • Fișierul trei va conține 100MB de date (random).
  2. Așteptați un minut după crearea fișierelor de mai sus. Folosiți comanda touch pe fișierul unu. Folosiți, din nou, comanda ls -l. Ce observați?
  3. Creați în directorul propriu două directoare denumite dir1 și dir2.
  4. Mutați fișierul unu în directorul dir1. Mutați fișierele doi și trei în directorul dir2 dintr-o singură comandă. Mutați directorul dir1 în directorul dir2.
  5. Afișati conținutul celor 2 directoare recursiv (folosind ls) și utilizând comanda tree.
  6. Creați un nou fișier cu numele patru și încercați să îl mutați în directorul dir1 redenumindu-l unu. Mutarea trebuie să se facă doar dacă utilizatorul confirmă suprascrierea fișierului unu (Hint: man mv, overwrite).
  7. Schimbați directorul curent în dir2 și copiați conținutul acestuia un nivel mai sus, în directorul propriu. Copierea directoarelor trebuie făcută recursiv, cu parametrul adecvat. Folosiți wildcard-ul * (star).
  8. Ștergeți directorul dir1 folosind comanda rm. Apoi ștergeți directorul dir2 folosind rmdir.
  9. Creați un folder cu numele mod și modificați-l astfel încât să aiba drepturile 777
    • Utilizați chmod
    • Utilizați doar comanda mkdir (Hint: man mkdir)
    • După ce ați terminat validați drepturile.
  10. Creați 10 fișiere cu denumirile: file0, file2…file9.
    • touch de 10 ori - nah, too much work
    • Utilizând brace expansion - folosit pentru generarea de șiruri - (Eg: echo {1..10})
    • Afișați doar fișierele care încep cu file.
  11. Creați 3 fișiere care încep cu “Ana are ” și se termină cu {mere, pere, alune}.
  12. Afișați toate combinările posibile între literele: c, d, e, f și cifrele: 1, 2, 3, 4.
  13. Afișați toate literele alfabetului englez.
  14. Creați în directorul /home/student următoarea structură de directoare /home/student/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is. (Hint: opțiunea parent a comenzii mkdir)
  15. Intrați în directorul /home/student/the/unix/file/system/sure/it/corrupts/your/data/but/look/how/fast/it/is și creați trei fișiere, denumite ext2, ext3 și ext4.
  16. Modificați data când fișierul ext4 a fost accesat și modificat la 2010.05.23 15:25 (Hint: touch)
  17. Verificați faptul că modificările au fost aplicate. Care este inode-ul fișierului ext4 ? (Hint: stat)
    • Utilizați comanda stat pentru a afișa doar numele și inode-ul fișierului.
  18. Creați link-ul simbolic sym-ext4 către fișierul ext4. (Hint: man ln, căutați “symbolic”)
    • De ce nu e bine să utilizezi căi relative la crearea unui link simbolic?
  19. Scrieți textul “current file system” în ext4 și afișați conținutul lui sym-ext4.
    1. Ștergeți fișireul ext4 și afișați conținutul lui sym-ext4.
    2. Aflați tipul fișierului sym-ext4 (Hint: file)
  20. Creați link-ul hard hard-ext3 către fișierul ext3.
    1. Aflați inode-urile pentru hard-ext3 și ext3. (Hint: stat)
    2. Scrieți textul “old file system” în ext3 și afișați conținutul lui hard-ext3.
    3. Aflati tipul fișierului hard-ext3 (Hint: file)
    4. Ștergeți fișierul ext3 și afișați conținutul lui hard-ext3 - de ce merge?
  1. Creați un fișier de 10 MB denumit random_file (cu date random).
    1. Copiați primii 3 MB din fișierul random_file în fișierul random_1.
    2. Copiați ultimii 7 MB din fișierul random_file în fișierul random_2. Hint: skip
    3. Recreați fișierul de 10 MB folosind doar fișierul random_1 și random_2 (Hint: seek or append, check the man)
    4. Validați rezolvarea cu ajutorul comenzii diff.
  2. Utilizați comanda find pentru a găsi toate fișierele din /etc care se termină în .allow sau .deny Hint: {{{man find, look after operators}}}.
  3. Comanda find poate executa anumite comenzi pe fișierele găsite utilizând următoarea sintaxa:
    find location -name pattern -exec cp {} . \;
    {} - se va expanda la denumirea fișierului găsit (cu tot cu calea dată spre căutare)
    • Utilizând comanda find copiați toate fișierele găsite în /etc (nu trebuie verificate alte directoare din /etc) cu extensia .conf în directorul curent cu denumirea nume_initial-copie (Hint: maxdepth).

Arhivare și compresie de fișiere

Arhivare

Arhivarea reprezintă comprimarea mai multor fișiere într-unul singur pentru o mai ușoara distribuție.
Pentru crearea arhivelor se utilizează utilitarul tar sau cpio (copy in, copy out).
Mai există un utilitar, archiver (comanda ar) care poate fi folosit pentru arhivarea fișierelor, însă în prezent este utilizat în mare parte pentru crearea bibliotecilor statice.

george@whatever:~/LPIC/archive$ tar -cf archive.tar file*
george@whatever:~/LPIC/archive$ ls arhiva.tar 
arhiva.tar
george@whatever:~/LPIC/archive$ tar -xf archive.tar
george@whatever:~/LPIC/archive$ ls file*
file0  file1  file2
 
 
george@whatever:~/LPIC/archive$ ls file* | cpio -ov > archive.cpio
george@whatever:~/LPIC/archive$ ls archive.cpio
arhiva.tar
george@whatever:~/LPIC/archive$ cpio -idv < archive.cpio
george@whatever:~/LPIC/archive$ ls file*
file0  file1  file2
 
 
george@whatever:~/LPIC/archive$ ar cr libtest.a test1.o test2.o 
george@whatever:~/LPIC/archive$ ls libtest.a
libtest
george@whatever:~/LPIC/archive$ ar x libtest.a
george@whatever:~/LPIC/archive$ ls test*
test1.o test2.o

Verificați ce semnifică parametrii la fiecare comandă.

Se pot adăuga fișiere noi la arhivele deja create sau fișiere ce deja există în arhivă, dar au fost updatate.
Pentru adăugarea unui nou fișier într-o arhivă tar se poate utiliza argumentul -r (--append) (fișierul este concatenate la sfârșitul fișierelor deja existente). De asemenea dacă se dorește adăugarea unui fișier doar în cazul în care cel deja existent în arhiva este outdated se poate folosi parametrul -u (--update).

Dacă tar nu primește parametrul -f atunci conținutul arhivei se va afișa la stdout.

george@whatever:~/LPIC/archive$ tar -c file[0-9]
file10000664000175000017500000000000012666166712011310 0ustar  georgegeorgefile20000664000175000017500000000000012666166712011311 0ustar  georgegeorgefile30000664000175000017500000000000012666166712011312 0ustar  georgegeorgefile40000664000175000017500000000000012666166712011313 0ustar  georgegeorgefile50000664000175000017500000000000012666166712011314 0ustar  georgegeorgefile60000664000175000017500000000000012666166712011315 0ustar  georgegeorgefile70000664000175000017500000000000012666166712011316 0ustar  georgegeorgefile80000664000175000017500000000000012666166712011317 0ustar  georgegeorgefile90000664000175000017500000000000012666166712011320 0ustar  georgegeorgegeorge@whatever:~/LPIC/archive$ 

Comprimarea

Comprimarea înseamnă reducerea memoriei utilizate pentru a reține date pe disc, cât și posibilitatea recuperării datelor originale.
Utilitarul tar poate fi folosit și pentru compresie având câteva argumente ce ne vin în ajutor.

Pentru a comprima o arhivă simplă tar se pot utiliza și utilitarele xz și lzma având ca argument numele arhivei:

george@whatever:~/LPIC/archive$ xz   archive.tar    # rezultă archive.tar.xz
george@whatever:~/LPIC/archive$ lzma archive.tar    # rezultă archive.tar.lzma

Iar pentru decomprimare se utilizează unxz și unlzma:

george@whatever:~/LPIC/archive$ unxz   archive.tar.xz    # rezultă archive.tar
george@whatever:~/LPIC/archive$ unlzma archive.tar.lzma    # rezultă archive.tar

La fel cum sunt utilitarele xz și lzma există și gzip și bzip2, însă acestea primesc direct fișierul ce se dorește comprimat:

george@whatever:~/LPIC/archive$ gzip -c file1 > file1.gz
george@whatever:~/LPIC/archive$ file file1.gz 
file1.gz: gzip compressed data, was "file1", last modified: Fri Mar  4 04:07:06 2016, from Unix
 
george@whatever:~/LPIC/archive$ bzip2 -c file1 > file1.bz2
george@whatever:~/LPIC/archive$ file file1.bz2 
file1.bz2: bzip2 compressed data, block size = 900k

Parametrul -c poate fi omis și oferite mai multe fișiere spre a fi comprimate, iar la final vom avea fișierele comprimate cu denumirea inițiala la care se adaugă prefixul specific comprimării efectuate (se șterg fișierele inițiale).

george@whatever:~/LPIC/archive$ gzip file1 file2 file3
george@whatever:~/LPIC/archive$ ls
file1.gz  file2.gz  file3.gz
 
george@whatever:~/LPIC/archive$ bzip2 file1 file2 file3
george@whatever:~/LPIC/archive$ ls
file1.bz2  file2.bz2  file3.bz2
Exerciții
  1. Arhivați directorul /home/student/the/unix (creat într-un exercițiu anterior) cu toate fișierele și subdirectoarele conținute de acesta într-o arhivă unix.tar. Atenție: doar arhivați directorul, nu îl și comprimați.
  2. Arhivați din nou directorul /home/student/the/unix cu toate fișierele și subdirectoarele conținute de acesta într-o arhivă unix.tar.gz. De data aceasta comprimați arhiva. Observați diferența de mărime față de arhiva anterioară.
  3. Afișați conținutul arhivei unix.tar fără a o dezarhiva. (Hint: man tar, căutați “list”. Nu uitați să specificați numele arhivei prin -f)
  4. Realizați o arhivă cpio cu același conținut. (Hint: folosiți find pentru a-i specifica utilitarului fișierele de arhivat).
  5. Folosiți apt-cache show atool pentru a afișa informații despre pachetul atool. Instalați pachetul și realizați, respectiv, arhive .tar.gz, .tar.bz2, .zip, .cpio, .Z.
  6. Creați fisierul /home/student/big-text-file.txt care să conțină cel puțin 5 MB text (date aleator generate).
  7. Arhivați fisierul big-text-file.txt în format gzip, bzip2 și zip. Care sunt diferențele de mărime ale arhivelor?
  8. Creați, respectiv, arhivele conf.zip, conf.tar.gz, conf.cpio care conțin fișierele cu extensia .conf din ierarhia /etc/.
  9. Creați o ierarhie de fișiere și directoare în /home/student/usr care să conțină toate directoarele și toate fișierele din /usr care au inclus în numele lor șirul 'stdio' folosind comanda cpio. Ierarhia trebuie păstrată. (Hint: cpio pass through)
  10. Comprimați directorul /home/student/the/unix cu toate fișierele și subdirectoarele conținute de acesta în două arhive unix.tar.xz și unix.tar.lzma folosind direct utilitarul tar. Comparați dimensiunea arhivelor rezultate cu dimensiunea arhivei de la exercițiul 1.
  11. Creați un nou fișier file1 de 5MB conținând date random (utilizați /dev/urandom) și un folder numit tar-power. Arhivați acest fișier (fără comprimare) astfel încât arhiva să se găsească în folderul tar-power (Hint: man tar, change directory).
  12. Creați un nou fișier file2 de 7MB conținând zero-uri și adăugați-l în arhivă (nu creați arhiva de la 0).
  13. Creați o a doua arhiva care să conțină ambele fișiere file1 și file2.
  14. Suprascrieți fișierul file1 astfel încât acesta să conțină alte date (dimensiunea sa fie tot 5MB). Se poate verifica dacă fișierul dintr-o arhivă este diferit de cel nearhivat utilizand parametrul -d.
  15. Adăugați fișierul file1 în ambele arhive însă utilizând diferite moduri:
    • Utilizând append
    • Utilizând update
    • Rulați comanda diff pe cele 2 arhive. Ce observati?
    • Arhivele sunt identice din cauză ca update nu suprascrie fișierul în arhiva, ci doar îl adaugă la sfârșit - se poate verifica ușor listând conținutul arhivei.
    • Concatenați cele 2 arhive păstrând conținutul într-una dintre arhive (Hint: man tar, concatenate).
      • Atentie! Cele 2 arhive ar trebui să aibă același format deoarece concatenarea nu va verifica compatibilitatea între ele.
    • Dacă se dorește păstrarea fișierelor din arhiva, în cazul în care se dorește să se facă update la arhivă (să se adauge diferite fișiere), se poate utiliza parametrul -k.
  16. Creați un folder extract unde veți dezarhiva doar fișierul file2 din arhiva.
  17. Extrageți din arhivă fișierul file1 inițial.
    • Nu se va putea realiza adăugând doar numele deoarece se vor dezarhiva ambele versiuni ale fișierului, iar cea mai veche va fi suprascrisă.
    • Utilizați --occurrence=nr pentru a specifica care apariție să fie dezarhivată.
  18. Creați un link simbolic spre cele 2 fișiere file1 și file2 și arhivați cele 2 link-uri într-o nouă arhivă, astfel încât în arhivă rezultată să se găsescă fișierele (Hint: dereference})