Skip to content

Commit

Permalink
improve-cli: Add to file system inspection section
Browse files Browse the repository at this point in the history
Signed-off-by: Eduard Staniloiu <[email protected]>
  • Loading branch information
edi33416 committed Sep 2, 2020
1 parent d32f4ce commit e383dd5
Showing 1 changed file with 320 additions and 3 deletions.
323 changes: 320 additions & 3 deletions chapters/improve-cli/inspect-fs.rst
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,59 @@ Observăm că s-a căutat în secțiunea **(3)** din manual:
3 Library calls (functions within program libraries)
Bonus: Utilizarea pachetului ``tldr``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Utilitarul ``tldr`` (too long, didn't read) oferă o versiune simplificată a paginilor de manual.
Acesta ne va arăta un rezumat al utilizării unei comenzi cu opțiunile cele mai des folosite în comunitate.
.. code-block:: bash
student@uso:~$ tldr ls
ls
List directory contents.
- List files one per line:
ls -1
- List all files, including hidden files:
ls -a
- Long format list (permissions, ownership, size and modification date) of all files:
ls -la
- Long format list with size displayed using human readable units (KB, MB, GB):
ls -lh
- Long format list sorted by size (descending):
ls -lS
- Long format list of all files, sorted by modification date (oldest first):
ls -ltr
.. note::
Acesta trebuie tratat ca un cheatsheet accesibil din linie de comandă.
``tldr`` nu elimină utilizarea paginilor ``man``, dar ne ajută să găsim rapid opțiunile uzuale.
Acestea fiind spuse, vă recomandăm ca întotdeaună să citiți și să înțelegeți din paginile ``man`` ce efect au opțiunile unei comenzi înainte de a le folosi.
Feriți-vă să rulați comenzi orbește, pentru că așa ați găsit pe StackOverflow, tldr, etc.
Întotdeauna asigurați-vă că ați înțeles cum și de ce rulați comanda și abia apoi treceți la fapte.
Utilizarea pachetului ``tldr``
""""""""""""""""""""""""""""""
Instalați pachetul ``tldr`` pe mașina voastră.
#. Accesați pagina ``tldr`` a utilitarului ``ls``.
#. Accesați pagina ``tldr`` a utilitarului ``zip``.
#. Accesați pagina ``tldr`` a utilitarului ``tar``.
#. Accesați pagina ``tldr`` a utilitarului ``git``.
#. Accesați pagina ``tldr`` a utilitarului ``man``.
Sumar: Inspectarea paginilor de manual
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Expand All @@ -274,15 +327,279 @@ Sumar: Inspectarea paginilor de manual
Comanda ``cd``
--------------
Shortcut-uri pt cd: `cd` echivalent cu `cd ~`, `cd -` pt a sări la calea anterioară.
Comanda ``cd`` este una dintre cele mai folosite comenzi.
Funcționalitatea este în numele ei, **cd** fiind o abreviere pentru **change directory**.
Este esențial să ne simțim foarte comfortabili atunci când navigăm prin sistemul de fișiere.
Navigarea eficientă folosind ``cd``
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Întotdeauna când deschidem un terminal o facem pentru că vrem să realizăm o sarcină: vrem să redenumim rapid ultimele poze făcute cu telefonul de la genericul **DCIM1001** la ceva util **Excursie Sinaia, Ian 2020, 1001**, vrem să ne testăm proiectul și să urcăm modificările pe GitHub, etc.
Pentru a ne realiza sarcina, vrem să navigăm în directorul în directorul în care ne-am salvat pozele.
Primul pas este să aflăm directorul curent în care ne aflăm.
Facem asta folosind comanda ``pwd``, acronim pentru print working directory.
.. code-block:: bash
student@uso:~$ pwd
/home/student
Observăm că ne aflăm în directorul **home** al utilizatorului **student**.
Ne vom muta în directorul în care avem pozele
.. code-block:: bash
student@uso:~$ cd Pictures/Sinaia/
student@uso:~/Pictures/Sinaia$
.. note::
Observați că rezultatul comenzii ``pwd`` este o cale absolută ``/home/student``.
O cale absolută este o cale care începe cu ``/``, adică cu directorul **root** care este rădăcina sistemului nostru de fișiere.
Observați calea oferită comenzii ``cd``: ``Pictures/Sinaia/``.
Aceasta nu începe cu directorul rădăcină ``/``, deci este o cale relativă la directorul în care ne aflam, adică relativă la ``/home/student``.
Acum ne aflăm în directorul pozelor.
Verificăm folosind ``pwd``
.. code-block:: bash
student@uso:~/Pictures/Sinaia$ pwd
/home/student/Pictures/Sinaia
În cazul de față, această verificare este redundantă deoarece avem această informație afișată în prompt: ``student@uso:~/Pictures/Sinaia``.
Remarcați faptul că în prompt, calea este afișată ``~/Pictures/Sinaia``.
Este afișată așa deoarece caracterul ``~`` (tilda) este o scurtătură pentru directorul home al utilizatorului curent, în cazul nostru ``/home/student``.
.. tip::
Scurtătura ``~`` este disponibilă pentru orice comandă, nu doar pentru ``cd``.
De înlocuirea ei se ocupă terminalul înainte de a executa comanda.
Putem să revenim în directorul nostru home folosindu-ne de scurtătura ``~``
.. code-block:: bash
student@uso:~/Pictures/Sinaia$ cd ~
student@uso:~$
Un mijloc și mai scurt prin care putem să revenim în directorul nostru home este să executăm comanda ``cd`` fără nici un argument.
.. note::
Comenzile ``cd`` și ``cd ~`` sunt echivalente.
În practică, folosim comanda ``cd`` simplă pentru a naviga în directorul home al utilizatorului curent.
Folosim ``~`` pentru a construi o cale absolută, care are ca punct de plecare directorul home al utilizatorului curent, așa cum putem vedea în exemplul de mai jos:
.. code-block:: bash
student@uso:~/workspace/uni/programming/labs/lab01$ pwd
/home/student/workspace/uni/programming/labs/lab01
student@uso:~/workspace/uni/programming/labs/lab01$ cd ~/Pictures/Sinaia
student@uso:~/Pictures/Sinaia$ cd -
student@uso:~/workspace/uni/programming/labs/lab01$ cd ../../../../../Pictures/Sinaia
student@uso:~/Pictures/Sinaia$
Observăm că sintaxa ``cd ~/Pictures/Sinaia`` este mult mai scurtă și simplă de urmărit față de alternativa ``cd ../../../../../Pictures/Sinaia``.
În exemplul de mai sus am folosit o altă scurtătură pusă la dispoziție de comanda ``cd``, anume ``cd -``.
Comanda ``cd -`` are ca efect navigarea în directorul anterior, așa cum am văzut în exemplul anterior când am folosit-o pentru a reveni în directorul ``/home/student/workspace/uni/programming/labs/lab01``.
Exersarea navigării în cardul sistemului de fișiere
"""""""""""""""""""""""""""""""""""""""""""""""""""
* Recapitulare căi absolute vs căi relative?
Prin exercițiile care urmează o să ne exersăm mâna astfel încât să devenim cât mai comfortabili cu navigarea prin sistemul de fișiere.
Trebuie să ne fie foarte clar când folosim o cale absolută, când folosim una relativă și să devenim din ce în ce mai rapizi.
.. tip::
O să folosim tasta ``Tab`` de fiecare dată când navigăm prin sistemul de fișiere.
Nu doar că ne ajută să scriem mai rapid calea, dar în cazul în care nu se execută funcția de auto-complete înseamnă că cel mai probabil avem o greșeală undeva în calea introdusă manual.
.. note::
Dacă nu aveți pe sistem una din căile folosite în exerciții, creați-o.
#. Navigați în directorul rădăcină (``/``) al sistemului vostru.
De aici, navigați în directorul ``/home/student/Pictures`` (folosiți tasta ``Tab`` pentru auto-completion).
Reveniți în directorul rădăcină folosind ``-``.
Reveniți în directorul ``Pictures/`` folosind ``-``.
Navigați în directorul home folosind doar comanda ``cd``.
#. Navigați în directorul ``~/workspace/uni/programming/labs/lab01``.
De aici, navigați în directorul ``~/workspace/uni/programming/`` folosind o cale relativă (Obs: calea voastră **NU** trebuie să înceapă cu directorul rădăcină, ``/``).
Navigați în directorul ``~/Downloads`` folosind o cale relativă.
Reveniți în directorul ``~/workspace/uni/programming/labs/lab01``.
#. Navigați în directorul ``~/Documents`` folosind o cale absolută (Obs: calea voastră **trebuie** să înceapă cu directorul rădăcină, ``/``).
Navigați în directorul ``~/Desktop`` folosind o cale absolută.
Navigați în directorul ``~/Music`` folosind o cale relativă.
Comanda ``ls``
--------------
``ls, ls -a, ls -l, ls -ld``
Comanda ``ls`` este și ea una dintre cele mai folosite comenzi.
Funcționalitatea este în numele ei, **ls** fiind o abreviere pentru **list**.
Folosim ``ls`` pentru a afișa mai multe informații despre conținutul unui director sau despre fișiere.
Comanda poate fi folosită fără nici un argument, ca în exemplul de mai jos:
.. code-block:: bash
student@uso:~$ ls
Desktop Downloads Pictures Templates examples.desktop vm-actions-log.txt
Documents Music Public Videos uso.git workspace
Observă că ``ls`` ne-a afișat conținutul directorului în care ne aflăm, în exemplul de mai sus este directorul home (``~``).
``ls`` poate să primească ca argument calea către unul sau mai multe fișiere și directoare, așa vedem în exemplul de mai jos:
.. code-block:: bash
student@uso:~$ ls workspace/ Downloads/ examples.desktop nonexistent
ls: cannot access 'nonexistent': No such file or directory
examples.desktop
Downloads/:
workspace/:
hello uso-lab-book
Atunci când argumentul este un director, ne este afișat conținutul acestuia, așa cum se întâmplă pentru directoarele ``workspace/`` și ``Downloads``.
Atunci când argumentul este un fișier, acesta este afișat, așa cum este cazul pentru ``examples.desktop``.
Observăm că în cazul folosim ca argument o cale către un fișier sau director care nu există (``nonexistent`` în exemplul de mai sus) utilitarul ``ls`` nu își oprește execuția.
Acesta afișează un mesaj de eroare pentru argumentul în cauză și apoi își continuă execuția cu restul argumentelor.
Afișarea fișierelor ascunse
^^^^^^^^^^^^^^^^^^^^^^^^^^^
În mediul linux, un fișier este ascuns dacă numele său începe cu caracterul ``.`` (punct).
În mod implicit, utilitarul ``ls`` omite fișierele ascunse.
Pentru a afișa fișierele ascunse folosim opțiunea ``-a`` (all).
.. code-block:: bash
student@uso:~$ ls -a
. .emacs.d .ssh Pictures
.. .gconf .sudo_as_admin_successful Public
.ICEauthority .gitconfig .tmux Templates
.bash_aliases .gnome2 .tmux.conf Videos
.bash_history .gnome2_private .vim examples.desktop
.bash_logout .gnupg .viminfo uso.git
.bashrc .java .vimrc vm-actions-log.txt
.cache .lesshst Desktop workspace
.config .local Documents
.dbus .mozilla Downloads
.emacs .profile Music
Observăm că avem o mulțime de fișiere ascunse prezente în directorul nostru home.
Multe dintre acestea sunt fișiere de configurare (``.bashrc``, ``.vimrc``, etc.) folosite de diferite programe instalate pe sistemul nostru.
Vom vorbi mai multe despre acestea în viitorul apropriat.
Afișarea informațiilor extinse despre fișiere
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
De cele mai multe ori suntem interesați să aflăm mai multe informații despre fișiere: cum ar fi tipul fișierului, permisiuni, ownership, dimensiunea și data ultimei modificări.
Toate acestea sunt afișate prin utilizarea opțiunii ``-l``:
.. code-block:: bash
student@uso:~$ ls -l
total 60
drwxr-xr-x 2 student student 4096 aug 6 2018 Desktop
drwxr-xr-x 3 student student 4096 aug 20 2018 Documents
drwxr-xr-x 2 student student 4096 aug 11 19:35 Downloads
drwxr-xr-x 2 student student 4096 aug 6 2018 Music
drwxr-xr-x 3 student student 4096 aug 31 23:26 Pictures
drwxr-xr-x 2 student student 4096 aug 6 2018 Public
drwxr-xr-x 2 student student 4096 aug 6 2018 Templates
drwxr-xr-x 2 student student 4096 aug 6 2018 Videos
-rw-r--r-- 1 student student 8980 aug 6 2018 examples.desktop
drwxr-xr-x 14 student student 4096 aug 20 2018 uso.git
-rw-r--r-- 1 student student 4827 aug 21 2018 vm-actions-log.txt
drwxr-xr-x 4 student student 4096 aug 13 18:38 workspace
Vom analiza informațiile afișate pentru directorul **Desktop**.
.. code-block:: bash
drwxr-xr-x 2 student student 4096 aug 6 2018 Desktop
#. Vom începe cu prima coloană din exemplul de mai sus: ``drwxr-xr-x``.
Aceasta este formată din zece caractere care formează patru grupuri:
#. Primul grup este format dintr-un singur caracter, și denotă tipul fișierului.
În cazul de față, caracterul ``d`` ne informează că ne uităm la un fișier de tip director.
În cazul fișierelor obișnuite (text, imagini, etc.) primul caracter este ``-``, așa cum putem observa în cazul fișierului ``examples.desktop``.
#. Cel de-al doilea grup este format din următoarele trei caractere și denotă permisiunile pe care le are utilizatorul care deține fișierul asupra fișierului.
Caracterele sunt în ordine ``r`` (read) permisiuni de citire, ``w`` (write) permisiuni de scriere și ``x`` (execute) permisiuni de rulare.
Dacă utilizatorul nu are o anumită permisiune, caracterul corespunzător este înlocuit de caracterul ``-``.
Spunem că aceste permisiuni se aplică pentru **User**.
#. Cel de-al treilea grup este format din următoarele trei caractere și denotă permisiunile pe care le au membrii grupului care dețin fișierul asupra fișierului.
Permisiunile rămân din setul ``rwx``.
Spunem că aceste permisiuni se aplică pentru **Group**.
#. Cel de-al patrulea grup este format din ultimele trei caractere și denotă permisiunile pe care le are orice utilizator care nu deține fișierul și nici nu face parte din grupul care deține fișierul.
Permisiunile rămân din setul ``rwx``.
Spunem că aceste permisiuni se aplică pentru **Others**.
Acum, pe baza informațiilor din prima coloană, putem spune următoarele despre fișierul Desktop:
#. Acesta este un fișier de tip director (``d``)
#. Utilizatorul care îl deține are drepturi de citire (``r``), scriere (``w``) și execuție (``x``)
#. Grupul care îl deține are drepturi de citire (``r``), **NU** are drepturi de scriere (``-``) și are drepturi de execuție (``x``)
#. Iar orice alt utilizator are drepturi de citire (``r``), **NU** are drepturi de scriere (``-``) și are drepturi de execuție (``x``).
.. note::
Pentru a putea deschide un director este necesar să avem drepturi de execuție (``x``) asupra acestuia.
Trebuie să avem drepturi de execuție indiferent că vrem să navigăm în interiorul său, să afișăm conținutul directorului sau să creăm noi fișiere și directoare în cadrul acestuia.
#. Cea de-a treia coloană ne spune care este utilizatorul care deține fișierul.
Astfel observăm că directorul **Desktop** este deținut de către utilizatorul ``student``.
Asta înseamnă că permisiunile ``rwx`` corespund utilizatorului ``student``.
#. Cea de-a patra coloană ne spune care este grupul care deține fișierul.
Astfel observăm că directorul **Desktop** este deținut de către grupul ``student``.
Asta înseamnă că permisiunile ``r-x`` se aplică oricărui utilizator care este membru al grupului ``student``.
#. Cea de-a cincea coloană ne arată dimensiunea fișierului, exprimată în octeți.
Putem să-i cerem utilitarului ``ls`` să ne afișeze dimensiunea folosind multiplii (K(ilo), M(ega), G(iga), etc) utilizând opțiunea ``-h`` (human readable)
.. code-block:: bash
student@uso:~$ ls -lh
total 60K
drwxr-xr-x 2 student student 4,0K aug 6 2018 Desktop
[...]
#. Ultimele coloane ne arată data ultimei modificări, în ordinea lună, zi, an.
Afișarea informațiilor extinse despre un fișier de tip director
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Am observat că, în mod implicit, utilitarul ``ls`` ne afișază informații despre conținutul unui director atunci când primește calea către un director ca argument:
.. code-block:: bash
student@uso:~$ ls -l Desktop/
total 0
-rw-r--r-- 1 student student 0 sep 2 19:39 todos.txt
Pentru a-i specifica lui ``ls`` că suntem interesați de informații despre fișierul de tip director, și nu despre conținutul său, folosim opțiunea ``-d``.
.. code-block:: bash
student@uso:~$ ls -ld Desktop/
drwxr-xr-x 2 student student 4096 sep 2 19:39 Desktop/
#. Afișați conținutul directoarelor ``/home``, ``Downloads`` și ``/tmp``.
#. Aflați care sunt permisiunile pe care le are orice utilizator asupra directoarelor ``/home``, ``/home/student`` și ``/tmp``.
Globbing
^^^^^^^^
Expand Down

0 comments on commit e383dd5

Please sign in to comment.