Differences

This shows you the differences between two versions of the page.

Link to this comparison view

uso:laboratoare:laborator-06:inspect-files [2022/11/09 12:40]
andrei.dragomir1401 [Inspectarea rapida a conținutului fișierelor]
uso:laboratoare:laborator-06:inspect-files [2025/10/26 16:53] (current)
daniel_ioan.dinu Typos in [Exerciții]
Line 1: Line 1:
 ====== Inspectarea fișierelor ====== ====== Inspectarea fișierelor ======
  
-===== Inspectarea ​rapida ​a conținutului fișierelor =====+===== Inspectarea ​rapidă ​a conținutului fișierelor =====
  
-În secțiunea anterioară,​ ''​%%Inspectarea sistemului de fișiere%%'',​ am văzut cum căutăm fișiere în sistem cu ajutorul ​utilitarelor ''​%%locate%%''​ și ''​%%find%%''​. Căutăm un fișier cu un scop: vrem să găsim fișierul ''​%%README%%''​ pentru informații despre compilarea proiectului,​ vrem să ne amintim un detaliu de implementare din cod, etc.+În secțiunea anterioară,​ ''​%%Inspectarea sistemului de fișiere%%'',​ am văzut cum căutăm fișiere în sistem cu ajutorul ​utilitarului ​''​%%find%%''​. Căutăm un fișier cu un scop: vrem să găsim fișierul ''​%%README%%''​ pentru informații despre compilarea proiectului,​ vrem să ne amintim un detaliu de implementare din cod, etc.
  
 De cele mai multe ori acțiunea noastră se poate grupa în una din următoarele două categorii: De cele mai multe ori acțiunea noastră se poate grupa în una din următoarele două categorii:
  
-  * Ne dorim să inspectăm rapid conținutul fișierelor pentru a ne da seama dacă am găsit informația căutată. +  * Ne dorim să inspectăm/​citim ​rapid conținutul fișierelor pentru a ne da seama dacă am găsit informația căutată. 
-  * Ne dorim să afișăm pe ecran conținutul fișierelor pentru a extrage și prelucra informații din acestea.+  * Ne dorim să afișăm pe ecran conținutul fișierelor pentru a extrage și prelucra informații din acestea ​cu ajutorul altor comenzi.
  
 ==== Căutarea informației într-un fișier ==== ==== Căutarea informației într-un fișier ====
  
-Pentru a vedea rapid conținutul unui fișier folosim ​utlitarul ​''​%%less%%''​.+Pentru a vedea rapid conținutul unui fișier folosim ​utilitarul ​''​%%less%%''​.
  
 <​note>​ <​note>​
Line 57: Line 57:
  
 <​note>​ <​note>​
-În cadrul unei sesiuni ''​%%less%%''​ putem folosi ​aceeleași taste ca în cadrul sesiunii interactive ''​%%man%%''​ pentru navigarea în pagină:+În cadrul unei sesiuni ''​%%less%%''​ putem folosi ​aceleași taste ca în cadrul sesiunii interactive ''​%%man%%''​ pentru navigarea în pagină:
  
   * ''​%%Ctrl+n%%''/''​%%Ctrl+p%%''​ sau ''​%%j%%''/''​%%k%%''​ pentru a naviga, cu câte o linie, în jos, respectiv în sus; recomandăm utlizarea tastelor ''​%%j%%''/''​%%k%%''​ pentru a fi mai eficienți   * ''​%%Ctrl+n%%''/''​%%Ctrl+p%%''​ sau ''​%%j%%''/''​%%k%%''​ pentru a naviga, cu câte o linie, în jos, respectiv în sus; recomandăm utlizarea tastelor ''​%%j%%''/''​%%k%%''​ pentru a fi mai eficienți
Line 73: Line 73:
 === Exerciții === === Exerciții ===
  
