This is an old revision of the document!


Laboratorul 02. Lucrul cu fișiere

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.

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;

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

Interpretarea rezultatelor de mai sus o vom discuta într-un laborator viitor.

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.

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”, “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” î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

Ștergerea fișierelor

Ștergem fișierul “Hulk” din directorul “Avengers” folosind utilitarul rm:

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

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 î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. Redenumiți directorul GameOfThrones în ThronesInTheGame.
  7. Mutați fișierele din interiorul directorului ThronesInTheGame în /tmp.
  8. Verificați operațiile.
  9. 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 Captain America în directorul /tmp/ folosind cp:

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

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

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 Captain America
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.

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.

Sumar - Cheatsheet

Shortcuturi pentru folosirea browserului web
Pornirea browserului web
  • Folosind iconuri ca în imaginea de mai jos:

  • Folosind combinația de taste (scurtătura, shortcutul) Alt+F2 și introducând șirul firefox ca în imaginea de mai jos:

  • Folosind linia de comandă ca în imaginea de mai jos:

Oprirea browserului web
  • Folosind butonul de închidere a ferestrei grafice, în forma unui simbol x.
  • Folosind intrarea de tip Quit din meniul grafic al aplicației, ca în imaginea de mai jos, specifică aplicației Firefox:

  • Folosind combinația de taste Alt+F4 care închide fereastra grafică, o scurtătură pentru folosirea butonului de închidere.
  • Folosind combinația de taste Ctrl+q, specifică aplicației Firefox.
Folosirea barei de adresă
  • Folosind clickuri ca în imaginea de mai jos:

  • Folosind combinația de taste Ctrl+l.
  • Folosind butoanele săgeată stânga (Go back one page) și săgeată dreapta (Go forward one page) din interfața grafică a browserului ca în imaginea de mai jos:

  • Folosind combinațiile de taste echivalente cu clickurile pe săgețile stânga/dreapta din browser:
    • Navigare înapoi: Alt+săgeată stânga sau Ctrl+[.
    • Navigare înainte: Alt+săgeată dreapta sau Ctrl+].
Scroll în browser
  • Folosind mouse-ul prin rotiță.
  • Folosind touchpadul.
  • Folosind tastele săgeată sus/săgeată jos. Așa ne deplasăm în sus/jos cu câte o linie.
  • Folosind butoanele PageUp și PageDown de pe tastatură. Așa ne deplasăm câte un “ecran” în jos sau în sus.
Reîmprospătarea paginii
  • Folosind butonul de remîprospătare (refresh) din browser ca în imaginea de mai jos:

  • Folosind tasta F5.
  • Folosind combinația de taste Ctrl+r.
Deschiderea taburilor
  • Folosind butonul cu simbolul + din interfața grafică a browserului ca în imaginea de mai jos:

  • Folosind combinația de taste Ctrl+t.
  • Folosind clickuri ca în imaginea de mai jos:

  • Folosind combinația de taste Alt+<număr>.
Închiderea taburilor
  • Folosind butonul cu simbolul x din browser ca în imaginea de mai jos:

  • Folosind combinația de taste Ctrl+w.
  • Folosind combinația de taste Ctrl+F4.
  • Folosind clickuri. Folosim click dreapta pe link după care alegem opțiunea Open Link in New Tab din meniul contextual ca în imaginea de mai jos:

  • Apăsând tasta Ctrl și click pe link.
Shortcuturi pentru folosirea terminalului
Deschiderea terminalului
  • Folosind iconuri ca în imaginea de mai jos:

  • Folosind combinația de taste Alt+F2 ca în imaginea de mai jos:

  • Apăsând click dreapta și apoi butonul Open Terminal ca în imaginea de mai jos:

  • Folosind combinația de taste Ctrl+Alt+t.
Închiderea terminalului
  • Folosind butonul x din partea dreaptă-sus a aplicației ca în imaginea de mai jos:

  • Folosind combinația de taste Ctrl+Shift+q.
  • Folosind combinația de taste Alt+F4.
  • Folosind combinația de taste Ctrl+d.
Deschiderea taburilor
  • Folosind meniul aplicației ca în imaginea de mai jos:

Apăsăm pe opțiunea File din meniu după care pe butonul New Tab.

  • Apăsând click dreapta în interiorul terminalului după care pe butonul New Tab ca în imaginea de mai jos:

  • Folosind combinația de taste Ctrl+Shift+t.
Închiderea taburilor
  • Folosind meniul aplicației ca în imaginea de mai jos:

  • Folosind butonul (simbolul) x din dreptul tabului ca în imaginea de mai jos:

  • Folosind combinația de taste Ctrl+Shift+w.
  • Folosind clickuri ca în imaginea de mai jos:

  • Folosind combinația de taste Alt+<număr> unde număr este numărul (indexul) tabului la care vrem să ajungem. Primul tab are numărul 1, al nouălea tab are numărul 9, iar al zecelea are numărul 0.
  • Folosind combinațiile de taste Ctrl+PageUp pentru a merge la următorul tab și Ctrl+PageDown pentru a trece la tabul anterior.
Scroll în terminal
  • Folosind mouse-ul sau touchpad-ul.
  • Folosind combinațiile de taste Shift+PageUp și Shift+PageDown.
Golirea ecranului de terminal
  • Folosind comanda clear în terminal ca în imaginea de mai jos:

  • Folosind combinația de taste Ctrl+l în terminal.
Copierea textului
  • Selectăm textul, apăsăm click dreapta și apăsăm butonul Copy ca în imaginea de mai jos:

  • Selectăm textul și apăsăm combinația de taste Ctrl+Insert.
  • Selectăm textul și apăsăm combinația de taste Ctrl+Shift+c.
Lipirea textului
  • Apăsăm click dreapta și apăsăm butonul Paste ca în imaginea de mai jos:

  • Apăsăm combinația de taste Shift+Insert.
  • Apăsăm combinația de taste Ctrl+Shift+v.
info1/laboratoare/02.1603182565.txt.gz · Last modified: 2020/10/20 11:29 by alexandru.vochescu
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