This shows you the differences between two versions of the page.
info1:laboratoare:05 [2020/11/17 12:13] alexandru.vochescu |
info1:laboratoare:05 [2020/11/24 12:42] (current) alexandru.vochescu |
||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Laborator 05 - Lucrul în linia de comandă ====== | + | ====== Laborator 05 - Lucrul în linia de comandă - 1 ====== |
{{page>uso:laboratoare:laborator-05:improve-terminal&nofooter&noeditbutoon}} | {{page>uso:laboratoare:laborator-05:improve-terminal&nofooter&noeditbutoon}} | ||
Line 136: | Line 136: | ||
- 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%%''. | - 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: ''%%?%%''). | - Mergeți la finalul paginii folosind tasta ''%%G%%''. Căutați cuvântul cheie ''%%color%%'' până ajungeți la opțiunea ''%%--color%%'' (Hint: ''%%?%%''). | ||
- | |||
- | |||
- | ==== Utilizarea pachetului tldr ==== | ||
- | |||
- | Utilitarul ''%%tldr%%'' (too long, didn't read) oferă o versiune simplificată a paginilor de manual. Acesta ne va arăta un rezumat al utilizării unei comenzi cu opțiunile cele mai des folosite în comunitate. | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ tldr ls | ||
- | ls | ||
- | List directory contents. | ||
- | |||
- | - List files one per line: | ||
- | ls -1 | ||
- | |||
- | - List all files, including hidden files: | ||
- | ls -a | ||
- | |||
- | - Long format list (permissions, ownership, size and modification date) of all files: | ||
- | ls -la | ||
- | |||
- | - Long format list with size displayed using human readable units (KB, MB, GB): | ||
- | ls -lh | ||
- | |||
- | - Long format list sorted by size (descending): | ||
- | ls -lS | ||
- | |||
- | - Long format list of all files, sorted by modification date (oldest first): | ||
- | ls -ltr | ||
- | </code> | ||
- | <note> | ||
- | |||
- | |||
- | Acesta trebuie tratat ca un cheatsheet accesibil din linie de comandă. ''%%tldr%%'' nu elimină utilizarea paginilor ''%%man%%'', dar ne ajută să găsim rapid opțiunile uzuale. Acestea fiind spuse, vă recomandăm ca întotdeaună să citiți și să înțelegeți din paginile ''%%man%%'' ce efect au opțiunile unei comenzi înainte de a le folosi. Feriți-vă să rulați comenzi orbește, pentru că așa ați găsit pe StackOverflow, tldr, etc. Întotdeauna asigurați-vă că ați înțeles cum și de ce rulați comanda și abia apoi treceți la fapte. | ||
- | </note> | ||
- | |||
- | === Exerciții: Utilizarea pachetului tldr === | ||
- | |||
- | Instalați pachetul ''%%tldr%%'' pe mașina voastră. | ||
- | |||
- | - Accesați pagina ''%%tldr%%'' a utilitarului ''%%ls%%''. | ||
- | - Accesați pagina ''%%tldr%%'' a utilitarului ''%%zip%%''. | ||
- | - Accesați pagina ''%%tldr%%'' a utilitarului ''%%tar%%''. | ||
- | - Accesați pagina ''%%tldr%%'' a utilitarului ''%%git%%''. | ||
- | - Accesați pagina ''%%tldr%%'' a utilitarului ''%%man%%''. | ||
===== Selectarea multiplor fișiere folosind globbing ===== | ===== Selectarea multiplor fișiere folosind globbing ===== | ||
Line 296: | Line 252: | ||
- 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 ''%%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}*%%''. | - 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. | ||
+ | |||