Table of Contents

Laborator 02 - Comenzi de bază. Gestiunea pachetelor

Cheat sheet

Comandă Descriere scurtă
man afișează pagina de manual a unei comenzi
which afișează calea executabilului unei comenzi
apropos caută în paginile de manual
history afișează ultimele comenzi rulate
cd schimbă directorul curent
pwd afișează directorul curent
ls listează conținutul unui director
cat afișează conținutul unui fișier
rm șterge fișiere/directoare
rmdir șterge directoare goale
touch creează un fișier
mkdir creează un director
ln creează link-uri simbolice
cp copiază fișiere/directoare
mv mută/redenumește un fișier/director
tar arhivare/dezarhivare
apt-get managementul pachetelor

Suport laborator

Puteți urmări tutorialul video făcut de IT Assistant despre comenzi de bază în Linux.

Arhivă laborator

Introducere

Repornirea calculatorului

Reporniți calculatorul dacă cineva a stat înaintea voastră la el. Dacă nu sunteți siguri, reporniți-l oricum, durează doar câteva minute. Obișnuiți-vă să faceți asta la fiecare laborator de USO înainte de a începe să lucrați.

Apăsând pe numele utilizatorului din partea din dreapta sus a ecranului apare un meniu ce are ca ultimă opțiune Suspend. Apăsați tasta Alt din partea stângă a tastaurii pentru a vedea opțiunea Power Off…

Descărcarea arhivei laboratorului

tar -zxf ~/Downloads/lab02.tar.gz

Fiecare laborator are asociată o arhivă. Trebuie să vă obișnuiți să o descărcați și dezarhivați înainte de a începe laboratorul.

Utilizare terminal

Puteți folosi următoarele scurtături în terminal:

Scurtătură Descriere
Ctrl+Shift+t pentru a deschide un nou tab
Ctrl+PageDown pentru a merge la tab-ul urmator
Ctrl+PageUp pentru a merge la tab-ul precedent
Alt+<index> pentru a sări direct la un tab
Ctrl+d pentru a închide un tab (sau comanda exit)

Pentru a naviga (scrolling) în cadrul unui terminal, mai ales atunci când o comandă afișează mult text, folosiți următoarele scurtături:

Scurtătură Descriere
Shift+PgDown pentru a derula în jos
Shift+PgUp pentru a derula în sus

Fișiere și directoare

Pentru a afla în ce director vă aflați, puteți folosi comanda pwd (print working directory). Trebuie să fiți tot timpul atenți în ce director vă aflați. Multe dintre exerciții se referă la crearea sau modificarea de fișiere și directoare în locuri specifice.

Pentru a intra într-un director, trebuie folosită comanda cd (change directory).

cd lab02

Pentru a lista conținutul directorului curent, se poate folosi comanda ls (list).

Pagini de manual

Pentru a afla mai multe informații despre o comandă, puteți apela la pagina acesteia de manual.
Spre exemplu, pentru a accesa documentația comenzii ls:

man ls

Pentru a căuta după un cuvânt anume se folosește tasta / (slash) urmată de cuvântul căutat; apoi se apasă tasta Enter.

Puteți folosi următoarele taste:

Tastă Scurtă descriere
n (next) pentru a merge la următoarea apariție a cuvântului căutat
N (Shift + n) pentru a merge la precedenta apariție a cuvântului
q (quit) pentru a închide pagina de manual

Pentru a naviga într-o pagină de manual folosiți tastele:

Tastă Scurtă descriere
Enter pentru a derula în jos o linie
b (backward) sau Space pentru a derula în jos un ecran
f (forward) pentru a derula în sus un ecran
d (down) pentru a derula în jos jumătate de ecran
u (up) pentru a derula în sus jumătate de ecran

Listarea directoarelor

Listare în format lung

Pentru a afla mai multe informații despre un fișier, se folosește parametrul -l al comenzii ls.

Exemplu

ls -l

Listare a unui director diferit

Implicit, ls listează conținutul directorului curent. Putem specifica un alt director pe care să îl listeze dând numele lui ca parametru.

Exemplu

ls j_r_r_tolkien

Observați cum se face diferența între parametri (numele unui director) și flag-uri (care controlează comportamentul comenzii):

  • un nume este interpretat ca un fișier sau director
  • un parametru care începe cu minus (-) are semnificație specială

Listare filtrată (globbing)

Putem folosi ls și șiruri speciale de caractere pentru a accesa anumite fișiere.

Exemplu Pentru a lista toate fișierele și directoarele din directorul /home putem folosi:

