Laborator 01 - Lucrul cu fișiere

Căi în ierarhia de fișiere

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.

Un astfel de exemplu este următorul:

Î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:

student@uso:/$ 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

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:

student@uso:/home$ tree -L 1 /home
.
|-- student
|-- test

Există două directoare student și test.

Observăm cum se schimbă promptul de terminal:

  • în primul exemplu student@uso:/$ tree -L 1 / eram în directorul /.
  • în al doilea exemplu student@uso:/home$ tree -L 1 eram în directorul /home.

Avansăm în ierarhia de directoare către student:

student@uso:~$ tree
.
├── Desktop
├── Documents
├── Downloads
├── GameOfThrones
├── Music
├── Pictures
├── Public
├── Templates
├── Videos
├── examples.desktop
└── snap
    ├── slack
    │   ├── 28
    │   ├── common
    │   └── current -> 28
    └── spotify
        ├── 42
        ├── common
        └── current -> 42
 
18 directories, 1 file

Directorul acesta este directorul home al utilizatorului student. În rezultatul comenzii tree, vedem întreaga ierarhie a directorului /home/student.

În continuare detaliem conceptul de cale.

Calea curentă

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.

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.

În lina de comandă afișăm calea până la directorul în care ne aflăm (calea curentă) folosind comanda pwd (print working directory) :

student@uso:~$ pwd
/home/student

Aceasta afișează poziția noastră în sistemul de fișiere.

Ne mutăm la calea /usr/bin folosind comanda cd (change directory):

student@uso:~$ pwd
/home/student
student@uso:~$ cd /usr/bin/
student@uso:/usr/bin$ pwd
/usr/bin

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ă.

Separator de cale

Î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 \.

Cale relativă și cale absolută

Atunci când vrem să citim, scriem, ștergem un fișier sau director trebuie să ne referim la acel fișier sau director. Practic, orice operație în sistemul de fișiere (arhivare, criptare, ștergere, editare) folosește căi. Este impropriu să spunem “deschide fișierul /home/student/a.txt”; tehnic corect este “deschide fișierul de la calea /home/student/a.txt”.

În sistemul de fișiere, ne putem referi la un fișier prin 2 modalități: folosind calea relativă sau folosind calea absolută.

Spre exemplu, luăm un serial pe Netflix. Ne referim la un episod în două moduri:

  • Față de început - primul episod (în mod absolut): În episodul 213 s-a întâmplat ceva.
  • Față de episodul la care ne aflăm (în mod relativ): În urmă cu 3 episoade s-a întâmplat ceva.

Similar, ne referim la un fișier:

  • Pornind din rădăcina ierarhiei de fișiere (root), reprezentat prin simbolul /, numită cale absolută.
  • Pornind de la directorul în care ne aflăm (director curent), numită cale relativă.

Cale absolută

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:

student@uso:~$ ls -l /usr/bin/touch
lrwxrwxrwx 1 root root 10 Mar 14  2015 /usr/bin/touch -> /bin/touch
student@uso:~$ ls -l /etc/passwd
-rw-r--r-- 1 root root 1768 Sep  9 14:07 /etc/passwd

Am folosit opțiunea -l a utilitarului ls pentru a afișa informații suplimentare ale fisierelor.

Observăm că la începutul căilor este întotdeauna caracterul '/' (directorul rădăcină).

Cale relativă

Prin calea relativă ne referim la un fișier în funcție de calea curentă.

student@uso:~$ ls -l snap/spotify/
total 8
drwxr-xr-x 5 student student 4096 Oct  2 03:11 42
drwxr-xr-x 3 student student 4096 Oct  2 03:10 common
lrwxrwxrwx 1 student student    2 Oct  2 03:10 current -> 42

Î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.

Același rezultat îl obținem folosind calea absolută:

student@uso:~$ ls -l /home/student/snap/spotify/
total 8
drwxr-xr-x 5 student student 4096 Oct  2 03:11 42
drwxr-xr-x 3 student student 4096 Oct  2 03:10 common
lrwxrwxrwx 1 student student    2 Oct  2 03:10 current -> 42

