Differences

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

Link to this comparison view

info1:laboratoare:05 [2020/10/07 14:05]
127.0.0.1 external edit
info1:laboratoare:05 [2020/11/24 12:42] (current)
alexandru.vochescu
Line 1: Line 1:
-===== Laboratorul ​05. =====+====== Laborator ​05 - Lucrul în linia de comandă - 1 ====== 
 + 
 +{{page>​uso:​laboratoare:​laborator-05:​improve-terminal&​nofooter&​noeditbutoon}} 
 +====== Inspectarea sistemului de fișiere ====== 
 + 
 +===== Cea mai importantă comandă ===== 
 + 
 +Așa cum spuneam mai devreme, marele avantaj al utilizării terminalului este că ne ajută să rezolvăm sarcini foarte rapidRezolvăm sarcini folosind utilitarele pe care le avem disponibile în linia de comandă, fie că acestea fac parte din sistemul nostru sau le-am instalat. 
 + 
 +Cel mai important utilitar pe care îl avem la dispoziție este ''​%%man%%''​. Utilitarul ''​%%man%%''​ ne deschide pagina de manual în care este documentat un alt utilitar pe care dorim să-l folosim. 
 + 
 +<code bash> 
 +student@uso:​~$ man 
 +What manual page do you want? 
 +</​code>​ 
 +Putem consulta însăși pagina de manual a utilitarului ''​%%man%%''​ 
 + 
 +<code bash> 
 +student@uso:​~$ man man 
 +</​code>​ 
 +Vom fi întâmpinați de următorul program interactiv:​ 
 + 
 +<code bash> 
 +MAN(1) ​                       Manual pager utils                        MAN(1) 
 + 
 +NAME 
 +       man - an interface to the on-line reference manuals 
 + 
 +SYNOPSIS 
 +       ​man ​ [-C  file]  [-d]  [-D]  [--warnings[=warnings]] ​ [-R encoding] [-L 
 +       ​locale] [-m system[,​...]] [-M path] [-S list]  [-e  extension] ​ [-i|-I] 
 +       ​[--regex|--wildcard] ​  ​[--names-only] ​ [-a]  [-u]  [--no-subpages] ​ [-P 
 +       ​pager] [-r prompt] [-7] [-E encoding] [--no-hyphenation] [--no-justifi‐ 
 +       ​cation] ​ [-p  string] ​ [-t]  [-T[device]] ​ [-H[browser]] [-X[dpi]] [-Z] 
 +       ​[[section] page[.section] ...] ... 
 +       man -k [apropos options] regexp ... 
 +       man -K [-w|-W] [-S list] [-i|-I] [--regex] [section] term ... 
 +       man -f [whatis options] page ... 
 +       man -l [-C file] [-d] [-D] [--warnings[=warnings]] ​ [-R  encoding] ​ [-L 
 +       ​locale] ​ [-P  pager] ​ [-r  prompt] ​ [-7] [-E encoding] [-p string] [-t] 
 +       ​[-T[device]] [-H[browser]] [-X[dpi]] [-Z] file ... 
 +       man -w|-W [-C file] [-d] [-D] page ... 
 +       man -c [-C file] [-d] [-D] page ... 
 +       man [-?V] 
 + 
 + ​Manual page man(1) line 1 (press h for help or q to quit) 
 +</​code>​ 
 +Observăm că ultima linie din terminal, **Manual page man(1) line 1 (press h for help or q to quit)**, ne oferă mai multe informații:​ 
 + 
 +  * Ne aflăm pe prima linie din prima pagină a manualului 
 +  * Putem apăsa tasta ''​%%h%%''​ pentru a acesa meniul de ajutor 
 +  * Putem apăsa tasta ''​%%q%%''​ pentru a ieși din manual 
 + 
 +==== Navigarea prin paginile manualului ==== 
 + 
 +Navigăm cu câte o linie de terminal în joș și în sus folosind folosind tastele ''​%%Ctrl+n%%''​ și ''​%%Ctrl+p%%''​. Putem folosi tastele ''​%%Ctrl+f%%''​ și ''​%%Ctrl+b%%''​ pentru a naviga, cu câte un ecran de terminal, în jos și în sus în pagină. Mai simplu, putem folosi tasta ''​%%Enter%%''​ pentru a naviga cu câte o linie în jos și tasta ''​%%Space%%''​ pentru a naviga cu câte un ecran în jos. Navigăm la începutul paginii folosind tasta ''​%%g%%''​. Navigăm la sfârșit paginii folosind tasta ''​%%G%%''​. 
 + 
 +<​note>​ 
 + 
 + 
 +Putem folosi tastele ''​%%j%%''​ și ''​%%k%%''​ ca alternative pentru ''​%%Arrow Down%%''​ și ''​%%Arrow Up%%''​. Astfel suntem mai rapizi pentru că nu ne mai mutăm mâna de pe tastele caractere. 
 +</​note>​ 
 + 
 +Folosim ''​%%man%%''​ ca să vedem dacă un utilitar oferă o anumită funcționaltiate. Citim întreaga pagină de manual ca să vedem toate funcționalitățile sau căutăm o funcționalitate folosind cuvinte cheie. Pașii pentru căutarea unui cuvânt cheie sunt următorii:​ 
 + 
 +  - Pentru a porni funcția de căutare apăsăm tasta ''​%%/​%%''​ în sesiunea interactivă din ''​%%man%%''​. 
 +  - În continuare vom introduce textul pe care dorim să-l căutăm: poate să fie un cuvântul cheie pe care îl știm deja sau orice text care sperăm că ne duce la rezultatul dorit. 
 +  - Acum apăsăm tasta ''​%%Enter%%''​. Vom fi duși la primul rezultat care se potrivește căutării, dacă acesta există. 
 +  - Dacă vrem să navigăm la următorul rezultat apăsăm tasta ''​%%n%%''​. Dacă vrem să navigăm la un rezultat anterior apăsăm tasta ''​%%N%%''​. 
 + 
 +Căutarea((Căutarea este case-sensitive. Putem să schimbăm acest comportament prin introducerea opțiunii ''​%%-I%%''​ în sesiunea interactivă,​ înainte de a porni căutarea. Dacă doriți să aflați mai multe despre opțiunile pe care le putem introduce apăsați tasta ''​%%h%%''​ într-o sesiune interactivă și căutați textul "​OPTIONS"​. 
 +)) are loc de la poziția curentă în pagină către sfârșitul paginii. Dacă am navigat deja în interiorul paginii, trebuie să avem în vedere că rezultatul de interes al căutării noastre se poate alfa undeva între începutul paginii și poziția noastră curentă((Putem folosi tasta ''​%%?​%%''​ pentru a porni o căutare de la poziția curentă către începutul paginii. Alternativ, putem naviga la începutul paginii prin apăsarea unei singure taste (''​%%g%%''​) și apoi pornim căutarea ''​%%/​%%''​ de acolo. 
 +)). 
 + 
 +==== Interpretarea paginii de manual ==== 
 + 
 +La o primă vedere, textul paginii de manual poate fi intimidant; unele utilitare au mai multe opțiuni și argumente, unele opționale, altele nu. O să trecem prin sintaxă și o să vedem că lucrurile sunt mult mai simple decât par. Să analizăm pagina de manual a utilitarului ''​%%ls%%'';​ ''​%%man ls%%'':​ 
 + 
 +<code bash> 
 +LS(1)                            User Commands ​                          ​LS(1) 
 + 
 +NAME 
 +       ls - list directory contents 
 + 
 +SYNOPSIS 
 +       ls [OPTION]... [FILE]... 
 + 
 +DESCRIPTION 
 +       ​List ​ information ​ about  the FILEs (the current directory by default). 
 +       Sort entries alphabetically if none of -cftuvSUX nor --sort ​ is  speci‐ 
 +       ​fied. 
 + 
 +       ​Mandatory ​ arguments ​ to  long  options are mandatory for short options 
 +       ​too. 
 + 
 +       -a, --all 
 +              do not ignore entries starting with . 
 + 
 +       -A, --almost-all 
 +              do not list implied . and .. 
 + 
 +       ​--author 
 + ​Manual page ls(1) line 1 (press h for help or q to quit) 
 +</​code>​ 
 + 
 +  * Prima secțiune care ne interesează este "​DESCRIPTION"​. Citim descrierea și ne dăm seama dacă utilitarul ne va ajuta în rezolvarea sarcinii pe care o avem. În cazul utilitarului ''​%%ls%%'',​ descrierea ne informează că acesta afișează informații despre fișierele din calea indicată, sau din directorul curent atunci când nu specificăm o cale. 
 +  * Cea de-a doua secțiune care ne interesează este "​SYNOPSIS"​. Aceasta ne spune cum putem să rulăm utilitarul, ce opțiuni și argumente sunt opționale (pot lipsi) și ce opțiuni și argumente sunt obligatorii. 
 + 
 +    <code bash> 
 +    SYNOPSIS 
 +           ls [OPTION]... [FILE]... 
 +    </​code>​ 
 + 
 +Sintaxa **[ ]** ne spune că acea categorie este opțională. Astfel, pentru ''​%%ls%%'',​ deducem că atât opțiunile (''​%%[OPTION]...%%''​) cât și argumentele (''​%%[FILE]...%%'',​ calea către fișiere sau directoare) sunt opționale. Cele trei puncte ''​%%...%%''​ înseamnă mai multe din categoria precedentă:​ deci ''​%%[OPTION]...%%''​ înseamnă că nu suntem limitați la o singură opțiune, dar opțiunile pot să și lipsească în totalitate datorită **[ ]**. 
 + 
 +O comandă poate avea atât opțiuni, cât și argumente. Opțiunile îi spun unei comenzi cum să își modifice comportamentul,​ și de obicei sunt precedate de ''​%%-%%''​ (ex. ''​%%-l%%'',​ ''​%%--verbose%%'',​ etc.). Argumentele îi spun unei comenzi pe ce să acționeze. 
 + 
 +În exemplul de mai jos: 
 +<code bash> 
 +student@uso:​~$ ls -l Desktop/ 
 +</​code>​ 
 +Avem utilitarul ''​%%ls%%''​ care primește opțiunea ''​%%-l%%''​ și argumentul ''​%%Desktop/​%%''​. 
 + 
 +  * Ultima observație pe care o facem este că opțiunile unei comenzi pot avea o formă prescurtată,​ ''​%%-a%%'',​ sau o formă lungă, ''​%%--all%%''​. Nu este obligatoriu ca o opțiune să expună ambele forme, deși majoritatea o fac. Opțiunile în formă prescurtată pot fi concatenate și precedate de un singur ''​%%-%%'',​ ca în exemplul de mai jos: 
 +<code bash> 
 +student@uso:​~$ ls -la Desktop/ 
 +</​code>​ 
 + 
 +=== Exerciții === 
 + 
 +Deschideți pagina de manual a utilitarului ''​%%ls%%''​. 
 + 
 +  - Căutați opțiunea ''​%%-a%%''​. Rulați comanda ''​%%ls -a%%''​. 
 +  - Căutați opțiunea ''​%%-d%%''​. Rulați comanda ''​%%ls -d%%''​. 
 +  - Căutați opțiunea ''​%%-F%%''​. Rulați comanda ''​%%ls -F%%''​. 
 +  - Căutați cuvântul cheie ''​%%list%%''​. Treceți la următoarea apariție a cuvântului cheie până ajungeți la opțiunea ''​%%-l%%''​. 
 +  - Mergeți la finalul paginii folosind tasta ''​%%G%%''​. Căutați cuvântul cheie ''​%%color%%''​ până ajungeți la opțiunea ''​%%--color%%''​ (Hint: ''​%%?​%%''​). 
 + 
 +===== Selectarea multiplor fișiere folosind globbing ===== 
 + 
 +Întotdeauna când deschidem un terminal o facem pentru că vrem să realizăm o sarcină: vrem să redenumim rapid ultimele poze făcute cu telefonul de la genericul **DCIM1001** la ceva util **Excursie Sinaia, Ian 2020, 1001**, vrem să ne testăm proiectul și să urcăm modificările pe GitHub, etc. 
 + 
 +Până acum am aplicat diferite comenzi fie pe fișiere individuale,​ fie pe întreg directorul. Foarte des vom avea nevoie de un mijloc prin care să putem selecta un număr variabil de fișiere care au un nume care corespunde unui tipar (//​pattern//​) comun. 
 + 
 +Să revenim la scenariul prezentat anterior: vrem să selectăm pozele din excursia din Sinaia. În directorul în care avem pozele din excursie avem și alte poze de la alte evenimente. Știm că pozele din excursie încep toate cu numele **DCIM** și apoi sunt urmate de un număr. Ceea ce vrem să facem este să selectăm toate pozele al căror nume corespunde acestui tipar și să le mutăm într-un director separat. Pentru a face acest lucru, folosim **globbing**,​ ca în exemplul de mai jos: 
 + 
 +<code bash> 
 +student@uso:​~/​Pictures$ mv DCIM* excursie-Sinaia-2020/​ 
 +</​code>​ 
 +Observăm argumentul pe care l-am dat comenzii ''​%%mv%%'',​ și anume ''​%%DCIM*%%''​. Expresia ''​%%DCIM*%%''​ este un exemplu de globbing: adică o expresie care descrie un tipar prin folosirea unor caractere speciale, așa cum este caracterul ''​%%*%%''​. În cazul de față, expresia ''​%%DCIM*%%''​ înseamnă orice fișier al cărui nume începe cu șirul de caractere ''​%%DCIM%%''​. 
 + 
 +==== Caracterul special * ==== 
 + 
 +În sintaxa globbing, caracterul ''​%%*%%''​ poate fi înlocuit cu orice caracter de oricâte ori, sau poate lipsi cu totul. În directorul nostru home (''​%%~%%''​),​ executăm următoarele comenzi: 
 + 
 +<code bash> 
 +student@uso:​~$ ls 
 +Desktop ​   Downloads ​ Pictures ​ Templates ​ examples.desktop ​ vm-actions-log.txt 
 +Documents ​ Music      Public ​   Videos ​    ​uso.git ​          ​workspace 
 + 
 +student@uso:​~$ ls -d D* 
 +Desktop ​ Documents ​ Downloads 
 + 
 +student@uso:​~$ ls -d Music* 
 +Music 
 +</​code>​ 
 +Observăm că în expresia ''​%%D*%%'',​ caracterul ''​%%*%%''​ înglobează toate caracterele care urmează literei **D**: "​esktop",​ "​ocuments"​ și "​ownloads"​. Observăm că în cazul expresie ''​%%Music*%%'',​ ''​%%*%%''​ nu ține locul nici unui caracter. 
 + 
 +==== Caracterul special ? ==== 
 + 
 +În sintaxa globbing, caracterul ''​%%?​%%''​ înlocuiește exact un caracter, oricare ar fi acela. În directorul nostru home (''​%%~%%''​),​ executăm următoarele comenzi: 
 + 
 +<code bash> 
 +student@uso:​~$ ls -d Musi? 
 +Music 
 + 
 +student@uso:​~$ ls -d Mus?? 
 +Music 
 + 
 +student@uso:​~$ ls -d Music? 
 +ls: cannot access '​Music?':​ No such file or directory 
 +</​code>​ 
 +Observăm că expresiile ''​%%Musi?​%%''​ și ''​%%Mus??​%%''​ s-au înlocuit cu succes cu numele directorului ''​%%Music%%'',​ dar expresia ''​%%Music?​%%''​ a generat o eroare deoarece nu există nici un fișier **Music** urmat de un caracter. 
 + 
 +==== Sintaxa specială [] ==== 
 + 
 +În sintaxa globbing, folosim sintaxa ''​%%[]%%''​ pentru a defini o listă de caractere care pot fi folosite în înlocuire. Această sintaxă înlocuiește exact un caracter din lista oferită. În directorul nostru home (''​%%~%%''​),​ executăm următoarele comenzi: 
 + 
 +<code bash> 
 +student@uso:​~$ ls -d Mus[ijk]c 
 +Music 
 + 
 +student@uso:​~$ ls -d Mus[abc]c 
 +ls: cannot access '​Mus[abc]c':​ No such file or directory 
 +</​code>​ 
 +În expresia ''​%%Musi[ijk]c%%'',​ i-am "​spus"​ shellului că al patrulea caracter poate să fie oricare din lista ''​%%[ijk]%%''​. În acest context, globbing a găsit cu succes numele fișierului **Music**. În expresia ''​%%Musi[abc]c%%'',​ i-am "​spus"​ shellului că al patrulea caracter poate să fie oricare din lista ''​%%[abc]%%''​. Deoarece nu avem niciun fișier numit **Musac**, **Musbc** sau **Muscc**, comanda ne-a afișat mesajul de eroare corespunzător. 
 + 
 +Sintaxa ''​%%[]%%''​ nu ne limitează la a oferi enumarații de caractere, așa cum am făcut cu ''​%%[ijk]%%''​ sau ''​%%[abc]%%''​. Sintaxa accepta și intervale, cum observăm în exemplul de mai jos: 
 + 
 +<code bash> 
 +student@uso:​~$ ls -d Mus[A-Za-z0-9]c 
 +Music 
 +</​code>​ 
 +Citim expresia ''​%%[A-Za-z0-9]%%''​ în următorul mod: această expresie înlocuiește un caracter din intervalul ''​%%A-Z%%''​ sau din intervalul ''​%%a-z%%''​ sau din intervalul ''​%%0-9%%'';​ cu alte cuvinte înlocuiește un caracter //​alfa-numeric//​((Folosim forma ''​%%A-Za-z%%''​ pentru a preciza orice caracter din alfabetul englez, indiferent dacă este majusculă sau nu. Nu putem folosi forma ''​%%A-z%%''​ datorită reprezentării caracterelor în tabelul ASCII. Caracterele **A-Z** sunt reprezentate în intervalul **65-90**, iar caracterele **a-z** în intervalul **97-122** în tabelul ascii. Dacă am folosi forma **A-z**, i-am indica expresiei globbing să includă și caracterele din intervalul **91-96** din tabelul ascii în expresia noastră. 
 +)). 
 + 
 +Tip 
 + 
 + 
 +Folosind sintaxa ''​%%[]%%''​ putem rescrie mutarea pozelor a.î. să o facem mai precisă: 
 + 
 +<code bash> 
 +student@uso:​~/​Pictures$ mv DCIM[0-9][0-9][0-9][0-9] excursie-Sinaia-2020/​ 
 +</​code>​ 
 +Cu expresia de mai sus vom muta toate pozele din intervalul **DCIM0000** - **DCIM9999**. 
 + 
 + 
 +==== Sintaxa specială {} ==== 
 + 
 +În sintaxa globbing, folosim sintaxa ''​%%{}%%''​ pentru a defini o listă de cuvinte (grupuri de caractere) care pot fi folosite în înlocuire. Această sintaxă înlocuiește exact un cuvânt din lista oferită. În directorul vostru home (''​%%~%%''​),​ executați următoarele comenzi: 
 + 
 +<code bash> 
 +student@uso:​~$ ls -d {Downloads,​Music} 
 +Downloads ​ Music 
 + 
 +student@uso:​~$ ls -d {Down,​Mus}* 
 +Downloads ​ Music 
 +</​code>​ 
 +Citim expresia ''​%%{Downloads,​Music}%%'':​ în locul acestei expresii poate să existe cuvântul **Downloads** sau cuvântul **Music**. Observăm că putem să combinăm orice elemente de globbing, așa cum am făcut în expresia ''​%%{Down,​Mus}*%%''​. 
 + 
 +==== Folosirea ad-litteram a caracterelor speciale ==== 
 + 
 +Există cazuri când numele fișierelor conțin caractere speciale. Unele fișiere pot fi prefixate cu o categorie din care fac parte, ca în exemplul de mai jos: 
 + 
 +<code bash> 
 +student@uso:​~$ ls Documents/​uni 
 +'[PC] Course 01.pdf' ​ '[USO] Course 01.pdf' ​ '[USO] Course 02.pdf'​ 
 +</​code>​ 
 +În exemplul de mai sus, fișierele pdf de curs sunt prefixate cu numele materiei: [PC], [USO]. Vrem să îi spunem sintaxei de globbing că în acest caz, șirul **[USO]** nu trebuie tratat ca o expresie, ci ca un șir de caracter normale. Pentru a face acest lucru, încadrăm șirul între **"​**:​ 
 + 
 +<code bash> 
 +student@uso:​~$ ls Documents/​uni/"​[USO]"​* 
 +'​Documents/​uni/​[USO] Course 01.pdf' ​ '​Documents/​uni/​[USO] Course 02.pdf'​ 
 +</​code>​ 
 +Citim expresia ''​%%"​[USO]"​*%%'':​ orice fișier al cărui nume începe cu șirul de caractere **[USO]** și este urmat de orice caracter. Operația prin care eliminăm semnificația specială a unui caracter poartă numele de **escaping**;​ cu alte cuvinte, informal, spunem că am făcut escaping semnificației speciale a sintaxei ''​%%[]%%''​. Termenul vine de la cuvântul **escape** (a scăpa), și exprimă că scăpăm de semnificația specială a unui caracter / set de caractere. 
 + 
 +==== Exerciții ==== 
 + 
 +Pentru exercițiile următoare vom folosi fișierele din directorul de suport ''​%%~/​uso-lab/​labs/​05-cli/​support/​support-globbing%%''​. 
 + 
 +  - Creați un director numit ''​%%pdfs%%''​. Mutați toate fișierele cu extensia ''​%%.pdf%%''​ din directorul ''​%%~/​uso-lab/​labs/​05-cli/​support/​support-globbing%%''​ în directorul ''​%%pdfs%%''​. 
 +  - Creați un director numit ''​%%Excursie Brasov, 2020-2021%%''​. Mutați fișierele **DCIM** din intervalul 1400 - 1700 în directorul creat. 
 +  - Creați un director numit ''​%%cursuri/​anul-I%%''​. Mutați toate fișierele care conțin cuvintele **curs** sau **slide** în directorul creat. Folosiți sintaxa ''​%%*{curs,​slide}*%%''​. 
 + 
 +===== Căutarea unui fișier în sistem ===== 
 + 
 +De multe ori ne aflăm în situația în care căutăm un fișier pe disc: ex. doar ce am clonat un proiect de pe GitHub și vrem să inspectăm fișierul **Makefile** pentru a vedea cum compilăm și rulăm proiectul. Un alt exemplu poate fi că vrem să vedem cum arată fișierele de test existente în proiect; de multe ori, ințelegem mai bine proiectul doar prin simpla inspectare a testelor. 
 + 
 +Există două utilitare care ne permit să căutăm în cadrul sistemului de fișiere: ''​%%locate%%''​ și ''​%%find%%''​. In cadrul acestui laborator vom vorbi doar despre utilitarul ''​%%locate%%''​. 
 + 
 +==== Utilitarul locate ==== 
 + 
 +Utilitarul ''​%%locate%%''​ folosește o bază de date pentru a căuta în fișierele de pe sistem. Inspectăm pagina de manual a utilitarului pentru a vedea cum îl putem folosi, folosind comanda ''​%%man%%'':​ 
 + 
 +<code bash> 
 +student@uso:​~$ man locate 
 + 
 +SYNOPSIS 
 +       ​locate [OPTION]... PATTERN... 
 +</​code>​ 
 +Observăm că ''​%%locate%%''​ primește ca argument un șir de caractere, **PATTERN**,​ care fac parte din numele fișierului pe care în căutăm, dar nu trebuie să-i dăm numele exact: 
 + 
 +<code bash> 
 +student@uso:​~$ locate todos.txt 
 +/​home/​student/​Desktop/​todos.txt 
 +student@uso:​~$ locate todos 
 +/​home/​student/​Desktop/​todos.txt 
 +</​code>​ 
 +Putem să folosim și sintaxa globbing pentru a descrie numele fișierului căutat: 
 + 
 +<code bash> 
 +student@uso:​~$ locate "​*.txt"​ 
 +/​home/​student/​vm-actions-log.txt 
 +/​home/​student/​.local/​lib/​python2.7/​site-packages/​Keras_Applications-1.0.8.dist-info/​top_level.txt 
 +/​home/​student/​.local/​lib/​python2.7/​site-packages/​Keras_Preprocessing-1.1.2.dist-info/​top_level.txt 
 +/​home/​student/​.local/​lib/​python2.7/​site-packages/​Markdown-3.1.1.dist-info/​entry_points.txt 
 +/​home/​student/​.local/​lib/​python2.7/​site-packages/​Markdown-3.1.1.dist-info/​top_level.txt 
 +/​home/​student/​.local/​lib/​python2.7/​site-packages/​Werkzeug-1.0.1.dist-info/​top_level.txt 
 +</​code>​ 
 +Căutările cu ''​%%locate%%''​ sunt foarte rapide. Acest lucru se datorează utilizării bazei de date pentru a indexa fișierele din sistem. Într-o configurație implicită (//​default//​),​ baza de date se reconstruiește periodic, o dată la 24h. Asta înseamnă că ''​%%locate%%''​ nu va găsi fișiere care au fost create după reconstrucția bazei de date. Dacă vrem să reconstruim baza de date, folosim comanda ''​%%updatedb%%''​. 
 + 
 +Hai să clonăm repository-ul **TheAlgorithms/​C**. Acesta conține implementările diferitor algoritmi folosind limbajul de programare C. 
 + 
 +<code bash> 
 +student@uso:​~$ cd workspace 
 +student@uso:​~/​workspace$ git clone https://​github.com/​TheAlgorithms/​C.git 
 +student@uso:​~/​workspace$ cd C 
 +</​code>​ 
 +Fiind vorba despre un repository care implementează algoritmi clasici, ne așteptăm să găsim și algoritmi de căutare, cum ar fi binary-search. Hai să căutăm după cuvântul cheie **search**. 
 + 
 +<code bash> 
 +student@uso:​~/​workspace$ locate search | grep workspace/​C 
 +student@uso:​~/​workspace$  
 +</​code>​ 
 +Observăm că nu am găsit nici un rezultat. Cum spuneam mai devreme, trebuie să reconstruim baza de date pentru a căuta în fișierele nou create. 
 + 
 +<code bash> 
 +student@uso:​~/​workspace/​C$ sudo updatedb 
 +[sudo] password for student:  
 +</​code>​ 
 +Comanda ''​%%updatedb%%''​ trebuie executată în mod privilegiat,​ așa că folosim ''​%%sudo%%''​. Parola utilizatorului **student**,​ pe mașina noastră virtuală, este **student**. 
 + 
 +<code bash> 
 +student@uso:​~/​workspace/​C$ locate search | grep workspace/​C 
 +/​home/​student/​workspace/​C/​searching 
 +/​home/​student/​workspace/​C/​data_structures/​binary_trees/​binary_search_tree.c 
 +/​home/​student/​workspace/​C/​searching/​CMakeLists.txt 
 +/​home/​student/​workspace/​C/​searching/​binary_search.c 
 +/​home/​student/​workspace/​C/​searching/​fibonacci_search.c 
 +/​home/​student/​workspace/​C/​searching/​interpolation_search.c 
 +/​home/​student/​workspace/​C/​searching/​jump_search.c 
 +/​home/​student/​workspace/​C/​searching/​linear_search.c 
 +/​home/​student/​workspace/​C/​searching/​modified_binary_search.c 
 +/​home/​student/​workspace/​C/​searching/​other_binary_search.c 
 +/​home/​student/​workspace/​C/​searching/​pattern_search 
 +/​home/​student/​workspace/​C/​searching/​ternary_search.c 
 +/​home/​student/​workspace/​C/​searching/​pattern_search/​CMakeLists.txt 
 +/​home/​student/​workspace/​C/​searching/​pattern_search/​boyer_moore_search.c 
 +/​home/​student/​workspace/​C/​searching/​pattern_search/​naive_search.c 
 +/​home/​student/​workspace/​C/​searching/​pattern_search/​rabin_karp_search.c 
 +</​code>​ 
 +=== Exerciții === 
 + 
 +  - Folosind ''​%%locate%%''​ căutați fișierele care conțin șirul ''​%%bubble_sort%%''​ în nume. 
 +  - Folosind ''​%%locate%%''​ căutați fișierele care conțin șirul ''​%%quick_sort%%''​ în nume. 
 +  - Folosind ''​%%locate%%''​ căutați fișierele care conțin șirul ''​%%merge_sort%%''​ în nume. 
 +  - Folosind ''​%%locate%%''​ căutați fișierele care conțin șirul ''​%%sort%%''​ în nume.
  
  
info1/laboratoare/05.1602068742.txt.gz · Last modified: 2020/11/17 12:08 (external edit)
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