-  - Analizați, folosind ''​%%less%%'', ​algoritmul ​de căutare din fișierul ''​%%workspace/​C/​searching/​linear_search.c%%''​. Ce implementare este mai eficientă: **binary_search** sau **linear_search**?​ +  - Analizați, folosind ''​%%less%%'', ​algoritmii ​de căutare din fișierele ​''​%%workspace/​C/​searching/​linear_search.c%%''​ și ''​%%workspace/​C/​searching/​binary_search.c%%''​. Ce implementare este mai eficientă: **binary_search** sau **linear_search**?​ 
-  - Analizați, folosind ''​%%less%%'',​ algoritmul de sortare **quick_sort**. ​Folosiți utilitarul ''​%%find%%''​ pentru a găsi fișierul sursă care conține ​implementarea. +  - Folosiți utilitarul ''​%%find%%''​ pentru a găsi fișierul sursă care conține ​algoritmul de sortare **quick_sort**. Analizați ​implementarea acestuia ​folosind ​utilitarul ​''​%%less%%''​. 
-  - Analizațifolosind ''​%%less%%''​, algoritmul de sortare **merge_sort**. Folosiți utilitarul ''​%%find%%''​ pentru a găsi fișierul sursă care conține implementarea.+  - Folosiți utilitarul ''​%%find%%''​ pentru a găsi fișierul sursă care conține ​algoritmul de sortare **merge_sort**. Analizați ​implementarea ​acestuia folosind utilitarul ''​%%less%%''​.
   - Căutați pe Google detalii despre cei doi algoritmi de sortare și încercați să vă răspundeți la întrebarea:​ Când folosim **merge_sort** și când folosim **quick_sort**?​   - Căutați pe Google detalii despre cei doi algoritmi de sortare și încercați să vă răspundeți la întrebarea:​ Când folosim **merge_sort** și când folosim **quick_sort**?​
  
Line 98: Line 98:
 [...] [...]
 </​code>​ </​code>​
-Observăm că pentru un fișier cu un număr mare de linii, așa cum este **binary_search.c**,​ afișarea întregului conținut pe ecran devine un impediment în a putea înțelege și urmări conținutul. De aceea vă încurajăm să folosiți ''​%%less%%''​ în loc de ''​%%cat%%''​ pentru a inspecta un fișier: vă este mult mai ușor să vă plimbați în interiorul fișierului și puteți folosi funcția search pentru a căuta în fișier. De asemeni, folosind ''​%%less%%''​ vă păstrați consola curată și puteți urmări mai ușor ce comenzi ați dat anterior și care au fost rezultatele acestora.+Observăm că pentru un fișier cu un număr mare de linii, așa cum este **binary_search.c**,​ afișarea întregului conținut pe ecran devine un impediment în a putea înțelege și urmări conținutul. De aceeavă încurajăm să folosiți ''​%%less%%''​ în loc de ''​%%cat%%''​ pentru a inspecta un fișier: vă este mult mai ușor să vă plimbați în interiorul fișierului și puteți folosi funcția search pentru a căuta în fișier. De asemenea, folosind ''​%%less%%''​ vă păstrați consola curată și puteți urmări mai ușor ce comenzi ați dat anterior și care au fost rezultatele acestora.
  
-Folosim comanda ''​%%cat%%''​ în combinație cu alte comenzi pentru a extrage sau filtra conținutul anumitor fișiere. Comanda ''​%%cat%%''​ primește ca argumente ​calea către unul sau mai multe fișiere și afișează pe ecran conținutul concatenat al acestora.+Folosim comanda ''​%%cat%%''​ în combinație cu alte comenzi pentru a extrage sau filtra conținutul anumitor fișiere. Comanda ''​%%cat%%''​ primește ca argument ​calea către unul sau mai multe fișiere și afișează pe ecran conținutul concatenat al acestora.
  
 Un exemplu uzual este faptul că vrem să extragem informațiile despre starea memoriei sistemului din fișierul ''​%%/​proc/​meminfo%%''​. Pentru aceasta rulăm comanda de mai jos: Un exemplu uzual este faptul că vrem să extragem informațiile despre starea memoriei sistemului din fișierul ''​%%/​proc/​meminfo%%''​. Pentru aceasta rulăm comanda de mai jos:
Line 110: Line 110:
 MemAvailable: ​    ​874420 kB MemAvailable: ​    ​874420 kB
 </​code>​ </​code>​