Calea /home/student/snap/spotify/ 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ă.

Intrarea '..' din sistemul de fișiere

Referim aceleași fișiere (/usr/bin/touch și /etc/passwd) prin cale relativă, folosind ls:

student@uso:~$ pwd
/home/student
student@uso:~$ ls -l ../../usr/bin/touch
lrwxrwxrwx 1 root root 10 Mar 14  2015 ../../usr/bin/touch -> /bin/touch
student@uso:~$ ls -l ../../etc/passwd
-rw-r--r-- 1 root root 1768 Sep  9 14:07 ../../etc/passwd

Observăm că ne aflăm la calea /home/student și urcăm spre vârful ierarhiei de fișiere folosind caracterele ...

Odată ajunși la directorul rădăcină /, coborâm spre fișierul touch, trecând prin directoarele usr și bin.

Este bine să ne referim la .. ca punct punct, nu două puncte : pentru a elimina confuziile.

Exerciții

  • 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 directorul părinte (un nivel mai sus față de cel curent).

Schimbarea căii curente

Plasarea noastră într-un alt director decât cel curent înseamnă schimbarea căii curente. Facem acest lucru folosind comanda cd (change directory):

student@uso:/etc$ pwd
/etc
student@uso:/etc$ cd /usr
student@uso:/usr$ pwd
/usr

Am schimbat calea curentă de la /etc la /usr. Această comandă poate fi folosită oriunde ne-am afla deoarece este o cale absolută.

În general, comanda cd schimbă promptul terminalului; aceasta este o indicație a directorului curent în care ne aflăm:

  • în cazul student@uso:/etc$ pwd ne aflăm în etc
  • în cazul student@uso:/usr$ pwd ne aflăm în usr

La fel ca toate comenzile de lucru cu sistemul de fișiere, comanda cd primește ca parametru o cale. Aceasta poate fi atât relativă cât și absolută.

Schimbăm calea curentă în /home/student, folosind cd:

student@uso:/usr$ cd /home/student
student@uso:~$ pwd
/home/student

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ă.

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:

student@uso:~$ cd /home
student@uso:/home$ pwd
/home
student@uso:/home$ cd student/
student@uso:~$ pwd
/home/student

Schimbăm calea curentă la /usr/bin folosind cale relativă:

student@uso:~$ pwd
/home/student
student@uso:~$ cd ../../usr/bin
student@uso:/usr/bin$ pwd
/usr/bin

Una dintre cele mai importate informații când lucrăm în sistemul de operare (în special în linia de comandă) este unde ne aflăm. Dacă știm unde ne aflăm, ne putem orienta către destinație. Știm unde ne aflăm folosind comanda pwd; ne deplasăm în altă parte folosind comanda cd.

Observăm cum am urcat în ierarhie folosind .. până la / (directorul rădăcină) iar apoi am coborât spre usr și apoi bin.

În exemplul de mai jos, comanda de mai sus nu este valabilă:

student@uso:~/comenzi$ pwd
/home/student/comenzi
student@uso:~/comenzi$ cd ../../usr/bin
-bash: cd: ../../usr/bin: No such file or directory

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ă.

Exerciții - schimbarea directorului curent
  • Schimbați directorul curent cu directorul de la calea /usr/bin. Folosiți cale absolută.
  • Schimbați directorul curent cu directorul de la calea /etc/. Folosiți cale relativă.
  • Schimbați directorul curent cu directorul de la calea /etc/network/. Folosiți cale relativă.

TAB completion

Funcția de tab completion este probabil una dintre cele mai utile funcții expuse de către shell. Prin simpla apăsare a tastei Tab în timp ce scriem numele unei comenzi, al unei opțiuni a unei comenzi sau calea către un director sau fișier, shellul va completa în mod automat textul sau va sugera opțiuni de auto-complete.

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.

Tasta Tab este descrisă în detaliu în capitolul Îmbunătățirea lucrului în linia de comandă.

Scurtături de căi

