This shows you the differences between two versions of the page.
uso:laboratoare:laborator-02:paths [2021/10/04 20:43] 127.0.0.1 external edit |
uso:laboratoare:laborator-02:paths [2023/10/10 18:47] (current) razvan.costea2205 [Scurtături de căi] fix typo |
||
---|---|---|---|
Line 3: | Line 3: | ||
Atunci când folosim un terminal este important să știm unde ne aflăm în ierarhie. Dacă vrem să jucăm un joc, știm că vrem să ajungem în directorul ''%%Games%%'', unde avem jocul preferat, ''%%Warcraft3%%''. Pentru a ajunge în directorul ''%%Games%%'', trebuie să știm unde suntem și apoi să navigăm în sistemul de fișiere până acolo. | Atunci când folosim un terminal este important să știm unde ne aflăm în ierarhie. Dacă vrem să jucăm un joc, știm că vrem să ajungem în directorul ''%%Games%%'', unde avem jocul preferat, ''%%Warcraft3%%''. Pentru a ajunge în directorul ''%%Games%%'', trebuie să știm unde suntem și apoi să navigăm în sistemul de fișiere până acolo. | ||
- | O ierarhie de fișiere și directoare este o structură de organizare a acestora. Structura ierarhică permite gruparea acestora în directoare, ce conțin la rândul lor alte directoare sau fișiere. În acest fel, putem lucra doar cu un subset de fișiere și directoare din totalitatea acestora de pe sistem. | + | **O ierarhie de fișiere și directoare** este o structură de organizare a acestora. Structura ierarhică permite gruparea acestora în directoare, ce conțin la rândul lor alte directoare sau fișiere. În acest fel, putem lucra doar cu un subset de fișiere și directoare din totalitatea acestora de pe sistem. |
Un astfel de exemplu este următorul: | Un astfel de exemplu este următorul: | ||
Line 9: | Line 9: | ||
{{:uso:laboratoare:laborator-01:ierarhie.png?500|}} | {{:uso:laboratoare:laborator-01:ierarhie.png?500|}} | ||
- | În Linux, începutul acestei ierarhii este ''%%/%%'', directorul rădăcină al sistemului de fișiere (root directory). Dacă privim sistemul de fișiere ca un arbore întors, directorul rădăcină este chiar rădăcina acestui arbore. De acolo cresc ramurile și frunzele sistemului de fișiere, formând ceea ce vom numi căi (paths). | + | În Linux, începutul acestei ierarhii este ''%%/%%'', directorul rădăcină al sistemului de fișiere (//root directory//). Dacă privim sistemul de fișiere ca un arbore întors, directorul rădăcină este chiar rădăcina acestui arbore. De acolo cresc ramurile și frunzele sistemului de fișiere, formând ceea ce vom numi **căi** (//paths//). |
Putem vedea mai jos începutul ierarhiei din Linux: | Putem vedea mai jos începutul ierarhiei din Linux: | ||
<code bash> | <code bash> | ||
- | student@uso:/$ tree -L 1 / | + | student@uso:~$ tree -F -L 1 / |
/ | / | ||
- | |-- bin | + | |-- bin/ |
- | |-- boot | + | |-- boot/ |
- | |-- dev | + | |-- dev/ |
- | |-- etc | + | |-- etc/ |
- | |-- home | + | |-- home/ |
|-- initrd.img -> /boot/initrd.img-3.16.0-4-586 | |-- initrd.img -> /boot/initrd.img-3.16.0-4-586 | ||
- | |-- lib | + | |-- lib/ |
- | |-- lib64 | + | |-- lib64/ |
- | |-- libx32 | + | |-- libx32/ |
- | |-- lost+found | + | |-- lost+found/ |
- | |-- media | + | |-- media/ |
- | |-- mnt | + | |-- mnt/ |
- | |-- opt | + | |-- opt/ |
- | |-- proc | + | |-- proc/ |
- | |-- root | + | |-- root/ |
- | |-- run | + | |-- run/ |
- | |-- sbin | + | |-- sbin/ |
- | |-- srv | + | |-- srv/ |
- | |-- sys | + | |-- sys/ |
- | |-- tmp | + | |-- tmp/ |
- | |-- usr | + | |-- usr/ |
- | |-- var | + | |-- var/ |
``-- vmlinuz -> boot/vmlinuz-3.16.0-4-586 | ``-- vmlinuz -> boot/vmlinuz-3.16.0-4-586 | ||
</code> | </code> | ||
Observăm ''%%/%%'' (directorul rădăcină) la începutul ierarhiei. Pe nivelul următor, adică ramuri / copii ai directorului rădăcină, sunt directoarele ''%%bin%%'', ''%%boot%%'', ''%%dev%%'' etc. | Observăm ''%%/%%'' (directorul rădăcină) la începutul ierarhiei. Pe nivelul următor, adică ramuri / copii ai directorului rădăcină, sunt directoarele ''%%bin%%'', ''%%boot%%'', ''%%dev%%'' etc. | ||
- | Observăm conținutul directorul ''%%home%%'': | + | Observăm conținutul directorului ''%%home%%'': |
<code bash> | <code bash> | ||
- | student@uso:/home$ tree -L 1 /home | + | student@uso:~$ tree -F -L 1 /home |
. | . | ||
- | |-- student | + | ``-- student/ |
- | |-- test | + | |
</code> | </code> | ||
- | Există două directoare ''%%student%%'' și ''%%test%%''. | + | Există un singur director, numit ''%%student%%''. |
<note> | <note> | ||
Observăm cum se schimbă promptul de terminal: | Observăm cum se schimbă promptul de terminal: | ||
- | * în primul exemplu ''%%student@uso:/$ tree -L 1 /%%'' eram în directorul ''%%/%%''. | + | * în primul exemplu ''%%student@uso:/$ tree -F -L 1 /%%'' eram în directorul ''%%/%%''. |
- | * în al doilea exemplu ''%%student@uso:/home$ tree -L 1%%'' eram în directorul ''%%/home%%''. | + | * în al doilea exemplu ''%%student@uso:/home$ tree -F -L 1%%'' eram în directorul ''%%/home%%''. |
</note> | </note> | ||
Line 62: | Line 61: | ||
<code bash> | <code bash> | ||
- | student@uso:~$ tree | + | student@uso:~$ tree -F -L 2 |
. | . | ||
- | ├── Desktop | + | |-- Desktop/ |
- | ├── Documents | + | |-- Documents/ |
- | ├── Downloads | + | |-- Downloads/ |
- | ├── GameOfThrones | + | |-- Music/ |
- | ├── Music | + | |-- Pictures/ |
- | ├── Pictures | + | |-- Public/ |
- | ├── Public | + | |-- Templates/ |
- | ├── Templates | + | |-- Videos/ |
- | ├── Videos | + | |-- examples.desktop |
- | ├── examples.desktop | + | |-- uso-lab/ |
- | └── snap | + | | |-- assignments/ |
- | ├── slack | + | | |-- labs/ |
- | │ ├── 28 | + | | |-- lectures/ |
- | │ ├── common | + | | |-- README.md |
- | │ └── current -> 28 | + | `-- vm-actions-log.txt |
- | └── spotify | + | |
- | ├── 42 | + | |
- | ├── common | + | |
- | └── current -> 42 | + | |
- | 18 directories, 1 file | ||
</code> | </code> | ||
- | Directorul acesta este directorul //home// al utilizatorului //student//. În rezultatul comenzii ''%%tree%%'', vedem întreaga ierarhie a directorului ''%%/home/student%%''. | + | Directorul acesta este directorul //home// al utilizatorului //student//. În rezultatul comenzii ''%%tree -F -L 2%%'', vedem primele două niveluri din ierarhia din directorului ''%%/home/student%%''. |
În continuare detaliem conceptul de cale. | În continuare detaliem conceptul de cale. | ||
Line 94: | Line 88: | ||
Pornim de la următoarea analogie: Avem patru puncte pe o dreaptă: A, B, C și D. Pentru a ajunge de la A la D, trebuie să trecem prin B și C. Astfel, avem următoarele segmente: AB, BC, CD. | Pornim de la următoarea analogie: Avem patru puncte pe o dreaptă: A, B, C și D. Pentru a ajunge de la A la D, trebuie să trecem prin B și C. Astfel, avem următoarele segmente: AB, BC, CD. | ||
- | Similar, pentru sistemul de fișiere, pornim de la directorul rădăcină (''%%/%%'') și să coborâm în jos pe arbore. | + | Similar, pentru sistemul de fișiere, pornim de la directorul rădăcină (''%%/%%'') și coborâm pe arbore. |
- | Lista de directoare intermediare de la rădăcina ierarhiei de fișiere (''%%/%%'') până la un anumit fișier sau director se numeste //cale//. | + | Lista de directoare intermediare de la rădăcina ierarhiei de fișiere (''%%/%%'') până la un anumit fișier sau director se numeste **cale**. |
//Calea curentă// este pozitia noastră în sistemul de fișiere. | //Calea curentă// este pozitia noastră în sistemul de fișiere. | ||
Line 117: | Line 111: | ||
/usr/bin | /usr/bin | ||
</code> | </code> | ||
- | Acum ne aflăm la poziția ''%%/usr/bin%%'' în sistemul de fișiere. Observăm cum calea curentă se schimbă atunci când schimbăm directorul în care ne aflăm. Vom vorbi despre comanda ''%%cd%%'' în capitolul //Îmbunătățirea lucrului în linia de comandă//. | + | Acum ne aflăm la poziția ''%%/usr/bin%%'' în sistemul de fișiere. Observăm cum calea curentă se schimbă atunci când schimbăm directorul în care ne aflăm. Vom vorbi despre comanda ''%%cd%%'' în laboratorul //Îmbunătățirea lucrului în linia de comandă//. |
===== Separator de cale ===== | ===== Separator de cale ===== | ||
Line 123: | Line 117: | ||
În exemplele de mai sus, observăm că există un delimitator între directoare: / (slash). Atunci când compunem calea, după fiecare nod/director (nivel de arbore) prin care trecem, punem acest delimitator. Astfel, îi transmitem sistemului de operare că am înaintat în ierarhia de fișiere. | În exemplele de mai sus, observăm că există un delimitator între directoare: / (slash). Atunci când compunem calea, după fiecare nod/director (nivel de arbore) prin care trecem, punem acest delimitator. Astfel, îi transmitem sistemului de operare că am înaintat în ierarhia de fișiere. | ||
- | Faptul că și directorul rădăcină (''%%/%%'') are același simbol, este doar o coincidență. În Windows, nodul rădăcină este ''%%C:%%'', iar separatorul de cale este \. | + | Faptul că și directorul rădăcină (''%%/%%'') are același simbol, este doar o coincidență. În Windows, nodul rădăcină este ''%%C:%%'', iar separatorul de cale este ''%%\%%''. |
===== Cale relativă și cale absolută ===== | ===== Cale relativă și cale absolută ===== | ||
Line 145: | Line 139: | ||
După cum am precizat mai sus, calea absolută începe întotdeauna cu caracterul ''%%/%%'' (slash), denumit și //director rădăcină//. Acesta indică începutul ierarhiei de fișiere. | După cum am precizat mai sus, calea absolută începe întotdeauna cu caracterul ''%%/%%'' (slash), denumit și //director rădăcină//. Acesta indică începutul ierarhiei de fișiere. | ||
- | Afișam fișierele ''%%/usr/bin/touch%%'' și ''%%/etc/passwd%%'' prin cale absolută, folosind ''%%ls%%'': | + | Afișăm fișierele ''%%/usr/bin/touch%%'' și ''%%/etc/passwd%%'' prin cale absolută, folosind ''%%ls%%'': |
Line 155: | Line 149: | ||
</code> | </code> | ||
- | Am folosit opțiunea //-l// a utilitarului ''%%ls%%'' pentru a afișa informații suplimentare ale fisierelor. | + | Am folosit opțiunea //-l// a utilitarului ''%%ls%%'' pentru a afișa informații suplimentare ale fișierelor. |
Observăm că la începutul căilor este întotdeauna caracterul **'/'** (directorul rădăcină). | Observăm că la începutul căilor este întotdeauna caracterul **'/'** (directorul rădăcină). | ||
Line 164: | Line 158: | ||
<code bash> | <code bash> | ||
- | student@uso:~$ ls -l snap/spotify/ | + | student@uso:~$ ls -l uso-lab.git/labs/ |
- | total 8 | + | total 52 |
- | drwxr-xr-x 5 student student 4096 Oct 2 03:11 42 | + | drwxrwxr-x 4 student student 4096 nov 9 2021 00-intro |
- | drwxr-xr-x 3 student student 4096 Oct 2 03:10 common | + | drwxrwxr-x 4 student student 4096 nov 9 2021 01-filesystem |
- | lrwxrwxrwx 1 student student 2 Oct 2 03:10 current -> 42 | + | drwxrwxr-x 4 student student 4096 nov 9 2021 02-process |
+ | drwxrwxr-x 5 student student 4096 nov 9 2021 03-user | ||
+ | drwxrwxr-x 4 student student 4096 nov 9 2021 04-appdev | ||
+ | drwxrwxr-x 4 student student 4096 nov 9 2021 05-cli | ||
+ | drwxrwxr-x 4 student student 4096 nov 9 2021 06-scripting | ||
+ | drwxrwxr-x 4 student student 4096 nov 9 2021 07-hardware-obsolete | ||
+ | drwxrwxr-x 5 student student 4096 nov 9 2021 07-networking | ||
+ | drwxrwxr-x 4 student student 4096 nov 9 2021 08-security | ||
+ | drwxrwxr-x 4 student student 4096 nov 9 2021 08-storage-obsolete | ||
+ | drwxrwxr-x 3 student student 4096 nov 9 2021 09-task-admin | ||
+ | drwxrwxr-x 4 student student 4096 nov 9 2021 11-ctf | ||
</code> | </code> | ||
- | În exemplul de mai sus, ne aflăm la calea ''%%/home/student%%'' și am coborât în jos în ierarhia de fișiere către directorul ''%%snap%%'', apoi directorul ''%%spotify%%''. | + | În exemplul de mai sus, ne aflăm la calea ''%%/home/student%%'' și am coborât în ierarhia de fișiere către directorul ''%%uso-lab.git%%'', apoi către directorul ''%%labs%%''. |
Același rezultat îl obținem folosind calea absolută: | Același rezultat îl obținem folosind calea absolută: | ||
<code bash> | <code bash> | ||
- | student@uso:~$ ls -l /home/student/snap/spotify/ | + | student@uso:~$ ls -l /home/student/uso-lab.git/labs/ |
- | total 8 | + | total 52 |
- | drwxr-xr-x 5 student student 4096 Oct 2 03:11 42 | + | drwxrwxr-x 4 student student 4096 nov 9 2021 00-intro |
- | drwxr-xr-x 3 student student 4096 Oct 2 03:10 common | + | drwxrwxr-x 4 student student 4096 nov 9 2021 01-filesystem |
- | lrwxrwxrwx 1 student student 2 Oct 2 03:10 current -> 42 | + | drwxrwxr-x 4 student student 4096 nov 9 2021 02-process |
+ | drwxrwxr-x 5 student student 4096 nov 9 2021 03-user | ||
+ | drwxrwxr-x 4 student student 4096 nov 9 2021 04-appdev | ||
+ | drwxrwxr-x 4 student student 4096 nov 9 2021 05-cli | ||
+ | drwxrwxr-x 4 student student 4096 nov 9 2021 06-scripting | ||
+ | drwxrwxr-x 4 student student 4096 nov 9 2021 07-hardware-obsolete | ||
+ | drwxrwxr-x 5 student student 4096 nov 9 2021 07-networking | ||
+ | drwxrwxr-x 4 student student 4096 nov 9 2021 08-security | ||
+ | drwxrwxr-x 4 student student 4096 nov 9 2021 08-storage-obsolete | ||
+ | drwxrwxr-x 3 student student 4096 nov 9 2021 09-task-admin | ||
+ | drwxrwxr-x 4 student student 4096 nov 9 2021 11-ctf | ||
</code> | </code> | ||
- | Calea ''%%/home/student/snap/spotify/%%'' este validă oricare ar fi calea curentă (oriunde ne-am afla în ierarhia de fișiere). | + | Calea ''%%/home/student/uso-lab.git/labs/%%'' este validă oricare ar fi calea curentă (oriunde ne-am afla în ierarhia de fișiere). |
În acest caz, este mai eficient să folosim //calea relativă//. În cazul în care putem ajunge mai repede de la directorul rădăcina ''%%/%%'' la directorul țintă, este mai utilă //calea absolută//. | În acest caz, este mai eficient să folosim //calea relativă//. În cazul în care putem ajunge mai repede de la directorul rădăcina ''%%/%%'' la directorul țintă, este mai utilă //calea absolută//. | ||
Line 208: | Line 222: | ||
* Afișați calea curentă folosind utilitarul ''%%pwd%%''. | * Afișați calea curentă folosind utilitarul ''%%pwd%%''. | ||
- | * Referiți fișirele/directoarele ''%%/lib/%%'', ''%%/home%%'', ''%%/bin/cat%%'' atât prin cale relativă cât și prin cale absolută. | + | * Referiți fișierele/directoarele ''%%/lib/%%'', ''%%/home%%'', ''%%/bin/cat%%'' atât prin cale relativă, cât și prin cale absolută. |
* Referiți directorul părinte (un nivel mai sus față de cel curent). | * Referiți directorul părinte (un nivel mai sus față de cel curent). | ||
Line 222: | Line 236: | ||
/usr | /usr | ||
</code> | </code> | ||
- | Am schimbat calea curentă de la ''%%/etc%%'' la ''%%/usr%%''. Această comandă poate fi folosită oriunde ne-am afla deoarece este o //cale absolută//. | + | Am schimbat calea curentă de la ''%%/etc%%'' la ''%%/usr%%''. Această comandă poate fi folosită oriunde ne-am afla, deoarece este o //cale absolută//. |
<note important> | <note important> | ||
Line 242: | Line 256: | ||
/home/student | /home/student | ||
</code> | </code> | ||
- | Fiind la calea ''%%/usr%%'', am folosit utilitarul ''%%cd%%'' împreună cu o cale //absolută// ''%%/home/student%%'' pentru a schimba calea curentă. Cea de-a doua comanda ''%%pwd%%'' confirmă că am schimbat calea curentă. | + | Fiind la calea ''%%/usr%%'', am folosit utilitarul ''%%cd%%'' împreună cu o cale //absolută// ''%%/home/student%%'' pentru a schimba calea curentă. Cea de-a doua comandă ''%%pwd%%'' confirmă că am schimbat calea curentă. |
Acum ne aflăm la calea ''%%/home/student%%''. O alternativă mai puțin eficientă este să facem schimbarea căii curente în doi pași, astfel: | Acum ne aflăm la calea ''%%/home/student%%''. O alternativă mai puțin eficientă este să facem schimbarea căii curente în doi pași, astfel: | ||
Line 273: | Line 287: | ||
<code bash> | <code bash> | ||
- | student@uso:~/comenzi$ pwd | + | student@uso:~/Desktop$ pwd |
- | /home/student/comenzi | + | /home/student/Desktop |
- | student@uso:~/comenzi$ cd ../../usr/bin | + | student@uso:~/Desktop$ cd ../../usr/bin |
- | -bash: cd: ../../usr/bin: No such file or directory | + | bash: cd: ../../usr/bin: No such file or directory |
</code> | </code> | ||
- | Observăm că suntem la calea ''%%/home/student/comenzi%%''. Executând comanda ''%%cd ../../usr/bin%%'' de mai sus, am ajunge la calea ''%%/home/usr/bin%%'' care nu există. | + | Observăm că suntem la calea ''%%/home/student/Desktop%%''. Executând comanda ''%%cd ../../usr/bin%%'' de mai sus, am ajunge la calea ''%%/home/usr/bin%%'' care nu există. |
=== Exerciții - schimbarea directorului curent === | === Exerciții - schimbarea directorului curent === | ||
Line 292: | Line 306: | ||
{{:uso:laboratoare:laborator-01:tab_completion.gif}} | {{:uso:laboratoare:laborator-01:tab_completion.gif}} | ||
- | Observăm că atunci când calea pe care o scriem se termină cu ///// (slash), apăsând de 2 ori pe tasta ''%%Tab%%'' ne arată fișierele și directoarele din calea respectivă. Atunci vrem să ne auto-completeze numele, apăsăm o singură dată pe tasta ''%%Tab%%''. | + | Observăm că atunci când calea pe care o scriem se termină cu ///// (slash), apăsând de 2 ori pe tasta ''%%Tab%%'' ne arată fișierele și directoarele din calea respectivă. Atunci când vrem să ne auto-completeze numele, apăsăm o singură dată pe tasta ''%%Tab%%''. |
- | Tasta ''%%Tab%%'' este descrisă în detaliu în capitolul //Îmbunătățirea lucrului în linia de comandă//. | + | Tasta ''%%Tab%%'' este descrisă în detaliu în laboratorul //Îmbunătățirea lucrului în linia de comandă//. |
===== Scurtături de căi ===== | ===== Scurtături de căi ===== | ||
Line 300: | Line 314: | ||
Pentru o eficiență mai bună, putem folosi simboluri pentru interacțiunea cu utilitarul ''%%cd%%'': | Pentru o eficiență mai bună, putem folosi simboluri pentru interacțiunea cu utilitarul ''%%cd%%'': | ||
- | * Folosim caracterul (''%%-%%'') pentru a referi la //calea anterioară//.<code bash> | + | * Folosim caracterul (''%%-%%'') pentru a referi la //calea anterioară//,<code bash> |
student@uso:~$ pwd | student@uso:~$ pwd | ||
/home/student | /home/student | ||
Line 314: | Line 328: | ||
student@uso:~$ cd - | student@uso:~$ cd - | ||
/usr/bin | /usr/bin | ||
- | </code> | + | </code> Observăm că, dacă folosim repetat comanda ''%%cd -%%'', vom face un joc //du-te-vino// (//ping-pong//) între 2 directoare. |
- | + | ||
- | Observăm că, dacă folosim repetat comanda ''%%cd -%%'' ,vom face un joc //du-te-vino// (//ping-pong//) între 2 directoare. | + | |
* Folosim caracterul (''%%~%%'') pentru a referi //directorul home// a utilizatorului.<code bash> | * Folosim caracterul (''%%~%%'') pentru a referi //directorul home// a utilizatorului.<code bash> | ||
student@uso:/usr/bin$ cd /tmp/ | student@uso:/usr/bin$ cd /tmp/ |