-În exemplul de mai sus folosim ''​%%cat%%''​ pentru a oferi ca intrare conținutul fișierului ''​%%/​proc/​meminfo%%''​ utilitarului ''​%%grep%%'';​ cu utilitarul ''​%%grep%%''​ filtrăm conținutul după textul ''​%%"​Mem"​%%''​. Cu alte cuvinte, outputul comenzii ''​%%cat /​proc/​meminfo%%'',​ adică conținutul fișierului ''​%%/​proc/​meminfo%%''​ este textul pe care utilitarul ''​%%grep%%''​ îl prelucrează.+În exemplul de mai sus folosim ''​%%cat%%''​ pentru a oferi ca intrare conținutul fișierului ''​%%/​proc/​meminfo%%''​ utilitarului ''​%%grep%%'';​ cu utilitarul ''​%%grep%%''​ filtrăm conținutul după textul ''​%%"​Mem"​%%''​. ​Despre operatorul ''​%%|%%''​ vom vorbi mai jos. 
 + 
 +Cu alte cuvinte, outputul comenzii ''​%%cat /​proc/​meminfo%%'',​ adică conținutul fișierului ''​%%/​proc/​meminfo%%''​ este textul pe care utilitarul ''​%%grep%%''​ îl prelucrează.
  
 **Exercițiu**:​ Plecând de la exemplul de mai sus, extrageți din fișierul ''​%%/​proc/​cpuinfo%%''​ dimensiunea memoriei cache a procesorului vostru; filtrați conținutul după textul ''​%%"​cache"​%%''​. **Exercițiu**:​ Plecând de la exemplul de mai sus, extrageți din fișierul ''​%%/​proc/​cpuinfo%%''​ dimensiunea memoriei cache a procesorului vostru; filtrați conținutul după textul ''​%%"​cache"​%%''​.
Line 169: Line 171:
 În acest moment am găsit răspunsul căutat, dar avem două mici neajunsuri: În acest moment am găsit răspunsul căutat, dar avem două mici neajunsuri:
  
-  * Ne lipsește antetul, așa că nu știm ce informații avem pe coloane+  * Ne lipsește antetul ​(aflat pe prima linie), așa că nu știm ce informații avem pe coloane
   * Procesele sunt sortate crescător, a.î. cel mai consumator este ultimul; vrem să fie sortate descrescător   * Procesele sunt sortate crescător, a.î. cel mai consumator este ultimul; vrem să fie sortate descrescător
  
-Rezolvăm cele două probleme prin intermediul opțiunii ''​%%--sort%%'':​ dacă punem un ''​%%-%%''​ (minus) în fața argumentului după care sortăm, o să sortăm descrescător. Rulăm comanda:+Rezolvăm cele două probleme prin intermediul opțiunii ''​%%--sort%%'':​ dacă punem un ''​%%-%%''​ (minus) în fața argumentului după care sortăm, o să sortăm descrescător. Rulăm comanda ​nouă și vizualizăm rezultatul folosind ''​%%less%%''​:
  
 <code bash> <code bash>
Line 208: Line 210:
 ===== Căutarea în fișiere ===== ===== Căutarea în fișiere =====
  
-Așa cum am văzut până în acest punct din carte, majoritatea comenzilor Linux afișează o gamă largă de informații pe care apoi utilizatorul (adică noi) le filtrează pentru a extrage ceea ce îl intresează. La începutul ​acestei secțiuni, dar și de-a lungul ​cărții, am folosit utilitarul ''​%%grep%%''​ ca să filtrăm rezultatul unei comenzi.+Așa cum am văzut până în acest punct, majoritatea comenzilor Linux afișează o gamă largă de informații pe care apoi utilizatorul (adică noi) le filtrează pentru a extrage ceea ce îl interesează. La începutul ​acestui laborator, dar și de-a lungul ​materiei, am folosit utilitarul ''​%%grep%%''​ ca să filtrăm rezultatul unei comenzi.
  
-Comanda ''​%%grep%%''​ este una dintre cele mai folosite în linie de comandă. Sintaxa de folosire a ''​%%grep%%''​ este următoarea:​+Comanda ''​%%grep%%''​ este una dintre cele mai folosite în linia de comandă. Sintaxa de folosire a ''​%%grep%%''​ este următoarea:​
  
 <code bash> <code bash>