Pentru o eficiență mai bună, putem folosi simboluri pentru interacțiunea cu utilitarul cd:

  • Folosim caracterul (-) pentru a referi la calea anterioară.
    student@uso:~$ pwd
    /home/student
    student@uso:~$ cd /usr/bin/
    student@uso:/usr/bin$ pwd
    /usr/bin
    student@uso:/usr/bin$ cd -
    /home/student
    student@uso:~$ cd -
    /usr/bin
    student@uso:/usr/bin$ cd -
    /home/student
    student@uso:~$ cd -
    /usr/bin

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.
    student@uso:/usr/bin$ cd /tmp/
    student@uso:/tmp$ pwd
    /tmp
    student@uso:/tmp$ cd ~
    student@uso:~$ pwd
    /home/student
    student@uso:~$ cd /usr/bin/X11/
    student@uso:/usr/bin/X11$ pwd
    /usr/bin/X11
    student@uso:/usr/bin/X11$ cd ~
    student@uso:~$ pwd
    /home/student

Atunci când suntem în directorul home, promptul conține caracterul ~ pentru a indica acest lucru.

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ă sistemului 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.

student@uso:~r$ 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

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:

student@uso:~$ ls
Desktop    Downloads        Music     Public    Templates
Documents  examples.Desktop Pictures  snap      Videos

Vedem mai multe detalii despre fișierele și directoarele din directorul /home/student (adică directorul home al utilizatorului student, ~) folosind comanda ls:

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

Interpretăm rezultatele de mai sus:

  1. Primul caracter - ne arată că examples.desktop este un fișier obișnuit. Primul caracter d ne arată că Desktop este director.
  2. Șirurile rw-r--r-- (pentru examples.desktop) ș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ă.
  3. Următorul număr îl îgnorăm pentru moment.
  4. Următoarele două cuvinte, student, se referă tot la permisiuni și ownership; le vom discuta într-un capitol ulteror.
  5. Numărul 8980 arată dimensiunea fișierului examples.desktop. Observăm că directorul Desktop are dimensiunea de 4096 octeți (bytes);
  6. Urmează 3 coloane ce arată momentul ultimei modificări. O accesare poate înseamna creare sau modificare. Citirea nu schimbă această dată.
  7. 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:

student@uso:~$ ls cities
ls: cannot access cities: No such file or directory
student@uso:~$ touch cities
student@uso:~$ ls cities
cities

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:

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

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".

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

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:

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

Î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:

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
(...)

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.

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.

Afișarea conținutului unui fișier

Afișăm rapid conținutul fișierului Arya din directorul GameOfThrones folosind comanda cat:

student@uso:~$ cat GameOfThrones/Arya
student@uso:~$

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:

student@uso:~$ echo "A girl has no name" > "GameOfThrones/Arya"
student@uso:~$ cat "GameOfThrones/Arya"
A girl has no name

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:

student@uso:~$ ls Avengers/
Captain America  Hulk  Iron Man  Thor
student@uso:~$ rm Avengers/Hulk
student@uso:~$ ls Avengers/
Captain America  Iron Man  Thor

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:

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
(...)

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.

Comanda rmdir pe un director care nu este gol (care conține cel puțin un alt fișier sau director) nu funcționează.

student@uso:~$ rmdir Avengers/
rmdir: failed to remove 'Avengers/': Directory not empty

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.

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
(...)

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ă.

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:

student@uso:~$ ls
GameOfThrones
student@uso:~$ mv GameOfThrones ThroneOfGames
student@uso:~$ ls
ThroneOfGames

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:

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

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:

student@uso:~$ mv ../../../../tmp/GameOfThrones/ /home/student/
student@uso:~$ ls
Avengers  GameOfThrones

Am verificat că directorul GameOfThrones se află la calea indicată (calea curentă).

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.

