This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
linux-admin:capitole:capitol-03 [2016/09/16 11:32] mihaic [3. Operații avansate cu fișiere] |
linux-admin:capitole:capitol-03 [2016/09/22 10:24] (current) mihaic [Exercițiu 5] |
||
---|---|---|---|
Line 5: | Line 5: | ||
===== Subiecte abordate ===== | ===== Subiecte abordate ===== | ||
- | * TODO | + | * Comenzi avansate de lucru cu fișiere: ''find'', ''stat'', ''ln'', ''dd'' |
- | * TODO | + | * Globbing |
- | * TODO | + | |
==== Utilitare folosite ==== | ==== Utilitare folosite ==== | ||
- | * TODO | + | * ''find'', ''xargs'' |
- | * TODO | + | * ''ln'', ''dd'' |
- | * TODO | + | |
==== Bune practici ==== | ==== Bune practici ==== | ||
- | * TODO | + | * Construcția ''%%$(...)%%'' versus ''xargs'' |
- | * TODO | + | * Obținerea listei de fișiere dintr-un director: ''ls'' vs. ''find'' vs. Bash arrays; ''for'' vs. ''%%$(...)%%'' |
- | * TODO | + | |
- | + | ||
- | ===== Resurse utile ===== | + | |
- | + | ||
- | * TODO | + | |
- | * TODO | + | |
==== Slide-uri ==== | ==== Slide-uri ==== | ||
- | [[http://koala.cs.pub.ro/training/res/medium-unix/slides/cap-03.pdf|Slide-uri capitol 3]] | + | [[http://koala.cs.pub.ro/training/res/linux-admin/slides/cap-03.pdf|Slide-uri capitol 3]] |
<html> | <html> | ||
Line 40: | Line 32: | ||
==== Demo-uri ==== | ==== Demo-uri ==== | ||
- | TODO | + | Folosirea comenzii ''find'' cu diverși parametri pentru a parcurge sistemul de fișiere. Afișarea executabilelor cu bitul de setuid activat din directoarele ce conțin executabile (''/bin'', ''/sbin'', ''/usr/bin'', ''/usr/sbin''). |
+ | |||
+ | |||
+ | Folosirea comenzii ''dd'' pentru a copia chunk-uri de fișiere. Opțiunile ''bs'', ''count'', ''skip'', ''seek''. | ||
+ | |||
+ | Exemplificarea globbing-ului | ||
+ | |||
+ | ==== Exercițiu 1 ==== | ||
+ | |||
+ | Dorim să afișăm fișiere după diferite considerente. | ||
+ | |||
+ | Folosiți ''find'' pentru a afișa toate **fișierele** din ierarhia ''/etc/'' (adică toate fișierele din ''/etc/'', din subdirectoarele acestuia, din subdirectoarele subdirectoarelor etc.). **Indicație**: Folosiți opțiunea ''-type'' a comenzii ''find''. | ||
+ | |||
+ | Folosiți ''find'' pentru a afișa toate fișierele din ierarhia ''/etc/'' al căror nume începe cu litere între ''a'' și ''d''. **Indicații**: Folosiți opțiunea ''-name'' a comenzii ''find''. Folosiți construcția ''[a-d]*'' pentru a indica un șir care începe cu o literă între ''a'' și ''d'' urmată de orice altceva. | ||
+ | |||
+ | Folosiți ''find'' pentru a afișa toate fișierele din ierarhia ''/etc/'' al căror nume începe cu litere între ''a'' și ''d'' și are extensia ''.conf'' (adică se încheie în șirul ''.conf''). **Indicație**: Porniți de la comanda anterioară și extindeți argumentul transmis opțiunii ''-name''. | ||
+ | |||
+ | Folosiți ''find'' pentru a afișa toate fișierele din ierahia ''/etc/'' care sunt deținute de utilizatorul ''root'' și grupul ''root''. **Indicație**: Folosiți optiunea ''-user'' a comenzii ''find''. | ||
+ | |||
+ | Folosiți ''find'' pentru a a afișa toate fișierele din ierahia ''/etc/'' care sunt deținute de utilizatorul ''root'' și un grup diferit de ''root''. **Indicație:** Folosiți ''!'' (semnul exclamării în fața opțiunii necesare pentru a o nega). | ||
+ | |||
+ | Folosiți ''find'' pentru a a afișa toate fișierele din ierahia ''/etc/'' pentru care ''others'' au permisiuni de orice fel (adică ''others'' au **oricare** dintre permisiunile //read//, //write// sau //execute//). **Indicații**: Urmăriți opțiunea ''-perm'' în pagina de manual a comenzii ''find''. Urmăriți și exemplele de folosire căutând după șirul ''EXAMPLES''. | ||
+ | |||
+ | Folosiți ''find'' pentru a a afișa toate fișierele din ierahia ''/etc/'' pentru care ''others'' nu au nici un fel de permisiuni (de orice fel: //read//, //write// sau //execute//). **Indicație:** Folosiți ''!'' (semnul exclamării în fața opțiunii necesare pentru a o nega). | ||
+ | |||
+ | ==== Exercițiu 2 ==== | ||
+ | |||
+ | Listați primele 10 **fișiere obișnuite** (//regular files//) din ierarhia ''/etc'' (adică din toate directoarele, subdirectoarele și subdirectoarele acestora etc.) sortate în ordinea dimesiunii ocupate de fiecare fișier. | ||
+ | |||
+ | <note tip> | ||
+ | Folosiți ''find'' cu opțiunea ''-exec'', ''stat'' (cu opțiunea ''-c'' și formatul necesar pentru afișarea dimensiunii și numelui ca argument către opțiunea ''-exec'' a lui ''find''), ''sort'' și ''head''. | ||
+ | |||
+ | Exemplu de rulare pentru ''find'' cu ''-exec'' este<code> | ||
+ | find /etc/ -type f -exec ls -l {} \; | ||
+ | </code> | ||
+ | </note> | ||
+ | |||
+ | ==== Exercițiu 3 ==== | ||
+ | |||
+ | Creați un fișier care să conțină 2048 de octeți de zero (din ''/dev/zero'') urmați de 2048 de octeți aleatori (din ''/dev/urandom'') urmați de 2048 de octeți de zero și apoi urmați de 2048 de octeți din fișierul ''/bin/false'' de la offsetul 4096 al fișierului. | ||
+ | |||
+ | <note important> | ||
+ | Argumentul pentru opțiunile ''skip'' și ''seek'' ale comenzii ''dd'' este dat în număr de blocuri, **nu** în număr de octeți. | ||
+ | </note> | ||
+ | |||
+ | ==== Exercițiu 4 ==== | ||
+ | |||
+ | Folosiți ''/dev/urandom'', ''dd'' și ''split'' pentru a genera, într-un one liner, 100 de fișiere a câte 100 de octeți aleatori cu numele ''partXYZ.dat'' unde ''XYZ'' sunt valorile 000, 001, ..., 099. Adică ''part000.dat'', ''part001.dat'', ..., ''part099.dat''. | ||
+ | |||
+ | <note tip> | ||
+ | ''dd'' poate scrie la standard output în **absența** opțiunii ''of''. | ||
+ | |||
+ | ''split'' poate citi de la standard input dacă se folosește construcția ''-'' (semnul minus) pentru numele fișierului. | ||
+ | </note> | ||
+ | |||
+ | ==== Exercițiu 5 ==== | ||
- | TODO | + | Am văzut în secțiunea de Demo că putem folosi anumite caractere ce țin locul unor bucăți de text, de exemplu caracterul ''*''. De exemplu, dacă dorim să listăm toate fișierele din ''/etc'' care încep cu stringul ''ssh'' putem folosi comanda: |
- | ==== TODO: Exercițiu 1 ==== | + | <code bash> |
+ | training@box:~$ ls /etc/ssh* | ||
+ | </code> | ||
- | TODO | + | După cum observați, caracterul ''*'' ține loc pentru %%"oricâte și orice caractere"%%. Procedați asemănător și afișați fișierele sau directoarele din ''/etc'' cu extensia ''.conf''. |
- | ==== TODO: Exercițiu 2 ==== | + | Realizați o arhivă de tipul ''zip'' în directorul ''home'' al utilizatorului ''training'' (''/home/training'') care să conțină toate fișierele și directoarele din ''/etc/'' care conțin stringul ''conf'' în numele lor. |
- | TODO | + | <note tip> |
+ | Este foarte probabil ca printre fișierele și directoarele găsite să existe directoare care nu sunt goale. Pentru a arhiva și conținutul acestora trebuie să specificăm acest lucru explicit comenzii ''zip''. Căutați în output-ul comenzii | ||
+ | <code> | ||
+ | zip --help | ||
+ | </code> | ||
+ | după opțiunea care trece recursiv prin directoare (//recurse into directories//). | ||
+ | </note> | ||
+ | Comanda ''unzip'' dezarhivează o arhivă ''.zip'' dar are și o opțiunea de listare a conținutului acelei arhive fără a o dezarhiva însă. Identificați acea opțiune. |