Line 249: Line 251:
 ==== Exerciții ==== ==== Exerciții ====
  
-  - Căutați //patternul// "​l"​ în fișierul ''​%%binary_search.c%%'',​ pentru a vedea unde este folosit parametrul **left**. Observați cât de multe rezultate irelevante ați găsit datorită faptului că am căutat doar caracterul **l**. Aici există o lecție de învățat. Numele variabilelor sunt foarte ​improtante: nu fac doar codul mai ușor de înțeles, dar ajută și căutarea. Folosiți //patternul// "param l" în încercarea de a restrânge căutarea. +  - Căutați //pattern-ul// "​l"​ în fișierul ''​%%binary_search.c%%'',​ pentru a vedea unde este folosit parametrul **left** ​al funcției de căutare binară. Observați cât de multe rezultate irelevante ați găsit datorită faptului că am căutat doar caracterul **l**. Aici există o lecție de învățat. Numele variabilelor sunt foarte ​importante: nu fac doar codul mai ușor de înțeles, dar ajută și căutarea. Folosiți //pattern-ul// "param l" în încercarea de a restrânge căutarea. 
-  - Căutați //patternul// "​arr"​ în fișierul ''​%%binary_search.c%%''​. +  - Căutați //pattern-ul// "​arr"​ în fișierul ''​%%binary_search.c%%''​. 
-  - Căutați //patternul// "​binarysearch1"​ în fișierul ''​%%binary_search.c%%''​ pentru a vedea cum este apelată funcția de căutare.+  - Căutați //pattern-ul// "​binarysearch1"​ în fișierul ''​%%binary_search.c%%''​ pentru a vedea cum este apelată funcția de căutare.
  
 ==== Extra: Opțiuni uzuale ale grep ==== ==== Extra: Opțiuni uzuale ale grep ====
  
-=== Afișarea numărului liniei care conține ​patternul ​===+=== Afișarea numărului liniei care conține ​pattern-ul ​===
  
-Folosim opțiunea ''​%%-n%%''​ pentru a afișa și numărul liniei care conține ​patternul ​căutat:+Folosim opțiunea ''​%%-n%%''​ pentru a afișa și numărul liniei care conține ​pattern-ul ​căutat:
  
 <code bash> <code bash>
Line 271: Line 273:
 === Căutarea case-insensitive === === Căutarea case-insensitive ===
  
-Implicit, grep caută în mod case-sensitive ​patternul, așa cum putem observa din exemplul de mai jos:+Implicit, grep caută în mod case-sensitive ​pattern-ul, așa cum putem observa din exemplul de mai jos:
  
 <code bash> <code bash>
 student@uso:​~$ grep Search workspace/​C/​searching/​binary_search.c student@uso:​~$ grep Search workspace/​C/​searching/​binary_search.c
 </​code>​ </​code>​
-Pentru a efectua căutarea textului în mod case-insesnsitive, folosim opțiunea ''​%%-i%%'',​ ca în exemplul de mai jos:+Pentru a efectua căutarea textului în mod case-insensitive, folosim opțiunea ''​%%-i%%'',​ ca în exemplul de mai jos:
  
 <code bash> <code bash>
Line 290: Line 292:
 === Excluderea unui pattern === === Excluderea unui pattern ===
  
-Pentru a afișa toate liniile, mai puțin pe cele care conțin pattern, folosim opțiunea ''​%%-v%%'',​ ca în exemplul de mai jos:+Pentru a afișa toate liniile, mai puțin pe cele care conțin pattern-ul, folosim opțiunea ''​%%-v%%'',​ ca în exemplul de mai jos:
  
 <code bash> <code bash>
Line 308: Line 310:
 === Căutarea recursivă a unui pattern === === Căutarea recursivă a unui pattern ===
  