Exerciții - redenumire și mutare
  1. Creați un director Vikings în directorul home al vostru.
  2. Creați fișierele Ragnar, Rollo, Lagertha în directorul Vikings.
  3. Verificați că directorul și fișierele au fost create.
  4. Mutati directorul (împreună cu întreaga ierarhie de fișiere) la locația /tmp/.
  5. Verificați că directorul și ierarhia de fișiere au fost mutate.
  6. Creați un director NBA în directorul home al vostru.
  7. Creați fișierele MichaelJordan, LeBronJames, DwayneWade și KobeBryant în directorul NBA.
  8. Verificați că directorul și fișierele au fost create.
  9. Mutați directorul NBA (împreună cu întreaga ierarhie de fișiere) în directorul Vikings.
  10. Verificați că directorul și ierarhia de fișiere au fost mutate.
  11. Redenumiți directorul GameOfThrones în ThronesInTheGame.
  12. Mutați fișierele din interiorul directorului ThronesInTheGame în /tmp.
  13. Verificați operațiile.
  14. 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:

student@uso:~$ cp Avengers/Thor /tmp/
student@uso:~$ ls /tmp/
Thor  ssh-ApUMKI3HSJ

Sintaxa este similară comenzii mv. Acum fișierul Thor este atât în /home/student/Avengers/Thor, cât și în /tmp/Thor.

student@uso:~$ cp Avengers/ /tmp/
cp: omitting directory 'Avengers/'

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:

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

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:

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
(...)

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:

student@uso:~$ ls -l ..
total 56
drwxr-xr-x 20 student  student  4096 Oct 13 13:38 student

Directorul .. este în cazul nostru echivalent cu /home.

Creăm fișiere ascunse punând un punct (.) în fața numelui:

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

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:

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
(...)

Am creat directorul ascuns .LordOfTheRings.

Exerciții - creare fișiere/directoare ascunse
  1. Creați un director cu numele .LordOfTheRings în directorul vostru home.
  2. Intrați în directorul creat.
  3. Creați 3 fișiere ascunse cu numele Aragorn, Legolas, Frodo Baggins.
  4. Verificați operațiile de creare (director și fișiere).
  5. Creați un director cu numele stiri în directorul vostru home.
  6. Creați fișierele hotnews, biziday, digi24.
  7. Creați fișierul ascuns .cancan.
  8. Afișați toate fișierele din director.
  9. Afișați fișierele din director care nu sunt ascunse.
  10. Creați un director tv în directorul vostru home.
  11. Creați fișierele ProTV, Digi24, Eurosport.
  12. Creați fișierele ascunse Antena3, Romania24.
  13. Afișați toate fișierele din director.
  14. Afișați fișierele din director care nu sunt ascunse.
  15. Copiați directorul stiri împreună cu fișierele de sub acesta în directorul tv.
  16. Mutați fișierele .Antena3 și .Romania24 în directorul /tmp.

Afișarea tipului de fișier

O ierarhie de fișiere este formată din directoare și fișiere. Fișierele pot fi de mai multe tipuri: text, binare, imagini, arhive, etc.

Pentru a afla tipul fișierului folosim comanda file:

student@uso:~$ file examples.desktop 
examples.desktop: UTF-8 Unicode text
student@uso:~$ file snap/spotify/42/.config/user-dirs.dirs.md5sum 
snap/spotify/42/.config/user-dirs.dirs.md5sum: ASCII text

Observăm că fișierul examples.desktop este un fișier de tipul UTF-8 în ciuda extensiei, iar user-dirs.firs.md5sum este un fișier ASCII text.

Vom prezenta mai multe detalii în capitolul Îmbunătățirea lucrului în linia de comandă.

Exerciții - ierarhii de fișiere și directoare

  1. Afișați ierarhia de fișiere pornind de la directorul vostru home (~).
  2. Creați următoarea ierarhie pornind de la directorul /home/student/ (Notă: Numele cu extensie din structura sunt fișiere, restul sunt directoare):
