03. Procese și redirectări
În al doilea laborator ați învățat să vă orientați în arborele sistemului de fișiere și să lucrați cu fișiere și
directoare. În acest laborator învățați să redirectați ce citește și ce scrie o comandă: salvați rezultatul unei
comenzi într-un fișier, păstrați erorile separat și îi dați unei comenzi un fișier în locul tastaturii. Apoi strângeți
mai multe fișiere într-o arhivă și le micșorați comprimându-le, cu tar, gzip, bzip2, xz și zip. La
final inspectați procesele, adică programele care rulează: prin fișierele pe care kernelul le creează pentru ele în
/proc, apoi cu top, htop și btop.
Cea mai importantă idee a laboratorului este că o comandă citește de la intrarea standard și scrie la ieșirea standard fără să știe ce se află în spatele lor: tastatura, ecranul, un fișier sau o altă comandă. Decide shell-ul, iar printr-o redirectare îi spuneți ce să lege acolo.
Obiective
- Să înțelegeți ce sunt intrarea standard, ieșirea standard și ieșirea de eroare standard ale unei comenzi
- Să redirectați ieșirea, erorile și intrarea unei comenzi cu
>,>>,2>,2>>,&>și< - Să legați comenzile între ele prin pipe (
|), să numărați liniile repetate cusortșiuniqși să folosiți fișierele speciale/dev/null,/dev/zeroși/dev/urandom - Să comprimați și să decomprimați fișiere cu
gzip,bzip2șixz - Să creați, să listați și să extrageți arhive cu
tar, necomprimate sau comprimate (.tar.gz,.tar.bz2,.tar.xz), și cuzip - Să aflați tipul unei arhive cu
file - Să listați procesele cu
psși să le aflați PID-ul și PPID-ul - Să inspectați un proces prin directorul lui din
/proc: starea, comanda, directorul curent și fișierele deschise - Să urmăriți procesele în timp real cu
top,htopșibtop
Resurse
- Razvan Deaconescu, Razvan Rughinis, Mihai Carabas, Alexandru Radovici, Utilizarea Sistemelor de
Operare, Printech 2021
- Capitolul 2 - Utilizarea sistemului de fișiere, secțiunea 2.4
- Capitolul 4 - Procese, secțiunile 4.2, 4.4, 4.7 și 4.8
- Brian Ward, How LINUX Works, 3rd Edition, No Starch Press, 2021
- Capitolul 2 - Basic Commands and Directory Hierarchy, secțiunile 2.14, 2.16 și 2.18
- Capitolul 8 - A Closer Look at Processes and Resource Utilization, secțiunile 8.1 și 8.2
- htop și btop
- Slide-urile cursului: 03. Procese
- Paginile de manual:
man sort,man uniq,man tar,man gzip,man bzip2,man xz,man zip,man unzip,man ps,man proc,man top,man htop,man hier(directoarele sistemului) șiman bash(căutațiREDIRECTION)
Intrarea, ieșirea și ieșirea de eroare standard
Fiecare comandă care rulează are o listă cu fișierele pe care le ține deschise, numită tabela de descriptori de fișier (File Descriptor Table). Indexul din această tabelă este descriptorul de fișier (file descriptor), iar primii trei descriptori există întotdeauna:
| Descriptor de fișier | Nume | Comanda îl folosește ca să | Redirectare | Implicit, într-un terminal |
|---|---|---|---|---|
0 | stdin, intrarea standard | își citească intrarea | < | vine de la tastatură |
1 | stdout, ieșirea standard | își scrie rezultatele | > | merge pe ecran |
2 | stderr, ieșirea de eroare standard | își scrie mesajele de eroare | 2> | merge pe ecran |
O comandă își citește intrarea din 0, își scrie rezultatele în 1 și mesajele de eroare în 2, fără să știe ce se
află în spatele lor. Înainte să pornească comanda, shell-ul poate lega oricare dintre ei la un fișier: lucrul
acesta se numește redirectare.
Redirectări
| Redirectare | Ce face |
|---|---|
command > file | Scrie ieșirea (1) în file. Fișierul este mai întâi golit sau, dacă nu există, creat |
command >> file | Adaugă ieșirea la sfârșitul lui file |
command 2> file | Scrie erorile (2) în file |
command 2>> file | Adaugă erorile la sfârșitul lui file |
command > out 2> err | Ieșirea în out, erorile în err |
command &> file | Atât ieșirea, cât și erorile în file |
command > file 2>&1 | Același lucru, scris în varianta mai veche: „2 merge unde merge 1” |
command < file | Citește intrarea (0) din file, în locul tastaturii |
> golește fișierul înainte să pornească comanda, chiar dacă apoi comanda eșuează. ls > notes.txt șterge tot ce
era în notes.txt. Folosiți >> când vreți să păstrați conținutul vechi.
Ieșirea: > și >>
[student@fedora lab03]$ ls Music > list.txt
[student@fedora lab03]$ cat list.txt
jazz.mp3
pop.mp3
rock.mp3
[student@fedora lab03]$ echo "--- end ---" >> list.txt
[student@fedora lab03]$ cat list.txt
jazz.mp3
pop.mp3
rock.mp3
--- end ---
[student@fedora lab03]$ echo "new" > list.txt
[student@fedora lab03]$ cat list.txt
new
ls Music > list.txtnu a afișat nimic pe ecran: rezultatul a ajuns înlist.txt, care s-a creat atunci.>>a adăugat o linie la sfârșitul fișierului.- Ultimul
>a golit fișierul și a scris în el doarnew.
Erorile: 2> și 2>>
Mesajele de eroare se scriu în 2, nu în 1, așa că un > singur nu le redirectează:
[student@fedora lab03]$ ls Music /nope > list.txt
ls: cannot access '/nope': No such file or directory
[student@fedora lab03]$ ls Music /nope > list.txt 2> errors.txt
[student@fedora lab03]$ cat errors.txt
ls: cannot access '/nope': No such file or directory
[student@fedora lab03]$ ls /nada 2>> errors.txt
[student@fedora lab03]$ cat errors.txt
ls: cannot access '/nope': No such file or directory
ls: cannot access '/nada': No such file or directory
[student@fedora lab03]$ ls Music /nope &> all.txt
[student@fedora lab03]$ cat all.txt
ls: cannot access '/nope': No such file or directory
Music:
jazz.mp3
pop.mp3
rock.mp3
- Cu
> list.txt, lista a ajuns în fișier, dar eroarea a apărut tot pe ecran. - Cu
2> errors.txt, eroarea a ajuns în propriul ei fișier, iar2>>a adăugat la sfârșitul lui o a doua eroare. - Cu
&>, atât lista, cât și eroarea au ajuns în același fișier.
Intrarea: <
< îi dă unei comenzi un fișier în locul tastaturii. Comanda își citește intrarea din 0, ca de obicei, și nu
știe că de fapt citește dintr-un fișier:
[student@fedora lab03]$ sort < fruits.txt
apple
apple
apple
banana
banana
cherry
kiwi
[student@fedora lab03]$ wc -l fruits.txt
7 fruits.txt
[student@fedora lab03]$ wc -l < fruits.txt
7
sorta citit liniile dinfruits.txtși le-a afișat în ordine alfabetică.wc -l fruits.txta numărat liniile unui fișier pe care l-a deschis singur, deci îi știe numele și îl afișează.- Cu
<, shell-ul a deschis fișierul și i l-a dat luiwcca intrare:wcnu știe niciun nume, așa că afișează doar numărul.
Rulați sort fără niciun parametru: citește de la tastatură. Tastați câteva cuvinte, câte unul pe linie, apoi apăsați
Ctrl+D (sfârșitul intrării): sort le afișează în ordine. La fel, cat > notes.txt salvează
în notes.txt tot ce tastați, până când apăsați Ctrl+D.
Pipe-uri: |
Un pipe leagă ieșirea (1) unei comenzi de intrarea (0) comenzii următoare, fără niciun fișier între
ele:
[student@fedora lab03]$ ls /usr/bin | wc -l
1843
[student@fedora lab03]$ ls -l /usr/bin | less
ls /usr/bin | wc -la numărat programele din/usr/bin:lsa scris numele, câte unul pe linie, iarwc -la numărat liniile.ls -l /usr/bin | lessa afișat lista lungă câte un ecran pe rând, în loc să o lase să treacă în viteză pe lângă voi.
| Comandă | Ce face cu intrarea |
|---|---|
sort | Sortează liniile în ordine alfabetică |
uniq | Elimină liniile identice cu linia de imediat deasupra lor |
wc -l | Numără liniile |
head -n <N> | Păstrează primele N linii |
head -c <N> | Păstrează primii N octeți |
tail -n <N> | Păstrează ultimele N linii |
grep <text> | Păstrează liniile care conțin text |
less | O afișează câte un ecran pe rând, ca man (ieșiți cu q) |
Căutarea unui text: grep
grep afișează doar liniile care conțin un anumit text. Citește fișierele primite ca parametri sau, dacă nu primește
niciunul, intrarea standard, așa că merge și la capătul unui pipe:
[student@fedora lab03]$ grep apple fruits.txt
apple
apple
apple
[student@fedora lab03]$ grep -c apple fruits.txt
3
[student@fedora lab03]$ grep -i APPLE fruits.txt
apple
apple
apple
[student@fedora lab03]$ grep student /etc/group
wheel:x:10:student
student:x:1000:
[student@fedora lab03]$ ps | grep bash
2817 pts/0 00:00:00 bash
grep apple fruits.txta afișat cele trei linii dinfruits.txtcare conținapple;-cdoar le-a numărat.-inu ține cont de diferența dintre literele mari și cele mici.grep student /etc/groupa afișat grupurile luistudent: grupul lui propriu șiwheel, grupul utilizatorilor care au voie să foloseascăsudo.ps | grep basha păstrat din lista luipsdoar linia luibash.
| Opțiune | Ce face |
|---|---|
-i | Nu ține cont de majuscule și minuscule |
-c | Afișează doar câte linii conțin textul |
-v | Afișează liniile care nu conțin textul |
-n | Afișează numărul liniei în fața fiecărei linii găsite |
-r | Caută în toate fișierele unui director și ale subdirectoarelor lui |
Puneți textul între ghilimele când conține spații: grep 'model name' /proc/cpuinfo.
Linii repetate: uniq
uniq elimină o linie atunci când este identică cu linia de imediat deasupra ei. Compară doar linii vecine, de
aceea se folosește aproape întotdeauna după sort, care aduce liniile identice una lângă alta:
[student@fedora lab03]$ uniq fruits.txt
banana
apple
cherry
apple
kiwi
banana
apple
[student@fedora lab03]$ sort fruits.txt | uniq
apple
banana
cherry
kiwi
[student@fedora lab03]$ sort fruits.txt | uniq -c
3 apple
2 banana
1 cherry
1 kiwi
[student@fedora lab03]$ sort fruits.txt | uniq -c | sort -nr
3 apple
2 banana
1 kiwi
1 cherry
[student@fedora lab03]$ sort fruits.txt | uniq -d
apple
banana
uniq fruits.txtnu a schimbat nimic: înfruits.txt, nicio linie nu este identică cu cea de deasupra ei.- După
sort, cele trei liniiappleau ajuns una după alta, iaruniqa păstrat doar una dintre ele. -ca scris în fața fiecărei linii de câte ori apare.sort -nra sortat aceste linii după numărul din fața lor (-n), de la cel mai mare (-r): linia cea mai frecventă a ajuns prima.-da afișat doar liniile care apar de mai multe ori.
| Opțiune | Ce face |
|---|---|
uniq -c | Afișează în fața fiecărei linii de câte ori apare (de la count) |
uniq -d | Afișează doar liniile care apar de mai multe ori (de la duplicates) |
uniq -u | Afișează doar liniile care apar exact o dată (de la unique) |
uniq -i | Nu ține cont de majuscule și minuscule |
sort -n | Sortează după numărul de la începutul liniei, nu alfabetic (10 după 9, nu înainte) |
sort -r | Sortează în ordine inversă (de la reverse) |
sort -u | Sortează și elimină liniile repetate, la fel ca sort | uniq |
Fără sort, uniq elimină doar liniile repetate care sunt una lângă alta. După uniq fruits.txt rămân tot trei
linii apple.
Fișiere speciale
Kernelul creează în /dev câteva fișiere speciale. Ele nu sunt stocate pe disc: când o comandă le citește sau le
scrie, îi răspunde un driver din kernel.
| Fișier | La citire dă | La scriere | La ce folosește |
|---|---|---|---|
/dev/null | nimic: sfârșit de fișier imediat | totul se aruncă | aruncarea ieșirii de care nu aveți nevoie: find /etc -name passwd 2> /dev/null |
/dev/zero | octeți cu valoarea 0, fără sfârșit | totul se aruncă | crearea unui fișier de o anumită dimensiune: head -c 1M /dev/zero > zeros.bin |
/dev/urandom | octeți aleatori, fără sfârșit | este permisă, dar nu e nevoie | date aleatoare, chei și parole: head -c 16 /dev/urandom | xxd |
[student@fedora lab03]$ find /etc -name passwd 2> /dev/null
/etc/pam.d/passwd
/etc/passwd
[student@fedora lab03]$ head -c 8 /dev/zero | xxd
00000000: 0000 0000 0000 0000 ........
[student@fedora lab03]$ head -c 8 /dev/urandom | xxd
00000000: 9f3a 51c2 07e8 b4d1 .:Q.....
2> /dev/nulla aruncat mesajelePermission deniedale luifind.head -c 8a păstrat primii 8 octeți, iarxxdi-a afișat în hexazecimal: zerouri, apoi octeți aleatori (diferiți la fiecare rulare).
Arhive și compresie
O arhivă este un singur fișier care conține mai multe fișiere și directoare, împreună cu numele, datele și
permisiunile lor. Compresia micșorează un fișier, scriind aceeași informație cu mai puțini octeți. În Linux, cele
două operații sunt făcute de obicei de programe diferite: tar creează arhiva, iar gzip, bzip2 sau xz o
comprimă. zip le face pe amândouă deodată.
Compresia unui singur fișier: gzip, bzip2 și xz
Cele trei programe de compresie funcționează la fel: înlocuiesc fișierul cu unul comprimat, adăugând o extensie la sfârșitul numelui, și îl readuc la forma inițială când îl decomprimați.
| Comprimare | Decomprimare | Extensie | |
|---|---|---|---|
gzip <file> | gunzip <file>.gz sau gzip -d | .gz | cel mai rapid, comprimă cel mai puțin |
bzip2 <file> | bunzip2 <file>.bz2 sau bzip2 -d | .bz2 | mai lent, comprimă mai mult |
xz <file> | unxz <file>.xz sau xz -d | .xz | cel mai lent, de obicei comprimă cel mai mult |
| Opțiune | Înseamnă (la fel pentru toate trei) |
|---|---|
-k | păstrează fișierul original (keep) |
-c | scrie rezultatul la ieșirea standard, ca să-l folosiți cu > sau |: originalul rămâne |
-v | verbose: afișează cu cât s-a micșorat fișierul |
-1 ... -9 | de la cea mai rapidă compresie (-1) la cea mai bună (-9) |
[student@fedora lab03]$ gzip -k numbers.txt
[student@fedora lab03]$ bzip2 -k numbers.txt
[student@fedora lab03]$ xz -k numbers.txt
[student@fedora lab03]$ ls -l numbers.txt*
-rw-r--r--. 1 student student 108894 Oct 6 10:12 numbers.txt
-rw-r--r--. 1 student student 25147 Oct 6 10:12 numbers.txt.bz2
-rw-r--r--. 1 student student 45016 Oct 6 10:12 numbers.txt.gz
-rw-r--r--. 1 student student 4948 Oct 6 10:12 numbers.txt.xz
[student@fedora lab03]$ rm numbers.txt
[student@fedora lab03]$ unxz -k numbers.txt.xz
[student@fedora lab03]$ wc -l numbers.txt
20000 numbers.txt
- Cu
-k, fiecare program a păstratnumbers.txtși a creat o copie comprimată a lui. - Același fișier a ajuns la 45 KB cu
gzip, la 25 KB cubzip2și sub 5 KB cuxz. - După ce am șters
numbers.txt,unxz -kl-a refăcut dinnumbers.txt.xz, cu toate cele 20000 de linii.
Fără -k, gzip numbers.txt șterge numbers.txt și lasă doar numbers.txt.gz. Așa se comportă în mod normal
toate cele trei programe.
Cu -v, cele trei programe afișează cât de bine au comprimat, dar nu în același fel:
[student@fedora lab03]$ gzip -v -k numbers.txt
numbers.txt: 58.7% -- created numbers.txt.gz
[student@fedora lab03]$ bzip2 -v -k numbers.txt
numbers.txt: 4.330:1, 1.847 bits/byte, 76.91% saved, 108894 in, 25147 out.
[student@fedora lab03]$ xz -v -k numbers.txt
numbers.txt (1/1)
100 % 4,948 B / 106.3 KiB = 0.045
| Program | Afișează | O compresie mai bună înseamnă |
|---|---|---|
gzip -v | cât a economisit, ca procent: 58.7% | un procent mai mare |
bzip2 -v | cât a economisit (76.91% saved) și dimensiunile de dinainte (in) și de după (out) | un procent mai mare |
xz -v | noua dimensiune, vechea dimensiune și raportul dintre ele: 0.045 înseamnă că fișierul nou are 4,5% din cel vechi, deci s-a economisit 95,5% | un raport mai mic |
Valoarea 100 % afișată de xz nu este compresia: arată cât din fișier a citit până acum și se termină
întotdeauna la 100 %.
Un program de compresie lucrează pe un singur fișier. Nu poate strânge laolaltă un director sau mai multe fișiere:
pentru asta există tar.
Arhive: tar
tar (tape archive) strânge fișiere și directoare într-un singur fișier, numit de obicei
.tar. Opțiunile lui sunt litere scrise lipite una de alta, iar cele mai folosite sunt:
| Literă | Forma lungă | Înseamnă |
|---|---|---|
c | --create | creează o arhivă (create) |
t | --list | listează conținutul unei arhive (list) |
x | --extract | extrage o arhivă (extract) |
r | --append | adaugă fișiere la sfârșitul unei arhive (nu și la arhivele comprimate) |
v | --verbose | verbose: afișează numele fiecărui fișier |
f <archive> | --file <archive> | numele fișierului arhivă (file) |
-C <directory> | --directory <directory> | trece mai întâi în directory: extrage arhiva acolo sau ia fișierele de acolo |
Orice comandă tar are exact una dintre literele c, t, x și r, care spune ce să facă. Celelalte litere
schimbă felul în care o face. Literele se scriu lipite, fără - (tar cvf, stilul vechi, sau
tar -cvf). Puneți f ultima: cuvântul de imediat după litere este numele arhivei. -C se scrie separat, cu
propriul -.
| Comandă | Ce face |
|---|---|
tar cvf music.tar Music fruits.txt | Creează music.tar cu directorul Music, tot ce se află în el și fișierul fruits.txt |
tar tf music.tar | Listează conținutul lui music.tar |
tar tvf music.tar | Listează conținutul cu detalii: permisiuni, proprietar, dimensiune și dată |
tar xvf music.tar | Extrage music.tar în directorul curent |
tar xvf music.tar -C /tmp/extract | O extrage în /tmp/extract (directorul trebuie să existe) |
tar xvf music.tar Music/jazz.mp3 | Extrage un singur fișier, cu numele pe care îl are în arhivă |
tar rvf music.tar numbers.txt | Adaugă numbers.txt la sfârșitul arhivei |
tar x suprascrie fișierele care există deja, fără să întrebe. Când nu sunteți siguri ce conține arhiva,
extrageți-o într-un director gol, cu -C.
[student@fedora lab03]$ tar cvf music.tar Music fruits.txt
Music/
Music/jazz.mp3
Music/pop.mp3
Music/rock.mp3
fruits.txt
[student@fedora lab03]$ tar tf music.tar
Music/
Music/jazz.mp3
Music/pop.mp3
Music/rock.mp3
fruits.txt
[student@fedora lab03]$ mkdir /tmp/extract
[student@fedora lab03]$ tar xvf music.tar -C /tmp/extract
Music/
Music/jazz.mp3
Music/pop.mp3
Music/rock.mp3
fruits.txt
[student@fedora lab03]$ file music.tar
music.tar: POSIX tar archive (GNU)
tar cvfa creat arhiva și a afișat fiecare fișier pus în ea: directorulMusic, cu tot ce conține, șifruits.txt.tar tfa listat conținutul fără să extragă nimic.tar xvf ... -C /tmp/extracta recreat aceleași fișiere în/tmp/extract:/tmp/extract/Music/jazz.mp3și așa mai departe.files-a uitat în interiorul arhivei și a aflat că este o arhivătar.
Nu uitați numele arhivei după f. tar cvf Music încearcă să creeze o arhivă numită Music și se oprește cu
Cowardly refusing to create an empty archive. Mai rău, tar cvf fruits.txt Music suprascrie fruits.txt cu o
arhivă.
O arhivă .tar nu este comprimată. Are cam cât toate fișierele ei la un loc, plus puțin: pentru fiecare fișier și
director, tar adaugă 512 octeți cu numele, permisiunile, proprietarul și data, iar sfârșitul fiecărui fișier îl
completează până la un multiplu de 512 octeți.
Arhive comprimate: .tar.gz, .tar.bz2 și .tar.xz
tar poate și să comprime arhiva, dacă îi dați încă o literă. Rulează el gzip, bzip2 sau xz în locul vostru:
| Literă | Program de compresie | Extensie | Exemplu |
|---|---|---|---|
z | gzip | .tar.gz sau .tgz | tar czvf music.tar.gz Music |
j | bzip2 | .tar.bz2 sau .tbz2 | tar cjvf music.tar.bz2 Music |
J | xz | .tar.xz sau .txz | tar cJvf music.tar.xz Music |
Ca să listați sau să extrageți o arhivă comprimată, nu aveți nevoie de literă: tar își dă seama singur cum
este comprimată.
[student@fedora lab03]$ tar cf all.tar Music numbers.txt
[student@fedora lab03]$ tar czf all.tar.gz Music numbers.txt
[student@fedora lab03]$ tar cjf all.tar.bz2 Music numbers.txt
[student@fedora lab03]$ tar cJf all.tar.xz Music numbers.txt
[student@fedora lab03]$ ls -l all.*
-rw-r--r--. 1 student student 112640 Oct 6 10:20 all.tar
-rw-r--r--. 1 student student 25333 Oct 6 10:20 all.tar.bz2
-rw-r--r--. 1 student student 45234 Oct 6 10:20 all.tar.gz
-rw-r--r--. 1 student student 5692 Oct 6 10:20 all.tar.xz
[student@fedora lab03]$ file all.*
all.tar: POSIX tar archive (GNU)
all.tar.bz2: bzip2 compressed data, block size = 900k
all.tar.gz: gzip compressed data, from Unix, original size modulo 2^32 112640
all.tar.xz: XZ compressed data, checksum CRC64
[student@fedora lab03]$ tar tvf all.tar.xz
drwxr-xr-x student/student 0 2026-10-06 10:12 Music/
-rw-r--r-- student/student 0 2026-10-06 10:12 Music/jazz.mp3
-rw-r--r-- student/student 0 2026-10-06 10:12 Music/pop.mp3
-rw-r--r-- student/student 0 2026-10-06 10:12 Music/rock.mp3
-rw-r--r-- student/student 108894 2026-10-06 10:12 numbers.txt
- Cele patru arhive conțin aceleași fișiere. Arhiva
.tareste puțin mai mare decât fișierele în sine; cele comprimate sunt mult mai mici, iar cea cuxzeste cea mai mică. filea recunoscut fiecare tip după conținut, nu după extensie.tar tvfa listat arhiva.tar.xzfără să i se spună că este comprimată cuxz.
O arhivă comprimată este o arhivă .tar comprimată ca un singur fișier: all.tar.gz este exact ce obțineți cu
tar cf all.tar ... urmat de gzip all.tar. De aceea are două extensii.
Arhive zip: zip și unzip
zip arhivează și comprimă într-un singur pas, iar arhivele lui se deschid pe orice sistem de operare, inclusiv pe
Windows și macOS.
| Comandă | Ce face |
|---|---|
zip music.zip Music/* | Creează music.zip cu fișierele din Music |
zip -r music.zip Music fruits.txt | Creează music.zip cu directorul Music, tot ce se află în el și fruits.txt |
zip -u music.zip numbers.txt | Adaugă numbers.txt în arhivă sau îl actualizează dacă s-a modificat |
zip -sf music.zip | Listează numele din arhivă |
unzip -l music.zip | Listează conținutul, cu dimensiuni și date |
unzip music.zip | Extrage arhiva în directorul curent |
unzip music.zip -d /tmp/unzipped | O extrage în /tmp/unzipped (directorul se creează) |
unzip music.zip fruits.txt | Extrage un singur fișier |
Când primește numele unei arhive, zip creează arhiva dacă nu există. Dacă arhiva există deja, zip o actualizează: fișierele care nu sunt încă în arhivă se adaugă, fișierele cu aceeași cale se înlocuiesc, iar toate celelalte intrări existente rămân neschimbate.
[student@fedora lab03]$ zip -r music.zip Music fruits.txt
adding: Music/ (stored 0%)
adding: Music/jazz.mp3 (stored 0%)
adding: Music/pop.mp3 (stored 0%)
adding: Music/rock.mp3 (stored 0%)
adding: fruits.txt (deflated 40%)
[student@fedora lab03]$ unzip -l music.zip
Archive: music.zip
Length Date Time Name
--------- ---------- ----- ----
0 10-06-2026 10:12 Music/
0 10-06-2026 10:12 Music/jazz.mp3
0 10-06-2026 10:12 Music/pop.mp3
0 10-06-2026 10:12 Music/rock.mp3
44 10-06-2026 10:12 fruits.txt
--------- -------
44 5 files
zip a afișat cât a comprimat fiecare fișier: fișierele .mp3 goale au fost stocate așa cum sunt, iar fruits.txt s-a
micșorat cu 40%.
Fără -r, zip music.zip Music pune în arhivă doar directorul, gol, fără fișierele din el.
zip creează music.zip doar dacă nu există deja. Dacă arhiva există, zip îi adaugă fișierele care lipsesc din
ea și le înlocuiește pe cele cu același nume (pentru ele afișează updating: în loc de adding:). Celelalte
fișiere aflate deja în arhivă rămân acolo. Ca să porniți de la o arhivă goală, ștergeți mai întâi arhiva veche.
Ce format alegeți
| Format | Arhivare și compresie cu | Extragere cu | Folosiți-l pentru |
|---|---|---|---|
.tar | tar cf | tar xf | a strânge fișiere laolaltă, fără să le comprimați |
.tar.gz | tar czf | tar xf | cea mai răspândită arhivă în Linux, rapidă |
.tar.bz2 | tar cjf | tar xf | arhive mai mici, programe mai vechi |
.tar.xz | tar cJf | tar xf | cele mai mici arhive, de exemplu codul sursă al kernelului Linux |
.zip | zip -r | unzip | fișiere pe care le trimiteți cuiva care folosește Windows sau macOS |
Nu sunteți siguri ce fel de arhivă aveți? Rulați file pe ea. Extensia este doar o parte din nume, pe când file se
uită la conținut.
Inspectarea proceselor
Un program este un fișier de pe disc, de exemplu /usr/bin/sleep. Când îl rulați, sistemul de operare îl încarcă
în memorie și astfel ia naștere un proces. Fiecare proces are un număr, PID-ul (Process ID), și reține
PID-ul procesului care l-a pornit, adică al părintelui său: PPID-ul (Parent Process ID).
Listarea proceselor: ps
| Comandă | Ce afișează |
|---|---|
echo $$ | PID-ul shell-ului curent |
ps | Procesele terminalului curent |
ps -f | Aceleași procese, cu mai multe coloane: UID, PID, PPID, ora pornirii și comanda completă |
ps -e | Toate procesele din sistem (de la every process) |
ps -ef | Toate procesele din sistem, cu coloanele lui -f |
ps -p <PID> | Doar procesul cu acest PID |
ps -o <columns> | Doar coloanele alese de voi, de exemplu ps -o pid,ppid,stat,cmd |
ps --no-headers | Fără prima linie, cea cu numele coloanelor |
pgrep <name> | Doar PID-urile proceselor al căror nume conține name |
Coloanele afișate de ps și numele pe care i le dați lui -o ca să le alegeți:
| Coloană | Nume pentru -o | Ce afișează |
|---|---|---|
UID sau USER | user | Utilizatorul care deține procesul |
PID | pid | Numărul procesului |
PPID | ppid | Numărul părintelui |
C | c | Cât din procesor folosește, ca procent |
STIME | stime | Când a pornit |
TTY | tty | Terminalul în care rulează (pts/0, pts/1, ...); ? pentru procesele care nu au terminal |
TIME | time | Cât timp de procesor a folosit până acum, nu de cât timp rulează |
STAT | stat | Starea: S, R, T sau Z, din tabelul stărilor de mai jos, urmată de câteva detalii (de exemplu s pentru primul proces dintr-o sesiune, cum este un shell, și + pentru un proces care rulează în prim-planul (foreground) terminalului său) |
CMD | cmd | Linia de comandă completă, cu parametrii |
COMMAND | comm | Doar numele programului, fără parametri |
[student@fedora ~]$ ps -o pid,ppid,stat,cmd
PID PPID STAT CMD
2817 2790 Ss bash
3110 2817 R+ ps -o pid,ppid,stat,cmd
- Shell-ul,
bash, așteaptă o comandă (S) și este primul proces din sesiunea lui (s). psrulează (R) în prim-planul terminalului (+), iar părintele lui estebash.
[student@fedora ~]$ echo $$
2817
[student@fedora ~]$ ps -f
UID PID PPID C STIME TTY TIME CMD
student 2817 2790 0 10:02 pts/0 00:00:00 bash
student 3105 2817 0 10:15 pts/0 00:00:00 ps -f
- Shell-ul acestui terminal este
bash, cu PID-ul2817, același număr ca$$. - Și
pseste un proces, pornit debash: PPID-ul lui este2817. La fiecare rulare primește un PID nou.
Ca să aveți un proces de inspectat, deschideți un al doilea terminal și porniți în el o comandă care rulează mai
mult timp, de exemplu sleep 1000 (așteaptă 1000 de secunde). Găsiți-o din primul terminal:
[student@fedora ~]$ pgrep sleep
3150
[student@fedora ~]$ ps -f -p 3150
UID PID PPID C STIME TTY TIME CMD
student 3150 2905 0 10:16 pts/1 00:00:00 sleep 1000
sleep rulează în celălalt terminal (pts/1), iar părintele lui, 2905, este bash-ul acelui terminal. Când
terminați cu el, opriți-l cu Ctrl+C în terminalul lui.
Sistemul de fișiere /proc
Kernelul prezintă fiecare proces ca pe un director în /proc, cu numele egal cu PID-ul lui: pentru sleep-ul de
mai sus, directorul este /proc/3150. La fel ca fișierele speciale, aceste fișiere nu se află pe disc: kernelul le
generează conținutul în momentul în care le citiți. /proc/self este întotdeauna directorul procesului care îl
citește, iar /proc/$$ este directorul shell-ului vostru.
| Fișier | Ce afișează |
|---|---|
/proc/<PID>/status | Numele, starea, PID-ul, PPID-ul, proprietarul și memoria procesului |
/proc/<PID>/cmdline | Linia de comandă, cu cuvintele separate prin octeți \0 în loc de spații |
/proc/<PID>/cwd | O legătură către directorul curent al procesului |
/proc/<PID>/exe | O legătură către programul care rulează |
/proc/<PID>/fd/ | Tabela de descriptori de fișier: câte o legătură pentru fiecare fișier deschis |
/proc/<PID>/environ | Variabilele de mediu, separate prin octeți \0 |
/proc/<PID>/maps | Cum sunt așezate în memorie programul și bibliotecile lui |
[student@fedora ~]$ head -n 7 /proc/3150/status
Name: sleep
Umask: 0022
State: S (sleeping)
Tgid: 3150
Ngid: 0
Pid: 3150
PPid: 2905
[student@fedora ~]$ ls -l /proc/3150/exe /proc/3150/cwd
lrwxrwxrwx. 1 student student 0 Oct 6 10:17 /proc/3150/cwd -> /home/student
lrwxrwxrwx. 1 student student 0 Oct 6 10:17 /proc/3150/exe -> /usr/bin/sleep
[student@fedora ~]$ cat -v /proc/3150/cmdline
sleep^@1000^@
[student@fedora ~]$ ls -l /proc/3150/fd
total 0
lrwx------. 1 student student 64 Oct 6 10:17 0 -> /dev/pts/1
lrwx------. 1 student student 64 Oct 6 10:17 1 -> /dev/pts/1
lrwx------. 1 student student 64 Oct 6 10:17 2 -> /dev/pts/1
statusarată căsleepașteaptă (S) și că părintele lui este2905.exeindică programul,/usr/bin/sleep, iarcwddirectorul din care a fost pornit.cmdlinesepară cuvintele prin octeți\0, care sunt invizibili:cat -vîi afișează ca^@.0,1și2indică/dev/pts/1, adică al doilea terminal, care îi ține procesului loc și de tastatură, și de ecran.
Litera din linia State (și din coloana STAT a lui ps) este starea procesului:
| Literă | Stare | Înseamnă |
|---|---|---|
R | În rulare sau gata de rulare (Running) | Rulează pe un procesor sau așteaptă să primească unul |
S | În așteptare (Sleeping) | Așteaptă ceva: o tastă, să treacă un timp, date dintr-un pipe |
T | Oprit (Stopped) | Pus pe pauză, de exemplu cu Ctrl+Z |
Z | Zombie | S-a terminat, dar părintele nu i-a citit încă codul de ieșire |
/proc conține și fișiere despre întregul sistem:
| Fișier | Ce afișează |
|---|---|
/proc/cpuinfo | Procesoarele, câte un bloc pentru fiecare |
/proc/meminfo | Memoria, în kB: MemTotal, MemFree, MemAvailable, ... |
/proc/uptime | Două numere: secundele trecute de la pornirea sistemului, apoi secundele în care procesoarele au stat nefolosite (adunate pentru toate) |
/proc/loadavg | Încărcarea sistemului (load) în ultimele 1, 5 și 15 minute, apoi procesele aflate acum în starea Running / toate procesele și ultimul PID atribuit |
/proc/version | Versiunea kernelului și compilatorul cu care a fost compilat |
PID-urile și căile de mai sus sunt altele pe calculatorul vostru: folosiți-le pe cele afișate de pgrep și ps.
Puteți citi fișierele propriilor procese; la procesele altor utilizatori, cele mai multe fișiere răspund cu
Permission denied.
top
top afișează procesele în timp real, ca Task Manager din Windows. Actualizează lista la câteva secunde și pune
sus procesele care folosesc cel mai mult procesorul.
top - 10:30:12 up 1:28, 1 user, load average: 0.08, 0.12, 0.10
Tasks: 248 total, 1 running, 247 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1.3 us, 0.7 sy, 0.0 ni, 97.9 id, 0.0 wa, 0.1 hi, 0.0 si, 0.0 st
MiB Mem : 3911.4 total, 1873.2 free, 1245.6 used, 1042.9 buff/cache
MiB Swap: 3911.0 total, 3911.0 free, 0.0 used. 2665.8 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1718 student 20 0 1186420 98340 61200 S 1.3 2.5 0:12.41 sway
2790 student 20 0 318264 41212 30124 S 0.3 1.0 0:02.03 foot
1 root 20 0 49736 38544 10208 S 0.0 1.0 0:02.31 systemd
- Primele linii sunt un rezumat al sistemului: cât timp a trecut de la pornire, încărcarea, câte procese se află în fiecare stare și cât sunt folosite procesoarele și memoria.
- Dedesubt apare fiecare proces cu PID-ul, proprietarul (
USER), memoria (RES, în KB), starea (S), procentul din procesor și din memorie pe care îl folosește și comanda.
| Tastă | Acțiune |
|---|---|
| P | Sortează după folosirea procesorului (implicit) |
| M | Sortează după folosirea memoriei |
| T | Sortează după timpul de procesor folosit până acum |
| c | Afișează linia de comandă completă |
| u | Afișează doar procesele unui utilizator (tastați numele și apăsați Enter) |
| 1 | Afișează fiecare procesor pe linia lui |
| V | Afișează procesele sub formă de arbore |
| h | Ajutor |
| q | Ieșire |
top -b -n 1 afișează lista o singură dată, fără s-o actualizeze, așa că o puteți redirecta:
top -b -n 1 > top.txt.
htop
htop face același lucru ca top, dar cu culori, câte o bară pentru fiecare procesor și meniuri în partea de jos a
ecranului. Porniți-l cu htop și ieșiți cu q sau F10.

În partea de sus, htop afișează câte o bară pentru fiecare procesor (0 și 1), pentru memorie (Mem) și pentru
swap (Swp), apoi numărul de procese (tasks), încărcarea sistemului și timpul de funcționare (uptime). Dedesubt
se află lista proceselor, câte unul pe linie, iar jos de tot, meniul cu tastele funcționale. În imaginea de mai sus,
lista conține doar procesele lui student (u), sub formă de arbore (F5): terminalul (foot)
rulează patru shell-uri bash, iar fiecare dintre ele rulează câte o comandă (al treilea rulează înlănțuirea
sleep 800 | sleep 900). Procesul selectat este sleep 1000.
| Tastă | Acțiune | Echivalent |
|---|---|---|
| ↑ ↓ | Selectează un proces | |
| F3 sau / | Căutare: sare la următorul proces a cărui comandă conține un text (apăsați din nou pentru următorul) | pgrep |
| F4 sau \ | Filtrare: afișează doar procesele a căror comandă conține un text (Esc le afișează din nou pe toate) | |
| F5 sau t | Afișează procesele sub formă de arbore | V în top |
| F6 | Alege coloana după care se sortează | |
| P / M | Sortează după folosirea procesorului / a memoriei / după timpul de procesor | P / M în top |
| u | Afișează doar procesele unui utilizator, ales dintr-o listă | u în top |
| l | Afișează fișierele deschise ale procesului selectat | ls -l /proc/<PID>/fd |
| F2 | Setări: alegeți coloanele și culorile | |
| F1 sau h | Ajutor | |
| q sau F10 | Ieșire |
htop afișează și firele de execuție (threads) ale proceselor, cu verde. Apăsați H ca să le
ascundeți, iar lista devine mult mai scurtă.
btop
btop este un program mai nou de același fel. Ecranul lui este împărțit în casete: procesoarele, cu un grafic al
folosirii lor, memoria și discurile, rețeaua și lista proceselor. Porniți-l cu btop și ieșiți cu q.
| Tastă | Acțiune |
|---|---|
| ↑ ↓ | Selectează un proces |
| Enter | Afișează detaliile procesului selectat |
| f sau / | Afișează doar procesele care se potrivesc cu un text (filtrare) |
| e | Afișează procesele sub formă de arbore |
| ← → | Schimbă coloana după care se sortează |
| r | Inversează ordinea sortării |
| 1 ... 4 | Afișează sau ascunde casetele: procesoare, memorie, rețea, procese |
| Esc sau m | Meniu |
| h sau F1 | Ajutor |
| q | Ieșire |
Depanare
| Problemă | Soluție |
|---|---|
bash: <command>: command not found | Programul nu este instalat: instalați-l cu sudo dnf install <package> pe Fedora sau cu sudo apt install <package> pe Debian și Ubuntu; de obicei, pachetul are același nume ca și comanda |
După >, eroarea apare tot pe ecran | Erorile merg în 2: folosiți 2> sau &> |
| Un fișier e gol după o redirectare | > golește mai întâi fișierul: folosiți >> ca să adăugați la sfârșit |
| O comandă așteaptă și nu face nimic | Citește de la tastatură: tastați intrarea și apăsați Ctrl+D sau opriți-o cu Ctrl+C |
gzip: numbers.txt.gz already exists | Fișierul comprimat există deja: ștergeți-l sau adăugați -f ca să-l suprascrieți |
Fișierul original a dispărut după gzip | Este normal: folosiți -k ca să-l păstrați sau decomprimați-l cu gunzip |
tar: Cowardly refusing to create an empty archive | Lipsește numele arhivei de după f |
tar: ...: Not found in archive | Numele este greșit: listați arhiva cu tar tf și copiați numele exact |
tar: /tmp/extract: Cannot open: No such file or directory | Directorul dat lui -C trebuie să existe: creați-l cu mkdir |
O arhivă zip conține un director, dar nu și fișierele lui | Adăugați -r |
No such file or directory în /proc/<PID> | Procesul s-a terminat sau PID-ul e greșit: verificați-l cu pgrep sau ps |
Permission denied în /proc/<PID> | Procesul aparține altui utilizator |
Exerciții
Exercițiile devin tot mai grele pe parcurs:
- 🧪 Primii pași (exercițiile 1 - 32) trece o dată prin tot ce conține laboratorul, cu exerciții ușoare;
- 🏠 Mai departe (exercițiile 33 - 47) are exerciții mai grele;
- 📝 Provocări (exercițiile 48 - 54) le are pe cele mai grele.
Exercițiul 1 creează fișierele și directoarele de la care pornesc toate celelalte exerciții; orice alt fișier de care are nevoie un exercițiu
este creat automat. Executați comenzile din ~/lab03, cu excepția cazului în care exercițiul specifică altfel. Dacă modificați sau
ștergeți unul dintre fișierele din exercițiul 1, executați din nou comenzile acestuia pentru a-l recupera.
Unele exerciții cer lucruri pe care laboratorul nu vi le arată, de exemplu o opțiune care nu apare în tabelele de mai
sus. Căutați-o în pagina de manual a comenzii (man <command>), cum ați văzut în
Căutarea într-o pagină de manual din laboratorul 02.
Multe exerciții folosesc fișierele sistemului, din /etc, /usr, /var, /proc și /dev, ca să aflați pe
parcurs și cum este organizat un sistem Linux. Ca să aflați la ce folosește un director, uitați-vă în man hier; ca
să aflați ce conține un fișier din /etc, uitați-vă în secțiunea 5 a manualului, de exemplu man 5 passwd,
man 5 shells sau man 5 os-release.
Țineți în Sway două terminale unul lângă altul: în primul rulați comenzile, iar în al doilea porniți comenzile pe
care le inspectați sau verificați rezultatele. Multe exerciții folosesc PID-ul unui proces: pe calculatorul vostru
este altul, așa că folosiți-l pe cel afișat de pgrep sau ps.
Nu folosiți sudo ca să vă uitați la procese. Fișierele din /proc sunt create de kernel: citiți-le, dar nu încercați
să le modificați.
🧪 Primii pași
-
Arborele de exersare:
-
rulați comenzile de mai jos ca să creați fișierele folosite în exerciții (copiați-le din browser cu Ctrl+C și lipiți-le în terminal cu Ctrl+Shift+V):
mkdir -p ~/lab03/Music ~/lab03/Photos ~/lab03/Reports ~/lab03/Archivestouch ~/lab03/Music/jazz.mp3 ~/lab03/Music/rock.mp3 ~/lab03/Music/pop.mp3touch ~/lab03/Photos/cat.jpg ~/lab03/Photos/dog.jpgprintf 'banana\napple\ncherry\napple\nkiwi\nbanana\napple\n' > ~/lab03/fruits.txtseq 1 20000 > ~/lab03/numbers.txt -
mergeți în
~/lab03și rulațitree; -
numărați liniile din
fruits.txtși dinnumbers.txtcuwc -l.
Verificare: vedeți cele patru directoare, cele cinci fișiere goale,
fruits.txtșinumbers.txt;wc -lafișează7și20000. → Navigarea -
Redirectări
-
Rădăcina sistemului:
- salvați în
Reports/system.txtarborele lui/, cu un singur nivel de adâncime (căutați înman treeopțiunea care limitează cât de adânc coboarătree); - afișați
Reports/system.txtcucat.
Verificare:
treenu a afișat nimic pe ecran, iar fișierul conține directoarele principale ale sistemului:boot,dev,etc,home,proc,tmp,usrșivar;bineste o legătură cătreusr/bin. → Ieșirea - salvați în
-
Adăugare și suprascriere:
- salvați în
Reports/tree.txtarborele lui/usr, cu un nivel de adâncime; - adăugați la
Reports/tree.txtarborele lui/var, cu un nivel de adâncime, și afișați fișierul; - suprascrieți
Reports/tree.txtcu arborele lui/home, cu un nivel de adâncime, și afișați din nou fișierul.
Verificare: după adăugare, fișierul conține ambii arbori:
/usrcubin,libșishare, apoi/varcucache,libșilog; după suprascriere, conține doar arborele lui/home, custudent. → Ieșirea - salvați în
-
Erorile separat:
- cu o singură comandă
ls -a, listați/etc/skel(fișierele copiate în directorul fiecărui utilizator nou) și/root(directorul administratorului), astfel încât lista să ajungă înReports/list.txt, iar eroarea înReports/errors.txt; - afișează conținutul celor două fișiere.
- cu o singură comandă
Verificare: nu apare nimic pe ecran când rulați comanda ls; fișierul Reports/list.txt conține, printre altele, fișierele .bashrc și
.bash_profile, iar fișierul Reports/errors.txt conține mesajul „Permisiune refuzată” pentru /root. → Erorile
-
Adăugarea erorilor:
- rulați
ls /rootși salvați eroarea înReports/errors.txt, suprascriind fișierul; - afișați cu
catfișierul/etc/shadow(fișierul cu parolele utilizatorilor) și adăugați eroarea înReports/errors.txt; - afișează conținutul fișierului
Reports/errors.txt.
Verificare:
Reports/errors.txtare două linii, una pentru/rootși una pentru/etc/shadow: doarrootle poate citi. → Erorile - rulați
-
Utilizatorii și grupurile:
- copiați fișierul
/etc/passwd(lista utilizatorilor) în fișierulReports/users.txtfără a folosi comandacp: afișați-l cu comandacatși redirecționați ieșirea către noul fișier; - copiați în același fel
/etc/group(lista grupurilor) înReports/groups.txt; - numărați cu
wc -lliniile celor două copii și ale celor două originale.
Verificare: fiecare copie are același număr de linii ca originalul ei. → Ieșirea
- copiați fișierul
-
Totul într-un fișier:
- rulați
ls -a /etc/skel /rootastfel încât și lista, și eroarea să ajungă înReports/all.txt, folosind&>, și afișați fișierul; - rulați din nou aceeași comandă, de data aceasta în varianta mai veche,
> Reports/all.txt 2>&1(vedeți tabelul redirectărilor), și afișați din nou fișierul.
Verificare: de ambele dăți,
Reports/all.txtconține eroarea pentru/rootși fișierele din/etc/skel, iar când rulațilspe ecran nu apare nimic. → Redirectări - rulați
-
Liniște:
- căutați cu
findîn/etcși/usrfișierele numiteos-releaseși aruncați erorile, ca să nu vedeți niciun mesajPermission denied; - afișați cu
catconținutul lui/etc/os-release(fișierul care descrie distribuția voastră).
Verificare:
findafișează doar două căi,/etc/os-releaseși/usr/lib/os-release;/etc/os-releaseconține numele și versiunea distribuției voastre,Fedora Linux. → Fișiere speciale - căutați cu
-
Intrarea dintr-un fișier:
- sortați cu
sortfișierul/etc/shells(lista shell-urilor instalate în sistem), dându-i fișierul cu<; - numărați liniile din
/etc/passwdcuwc -l, dându-i numele fișierului ca parametru; - numărați-le din nou, de data aceasta dându-i fișierul cu
<.
Verificare: shell-urile din
/binapar înaintea celor din/usr/bin; cele două numere sunt egale, dar doar primulwcafișează numele fișierului. → Intrarea - sortați cu
-
Un fișier scris de la tastatură:
- rulați
catcu o redirectare, astfel încât ce tastați să ajungă înReports/todo.txt; - tastați trei linii, apoi apăsați Ctrl+D la începutul unei linii noi, ca să încheiați intrarea;
- afișează conținutul fișierului
Reports/todo.txt.
Verificare:
cat Reports/todo.txtafișează cele trei linii pe care le-ați tastat. → Intrarea - rulați
-
Pipe-uri:
- numărați programele din
/usr/binculs,wc -lși un pipe; - numărați fișierele și directoarele din
/etc(configurația sistemului) afișate de comandals, în același mod; - afișați lista detaliată a conținutului din
/etc(ls -l) pe un singur ecran odată, folosindless.
Verificare: sunt peste o mie de programe și câteva sute de intrări în
/etc;lessse oprește după fiecare ecran, iar din el ieșiți cu q. → Pipe-uri - numărați programele din
-
Căutare cu grep:
- afișați din
/etc/passwd(lista utilizatorilor) linia utilizatorului vostru,student; - numărați liniile din
/etc/passwdcare conținnologin: sunt utilizatorii serviciilor, care nu se pot autentifica; - listați programele din
/usr/bincare auzipîn nume.
Verificare: linia voastră se termină cu
/home/student:/bin/bash; cei mai mulți utilizatori aunologin; în lista de programe apargzipșigunzip. → Căutarea unui text - afișați din
-
Linii repetate:
- rulați
uniq fruits.txtși aflați de ce nu elimină nimic; - afișați fiecare fruct din
fruits.txto singură dată; - afișați fiecare fruct cu numărul lui de apariții, cel mai frecvent primul;
- afișați doar fructele care apar exact o dată (căutați în
man uniq).
Verificare: comanda
uniq fruits.txtafișează aceleași 7 rânduri; după comandasort, se obțin 4 fructe,3 applefiind primul rând din listă, iar doarcherryșikiwiapar exact o singură dată. → Linii repetate - rulați
-
Zerouri și octeți aleatori:
- afișați în hexazecimal primii 16 octeți din
/dev/zero, cuheadșixxd; - afișați în același fel primii 16 octeți din
/dev/urandomși rulați comanda de două ori.
Verificare: octeții din
/dev/zerosunt toți zero; octeții din/dev/urandomdiferă la fiecare rulare a comenzii. → Fișiere speciale - afișați în hexazecimal primii 16 octeți din
Procese
-
Shell-ul meu:
- afișați PID-ul shell-ului vostru;
- listați procesele terminalului cu toate coloanele lui
-f; - afișați doar liniile
Name,State,PidșiPPiddin fișierul/proc/$$/statusal shell-ului vostru: folosițigreporice text după opțiunea-e(grep -e Name -e State ...) și căutați înman grepopțiunea care potrivește numai cuvinte întregi, astfel încâtPidsă nu se potrivească și cuTracerPid..
Verificare:
psșistatusarată același PID și același PPID pentrubash, iar starea lui esteS. → Listarea proceselor · Sistemul de fișiere/proc -
Inspectarea unui proces:
- în al doilea terminal, rulați
sleep 1000; - în primul terminal, aflați cu
pgrepPID-ul luisleep; - afișați-i fișierul
/proc/<PID>/status; - afișați-i cu
cat -vlinia de comandă, din/proc/<PID>/cmdline; - aflați-i programul și directorul curent, din legăturile
/proc/<PID>/exeși/proc/<PID>/cwd; - opriți
sleepcu Ctrl+C în al doilea terminal.
Verificați:* starea este
S, linia de comandă estesleep^@1000^@, programul este/usr/bin/sleep, iar directorul curent este cel în care vă aflați în momentul în care ați rulatsleep(rulațipwdîn al doilea terminal pentru a compara). → Sistemul de fișiere/proc - în al doilea terminal, rulați
-
Fișiere deschise:
- listați tabela de descriptori de fișier a shell-ului vostru, din
/proc/$$/fd; - în al doilea terminal, rulați
sleep 1000; - în primul terminal, aflați PID-ul lui
sleepși listați-i tabela de descriptori de fișier; - opriți
sleepcu Ctrl+C și încercați să-i listați din nou tabela.
- listați tabela de descriptori de fișier a shell-ului vostru, din
Verificare: 0, 1 și 2 indică un fișier din /dev/pts/..., câte unul diferit pentru fiecare terminal (bash menține, de asemenea, 255 deschis pe același terminal, pentru uz propriu); după Ctrl+C, /proc/<PID> nu mai
există. → Sistemul de fișiere /proc
-
Sistemul: Aflați următoarele despre calculatorul vostru folosind doar fișierele din
/proc:- modelul procesorului: liniile
model namedin/proc/cpuinfo(folosițigrep); - câte procesoare aveți: numărați liniile
processordin/proc/cpuinfo; - memoria totală: linia
MemTotaldin/proc/meminfo; - de câte secunde rulează sistemul: primul număr din
/proc/uptime; - versiunea kernelului:
/proc/version.
Verificare: numărul de procesoare este același cu cel afișat de
nproc, timpul se potrivește cu parteaupdinuptime, iar versiunea kernelului este aceeași cu cea afișată deuname -r. → Sistemul de fișiere/proc - modelul procesorului: liniile
-
top și htop:
- porniți
top, sortați procesele după memorie, apoi după procesor, și ieșiți; - porniți
htop, căutațibashși apăsați F3 până când linia selectată este cea a procesuluibashdin primul terminal (PID-ul afișat de comandaecho $$), afișați procesele sub formă de arbore și ieșiți.
Verificare:
topafișează liniaTasks, cu numărul de procese din fiecare stare; în arborele dinhtop,bash-ul vostru se află sub terminal. → top · htop - porniți
Arhive și compresie
-
Trei programe de compresie:
- ștergeți
numbers.txt.gz,numbers.txt.bz2șinumbers.txt.xz, dacă există; - comprimați
numbers.txtcugzip, cubzip2și cuxz, păstrând de fiecare dată fișierul original; - comparați cu
ls -ldimensiunile celor patru fișiere.
Verificare: aveți
numbers.txt,numbers.txt.gz,numbers.txt.bz2șinumbers.txt.xz, iar fișierul.xzeste cel mai mic. → Compresia unui singur fișier - ștergeți
-
Cu cât mai mic:
- ștergeți
numbers.txt.gz,numbers.txt.bz2șinumbers.txt.xz, dacă există; - comprimați
numbers.txtcugzip, cubzip2și cuxz, păstrând fișierul original, astfel încât fiecare program să afișeze cu cât s-a micșorat fișierul (căutați în paginile lor de manual opțiunea care afișează mai multe detalii).
Verificare:
gzipșibzip2au afișat cât au economisit, ca procent, iar procentul luibzip2este mai mare;xza afișat în schimb un raport (aproximativ0.045, noua dimensiune împărțită la cea veche), deci a economisit în jur de 95%, cel mai mult dintre toate trei. → Compresia unui singur fișier - ștergeți
-
Decomprimare:
- ștergeți
numbers.txt.gzșinumbers.txt.bz2, dacă există; - comprimați
numbers.txtcugzip, fără să păstrați originalul, și verificați culscănumbers.txta dispărut; - refaceți
numbers.txtdinnumbers.txt.gz; - comprimați
numbers.txtcubzip2, păstrând originalul, apoi ștergeținumbers.txt; - refaceți
numbers.txtdinnumbers.txt.bz2, de data aceasta păstrând fișierul comprimat.
Verificare:
wc -l numbers.txtafișează20000de ambele dăți;numbers.txt.gza dispărut (gunzipl-a șters, la fel cumgzipșterge originalul), darnumbers.txt.bz2există în continuare. → Compresia unui singur fișier - ștergeți
-
Ce fel de fișier:
- ștergeți
numbers.txt.bz2șinumbers.txt.xz, dacă există; - comprimați
numbers.txtcubzip2și cuxz, păstrând originalul; - aflați cu o singură comandă
filetipurile luinumbers.txt,numbers.txt.bz2șinumbers.txt.xz; - ștergeți
numbers.txt.bz2șinumbers.txt.xz; - aflați tipul lui
/usr/share/man/man1/ls.1.gz, pagina de manual a luils.
Verificare:
fileafișeazăASCII text,bzip2 compressed datașiXZ compressed data, iar pentruls.1.gz,gzip compressed data: paginile de manual sunt stocate comprimate cugzip, iarmanle decomprimă când le citiți. → Ce format alegeți - ștergeți
-
O arhivă tar:
- creați
Archives/music.tarcu directoareleMusicșiPhotosși fișierulfruits.txt; - listați conținutul arhivei;
- aflați cu
filetipul arhivei.
Verificare: arhiva conține
Music/,Photos/, cele cinci fișiere goale șifruits.txt, iarfileafișeazăPOSIX tar archive. → Arhive - creați
-
Extragere:
- creați
Archives/music.tarcuMusic,Photosșifruits.txt(dacă există deja,taro suprascrie); - creați directorul
/tmp/extractcu comandamkdir -p, astfel încât să nu apară nicio eroare dacă acesta există deja; - extrageți
Archives/music.tarîn/tmp/extract.
Verificare:
tree /tmp/extractafișeazăMusic,Photosșifruits.txt, cu aceleași fișiere ca în~/lab03. → Arhive - creați
-
Un singur fișier:
- creați
Archives/music.tarcuMusic,Photosșifruits.txt; - creați directorul
/tmp/singlecu comandamkdir -p, astfel încât să nu apară nicio eroare dacă acesta există deja; - extrageți în
/tmp/singledoarPhotos/dog.jpgdinArchives/music.tar.
Verificare:
tree /tmp/singleafișeazăPhotos/dog.jpgși nimic altceva. → Arhive - creați
-
Încă un fișier în arhivă:
- creați
Archives/music.tarcuMusic,Photosșifruits.txt; - adăugați
numbers.txtînArchives/music.tar, fără să creați din nou arhiva; - listați arhiva cu detaliile fiecărui fișier.
Verificare:
numbers.txteste ultimul fișier din listă, cu dimensiunea108894. → Arhive - creați
-
Arhive comprimate:
- creați
Archives/all.tarcuMusic,Photosșinumbers.txt; - creați
Archives/all.tar.gz,Archives/all.tar.bz2șiArchives/all.tar.xz, fiecare cu aceleași trei intrări, comprimate cugzip,bzip2șixz; - comparați cu
ls -ldimensiunile celor patru arhive.
Verificare: arhiva
.tareste cea mai mare, iar.tar.xzcea mai mică. → Arhive comprimate - creați
-
Listarea arhivelor comprimate:
- creați
Archives/all.tar.gz,Archives/all.tar.bz2șiArchives/all.tar.xz, fiecare cuMusic,Photosșinumbers.txt; - listați conținutul fiecărei arhive fără să-i spuneți lui
tarcum este comprimată; - aflați cu
filetipurile celor trei arhive.
Verificare: toate trei listele sunt identice;
filearată pentru fiecare altă compresie. → Arhive comprimate - creați
-
Extragerea arhivelor comprimate:
- creați
Archives/all.tar.gz,Archives/all.tar.bz2șiArchives/all.tar.xz, fiecare cuMusic,Photosșinumbers.txt; - creați directoarele
/tmp/gz,/tmp/bz2și/tmp/xz; - extrageți fiecare arhivă în propriul director:
.tar.gzîn/tmp/gz,.tar.bz2în/tmp/bz2și.tar.xzîn/tmp/xz; - afișați cu
treecele trei directoare.
Verificare: arborii celor trei directoare sunt identici. → Arhive comprimate
- creați
-
O arhivă zip:
- ștergeți
Archives/all.zip, dacă există (zipar actualiza-o, nu ar crea-o din nou); - creați
Archives/all.zipcuMusic,Photosșinumbers.txt, cu tot ce se află în directoare; - listați conținutul arhivei;
- extrageți-o în
/tmp/unzipped.
Verificare:
unzip -llistează 8 intrări, iartree /tmp/unzippedafișeazăMusiccu trei fișiere,Photoscu două fișiere șinumbers.txt. → Arhive zip - ștergeți
-
Actualizarea unei arhive zip:
- ștergeți
Archives/all.zip, dacă există; - creați
Archives/all.zipcuMusic,Photosșinumbers.txt, cu tot ce se află în directoare; - adăugați
fruits.txtînArchives/all.zip; - listați cu
zip -sffișierele din arhivă; - extrageți din arhivă doar
fruits.txt, în/tmp/fruit.
Verificare:
zip -sf Archives/all.ziplisteazăfruits.txtca ultim fișier, iar/tmp/fruitconține doarfruits.txt. → Arhive zip - ștergeți
🏠 Mai departe
-
Ordinea contează:
- rulați
ls /etc/skel /root > Reports/a.txt 2>&1și afișațiReports/a.txt; - rulați
ls /etc/skel /root 2>&1 > Reports/b.txtși afișațiReports/b.txt; - aflați de ce eroarea ajunge în
a.txt, dar nu și înb.txt.
Verificare: a doua comandă a afișat eroarea pe ecran, iar fișierul
Reports/b.txtconține doar lista din/etc/skel. Indiciu: shell-ul citește redirecționările de la stânga la dreapta. → Redirectări - rulați
-
Vedeți și salvați: Într-o singură linie de comandă, salvați lista programelor din
/usr/binînReports/programs.txtși numărați-le (căutați înman teecomanda care își scrie intrarea și într-un fișier, și la ieșire).Verificare: numărul afișat este același cu cel dat de
wc -l < Reports/programs.txt. → Pipe-uri -
Redirectările văzute din interior:
- în al doilea terminal, rulați
sleep 900 < ~/lab03/fruits.txt > /tmp/out.txt 2> /dev/null; - în primul terminal, aflați PID-ul lui
sleepși listați-i tabela de descriptori de fișier; - opriți
sleepcu Ctrl+C în al doilea terminal.
Verificare:
0indicăfruits.txt,1indică/tmp/out.txt, iar2indică/dev/null: shell-ul a modificat tabela înainte să porneascăsleep. → Sistemul de fișiere/proc· Redirectări - în al doilea terminal, rulați
-
Un pipe văzut din interior:
- în al doilea terminal, rulați
sleep 800 | sleep 900; - în primul terminal, aflați PID-urile celor două procese
sleep(căutați înman pgrepopțiunea care afișează și linia de comandă, ca să le deosebiți); - listați tabelele de descriptori de fișier ale ambelor procese;
- opriți-le cu Ctrl+C în al doilea terminal.
Verificare:
1al luisleep 800și0al luisleep 900indică acelașipipe:[...], cu același număr. → Sistemul de fișiere/proc· Pipe-uri - în al doilea terminal, rulați
-
Ce citește less:
- în al doilea terminal, deschideți cu
lessfișierul/etc/services(lista serviciilor de rețea și a porturilor lor); - în primul terminal, aflați PID-ul lui
less; - folosind
/proc, listați fișierele pe carelessle are deschise și afișați-i linia de comandă și directorul curent; - ieșiți din
lesscu q.
Verificare: pe lângă
0,1și2,lessare deschis/etc/services, la descriptorul de fișier3sau la unul mai mare. → Sistemul de fișiere/proc - în al doilea terminal, deschideți cu
-
Unde e celălalt shell:
- în al doilea terminal, mergeți în
~/lab03/Musicși afișați PID-ul shell-ului; - în primul terminal, aflați folosind
/procdirectorul curent al acelui shell; - deschideți fișierul
environculessși găsiți valoarea variabileiHOME:lessvă avertizează că ar putea fi un fișier binar, din cauza octeților\0dintre variabile, așa că răspundeți y; octeții\0apar sub forma^@, iar căutarea se face cu /.
Verificare:
cwdindică/home/student/lab03/Music, iarenvironconțineHOME=/home/student. → Sistemul de fișiere/proc - în al doilea terminal, mergeți în
-
Salvați top:
- rulați
topastfel încât să-și afișeze lista o singură dată, fără s-o actualizeze (vedeți sfatul din top); - în aceeași linie de comandă, păstrați doar primele 15 linii ale ieșirii lui și salvați-le în
Reports/top.txt.
Verificare:
Reports/top.txtare 15 linii și începe cu rezumatul luitop. → top · Pipe-uri - rulați
-
htop în detaliu: În
htop:- ascundeți firele de execuție;
- afișați doar procesele voastre;
- sortați-le după memorie;
- alegeți
bash-ul din primul terminal (PID-ul afișat deecho $$) și afișați fișierele deschise ale acestuia (dacăhtopindică că nu poate rulalsof, instalați-l cusudo dnf install lsof); - adăugați coloana
PPID: apăsați F2, accesați Screens, selectațiPPIDdin Available Columns, apăsați Enter pentru a o adăuga, apoi ieșiți din meniu cu F10.
Verificare: fișierele deschise ale lui
bashsunt aceleași ca înls -l /proc/$$/fd, iarPPID-ul luibasheste PID-ul terminalului. → htop -
Ale cui sunt procesele:
- numărați procesele lui
rootcups,wc -lși un pipe (căutați înman psopțiunea care selectează procesele unui utilizator și folosiți--no-headers, cawc -lsă nu numere și linia cu numele coloanelor); - numărați în același fel procesele voastre;
- numărați-le din nou, fără
--no-headers.
Verificare:
rootare mult mai multe procese decâtstudent: cea mai mare parte a sistemului rulează caroot. Fără--no-headers, fiecare număr este mai mare cu unu. → Listarea proceselor · Pipe-uri - numărați procesele lui
-
Cine rulează procesele:
- listați cu
pstoate procesele sistemului, afișând doar coloana utilizatorului, fără linia de antet; - în aceeași linie de comandă, cu
sortșiuniq, afișați fiecare utilizator o singură dată, cu numărul proceselor lui în față, primul fiind utilizatorul cu cele mai multe procese.
Verificare: prima linie este
root, cu același număr ca înps -u root --no-headers | wc -l, iarstudentse află printre primele linii; suma numerelor este aceeași cu cea dinps -e --no-headers | wc -l. Unii utilizatori pot apărea sub formă de numere în loc de nume:psafișează UID-ul atunci când numele este prea lung pentru coloană. → Listarea proceselor · Linii repetate - listați cu
-
Fișiere mari:
- creați
Archives/zeros.bincu primii 10 MB din/dev/zero, folosindhead(căutați înman headopțiunea care afișează un număr de octeți în loc de linii); - creați în același fel
Archives/random.bincu primii 10 MB din/dev/urandom; - comprimați ambele fișiere cu
xz, păstrând originalele; - comparați cu
ls -lhdimensiunile celor patru fișiere; - ștergeți cele patru fișiere: sunt mari.
Verificare:
zeros.bin.xzare câțiva KB, iarrandom.bin.xzare tot în jur de 10 MB: datele aleatoare nu se pot comprima. → Fișiere speciale · Compresia unui singur fișier - creați
-
Compresie într-un alt fișier: Comprimați
/etc/services(lista serviciilor de rețea) fără să-l copiați și fără să modificați/etc: folosiți opțiunea-c, care scrie datele comprimate la ieșirea standard, și o redirectare.- comprimați-l cu
gzipînArchives/services.gz; - comprimați-l cu
bzip2înArchives/services.bz2; - comprimați-l cu
xzînArchives/services.xz; - puneți
timeîn fața fiecăreia dintre cele trei comenzi și comparați timpii și dimensiunile fișierelor.
Verificare: cele trei fișiere există,
/etc/servicesa rămas neschimbat, iarxzcreează cel mai mic fișier și durează cel mai mult. → Compresia unui singur fișier - comprimați-l cu
-
Citire fără extragere: Căutați în
man gzipșiman xzcomenzile care afișează conținutul unui fișier comprimat, fără să creeze niciun fișier nou.- comprimați
/etc/servicescugzip -cînArchives/services.gzși cuxz -cînArchives/services.xz; - afișați conținutul lui
Archives/services.gzpe câte un ecran pe rând, culess; - numărați liniile lui
Archives/services.xz; - afișați primele 20 de linii ale paginii de manual comprimate
/usr/share/man/man1/ls.1.gz.
Verificare: numărul de linii este același cu
wc -l < /etc/services; pagina de manual este un fișier text cu comenzi de formatare, adică linii care încep cu., ca.THși.SH. → Compresia unui singur fișier - comprimați
-
Compresia aleasă după nume:
- creați
Archives/photos.tar.bz2cuPhotos, fără să-i spuneți luitarprogramul de compresie: lăsați-l să-l aleagă după extensia arhivei (căutați înman taraceastă opțiune); - aflați cu
filetipul arhivei.
Verificare:
file Archives/photos.tar.bz2afișeazăbzip2 compressed data. → Arhive comprimate - creați
-
Fără calea completă:
- creați
/tmp/doc.tar.gzcu directorul/usr/share/doc/bash(documentația luibash), astfel încât numele din arhivă să înceapă cubash/, nu cuusr/share/doc/(căutați înman taropțiunea care schimbă directorul înainte de adăugarea fișierelor); - listați conținutul arhivei.
Verificare:
tar tf /tmp/doc.tar.gzlistează nume care încep cubash/. → Arhive - creați
📝 Provocări
-
Numărare cu /proc:
- numără directoarele din
/procal căror nume este un număr (un caracter wildcard poate conține un interval de caractere:[0-9]corespunde unei singure cifre; veziman 7 glob); - numărați procesele sistemului cu
ps -e --no-headersșiwc -l; - comparați cele două numere.
Verificare: cele două numere sunt aproape egale: fiecare proces este un director în
/proc. → Sistemul de fișiere/proc - numără directoarele din
-
Shell-urile utilizatorilor: Fiecare linie din
/etc/passwdare 7 câmpuri separate prin:, iar ultimul este shell-ul utilizatorului.- afișați doar shell-ul fiecărui utilizator (căutați în
man cutopțiunile care aleg separatorul și păstrează doar un câmp din fiecare linie); - în aceeași linie de comandă, afișați fiecare shell o singură dată, cu numărul de utilizatori care îl au, cel mai folosit primul;
- afișați doar shell-urile folosite de mai mult de un utilizator.
Verificare: un shell
nologinapare pe prima linie, pentru majoritatea utilizatorilor. Este posibil să vedeți atât/sbin/nologin, cât și/usr/sbin/nologin: sunt același program (/sbineste o legătură cătreusr/sbin), daruniqcompară doar textul, așa că le numără pe linii separate./bin/basheste utilizat derootșistudent, iar sumă numerelor este identică cu cea obținută prinwc -l < /etc/passwd. → Linii repetate · Pipe-uri - afișați doar shell-ul fiecărui utilizator (căutați în
-
Cine ține fișierul deschis:
- în al doilea terminal, deschideți cu
lessfișierul/etc/hosts(numele calculatoarelor pe care sistemul le cunoaște fără să întrebe rețeaua); - în primul terminal, găsiți descriptorul de fișier care indică
/etc/hosts, fără să folosițipgrepsaups: căutați cufindîn/proc/*/fd(căutați înman findtestul care verifică încotro indică o legătură simbolică) și aruncați erorilePermission deniedpentru procesele altor utilizatori; - verificați cu
ps -pcă numărul din calea afișată defindeste PID-ul luiless; - ieșiți din
lesscu q.
Verificare:
findafișează o cale ca/proc/3402/fd/4, iarps -p 3402afișeazăless. → Sistemul de fișiere/proc - în al doilea terminal, deschideți cu
-
Copie de rezervă a configurației:
- creați fișierul
/tmp/etc.tar.gzconținând întregul director/etc(configurația sistemului), cu excepția directorului/etc/pki, care conține certificatele pe care sistemul le utilizează pentru a verifica conexiunile securizate, cum ar fi site-urile web de tiphttps://(consultațiman tarpentru opțiunea care exclude anumite fișiere din arhivă); - în aceeași comandă, salvați erorile comenzii
tarîn fișierulReports/etc-errors.txt; - numărați intrările din arhivă, folosind
tar tfșiwc -l; - numărați doar rândurile „Permission denied” din fișierul
Reports/etc-errors.txt, folosindgrep -c.
- creați fișierul
Verificare: Comanda tar tf /tmp/etc.tar.gz afișează fișierele etc/passwd și etc/os-release, dar nimic din directorul etc/pki.
Fișierul Reports/etc-errors.txt conține mesajul „Permission denied” pentru fiecare fișier pe care numai utilizatorul root îl poate citi, cum ar fi /etc/shadow,
precum și alte două rânduri care nu se referă la niciun fișier. Prima dintre ele, tar: Eliminarea caracterului `/' din fața numelor elementelor,
vă indică doar că tar salvează /etc/passwd ca etc/passwd, astfel încât arhiva să poată fi extrasă oriunde. Ultima
linie, tar: Ieșire cu statut de eșec din cauza erorilor anterioare, spune doar că au existat erori. De aceea
se iau în considerare doar liniile cu mesajul Permission denied. → Arhive comprimate
-
Fără primul director:
- creați
Archives/all.tar.gzcuMusic,Photosșinumbers.txt; - creați directorul
/tmp/flat; - extrageți
Archives/all.tar.gzîn/tmp/flatastfel încât fișierele dinMusicșiPhotossă ajungă direct în/tmp/flat, fără directoarele lor (căutați înman taropțiunea care elimină directoarele de la începutul numelor).
Verificare:
tree /tmp/flatafișează cele cinci fișiere goale direct sub/tmp/flat, dar nu șinumbers.txt.--strip-components=1elimină prima parte a fiecărui nume:Music/jazz.mp3devinejazz.mp3, însănumbers.txtse află în directorul de sus al arhivei, așa că din numele lui nu mai rămâne nimic șitarnu îl extrage (la fel se întâmplă cu numeleMusic/șiPhotos/). → Arhive - creați
-
Arhive printr-un pipe:
- creați
/tmp/music.tar.gzcu directorulMusic, într-o singură linie de comandă, astfel încâttarscrie arhiva, necomprimată, la ieșirea standard (un fișier arhivă numit-înseamnă ieșirea standard),gzipo comprimă într-un pipe, iar o redirectare o salvează; - creați directorul
/tmp/piped; - extrageți
/tmp/music.tar.gzîn/tmp/pipedprintr-un alt pipe:gunzip -co decomprimă la ieșirea standard, iartarcitește arhiva de la intrarea standard (un fișier arhivă numit-înseamnă intrarea standard).
Verificare:
file /tmp/music.tar.gzafișeazăgzip compressed data, iartree /tmp/pipedafișeazăMusic. → Pipe-uri · Arhive comprimate - creați
-
Curățenie: Ștergeți cu o singură comandă
rmtot ce creează exercițiile în/tmp, fără nicio eroare pentru ce nu ați creat (căutați înman rm):
Comanda rm -rf nu solicită nicio confirmare, iar ceea ce șterge nu poate fi recuperat. Citește comanda de două ori înainte de a apăsa
Enter: un spațiu pus în locul nepotrivit, cum ar fi rm -rf /tmp /extract în loc de rm -rf /tmp/extract,
va șterge mult mai mult decât dorești.
- directoarele
/tmp/extract,/tmp/single,/tmp/gz,/tmp/bz2,/tmp/xz,/tmp/unzipped,/tmp/fruit,/tmp/flatși/tmp/piped; - fișierele
/tmp/out.txt,/tmp/doc.tar.gz,/tmp/etc.tar.gzși/tmp/music.tar.gz.
Verificare: rm nu afișează nimic, iar ls /tmp nu le mai afișează. → Gestionarea fișierelor
Întrebări de recapitulare
Folosiți ultimele 5 minute ale laboratorului ca să răspundeți la aceste întrebări împreună cu colegii și cu asistentul. La ultimele două nu există răspunsuri greșite.
- Ce sunt descriptorii de fișier
0,1și2și ce indică ei într-un terminal? - Care este diferența dintre
>și>>? Dar dintre>și2>? - De ce
wc -l < filenu afișează numele fișierului? - Care este diferența dintre o arhivă și un fișier comprimat? De ce are un
.tar.gzdouă extensii? - Când ați folosi
.tar.xzși când.zip? - Care este diferența dintre un program și un proces? Ce sunt PID-ul și PPID-ul?
- Unde sunt stocate fișierele din
/proc? - Ce puteți afla despre un proces din
/proc, dar nu vă aratăps? - Când ați folosi
topși cândhtopsaubtop? - Ce redirectare sau ce format de arhivă credeți că veți folosi cel mai des?
Extra
- Memoria unui proces: Afișați
/proc/$$/mapsculess. Găsiți liniile lui/usr/bin/bashși ale luilibc.so.6: așa a așezat încărcătorul (loader) programul și bibliotecile lui în memorie. → Sistemul de fișiere/proc - Zstandard: Fedora are și
zstd, un program de compresie mai nou. Comprimați cu elnumbers.txtși comparați dimensiunea și timpul cu cele obținute cugzipșixz; apoi creați o arhivă.tar.zst(căutați înman taropțiunea care comprimă arhiva cuzstd). → Compresia unui singur fișier - Manageri de arhive: Deschideți o arhivă cu
yazi(laboratorul 02): vă arată conținutul arhivelor.tar.gzși.zipîn panoul de previzualizare. → Yazi - Setările htop: Apăsați F2 în
htopși schimbați indicatoarele din partea de sus a ecranului. → htop