-În căutările noastre de până acum, ca și în exemplele de mai sus, am presupus că știm în ce fișiere se găsește informația căutată de noi. Acest lucru este adevărat pentru fișiere din sistem cu informații bine cunoscute, cum ar fi ''​%%/​proc/​meminfo%%'',​ dar atunci când lucrăm cu un proiect nou nu vom ști în ce fișiere să căutăm informația dorită. De exemplu, în cazul proiectului cu algoritmi implementați în C, noi am făcut presupunerea că vom găsi linii care conțin ​patternul ​**search** în fișierul ''​%%workspace/​C/​searching/​binary_search.c%%''​.+În căutările noastre de până acum, ca și în exemplele de mai sus, am presupus că știm în ce fișiere se găsește informația căutată de noi. Acest lucru este adevărat pentru fișiere din sistem cu informații bine cunoscute, cum ar fi ''​%%/​proc/​meminfo%%'',​ dar atunci când lucrăm cu un proiect nounu vom ști în ce fișiere să căutăm informația dorită. De exemplu, în cazul proiectului cu algoritmi implementați în C, noi am făcut presupunerea că vom găsi linii care conțin ​pattern-ul ​**search** în fișierul ''​%%workspace/​C/​searching/​binary_search.c%%''​.
  
-Atunci când nu știm în ce fișiere se află informația căutată putem să-i spunem lui ''​%%grep%%''​ să caute recursiv prin toată ierarhia de fișiere dintr-un anumit director. Pentru a efectua o căutare recursivă folosim opțiunea ''​%%-r%%'',​ ca în exemplul de mai jos:+Atunci când nu știm în ce fișiere se află informația căutatăputem să-i spunem lui ''​%%grep%%''​ să caute recursiv prin toată ierarhia de fișiere dintr-un anumit director. Pentru a efectua o căutare recursivă folosim opțiunea ''​%%-r%%'',​ ca în exemplul de mai jos:
  
 <code bash> <code bash>
Line 369: Line 371:
 === Bonus: Căutarea unui cuvânt === === Bonus: Căutarea unui cuvânt ===
  
-Din rezultatele căutărilor de mai sus observăm că ''​%%grep%%''​ caută ​patternul ​dat ca un subșir. Acest lucru se vede foarte ușor în rezultatul anterior:+Din rezultatele căutărilor de mai sus observăm că ''​%%grep%%''​ caută ​pattern-ul ​dat ca un subșir. Acest lucru se vede foarte ușor în rezultatul anterior:
  
 <code bash> <code bash>
Line 376: Line 378:
 workspace/​C/​leetcode/​src/​700.c:​10:​struct TreeNode *searchBST(struct TreeNode *root, int val) workspace/​C/​leetcode/​src/​700.c:​10:​struct TreeNode *searchBST(struct TreeNode *root, int val)
 </​code>​ </​code>​
-Observăm că patternul ​**search** se regăsește în șirul ***searchBST**. Dacă dorim să căutăm cuvântul **search** folosim opțiunea ''​%%-w%%''​ (word) pentru a-i transmite utilitarului că patternul ​trebuie tratat ca un cuvânt, ca în exemplul de mai jos:+Observăm că pattern-ul ​**search** se regăsește în șirul ***searchBST**. Dacă dorim să căutăm cuvântul **search** folosim opțiunea ''​%%-w%%''​ (word) pentru a-i transmite utilitarului că pattern-ul ​trebuie tratat ca un cuvânt, ca în exemplul de mai jos:
  
 <code bash> <code bash>
Line 390: Line 392:
 === Exerciții === === Exerciții ===
  
-  - Găsiți toate fișierele care includ ​headerul ​''​%%stdio.h%%''​. +  - Găsiți toate fișierele care includ ​header-ul ​''​%%stdio.h%%''​. 
-  - Găsiți toate aparițiile ​patternului ​''​%%binarySearch%%''​. +  - Găsiți toate aparițiile ​pattern-ului ​''​%%binarySearch%%''​. 
-  - Găsiți toate aparițiile ​patternului ​''​%%quickSort%%''​.+  - Găsiți toate aparițiile ​pattern-ului ​''​%%quickSort%%''​.
  
  
uso/laboratoare/laborator-06/inspect-files.1667990459.txt.gz · Last modified: 2022/11/09 12:40 by andrei.dragomir1401
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0