student@uso:~$ tree
.
├── prime_video
├── Hulu
│   └── Favorite.txt
├── 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
  1. Copiați întreaga ierarhie în calea /tmp. Folosiți comanda cp. (Hint: recursivitate).
  2. Confirmați copierea prin afișarea directorului părinte.
  3. Ștergeți fișierul Favorite.txt din directorul Hulu. Confirmați ștergerea prin afișarea directorului părinte.
  4. Ștergeți directorul prime video.
  5. Confirmați ștergerea prin afișarea directorului părinte.
  6. Ștergeți directorul HBO GO.
  7. Găsiți parametrii corespunzători ștergerii unui director care nu este gol.
  8. Confirmați ștergerea prin afișarea directorului părinte.
  9. Ștergeri ierarhia de directoare începând cu directorul Netflix.
  10. Confirmați ștergerea prin afișarea directorului părinte.
  11. Creați ierarhia de directoare de mai jos.
  12. Căutați parametrul necesar pentru mkdir pentru a crea toată ierarhia dintr-o singură executare a comenzii:
student@uso:~$ tree
.
└─── Cale
    └─── Lungă
         └─── De
              └─── Directoare
  1. Mutați ierarhia copiată anterior în /tmp în directorul Directoare.

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:

student@uso:~$ ln -s /home/student/Avengers/Thor thor
student@uso:~$ ls -l
(...)
lrwxrwxrwx 1 student student 28 Oct  6 17:58 thor -> /home/student/Avengers/Thor
(...)

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/Avengers/Thor.

Scriem textul “Hello” în fișierul Avengers/Thor:

student@uso:~$ echo "Hello" > Avengers/Thor
student@uso:~$ cat Avengers/Thor
Hello
student@uso:~$ cat thor
Hello

Vedem conținutul fișierului atât folosind o cale (relativă sau absolută), cât și folosind legătura simbolică (shortcutul).

Vedem în continuare ce se întâmplă dacă ștergem un fișier.

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 Thor
student@uso:/tmp$ ls 
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

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 program) numit my_ls care face același lucru ca și comanda ls:

student@uso:~ cp /bin/ls my_ls

Executăm executabilul creat de noi ca mai jos:

student@uso:~$ ./my_ls
executie  mkdir  my_ls  touch

Putem folosi atât calea relativă cât și absolută:

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

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).

Editor de text

O acțiune foarte des întâlnită este modificarea unor fișiere. Fie că scriem în jurnal, facem un TODO list sau scriem cod, trebuie să scriem într-un fișier. Pentru a modifica un fișier, folosim un program numit editor de text. Există două tipuri de editoare de text: editoare în mod grafic sau editoare în linie de comandă. Vom detalia în continuare aceste două categorii.

Nu există un editor bun sau prost. Există un editor potrivit sau nepotrivit.

Editor grafic

Folosit în mod uzual de utilizatori non-tehnici, aceste tipuri de editoare au o interfață grafică ce permit modificarea fișierelor într-un mod cât mai ușor, facil.

Poate cel mai folosit editor din această categorie este Microsoft Word. Scopul acestuia este ușurința în folosință: există multe capabilități (culori, marime font, stil, aranjare în pagină) pentru crearea de conținut, iar opțiunile sunt ușor de găsit și folosit. Un alt editor de text este Notepad++. Acesta este mai simplu, cu mai puține opțiuni.

Un editor foarte folosit pentru programare este Sublime. Acesta este și editorul grafic recomandat de noi.

Editoarele grafice sunt populare și pentru programare. Acestea oferă capabilități diverse pentru a ajuta un programator să scrie cod mai ușor, facil. De exemplu:

  • Buton pentru compilare și execuție
  • Auto-indentare (alinierea liniilor de cod)
  • Auto-completare a numelor de funcții și variabile
  • Suport pentru debugging
  • Integrarea cu alte componente: de exemplu editorul Xcode (de la Apple) este integrat cu simulator (iPhone).

Printr-o singură apăsare de buton, se pornește simulatorul de iPhone și se execută aplicația.

Alte editoare grafice: Sublime, gedit, Visual Studio.

Interacțiunea cu fișiere cu ajutorul editoarelor grafice

Mai jos este un exemplu de interacțiune cu editorul Pages, un editor de text de la Apple. Editarea documentelor este simplă, intuitivă și cu multe opțiuni.

Putem adăuga text foarte intuitiv. Am modificat dimensiunea, culoarea, fontul textului foarte ușor. Aceasta este puterea unui editor grafic.

