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 |
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ă.
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):
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?
george@whatever:~/LPIC/create$ mkdir ana george@whatever:~/LPIC/create$ cd ana #(aici se poate utiliza combinația de taste ALT + . pentru a nu mai scrie din nou cuvantul ''ana'') george@whatever:~/LPIC/create$ mkdir are george@whatever:~/LPIC/create$ cd are ...and so on
mkdir
are un argument foarte interesant și anume -p
care permite crearea unei ierarhii de directoare.george@whatever:~/LPIC/create$ mkdir -p ana/are/mere/dar/e/nebuna
Pentru a crea link-uri se utilizează comanda ln
:
-s
pentru crearea unui link simbolic
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
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).
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
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
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
.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
*
î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
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/sda
, /dev/hda
fișierele ce oferă o zonă de acces spre hard-disk
/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
man
ce semnifică bs
și count
.
/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
unu
, doi
și trei
în directorul propriu (home) și validați că acestea există si au dimensiunea corectă folosind comanda ls
. unu
nu va conține nimic.doi
va conține 1MB de date (zero-uri).trei
va conține 100MB de date (random). touch
pe fișierul unu
. Folosiți, din nou, comanda ls -l
. Ce observați?dir1
și dir2
.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
.ls
) și utilizând comanda tree
.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).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).dir1
folosind comanda rm
. Apoi ștergeți directorul dir2
folosind rmdir
. mod
și modificați-l astfel încât să aiba drepturile 777man mkdir
)touch
de 10 ori - nah, too much workfile
.{mere, pere, alune
}.c, d, e, f
și cifrele: 1, 2, 3, 4
./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
)/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
.ext4
a fost accesat și modificat la 2010.05.23 15:25 (Hint: touch
)ext4
? (Hint: stat
)stat
pentru a afișa doar numele și inode-ul fișierului.sym-ext4
către fișierul ext4
. (Hint: man ln
, căutați “symbolic”)ext4
și afișați conținutul lui sym-ext4
.ext4
și afișați conținutul lui sym-ext4
.sym-ext4
(Hint: file
)hard-ext3
către fișierul ext3
.hard-ext3
și ext3
. (Hint: stat
)ext3
și afișați conținutul lui hard-ext3
.hard-ext3
(Hint: file
)ext3
și afișați conținutul lui hard-ext3
- de ce merge?random_file
(cu date random).random_file
în fișierul random_1
.random_file
în fișierul random_2
. Hint: skip
random_1
și random_2
(Hint: seek
or append
, check the man)diff
.find
pentru a găsi toate fișierele din /etc
care se termină în .allow
sau .deny
Hint: {{{man find
, look after operators}}}.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)
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).
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
).
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 î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.
-z
- comprimare folosind gzip
-j
- comprimare folosind bzip2
--xz}} sau {{{--lzma
- comprimare în format xz
sau lzma
--lzop
- comprimare în format lzop
-lzip
- comprimare în format lzip
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
/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./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ă.unix.tar
fără a o dezarhiva. (Hint: man tar
, căutați “list”. Nu uitați să specificați numele arhivei prin -f
)cpio
cu același conținut. (Hint: folosiți find
pentru a-i specifica utilitarului fișierele de arhivat).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
./home/student/big-text-file.txt
care să conțină cel puțin 5 MB text (date aleator generate).big-text-file.txt
în format gzip
, bzip2
și zip
. Care sunt diferențele de mărime ale arhivelor?conf.zip
, conf.tar.gz
, conf.cpio
care conțin fișierele cu extensia .conf
din ierarhia /etc/
./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
)/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.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
).file2
de 7MB conținând zero-uri și adăugați-l în arhivă (nu creați arhiva de la 0).file1
și file2
.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
.file1
în ambele arhive însă utilizând diferite moduri:append
update
diff
pe cele 2 arhive. Ce observati?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.man tar
, concatenate).Atentie!
Cele 2 arhive ar trebui să aibă același format deoarece concatenarea nu va verifica compatibilitatea între ele.-k
.extract
unde veți dezarhiva doar fișierul file2
din arhiva.file1
inițial.--occurrence=nr
pentru a specifica care apariție să fie dezarhivată.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})