ls /home/*
Listare recursivă. Combinarea flag-urilor

Listarea recursivă oferă o imagine de ansamblu a unui director. Pentru a lista recursiv se folosește parametrul -R al comenzii ls.

ls -R

Uneori este util să listăm directorul atât recursiv, cât și în format lung.
Se poate folosi comanda:

ls -l -R

O formă echivalentă, ce combină flag-uri scurte este:

ls -lR

Majoritatea flagurilor au și o formă lungă (de exemplu --recursive). Aceste forme se deosebesc prin prefixul de două caractere “minus” și nu pot fi combinate într-un singur “cuvânt”.

Precizările de mai sus sunt valabile pentru majoritatea comenzilor.

Căi absolute și căi relative

O cale absolută începe întotdeauna cu /. O cale relativă se raportează la directorul curent.

Exemplu:
Fie directorul /home/student/lab02/j_r_r_tolkien/the_lord_of_the_rings.
Presupunem că directorul curent este /home/student/lab02.

Pentru a ajunge în directorul specificat se poate folosi, o cale absolută:

cd /home/student/lab02/j_r_r_tolkien/the_lord_of_the_rings

sau o cale relativă:

cd j_r_r_tolkien/the_lord_of_the_rings

Pentru a vă întoarce în directorul home, puteți folosi cd fără parametri.

. - directorul curent
.. - directorul părinte

Tab completion

Numele fișierelor și directoarelor pot fi lungi, iar uneori scrierea acestora poate deveni anevoioasă.
Shell-ul vă poate ajuta completând automat numele unui fișier.

Exemplu
Pornind de la exemplul anterior, presupunem că directorul curent este /home/student/lab02 și că se dorește schimbarea directorului, folosind o cale relativă:

cd j_r_r_tolkien/the_lord_of_the_rings

Comanda de mai sus ar putea fi scrisă mult mai ușor folosind facilitățile oferite de shell.
Dacă s-ar tasta cd j_, apoi TAB, s-ar completa numele directorului automat la j_r_r_tolkien.
Fără a apăsa Enter, dacă s-ar scrie prima literă (adică t) și apoi TAB, s-ar completa automat la the_.

Laboratorul conține intentionat nume de fișiere și directoare foarte lungi, pentru a vă obișnui să folosiți tab completion.

Vizualizarea fișierelor

Pentru a vizualiza conținutul unui fișier se poate folosi comanda cat (concatenate).
Comanda concatenează conținutul fișierelor date ca parametru și îl afișează pe ecran.

Exemplu:
Pentru a vizualiza conținutul unui fișier numit TODO, se folosește comanda:

cat TODO

Linux este case-sensitive. Contează dacă scrieți todo, TODO sau Todo.

Se poate folosi tab completion pentru a scrie numele fișierelui.

Aici am folosit o situație particulară a comenzii cat: dacă se dă un singur fișier, conținutul său este concatenat cu … nimic. Rezultatul este afișarea conținutului fișierului.

Căutarea comenzilor

O metodă eficientă prin care puteți afla numele unei comenzi este cu ajutorul apropos.

Exemplu:
Presupunem că vrem să aflăm numele unei comenzi care șterge fișiere.
Se rulează comanda:

apropos "remove files"

Comanda de mai sus are următorul output:

git-rm (1)       - Remove files from the working tree and from the index
rm (1)           - remove files or directories

Comanda which poate fi folosită pentru a afla calea executabilului unei comenzi.
Spre exemplu:

which rm

Afișează calea executabilului comenzii rm.

Pentru mai multe informații despre semnificația directorului /bin, citiți din carte capitolul 4.1.2 Ierarhia sistemului de fișiere

Shell-ul reține o istorie a comenzilor rulate.
Pentru a afișa ultimele comenzi rulate se poate folosi:

history

Operații pe fișiere și directoare

Comanda cu ajutorul căreia poate fi mutat un fișier sau un director este mv (move).
Redenumirea unui fișier sau a unui director este considerată un caz special de mutare.
Pentru a redenumi directorul j_r_r_tolkien în john_ronald_reuel_tolkien' se folosește comanda:

mv j_r_r_tolkien john_ronald_reuel_tolkien

Pentru a copia un fișier se folosește comanda cp (copy).

cp  john_ronald_reuel_tolkien/the_lord_of_the_rings/gandalf  john_ronald_reuel_tolkien/the_hobbit/gandalf

Nu uitați că puteți folosi tab completion.

Pentru a șterge un fișier se folosește comanda rm (remove).

rm douglas_adams/the_hitchhikers_guide_to_the_galaxy/edward

Pentru a crea un fișer se folosește comanda touch.

touch john_ronald_reuel_tolkien/the_lord_of_the_rings/boromir

Pentru a crea un director se folosește comanda mkdir.

mkdir  j_k_rowling

apt-get fără dependențe

Multe din programele pe care le vom folosi nu vin preinstalate. Pe Windows trebuia să rulați un executabil pentru a instala un program. Pe sistemele Debian-based, pachetele se instalează utilizând apt-get.

Comanda tree afișează structura de fișiere, în format arborescent. De exemplu, pentru a instala utilitarul tree trebuie să rulăm comanda:

apt-get install tree

Pentru instalare trebuie să fiti root.

sudo apt-get install tree

Vi se vor afișa operațiile care se vor executa și efectele asupra spațiului pe disk și apoi veți fi întrebați dacă vreți să continuați. Dintre cele 2 litere, y și n una este majusculă, semnificând opțiunea implicită: dacă nu introduceți nimic și apăsați doar pe Enter, se va considera respectiva opțiune.

Pentru a verifica că s-a instalat pachetul tree, executați comanda:

tree

apt-get cu dependențe

Există cazuri în care un pachet depinde de alt pachet. Pentru instalarea unui pachet trebuiesc instalate toate dependențele acestuia.

Din fericire, apt-get știe să instaleze dependențele lipsă. Testați instalând ack-grep. Se vor instala mai multe pachete decât ați dorit voi.

Pentru a identifica ce face comanda ack-grep se poate consulta secțiunea de manual:

man ack-grep

Package locations

Vă întrebați poate de unde se descarcă pachetele? Vizualizați conținutul fișierului /etc/apt/sources.list.

O linie specifică o posibilă sursă de pachete. Formatul este următorul:

deb url version type tags
deb-src url version type tags

Vor exista situații în care veți dori modificarea acestui fișier, de exemplu pentru alegerea altor servere (mirror) pentru descărcarea rapidă de pachete.

Exerciții

Următoarele exerciții se desfășoară într-un terminal. Deschideți un terminal, folosind de exemplu Activities și căutare după “terminal”. Ultima linie din terminal, prompt-ul ar trebui să fie:

student@intel-workstation:~$ 

Pentru a rezolva următoarele exerciții, folosiți o copie nealterată a directorului corespunzător acestui laborator.
În cazul în care ați executat comenzi din secțiunea de Introducere, ștergeți directorul și dezarhivați din nou arhiva lab02.tar.gz.

1. Scrierea în fișiere

Comanda echo poate fi folosită pentru a afișa text pe ecran.

echo "Ana are mere"

Scrieți textul “all done” în fișierul numit TODO.

Vizualizați fișierul folosind cat. Observați că vechiul conținut a fost suprascris.
Semnați-vă numele în fișierul numit TODO.

Rezolvare
echo "all done" > TODO
echo "Haralambie Popescu" >> TODO

2. Nume de fișiere și directoare care conțin spații

Creați directorul isaac asimov. Folosiți spații în nume.

Rezolvare
mkdir "isaac asimov"
# sau
mkdir isaac\ asimov

3. Operații cu directoare

Acum aveți directorul dorit, dar și două în plus.

Rezolvare
rmdir isaac
rm -r asimov

De asemenea, copiați directorul douglas_adams în același director părinte (lab02), cu numele douglas_adams_copy

Rezolvare
cp -r douglas_adams douglas_adams_copy

Copiați fișierul gandalf din directorul j_r_r_tolkien/the_lord_of_the_rings/ în directorul j_r_r_tolkien/the_hobbit/.

Rezolvare
Vă aflați în directorul lab03/
cd ./j_r_r_tolkien/
cp ./the_lord_of_the_rings/gandalf ./the_hobbit/

Folosiți echo pentru a scrie textul Old wise man în fișierul j_r_r_tolkien/the_lord_of_the_rings/gandalf.

Rezolvare
Vă aflați în directorul lab03/j_r_r_tolkien/
echo "Old wise man" > ./the_lord_of_the_rings/gandalf

Afișați conținutul fișierului j_r_r_tolkien/the_hobbit/gandalf. De ce nu sunt cele două fișiere identice?

Rezolvare
Vă aflați în directorul lab03/j_r_r_tolkien/
cat ./the_hobbit/gandalf

Veți observa că cele două fișiere sunt diferite.

Ștergeți ultimul fișier și creați în locul lui un link simbolic la fișierul din the_lord_of_the_rings.

Afișați conținutul link-ului pentru a vă asigura că fișierele gandalf din cele două directoare au același conținut.

Rezolvare
Vă aflați în directorul lab03/j_r_r_tolkien
cd ./the_hobbit/
rm ./gandalf
ln -s ../the_lord_of_the_rings/gandalf .
ls -l ./gandalf
cat ./gandalf

5. Globbing

Afișați conținutul tuturor fișierelor cu extensia conf din directorul /etc.

Rezolvare
cat /etc/*.conf

Listați doar fișierele de configurare care încep cu litera a.

Rezolvare
ls /etc/a*.conf

Listați fișierele care conțin șirul de caractere nt din directorul /bin.

Rezolvare
ls /bin/*nt*

6. Utilizarea discului

Folosiți du pentru a afla cât spațiu pe disc ocupă întreg directorul lab02.

Rezolvare
du -hs lab02

Folosiți df pentru a afla ce partiții există, ce dimensiune au și cât spațiu este ocupat pe acestea.

Rezolvare
df -h

7. Arhivare

Rezolvare
  • Diferența dintre arhivare și comprimare
  • Relația dintre tar și gzip; de ce nu folosim direct gzip
  • Diferența dintre a arhiva un director și a arhiva doar conținutul lui.

Folosiți tar pentru a arhiva directorul lab02.

Ce constatați legat de dimensiunile fișierelor rezultate, raportat la dimensiunea directorului inițial?

Rezolvare
tar cf lab02.tar lab02
tar czf lab02.tar.gz lab02

  • Linux oferă suport pentru majoritatea tipurilor de arhive. O particularitate este aceea că pentru arhivele RAR va trebui să instalați de mână pachetul numit unrar.
  • În mod normal, fiecare tip de arhivă are un program asociat. Pentru o tratare uniformă a arhivelor, puteți folosi interfața grafică sau un pachet numit atool.

Intrați în directorul: ~/lab02/extra/. Dezarhivați arhiva secrete.zip și afișați conținutul fișierului text din ea.

Rezolvare
cd ~/lab02/extra/
sudo apt-get install zip
unzip secrete.zip
cat parola.txt

8. PATH

Programele pe care le pornim din linia de comandă, se găsesc în directoare stocate în PATH. Pentru a vedea lista acestor directoare, folosim:

echo $PATH

În directorul ~/lab02/extra există un fișier numit test_ln_s, care este un program executabil. Vrem să-l rulăm ca pe o comandă oarecare din terminal.

Ar trebui ca rulând comanda test_ln_s să putem rula executabilul.

Rezolvare
ln -s /home/student/lab02/extra/test_ln_s /bin

9. Instalare manuală deb-uri

Putem instala un pachet și având descărcat fișierul .deb asociat. Trebuie să avem toate dependențele instalate sau să le instalăm noi.

Descărcați Skype (pachetul Debian 6.0, pe 64 biți) și instalați folosind fișierul .deb obținut. Pentru aceasta, folosiți click dreapta și GDebi Package Installer.

Aflați, din interfața grafică, numele maintainerului de pachet și adresa de email.

Dezinstalați, folosind tot GDebi Package Installer, pachetul skype.

10. dpkg

Pe sistemele Debian based (Ubuntu e unul din ele) există și dpkg ca manager de pachete. Dacă avem acces la apt-get, dpkg e folosit doar pentru aflarea de informații înainte de instalarea unui pachet.

GDebi Package Installer este doar un front-end grafic pentru utilitarul dpkg. După ce ați dezinstalat Skype-ul, reinstalați-l înapoi, doar că de data asta folosiți dpkg (hint: căutați în man optiunea pentru instalare).

Rezolvare
dpkg -i "NUME_PACHET_SKYPE.deb"

Dacă nu aveți deja instalate pachetele git, tree și ack-grep, instalațiile cu ajutorul lui apt-get.
Pentru a verifica dacă un pachet este instalat sau nu, listați pachetul cu ajutorul lui dpkg.

Rezolvare
dpkg -l "git" "tree" "ack-grep"
sudo apt-get install "git" "tree" "ack-grep"

Folosiți dpkg pentru a lista toate pachetele legate de git (hint: *git*).

Rezolvare
dpkg -l "*git*"

Cine este autorul original pentru pachetul tree?

Rezolvare
Căutați “Original-Maintainer” în outputul comenzii:
dpkg -p "tree"

Ce fișiere au fost instalate în sistem odată cu pachetul ack-grep?

Rezolvare
dpkg -L "ack-grep"

Vedeți în manual ce fac opțiunile de la dpkg-query.

11. Dezinstalarea unui pachet

abiword este un pachet interesant pentru un utilizator obișnuit, dar nu și pentru laboratorul de USO. Dezinstalați-l.

Găsiți o metodă de a dezinstala pachetul din linie de comandă, împreună cu toate fișierele sale de configurare.

Rezolvare
sudo apt-get purge "abiword"