Însă, pentru programare nu este deloc util; vom folosi sublime.

Deschiderea unui fișier se poate face atât din linia de comandă student@uso:~$ subl fișier

O listă de comenzi utile găsim aici le executăm în continuare:

Folosim combinația de taste Ctrl+x pentru cut:

Folosim combinația de taste Ctrl+u pentru undo, iar pentru a șterge de la cursor până la începutul liniei Ctrl+k Ctrl+backspace:

Indentarea se face cu Ctrl+[ și Ctrl+]:

Duplicăm o linie folosind Shift+Ctrl+d:

Pentru a compila cod folosim combinația de taste Ctrl+b:

Exerciții - editor grafic
  1. Deschideți fișierul Romanian Presidents și completați fișierul cu cel puțin 3 președinți ai României.
  2. Salvati fișierul în directorul vostru home.
  3. Duplicați textul scris anterior (copiat/lipit) de 5 ori.
  4. Indentați fiecare linie o dată.
  5. Comentați liniile 2-8.
  6. Scrieti cod C (similar exemplului de mai sus) pentru a afișa textul Make USO Great Again!.
  7. Folositi scurtăturile pentru indentare.
  8. Compilați folosind scurtătura Ctrl+b.

Editor în linie de comandă

Editoarele în linia de comandă sunt făcute pentru interacțiunea cu terminalul. Acestea asigură funcționalitați restrânse de formatare în comparație cu editoarele grafice. Nu există butoane fizice; de obicei comenzile se dau prin combinații de taste.

Un alt caz în care folosim editoarele în linie de comandă este lucrul la distanță. Atunci când ne conectăm remote la un server și nu avem interfață grafică, utilizarea unui editor în linie de comandă este necesară.

Există editoare mai puternice vim, emacs care permit automatizarea unor sarcini precum cele de mai sus.

Un editor în linie de comandă uzual folosit este nano. Acesta are funcționalități de bază și este ușor de folosit.

Interacțiunea cu fișiere cu ajutorul editoarelor în linie de comandă

În continuare vom folosi nano pentru a interacționa cu un fișier.

În exemplul de mai sus am deschis fișierul avengers cu nano. În urma comenzii, s-a creat fișierul dacă acesta nu exista. Am adăugat numele a 4 supereroi și am salvat folosind combinația de taste Ctrl+x după care a apărut întrebarea dacă vrem să salvăm modificările. În partea de jos apare optiunea de Y es și N o. Apăsând pe tasta Y, ne cere să trecem numele fișierului, după care să confirmăm cu tasta Enter.

O listă de comenzi utile găsim la cheatsheet nano.

În continuare vom exemplifica scurtături cu ajutorul combinațiilor de taste pentru a spori eficiența.

Exerciții - editor în linie de comandă
  1. Deschideți fișierul US Presidents și completați fișierul cu cel puțin 3 președinți ai Statelor Unite are Americii.
  2. Salvati fișierul în directorul vostru home.
  3. Duplicați textul scris anterior (copiat/lipit) de 5 ori.
  4. Indentați fiecare linie de două ori.
  5. Comentați liniile 2-8.
  6. Salvati fișierul în directorul vostru home.
  7. Duplicați textul scris anterior (copiat/lipit) de 5 ori.
  8. Adăugați 4 spații la început de fiecare rând.
  9. Adăugați caracterul # la început de rând pentru liniile 2-8.
  10. Scrieti cod C (similar exemplului de la editor grafic) pentru a afișa textul Make USO Great Again!.
  11. Folositi scurtăturile pentru indentare.
  12. Compilați folosind scurtătura Ctrl+b.

Sumar - Cheatsheet

Căi în ierarhia de fișiere

Calea curentă

student@uso:~$ pwd
/home/student

Cale relativă și cale absolută

Cale relativă:

student@uso:~$ ls -l snap/spotify/
total 8
drwxr-xr-x 5 student student 4096 Oct  2 03:11 42
drwxr-xr-x 3 student student 4096 Oct  2 03:10 common
lrwxrwxrwx 1 student student    2 Oct  2 03:10 current -> 42

