This shows you the differences between two versions of the page.
uso:laboratoare:laborator-01:files [2020/10/13 23:58] alexandru.dima1609 [Interacțiunea cu fișiere în linia de comandă] |
— (current) | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Interacțiunea cu fișiere în linia de comandă ====== | ||
- | |||
- | Fișierul este unitatea de bază folosită pentru a stoca informații. Fie că este vorba despre un document (tema la mate) sau un joc, fie că este vorba de o configurare în sistemul de operare, sau chiar sistemul de operare, folosim fișiere pentru stocare. | ||
- | |||
- | Putem interacționa cu fișiere folosind programe specifice: | ||
- | |||
- | * Microsoft Word pentru documente; | ||
- | * browser (de exemplu, Firefox) pentru o pagină web; | ||
- | * player audio (de exemplu, Winamp) pentu melodii; | ||
- | * player video (de exemplu, Vlc) pentru filme. | ||
- | |||
- | Acestea au în comun o interfață grafică. O altă opțiune este să interacționăm cu fișierele în linia de comandă. Acesta este subiectul acestei sectiuni. | ||
- | |||
- | Folosim linia de comandă pentru interacțiunea cu fișierele în mai multe cazuri: | ||
- | |||
- | * Atunci când sistemul pe care ne aflăm are **doar** linie de comandă; | ||
- | * Atunci când putem să facem anumite operații **mai repede** decât în interfața grafică; putem folosi automatizarea unor sarcini (taskuri): scriem un script (un fișier de automatizare) o dată și îl executăm de fiecare dată când este nevoie. Există un capitol întreg //Îmbunătățirea lucrului în linia de comandă// unde vom afla mai multe detalii. | ||
- | |||
- | Un motiv în plus pentru a folosi linia de comandă este că folosește mult mai puține resurse decât interfața grafică. Astfel, putem să facem mai multe cu mai puține resurse. | ||
- | |||
- | Componenta ce se ocupă de interpretarea comenzilor se numește //shell//. Shellul citește comenzile date de utilizator, le interpretează și comunică sisteemului de operare ce are de făcut. | ||
- | |||
- | În acest capitol discutăm despre cum interacționăm cu fișierele în linia de comandă. | ||
- | |||
- | ===== Ierarhie de fișiere ===== | ||
- | |||
- | Un exemplu de ierarhie de fișier este în secțiunea //Căi în ierarhia de fișiere//. | ||
- | |||
- | Pentru a vedea fișierele sub formă arborescentă, folosim comanda ''%%tree%%''. | ||
- | |||
- | <code bash> | ||
- | student@uso:~/comenzi/mkdir$ tree -L 1 / | ||
- | / | ||
- | |-- bin | ||
- | |-- boot | ||
- | |-- dev | ||
- | |-- etc | ||
- | |-- home | ||
- | |-- initrd.img -> /boot/initrd.img-3.16.0-4-586 | ||
- | |-- lib | ||
- | |-- lib64 | ||
- | |-- libx32 | ||
- | |-- lost+found | ||
- | |-- media | ||
- | |-- mnt | ||
- | |-- opt | ||
- | |-- proc | ||
- | |-- root | ||
- | |-- run | ||
- | |-- sbin | ||
- | |-- srv | ||
- | |-- sys | ||
- | |-- tmp | ||
- | |-- usr | ||
- | |-- var | ||
- | ``-- vmlinuz -> boot/vmlinuz-3.16.0-4-586 | ||
- | </code> | ||
- | ===== Lucrul cu fișiere și directoare ===== | ||
- | |||
- | În această secțiune vom învăța să lucrăm cu fișierele și directoarele în linia de comandă: | ||
- | |||
- | * afișarea conținutului fișierelor și directoarelor; | ||
- | * crearea de fișiere și directoare; | ||
- | * ștergerea de fișiere și directoare; | ||
- | * redenumirea fișierelor și directoarelor; | ||
- | * fișiere și directoare ascunse; | ||
- | * legături (linkuri); | ||
- | * execuția programelor. | ||
- | |||
- | ==== Afișarea conținutului unui director ==== | ||
- | |||
- | Așa cum un dosar are mai multe foi în el, la fel și directoarele au mai multe fișiere și directoare în ele. | ||
- | |||
- | Pentru a afișa conținutul unui director folosim comanda ''%%ls%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ ls | ||
- | Desktop Downloads Music Public Templates | ||
- | Documents examples.Desktop Pictures snap Videos | ||
- | </code> | ||
- | |||
- | Vedem mai multe detalii despre fișierele și directoarele din directorul ''%%/home/student%%'' (adică directorul **home** al utilizatorului **student**, **~**) folosind comanda ''%%ls%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ ls -l | ||
- | total 48 | ||
- | drwxr-xr-x 3 student student 4096 Oct 13 12:53 Desktop | ||
- | drwxr-xr-x 2 student student 4096 Sep 30 05:03 Documents | ||
- | drwxr-xr-x 2 student student 4096 Sep 30 05:03 Downloads | ||
- | drwxr-xr-x 2 student student 4096 Sep 30 05:03 Music | ||
- | drwxr-xr-x 2 student student 4096 Sep 30 05:03 Pictures | ||
- | drwxr-xr-x 2 student student 4096 Sep 30 05:03 Public | ||
- | drwxr-xr-x 2 student student 4096 Sep 30 05:03 Templates | ||
- | drwxr-xr-x 2 student student 4096 Sep 30 05:03 Videos | ||
- | -rw-r--r-- 1 student student 8980 Sep 24 09:00 examples.desktop | ||
- | drwxr-xr-x 4 student student 4096 Oct 2 03:11 snap | ||
- | </code> | ||
- | |||
- | Interpretăm rezultatele de mai sus: | ||
- | |||
- | - Primul caracter ''%%-%%'' ne arată că ''%%examples.desktop%%'' este un fișier obișnuit. Primul caracter ''%%d%%'' ne arată că ''%%Desktop%%'' este director. | ||
- | - Șirurile ''%%rw-r--r--%%'' (pentru ''%%romania%%'') și ''%%rwxr-xr-x%%'' (pentru ''%%Desktop%%'') se referă la permisiuni de acces. Vorbim despre permisiuni de acces în capitolul //Îmbunătățirea lucrului în linia de comandă//. | ||
- | - Următorul număr îl îgnorăm pentru moment. | ||
- | - Următoarele două cuvinte, ''%%student%%'', se referă tot la permisiuni și ownership; le vom discuta într-un capitol ulteror. | ||
- | - Numărul ''%% 8980%%'' arată dimensiunea fișierului ''%%examples.desktop%%''. Observăm că directorul ''%%Desktop%%'' are dimensiunea de 4096 octeți (//bytes//); | ||
- | - Urmează 3 coloane ce arată momentul ultimei modificări O accesare poate înseamna creare sau modificare. Citirea nu schimbă această dată. | ||
- | - La final este afișat numele fișierului sau a directorului. | ||
- | |||
- | === Exerciții - afișarea conținutului directoarelor === | ||
- | |||
- | * Afișați conținutul directoarelor **/usr**, **/tmp**, **/etc**, **/home**. | ||
- | |||
- | ==== Crearea fișierelor ==== | ||
- | |||
- | Există situații când vrem să creăm fișiere. De exemplu vrem să scriem cod sau să luăm notițe la un curs. | ||
- | |||
- | Fișierele se creează folosind utilitarul ''%%touch%%''. | ||
- | |||
- | Creăm un fișier astfel: | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ ls cities | ||
- | ls: cannot access cities: No such file or directory | ||
- | student@uso:~$ touch cities | ||
- | student@uso:~$ ls cities | ||
- | cities | ||
- | </code> | ||
- | |||
- | Dacă vrem să creăm un fișier cu numele ''%%orașe romania%%'', adică vrem ca numele fișierului să conțină caracterul //spațiu (space)//, folosim tot comanda ''%%touch%%'' ca în exemplul de mai jos: | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ touch cities romania | ||
- | student@uso:~$ ls -l | ||
- | (...) | ||
- | -rw-rw-r-- 1 student student 0 Oct 13 13:02 cities | ||
- | -rw-r--r-- 1 student student 8980 Sep 24 09:00 examples.desktop | ||
- | -rw-rw-r-- 1 student student 0 Oct 13 13:02 romania | ||
- | drwxr-xr-x 4 student student 4096 Oct 2 03:11 snap | ||
- | </code> | ||
- | Observăm că în comanda de mai sus am încercat să creăm un fișier numit ''%%cities romania%%'', însă au fost create două fișiere. Pentru a crea un fișier cu //spații (space)// inclus în nume este nevoie să folosim ghilimelele la începutul și sfârșitul numelui astfel: ''%%touch "cities romania"%%''. | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ touch "cities in romania" | ||
- | student@uso:~$ ls -l | ||
- | (...) | ||
- | -rw-rw-r-- 1 student student 0 Oct 13 13:02 cities | ||
- | -rw-rw-r-- 1 student student 0 Oct 13 13:03 'cities in romania' | ||
- | -rw-r--r-- 1 student student 8980 Sep 24 09:00 examples.desktop | ||
- | -rw-rw-r-- 1 student student 0 Oct 13 13:02 romania | ||
- | drwxr-xr-x 4 student student 4096 Oct 2 03:11 snap | ||
- | </code> | ||
- | Acum avem în directorul ''%%~%%'' 3 fișiere în plus: ''%%cities%%'', ''%%cities in romania%%'', ''%%romania%%''. Zero-ul //(0)// din linia ''%%-rw-r--r-- 1 student student 0 Oct 13 13:02 cities%%'' ne arată că fișierul cities are 0 bytes, adică este gol. Toate cele 3 fișiere sunt goale. | ||
- | |||
- | Ce se va întâmpla dacă executăm ''%%touch%%'' pe un fișier existent? | ||
- | |||
- | Creăm un nou fișier cu numele ''%%romania%%'' folosind comanda ''%%touch%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ ls -l | ||
- | (...) | ||
- | -rw-rw-r-- 1 student student 0 Oct 13 13:02 cities | ||
- | -rw-rw-r-- 1 student student 0 Oct 13 13:03 'cities in romania' | ||
- | -rw-r--r-- 1 student student 8980 Sep 24 09:00 examples.desktop | ||
- | -rw-rw-r-- 1 student student 0 Oct 13 13:02 romania | ||
- | drwxr-xr-x 4 student student 4096 Oct 2 03:11 snap | ||
- | student@uso:~$ touch romania | ||
- | student@uso:~$ ls -l | ||
- | (...) | ||
- | -rw-rw-r-- 1 student student 0 Oct 13 13:02 cities | ||
- | -rw-rw-r-- 1 student student 0 Oct 13 13:03 'cities in romania' | ||
- | -rw-r--r-- 1 student student 8980 Sep 24 09:00 examples.desktop | ||
- | -rw-rw-r-- 1 student student 0 Oct 13 13:05 romania | ||
- | drwxr-xr-x 4 student student 4096 Oct 2 03:11 snap | ||
- | </code> | ||
- | În continuare avem tot 3 fișiere în plus în directorul ''%%~%%''. Ne uităm la liniile ''%%-rw-r--r-- 1 student student 0 Oct 13 13:02 romania%%'' //(de dinainte)// și ''%%-rw-r--r-- 1 student student 0 Oct 13 13:05 romania%%'' (**de după**) și vedem că diferă timpul. Este vorba despre timpul la care a fost ultima dată accesat fișierul ''%%romania%%''. | ||
- | |||
- | ==== Crearea directoarelor ==== | ||
- | |||
- | Este util să creăm directoarele atunci când vrem să păstrăm fișierele din sistem într-un mod organizat. De exemplu, putem crea câte un director pentru fiecare an de licență. Pentru fiecare an/director, cream câte un director pentru fiecare materie si pentru fiecare materie putem să facem directoare pentru teme, laboratoare, cursuri etc. | ||
- | |||
- | Creăm directoarele folosind utilitarul ''%%mkdir%%''. Etimologia comenzii provine din limba engleză - //make directory//. | ||
- | |||
- | Creăm un directoarele ''%%GameOfThrones%%'' și ''%%Avengers%%'' în directorul ''%%~%%'' ca în exemplul de mai jos: | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ mkdir GameOfThrones | ||
- | student@uso:~$ mkdir Avengers | ||
- | student@uso:~$ ls -l | ||
- | total 56 | ||
- | drwxrwxr-x 2 student student 4096 Oct 13 13:17 Avengers | ||
- | (...) | ||
- | drwxrwxr-x 2 student student 4096 Oct 13 13:17 GameOfThrones | ||
- | (...) | ||
- | </code> | ||
- | Am creat 2 directoare noi: ''%%Avengers%%'' și ''%%GameOfThrones%%''. | ||
- | |||
- | === Exerciții - creare fișiere și directoare === | ||
- | |||
- | * Creați un director numit "WinnieThePooh" și unul numit "TomSiJerry". | ||
- | * Creați fișierele "Iron Man", "Hulk", "Thor", "Captain America" (**cu spațiu**) în directorul "Avengers"; afișați fișierele din director; | ||
- | * Creați fișierele "Arya", "Daenerys Targaryen" (**cu spațiu**), "Jon Snow", "Tyrion Lannister" în directorul "GameOfThrones"; afișați fișierele din director. | ||
- | |||
- | |||
- | <note important> | ||
- | Este important de reținut: orice comandă executați, aceasta trebuie succedată de o verificare. De exemplu, la crearea unui fișier (''%%touch%%'') sau director (''%%mkdir%%''), executăm comanda de verificare ''%%ls%%''. | ||
- | </note> | ||
- | |||
- | ==== Afișarea conținutului unui fișier ==== | ||
- | |||
- | Afișăm rapid conținutul fișierului ''%%Arya%%'' din directorul ''%%GameOfThrones%%'' folosind comanda ''%%cat%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ cat GameOfThrones/Arya | ||
- | student@uso:~$ | ||
- | </code> | ||
- | |||
- | Comanda ''%%cat%%'' nu a afișat nimic pentru că fișierul ''%%Arya%%'' este gol. | ||
- | |||
- | Scriem textul ''%%A girl has no name%%'' în fișierul ''%%Arya%%'' folosind comanda ''%%echo%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ echo "A girl has no name" > "GameOfThrones/Arya" | ||
- | student@uso:~$ cat "GameOfThrones/Arya" | ||
- | A girl has no name | ||
- | </code> | ||
- | |||
- | O altă metodă este de a folosi un editor de text: **vim**, **gedit**, **emacs**, **nano**, **sublime**, etc. Vom detalia utilizarea unui editor de text în subsectiunea //Editor de text//. | ||
- | |||
- | ==== Ștergerea fișierelor ==== | ||
- | |||
- | Ștergem fișierul "Hulk" din directorul "Avengers" folosind utilitarul ''%%rm%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ ls Avengers/ | ||
- | Captain America Hulk Iron Man Thor | ||
- | student@uso:~$ rm Avengers/Hulk | ||
- | student@uso:~$ ls Avengers/ | ||
- | Captain America Iron Man Thor | ||
- | </code> | ||
- | La prima comandă am afișat ce fișiere sunt în directorul ''%%Avengers%%''. Am folosit utiltarul ''%%rm%%'' pentru a șterge fișierul ''%%Hulk%%'' din directorul ''%%Avengers%%''. În final am verificat că fișierul ''%%Hulk%%'' nu mai există în directorul ''%%Avengers%%''. | ||
- | |||
- | ==== Ștergerea directoarelor ==== | ||
- | |||
- | Directoarele se șterg folosind comanda ''%%rmdir%%''. Etimologia comenzii provine din engleză - //remove directory//. | ||
- | |||
- | Creăm directorul "LordOfTheRings" folosind comanda ''%%mkdir%%'' după care îl ștergem folosind comanda ''%%rmdir%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ mkdir LordOfTheRings | ||
- | student@uso:~$ ls -l | ||
- | total 60 | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 18:02 Avengers | ||
- | (...) | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 17:44 GameOfThrones | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 18:09 LordOfTheRings | ||
- | (...) | ||
- | student@uso:~$ rmdir LordOfTheRings | ||
- | student@uso:~$ ls -l | ||
- | total 56 | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 18:02 Avengers | ||
- | (...) | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 17:44 GameOfThrones | ||
- | (...) | ||
- | </code> | ||
- | Am creat un director ''%%LordOfTheRings%%'' folosind utilitarul ''%%mkdir%%''. Am verificat crearea acestuia. În final l-am șters folosind utilitarul ''%%rmdir%%'' și am verificat că a fost șters. | ||
- | |||
- | <note important> | ||
- | Comanda ''%%rmdir%%'' pe un director care nu este gol (care conține cel puțin un alt fișier sau director) nu funcționează. | ||
- | </note> | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ rmdir Avengers/ | ||
- | rmdir: failed to remove 'Avengers/': Directory not empty | ||
- | </code> | ||
- | Pentru a șterge un director care **nu** este gol, adică un director care are cel puțin un fișier sau director în el, folosim utilitarul ''%%rm%%'' cu opțiunea de recursivitate ''%%-r%%'': ''%%rm -r%%''. Aceasta permite ștergerea întregii ierarhii de fișiere din director, pe scurt: ștergerea întregului director. | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ ls -l | ||
- | total 56 | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 18:02 Avengers | ||
- | (...) | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 17:44 GameOfThrones | ||
- | (...) | ||
- | student@uso:~$ rm -r Avengers/ | ||
- | student@uso:~$ ls -l | ||
- | total 52 | ||
- | (...) | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 17:44 GameOfThrones | ||
- | (...) | ||
- | </code> | ||
- | |||
- | |||
- | <note important> | ||
- | După executarea comenzii, verificăm corectitudinea operației. Trebuie să verificăm și să nu presupunem că o comandă s-a executat. Lipsa unei verifică poate duce la erori și mult timp pierdut din partea noastră. | ||
- | </note> | ||
- | ==== Redenumirea și mutarea fișierelor și directoarelor ==== | ||
- | |||
- | Fișierele și directoarele se redenumesc în mod similar, folosind comanda ''%%mv%%'' astfel: ''%%mv nume_actual nume_nou%%''. | ||
- | |||
- | Redenumim fișierele si directoarele folosind comanda ''%%mv%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ ls | ||
- | GameOfThrones | ||
- | student@uso:~$ mv GameOfThrones ThroneOfGames | ||
- | student@uso:~$ ls | ||
- | ThroneOfGames | ||
- | </code> | ||
- | Am redenumit fișierul ''%%GameOfThrones%%'' în ''%%ThroneOfGames%%''. | ||
- | |||
- | Un alt rol al comenzii ''%%mv%%'' este de a muta fișierele și directoarele, în ierarhia de fișiere, dintr-un loc în altul. | ||
- | |||
- | Mutăm directorul ''%%GameOfThrones%%'' (cu tot conținutul acestuia) la calea ''%%/tmp/%%'' folosind comanda ''%%mv%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ ls | ||
- | Avengers GameOfThrones | ||
- | student@uso:~$ mv GameOfThrones/ /tmp/ | ||
- | student@uso:~$ ls /tmp/ | ||
- | GameOfThrones ssh-ApUMKI3HSJ | ||
- | student@uso:~$ ls /tmp/ | ||
- | GameOfThrones ssh-ApUMKI3HSJ | ||
- | student@uso:~$ ls | ||
- | Avengers | ||
- | </code> | ||
- | Acum directorul ''%%GameOfThrones%%'' se află în calea ''%%/tmp/GameOfThrones%%''. Am verificat folosind ''%%ls%%'' că nu se mai află în directorul curent și că există în directorul ''%%/tmp/%%''. | ||
- | |||
- | Mutăm înapoi directorul ''%%GameOfThrones%%'' (cu tot conținutul acestuia) folosind cale relativă, pentru a indica directorul, și cale absolută, pentru a indica locul unde vrem să ajungă directorul folosind ''%%mv%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ mv ../../../../tmp/GameOfThrones/ /home/student/ | ||
- | student@uso:~$ ls | ||
- | Avengers GameOfThrones | ||
- | </code> | ||
- | Am verificat că directorul ''%%GameOfThrones%%'' se află la calea indicată (calea curentă). | ||
- | |||
- | <note> | ||
- | Observăm că putem folosi atât căi relative cât și căi absolute ca argumente pentru comanda ''%%mv%%'' de mutare / redenumire de fișiere și directoare. | ||
- | </note> | ||
- | |||
- | === Exerciții - redenumire și mutare === | ||
- | |||
- | - Creați un director ''%%Vikings%%'' în directorul home al vostru. | ||
- | - Creați fișierele ''%%Ragnar%%'', ''%%Rollo%%'', ''%%Lagertha%%'' în directorul ''%%Vikings%%''. | ||
- | - Verificați că directorul și fișierele au fost mutate. | ||
- | - Mutati directorul (împreună cu întreaga ierarhie de fișiere) la locația ''%%/tmp/%%''. | ||
- | - Verificați că directorul și ierarhia de fișiere au fost mutate. | ||
- | - Creați un director ''%%NBA%%'' în directorul home al vostru. | ||
- | - Creați fișierele ''%%MichaelJordan%%'', ''%%LeBronJames%%'', ''%%DwayneWade%%'' și ''%%KobeBryant%%'' în directorul ''%%NBA%%''. | ||
- | - Verificați că directorul și fișierele au fost mutate. | ||
- | - Mutați directorul ''%%NBA%%'' (împreună cu întreaga ierarhie de fișiere) în directorul ''%%Vikings%%''. | ||
- | - Verificați că directorul și ierarhia de fișiere au fost mutate. | ||
- | - Redenumiți directorul ''%%GameOfThrones%%'' în ''%%ThronesInTheGame%%''. | ||
- | - Mutați fișierele din interiorul directorului ''%%ThronesInTheGame%%'' în ''%%/tmp%%''. | ||
- | - Verificați operațiile. | ||
- | - Mutați directorul înapoi la locatia inițială folosind atât căi relative cât și căi absolute. | ||
- | |||
- | ==== Copierea fișierelor și directoarelor ==== | ||
- | |||
- | Copiem fișierul ''%%Thor%%'' în directorul ''%%/tmp/%%'' folosind ''%%cp%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ cp Avengers/Thor /tmp/ | ||
- | student@uso:~$ ls /tmp/ | ||
- | Thor ssh-ApUMKI3HSJ | ||
- | </code> | ||
- | Sintaxa este similară comenzii ''%%mv%%''. Acum fișierul ''%%Thor%%'' este atât în ''%%/home/student/Avengers/Thor%%'', cât și în ''%%/tmp/Thor%%''. | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ cp Avengers/ /tmp/ | ||
- | cp: omitting directory 'Avengers/' | ||
- | </code> | ||
- | Observăm că nu se poate copia un director ce conține alte fișiere sau directoare. | ||
- | |||
- | Pentru a copia în altă parte un director care nu este gol, trebuie să folosim comanda ''%%cp -r%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ cp -r Avengers/ /tmp/ | ||
- | student@uso:~$ ls -l /tmp/ | ||
- | total 8 | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 19:06 Avengers | ||
- | -rw-r--r-- 1 student student 0 Sep 29 19:04 Thor | ||
- | drwx------ 2 student student 4096 Sep 29 13:45 ssh-ApUMKI3HSJ | ||
- | student@uso:~$ ls -l /tmp/Avengers/ | ||
- | total 0 | ||
- | -rw-r--r-- 1 student student 0 Sep 29 19:06 Captain America | ||
- | -rw-r--r-- 1 student student 0 Sep 29 19:06 Iron Man | ||
- | -rw-r--r-- 1 student student 0 Sep 29 19:06 Thor | ||
- | </code> | ||
- | Am copiat directorul ''%%Avengers%%'' și conținutul acestuia din calea curentă în directorul ''%%/tmp%%''. Observăm că s-a copiat întreaga ierarhie de fișiere/directoare de sub directorul ''%%Avengers%%''. Acesta se află acum în ambele locuri. | ||
- | |||
- | ==== Fișiere și directoare ascunse ==== | ||
- | |||
- | Un fișier sau director este ascuns atunci când nu apare în mod normal în ierarhia de fișiere. De exemplu, atunci când executăm într-un director comanda ''%%ls%%'', acesta nu apare. | ||
- | |||
- | Există câteva motive pentru care vrem să ascundem un fișier sau director: | ||
- | |||
- | * Există fișiere pe care nu vrem să le vedem în mod normal (fișiere de configurare; ex: ''%%.profile%%''); | ||
- | * Există comenzi care șterg toate fișierele dintr-un director fără a șterge directorul (''%%rm Avengers/*%%''). Acestea nu au efect asupra fișierelor ascunse; | ||
- | * Vrem să facem anumite fișiere puțin mai greu de găsit. | ||
- | |||
- | Vedem fișiere și directoare ascunse folosind comanda ''%%ls -a%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ ls -al | ||
- | total 56 | ||
- | drwxr-xr-x 5 student student 4096 Sep 29 18:41 . | ||
- | drwxr-xr-x 4 student student 4096 Sep 29 18:35 .. | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 18:20 Avengers | ||
- | (...) | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 17:44 GameOfThrones | ||
- | (...) | ||
- | </code> | ||
- | Opțiunea ''%%-a%%'' vine de la //all//, adică vrem să vedem toate fișierele: și cele vizibile și cele ascunse. | ||
- | |||
- | Observăm două directoare noi ''%%.%%'' și ''%%..%%''. Directorul ''%%.%%'' este o referință la directorul curent, iar ''%%..%%'' este o referință la directorul părinte. | ||
- | |||
- | Afișăm conținutul directorului părinte folosind ''%%ls -l%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ ls -l .. | ||
- | total 56 | ||
- | drwxr-xr-x 20 student student 4096 Oct 13 13:38 student | ||
- | </code> | ||
- | Directorul ''%%..%%'' este în cazul nostru echivalent cu ''%%/home%%''. | ||
- | |||
- | Creăm fișiere ascunse punând un punct //(.)// în fața numelui: | ||
- | |||
- | <code bash> | ||
- | student@uso:~/Avengers$ ls -l | ||
- | total 0 | ||
- | -rw-r--r-- 1 student student 0 Sep 29 18:20 Captain America | ||
- | -rw-r--r-- 1 student student 0 Sep 29 18:20 Iron Man | ||
- | -rw-r--r-- 1 student student 0 Sep 29 18:20 Thor | ||
- | student@uso:~/Avengers$ touch .Hulk | ||
- | student@uso:~/Avengers$ ls -l | ||
- | total 0 | ||
- | -rw-r--r-- 1 student student 0 Sep 29 18:20 Captain America | ||
- | -rw-r--r-- 1 student student 0 Sep 29 18:20 Iron Man | ||
- | -rw-r--r-- 1 student student 0 Sep 29 18:20 Thor | ||
- | student@uso:~/Avengers$ ls -al | ||
- | total 8 | ||
- | drwxr-xr-x 2 student student 4096 Oct 6 16:44 . | ||
- | drwxr-xr-x 5 student student 4096 Sep 29 19:14 .. | ||
- | -rw-r--r-- 1 student student 0 Oct 6 16:44 .Hulk | ||
- | -rw-r--r-- 1 student student 0 Sep 29 18:20 Captain America | ||
- | -rw-r--r-- 1 student student 0 Sep 29 18:20 Iron Man | ||
- | -rw-r--r-- 1 student student 0 Sep 29 18:20 Thor | ||
- | </code> | ||
- | Am creat fișierul ascuns ''%%.Hulk%%''. Observăm că acesta nu apare la execuția ''%%ls -l%%'', dar apare la execuția comenzii ''%%ls -al%%''. | ||
- | |||
- | Similar, creăm directoare ascunse punând un //(.)// în fața numelui: | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ mkdir .LordOfTheRings | ||
- | student@uso:~$ ls | ||
- | Avengers GameOfThrones | ||
- | student@uso:~$ ls -al | ||
- | total 20 | ||
- | drwxr-xr-x 5 student student 4096 Sep 29 18:41 . | ||
- | drwxr-xr-x 4 student student 4096 Sep 29 18:35 .. | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 18:41 .LordOfTheRings | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 18:20 Avengers | ||
- | (...) | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 17:44 GameOfThrones | ||
- | (...) | ||
- | </code> | ||
- | Am creat directorul ascuns ''%%.LordOfTheRings%%''. | ||
- | |||
- | === Exerciții - creare fișiere/directoare ascunse === | ||
- | |||
- | - Creați un director cu numele ''%%.LordOfTheRings%%'' în directorul vostru home. | ||
- | - Intrați în directorul creat. | ||
- | - Creați 3 fișiere ascunse cu numele ''%%Aragorn%%'', ''%%Legolas%%'', ''%%Frodo Baggins%%''. | ||
- | - Verificați operațiile de creare (director și fișiere). | ||
- | - Creați un director cu numele ''%%stiri%%'' în directorul vostru home. | ||
- | - Creați fișierele ''%%hotnews%%'', ''%%biziday%%'', ''%%digi24%%''. | ||
- | - Creați fișierul ascuns ''%%.cancan%%''. | ||
- | - Afișați **toate** fișierele din director. | ||
- | - Afișați fișierele din director care **nu** sunt ascunse. | ||
- | - Creați un director ''%%tv%%'' în directorul vostru home. | ||
- | - Creați fișierele ''%%ProTV%%'', ''%%Digi24%%'', ''%%Eurosport%%''. | ||
- | - Creați fișierele ascunse ''%%Antena3%%'', ''%%Romania24%%''. | ||
- | - Afișați **toate** fișierele din director. | ||
- | - Afișați fișierele din director care **nu** sunt ascunse. | ||
- | - Copiați directorul ''%%stiri%%'' împreună cu fișierele de sub acesta în directorul ''%%tv%%''. | ||
- | - Mutați fișierele ''%%.Antena3%%'' și ''%%.Romania24%%'' în directorul ''%%/tmp%%''. | ||
- | |||
- | |||
- | ==== Exerciții - ierarhii de fișiere și directoare ==== | ||
- | |||
- | - Afișați ierarhia de fișiere pornind de la directorul vostru home (''%%~%%''). | ||
- | - Creați următoarea ierarhie pornind de la directorul ''%%/home/student/%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ tree | ||
- | . | ||
- | ├── prime_video | ||
- | ├── Hulu | ||
- | │ └── Favorite | ||
- | ├── Netflix | ||
- | │ ├── Filme | ||
- | │ │ ├── filme_2020.txt | ||
- | │ │ ├── filme_2019.txt | ||
- | │ │ ├── filme_vechi | ||
- | │ └── Seriale | ||
- | │ ├── seriale_2020 | ||
- | │ ├── seriale_2019.txt | ||
- | │ └── seriale_vechi | ||
- | ├── HBO_GO | ||
- | │ ├── Modern_Family.txt | ||
- | │ └── Harry_Potter | ||
- | └── YouTubeTV | ||
- | </code> | ||
- | |||
- | - Copiați întreaga ierarhie în calea ''%%/tmp%%''. Folosiți comanda ''%%cp%%''. (Hint: recursivitate). | ||
- | - Confirmați copierea prin afișarea directorului părinte. | ||
- | - Ștergeți fișierul ''%%Favorite%%'' din directorul ''%%Hulu%%''. Confirmați ștergerea prin afișarea directorului părinte. | ||
- | - Ștergeți directorul ''%%prime video%%''. | ||
- | - Confirmați ștergerea prin afișarea directorului părinte. | ||
- | - Ștergeți directorul ''%%HBO GO%%''. | ||
- | - Găsiți parametrii corespunzători ștergerii unui director care nu este gol. | ||
- | - Confirmați ștergerea prin afișarea directorului părinte. | ||
- | - Ștergeri ierarhia de directoare începând cu directorul ''%%Netflix%%''. | ||
- | - Confirmați ștergerea prin afișarea directorului părinte. | ||
- | - Creați ierarhia de directoare de mai jos. | ||
- | - Căutați parametrul necesar pentru ''%%mkdir%%'' pentru a crea toată ierarhia //dintr-o singură executare a comenzii//: | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ tree | ||
- | . | ||
- | └─── Cale | ||
- | └─── Lungă | ||
- | └─── De | ||
- | └─── Directoare | ||
- | </code> | ||
- | |||
- | - Mutați ierarhia copiată anterior în ''%%/tmp%%'' în directorul ''%%Directoare%%''. | ||
- | |||
- | ===== Legături (Links) ===== | ||
- | |||
- | O legătură este o scurtătură către un fișier sau un director. Acestea sunt necesare atunci când nu vrem să parcurgem toată ierarhia de fișiere. De exemplu, punem executabilul jocului //Warcraft3// pe Desktop pentru a-l accesa rapid. Mai multe legături pot referi același director/fișier. | ||
- | |||
- | Caracteristici: | ||
- | |||
- | * Similar //Shortcut// din Windows; | ||
- | * Orice modificare în fisierul țintă, se vede și în fișierul legătură; | ||
- | * Este o legătură către numele fișierului și nu către conținut; | ||
- | * Dacă fișierul este mutat sau redenumit, legătura se pierde; | ||
- | * Putem crea legături către directoare. | ||
- | |||
- | Creăm o legătură simbolică către directorul ''%%/home/student/%%'' folosind comanda ''%%ln -s%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~/comenzi/ls$ ln -s ~/ . | ||
- | student@uso:~/comenzi/ls$ ls -l | ||
- | total 0 | ||
- | lrwxrwxrwx 1 student student 28 Oct 6 17:58 mkdir -> /home/student/ | ||
- | </code> | ||
- | Observăm că fișierul creat este //link// (are primul caracter ''%%l%%''). Mai mult, observăm că acest link este o scurtătură către calea ''%%/home/student/%%''. | ||
- | |||
- | <code bash> | ||
- | student@uso:~/comenzi/ls$ ls -l mkdir/ | ||
- | total 8 | ||
- | drwxr-xr-x 2 student student 4096 Oct 6 16:44 Avengers | ||
- | drwxr-xr-x 2 student student 4096 Oct 6 16:50 GameOfThrones | ||
- | student@uso:~/comenzi/ls$ ls -l mkdir/Avengers/ | ||
- | total 0 | ||
- | -rw-r--r-- 1 student student 0 Sep 29 18:20 Captain America | ||
- | -rw-r--r-- 1 student student 0 Sep 29 18:20 Iron Man | ||
- | -rw-r--r-- 1 student student 0 Sep 29 18:20 Thor | ||
- | </code> | ||
- | Observăm că putem accesa întreaga ierarhie de fișiere și directoare. | ||
- | |||
- | Vedem în continuare ce se întâmplă dacă ștergem un fișier. | ||
- | |||
- | <code bash> | ||
- | student@uso:/tmp$ ls -l /home/student/ | ||
- | total 8 | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 18:20 Avengers | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 17:44 GameOfThrones | ||
- | -rw-r--r-- 1 student student 0 Sep 29 19:04 Thor | ||
- | student@uso:/tmp$ ls | ||
- | mkdir ssh-ApUMKI3HSJ | ||
- | student@uso:/tmp$ rm mkdir/Thor | ||
- | student@uso:/tmp$ ls mkdir/ | ||
- | Avengers GameOfThrones | ||
- | student@uso:/tmp$ ls -l /home/student/ | ||
- | total 8 | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 18:20 Avengers | ||
- | drwxr-xr-x 2 student student 4096 Sep 29 17:44 GameOfThrones | ||
- | </code> | ||
- | Observăm că dacă am șters un fișier accesându-l prin legătura, s-a șters și la destinație. | ||
- | |||
- | ==== Exerciții - legături (linkuri) ==== | ||
- | |||
- | * Creați o legătură simbolică în directorul vostru ''%%home%%'' către directorul ''%%Netflix%%''. | ||
- | * Verificați crearea legăturii prin afișarea conținutului directorului părinte. | ||
- | * Afișați conținutul legăturii. | ||
- | * Ștergeți directorul ''%%Netflix%%''. | ||
- | * Afișați conținutul legăturii. | ||
- | |||
- | |||
- | ===== Execuția programelor ===== | ||
- | |||
- | Execuția unui fișier/program se face folosind calea către fișier în locul unei comenzi pe care am rula-o în mod normal. Putem rula un executabil folosind o care relativă cum ar fi ''%%./executabil%%'' sau ''%%./director/executabil%%'', ori folosind o cale absoluta cum ar fi ''%%/usr/bin/firefox%%''. | ||
- | |||
- | Creăm un executabil (adică un progrma) numit ''%%my_ls%%'' care face același lucru ca și comanda ''%%ls%%'': | ||
- | |||
- | <code bash> | ||
- | student@uso:~ cp /bin/ls my_ls | ||
- | </code> | ||
- | |||
- | Executăm executabilul creat de noi ca mai jos: | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ ./my_ls | ||
- | executie mkdir my_ls touch | ||
- | </code> | ||
- | Putem folosi atât calea relativă cât și absolută: | ||
- | |||
- | <code bash> | ||
- | student@uso:~$ ls -l | ||
- | total 184 | ||
- | drwxr-xr-x 3 student student 4096 Oct 13 12:53 Desktop | ||
- | drwxr-xr-x 2 student student 4096 Sep 30 05:03 Documents | ||
- | drwxr-xr-x 2 student student 4096 Sep 30 05:03 Downloads | ||
- | drwxrwxr-x 2 student student 4096 Oct 13 13:17 GameOfThrones | ||
- | drwxr-xr-x 2 student student 4096 Sep 30 05:03 Music | ||
- | drwxr-xr-x 2 student student 4096 Sep 30 05:03 Pictures | ||
- | drwxr-xr-x 2 student student 4096 Sep 30 05:03 Public | ||
- | drwxr-xr-x 2 student student 4096 Sep 30 05:03 Templates | ||
- | drwxr-xr-x 2 student student 4096 Sep 30 05:03 Videos | ||
- | -rw-rw-r-- 1 student student 0 Oct 13 13:02 cities | ||
- | -rw-rw-r-- 1 student student 0 Oct 13 13:03 'cities in romania' | ||
- | -rw-r--r-- 1 student student 8980 Sep 24 09:00 examples.desktop | ||
- | -rwxr-xr-x 1 student student 133792 Oct 13 14:01 my_ls | ||
- | -rw-rw-r-- 1 student student 0 Oct 13 13:05 romania | ||
- | drwxr-xr-x 4 student student 4096 Oct 2 03:11 snap | ||
- | student@uso:~$ ./my_ls | ||
- | Desktop GameOfThrones Public cities my_ls | ||
- | Documents Music Templates 'cities in romania' romania | ||
- | Downloads Pictures Videos examples.desktop snap | ||
- | student@uso:~$ /home/student/my_ls | ||
- | Desktop GameOfThrones Public cities my_ls | ||
- | Documents Music Templates 'cities in romania' romania | ||
- | Downloads Pictures Videos examples.desktop snap | ||
- | </code> | ||
- | Observăm cum se rulează un executabil atât cu cale relativă (în primul caz) cât și cu cale absolută (în al doilea caz). | ||