Cale absolută:

student@uso:~$ ls -l /home/student/snap/spotify
total 8
drwxr-xr-x 5 student student 4096 Oct  2 03:11 42
drwxr-xr-x 3 student student 4096 Oct  2 03:10 common
lrwxrwxrwx 1 student student    2 Oct  2 03:10 current -> 42

Schimbarea căii curente

student@uso:/etc$ pwd
/etc
student@uso:/etc$ cd /usr
student@uso:/usr$ pwd
/usr

Scurtături de căi

Caracterul -:

student@uso:~$ pwd
/home/student
student@uso:~$ cd /usr/bin/
student@uso:/usr/bin$ pwd
/usr/bin
student@uso:/usr/bin$ cd -
/home/student
student@uso:~$ cd -
/usr/bin
student@uso:/usr/bin$ cd -
/home/student
student@uso:~$ cd -
/usr/bin

Caracterul ~:

student@uso:/usr/bin$ cd /tmp/
student@uso:/tmp$ pwd
/tmp
student@uso:/tmp$ cd ~
student@uso:~$ pwd
/home/student
student@uso:~$ cd /usr/bin/X11/
student@uso:/usr/bin/X11$ pwd
/usr/bin/X11
student@uso:/usr/bin/X11$ cd ~
student@uso:~$ pwd
/home/student

Interacțiunea cu fișiere în linia de comandă

Ierarhie de fișiere

student@uso:~$ 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

Afișarea conținutului unui director

student@uso:~/Avengers$ ls
Captain America  Iron Man  Thor
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

Crearea fișierelor

student@uso:~$ ls cities
ls: cannot access cities: No such file or directory
student@uso:~$ touch cities
student@uso:~$ ls cities
cities

Crearea directoarelor

student@uso:~$ mkdir GameOfThrones
student@uso:~$ mkdir Avengers
student@uso:~$ ls -l
(...)
drwxr-xr-x 2 student student 4096 Sep 29 17:43 Avengers
(...)
drwxr-xr-x 2 student student 4096 Sep 29 17:43 GameOfThrones
(...)

Afișarea conținutului unui fișier

student@uso:~$ cat GameOfThrones/Arya
A girl has no name

Ștergerea fișierelor

student@uso:~$ ls Avengers/
Captain America  Hulk  Iron Man  Thor
student@uso:~$ rm Avengers/Hulk
student@uso:~$ ls Avengers/
Captain America  Iron Man  Thor

Ștergerea directoarelor

student@uso:~$ mkdir LordOfTheRings
student@uso:~$ ls -l
total 12
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 8
drwxr-xr-x 2 student student 4096 Sep 29 18:02 Avengers
drwxr-xr-x 2 student student 4096 Sep 29 17:44 GameOfThrones

Redenumirea și mutarea fișierelor și directoarelor

student@uso:~$ ls
GameOfThrones
student@uso:~$ mv GameOfThrones ThroneOfGames
student@uso:~$ ls
ThroneOfGames

Copierea fișierelor și directoarelor

student@uso:~$ cp Avengers/Thor /tmp/
student@uso:~$ ls /tmp/
Thor  ssh-ApUMKI3HSJ

Fișiere și directoare ascunse

student@uso:~$ ls -al
total 8
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
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

Afișarea tipului de fișier

student@uso:~$ file Picture.abc
Picture.abc: PNG image data, 742 x 320, 8-bit/color RGBA, non-interlaced
student@uso:~$ file index.rst
index.rst: ASCII text
student@uso:~$ file archive.tar
archive.tar: POSIX tar archive (GNU) 

Legături (Links)

student@uso:~$ ln -s ~/ .
student@uso:~$ ls -l
total 0
lrwxrwxrwx 1 student student 28 Oct  6 17:58 mkdir -> /home/student/

Execuția programelor

student@uso:~$ ./my_ls
executie  mkdir  my_ls  touch

Cuprins

uso/laboratoare/laborator-01.txt · Last modified: 2020/10/13 22:56 by lucian.teodorescu
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