This is an old revision of the document!


Laborator 02 - Comenzi de bază. Gestiunea pachetelor

Concepte și comenzi importante

Tutorial

  • structură arborescentă
  • căi absolute și relative
  • lucrul cu fișiere și directoare: ls, cd, cat, cp, mv, rm, mkdir, touch
  • manual, căutare în manual
  • căutarea comenzilor
  • apt-get

Hands-On

  • redirectări
  • nume conținând spații, quoting, escaping
  • ștergerea directoarelor
  • symlinks (link-uri simbolice)
  • globbing
  • dimensiune totală fișiere și directoare
  • arhivare
  • Readline
  • pushd, popd
  • chroot
  • update-alternatives
  • compilare din surse
  • link-uri simbolice
  • dpkg
  • aptitude

Pachete necesare

  • build-essential
  • g++

Suport laborator

Tutorial

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

1. Descărcarea arhivei laboratorului

  • Descărcați arhiva laboratorului de aici, în directorul implicit.
  • Pentru dezarhivare folosiți comanda
tar zxf ~/Downloads/lab02.tar.gz
  • La finalul laboratorului, veți înțelege ce face această comandă.
  • Dezarhivarea creează un director numit lab02 în directorul vostru home. Dacă nu se specifică altfel, toate task-urile și căile pe disc sunt relative la directorul corespunzător arhivei laboratorului (lab02).
  • 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.

2. Fișiere și directoare

  • Intrați în directorul asociat laboratorului. Folosiți comanda cd lab02
    • cd = change directory
  • Observați că prompt-ul s-a modificat. Noul director este ~/lab02, adică subdirectorul lab02 din home-ul vostru.
  • Listați conținutul directorului curent. Folosiți comanda ls.
    • ls = list
  • Numele colorate în albastru sunt directoare. Cele cu alb sunt fișiere. Dar nu ne putem baza exclusiv pe culori. Să investigăm suplimentar.
  • Puteți afla oricând în ce director vă aflați folosind pwd.
    • 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.

3. Pagini de Manual. Listare în format lung

  • Vreți să listați conținutul directorului cu informații suplimentare (în format lung).
  • Accesați documentația comenzii ls:
man ls
  • Vreți să căutați cuvântul long în manual. Folosiți tasta / (slash).
    • Cursorul se mută în partea de jos a ecranului.
    • Scrieți cuvântul long, apoi confirmați cu Enter.
  • Prima apariție a cuvântului nu este interesantă. Pentru a merge la următoarea, tastați n (next).
    • Folosiți n până ajungeți la opțiunea -l (use a long listing format).
  • Dacă vreți să căutați în sens invers (în sus), folosiți tasta ? (semnul întrebării) în loc de / (slash).
    • Puteți să folosiți și aici tasta n (next search)
  • Când vreți să închideți manualul, folosiți q (quit).
  • Alternativ se poate folosi info. Pentru a ieși, folosiți aceeași tastă ca și pentru man.
info ls
  • Acum că ați aflat parametrul, folosiți comanda ls -l pentru a lista detaliat conținutul directorului.
  • Nu toate câmpurile sunt relevante acum. Câteva dintre ele sunt prezentate grafic mai jos:

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

Listați conținutul directorului j_r_r_tolkien în două moduri:

  • fără a intra în el, din directorul lab02
  • folosiți ls j_r_r_tolkien
  • folosind întâi cd pentru a intra în director, apoi ls fără alți parametri.

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ă

5. Listare recursivă. Combinarea flag-urilor

Vreți să obtineți o imagine de ansamblu a directorului lab02. Va trebui să îi listați recursiv conținutul.

  • Deschideți din nou manualul comenzii ls și căutați cuvântul recursive.
  • Dacă nu sunteți deja în directorul lab02, mutați-vă acolo.
    • Pentru a merge în directorul părinte, folosiți cd ...
  • Folosiți ls -R pentru a lista recursiv.

Este util să listăm directorul atât recursiv, cât și în format lung.

  • Puteți folosi ls -l -R pentru acest task.
  • O formă echivalentă este ls -lR. Puteți combina flag-uri scurte în acest mod.
  • 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.

6. Căi absolute și căi relative

Intrați în directorul lab02/douglas_adams. Scopul este să ajungeți, folosind cd, în directorul lab02/j_r_r_tolkien/the_lord_of_the_rings. Acest lucru se poate face în două moduri:

  • Folosiți o cale relativă. Căile relative pornesc din directorul curent.

Astfel, va trebui să specificăm, separate prin /, directorul părinte, apoi restul căii:

cd ../j_r_r_tolkien/the_lord_of_the_rings
  • Întoarceți-vă în directorul anterior, folosind tot o cale relativă. De ce este nevoie de două componente de tip “director părinte” (..)? Întrebați asistentul dacă nu este clar.
cd ../../douglas_adams
  • Acum vreți să ajungeți în celălalt subdirector al j_r_r_tolkien, numit the_hobbit. Folosiți pentru acest lucru o cale absolută:
cd /home/student/lab02/j_r_r_tolkien/the_hobbit
  • Întoarceți-vă în directorul anterior folosind forma specială a cd:
cd -
  • Pentru a vă întoarce în directorul home, folosiți cd fără parametri.

7. Tab completion

Până acum, ați scris niște nume de fișiere și directoare lungi. Shell-ul vă poate ajuta completând automat numele unui fișier.

  • Schimbați directorul în home-ul vostru, dacă nu ați făcut asta deja.
  • Vreți să ajungeți în directorul lab02/j_r_r_tolkien/the_lord_of_the_rings. Urmați pașii cu atenție și observați ce și cât se completează din nume.
  • Tastați cd la, apoi TAB. Se completează numele directorului lab02.
  • Continuați fără a apăsa Enter: j, apoi TAB. Se completează din nou tot directorul.
  • Scrieți prima literă din numele subdirectorului dorit, t, apoi TAB. Se completează the_.
    • Shell-ul completează până la primul prefix neambiguu.
    • Mai apăsați o dată TAB. Se listează completările posibile.
  • Tastați l, pentru a elimina ambiguitatea, apoi TAB.
  • Acum toată calea este completă, cu mult mai puțin efort din partea voastră.

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

8. Vizualizarea fișierelor

Intrați în directorul lab02. Vizualizați conținutul fișierului TODO folosind comanda cat:

cat TODO
  • Atenție: Linux este case-sensitive. Contează dacă scrieți todo, TODO sau Todo.
  • Folosiți tab completion: tastați T urmat de TAB.
  • cat = concatenate. Comanda concatenează conținutul fișierelor date ca parametru și îl afișează pe ecran.

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.

9. Căutarea comenzilor

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

  • Vreți să aflați numele unei comenzi care șterge fișiere.
    • Rulați comanda
      apropos "remove files"
    • Observați linia corespunzătoare comenzii rm

Shell-ul reține o istorie a comenzilor rulate.

  • Rulați comanda
    history
  • Vreți să afișați doar ultimele 10 comenzi rulate.
    • Rulați comanda
      history 10

Pentru acasă: Căutați diverse metode prin care puteți vizualiza și edita fișiere.

  • Folosiți apropos editor. Testați câteva editoare.

10. Operații pe fișiere și directoare

Redenumiți directorul j_r_r_tolkien astfel încât să conțină numele întreg al autorului:

mv j_r_r_tolkien john_ronald_reuel_tolkien

Rețineți că redenumirea este considerată un caz special de mutare.

Gandalf este un personaj care apare nu numai în Lord of the Rings, ci și în The Hobbit. Copiați fișierul corespunzător:

cp john_ronald_reuel_tolkien/the_lord_of_the_rings/gandalf john_ronald_reuel_tolkien/the_hobbit
  • Nu uitați că puteți folosi tab completion.
  • Observați că sursa este un fișier, dar destinația este un director. Ce nume va avea noul fișier creat?

Cineva a făcut o glumă nesărată și l-a adăugat pe Edward ca personaj în Hitchhiker's Guide to the Galaxy. Ștergeți-l din structură:

rm douglas_adams/the_hitchhikers_guide_to_the_galaxy/edward

Chiar dacă a fost omorât la finalul primei părți, Boromir este un personaj important în trilogia Lord of the Rings. Adăugați-l la lista de personaje:

touch john_ronald_reuel_tolkien/the_lord_of_the_rings/boromir
  • Pentru acasă: comanda touch creează un fișier dacă nu există, dar are un alt rol. Citiți primele rânduri din pagina de manual pentru a vedea ce face.
  • Pentru acasă: după ce ați terminat laboratorul și ați înțeles conceptele, profitați de faptul că încă nu aveți teme și vedeți Hitchhiker's Guide to the Galaxy și trilogia Lord of the Rings.

11. Crearea de directoare noi

  • Revedeți continutul fișierului TODO și urmați instrucțiunile.
  • Creați directorul j_k_rowling
    • mkdir j_k_rowling
    • Just for fun: Aflați numele complet al lui J. K. Rowling și schimbați corespunzător numele directorului. Încercați pe Wikipedia.
  • Creați subdirectorul harry_potter și câteva fișiere reprezentând personaje din aceste cărți.
  • Faceți același lucru pentru un autor și o carte care vă place.
    • Folosiți caracterul _ (underscore) în loc de spațiu.

12. apt-get fără dependențe

Vizualizați întreg directorul lab02 sub formă de arbore.

  • Intrați în directorul dorit.
  • Lansați comanda tree.
    • Pachetul nu este instalat.

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 Ubuntu, pachetele se instalează utilizând apt-get. De exemplu, pentru a instala tree trebuie să rulăm comanda:

apt-get install tree

Nu puteți instala pachetul, trebuie să fiți root (de ce?)

sudo apt-get install tree

Este aceeași comandă afișată de shell, când ați încercat să rulați comanda 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.

Verificați că s-a instalat tree:

tree

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

Observați că se vor instala mai multe pachete decât ați dorit voi.

Folosind man, identificați ce face ack-grep.

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

unde type reprezintă versiunea sistemului Ubuntu folosită (numele de cod al versiunii, de exemplu natty pentru 11.04 Natty Narwhall)

Puteți modifica oricând acest fișier. De exemplu, în cazul în care locația repository-urilor este prea departe, pentru o instalare mai rapidă se recomandă să modificați toate URL-urile.

Schimbați URL-urile din ro…. în en… (amintiți-vă cum făceați replace pe tot fișierul din laboratorul de Vim)

Hands-On

1. Scrierea în fișiere

  • Amintiți-vă, din laboratorul trecut, ce făcea comanda echo.
  • Scrieți textul “all done” în fișierul TODO.
    • Folosiți formularea > TODO după parametrii lui echo.
  • Vizualizați fișierul folosind cat. Observați că vechiul conținut a fost suprascris.
  • Semnați-vă numele în fișierul TODO.
    • Folosiți formularea >> TODO pentru a nu suprascrie conținutul vechi (mod append).
  • Pentru acasă: echo este o formă foarte limitată de a scrie în fișiere. Citiți din carte secțiunea despre editorul Vim. Îl veți folosi într-un laborator ulterior.

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

  • Creați directorul isaac asimov. Folosiți spații în nume.
  • Ce observați? Câte directoare și cu ce nume au fost create?
  • Shell-ul trimite comenzii mkdir două argumente, isaac și asimov. Nu este efectul urmărit.
  • Creați directorul dorit, încadrând întreg numele prin ghilimele. Astfel, shell-ul va ști că este vorba de un singur argument.
    • Un alt mod de a face acest lucru este escaparea spațiului, precedându-l cu un backslash (\).

3. Ștergerea directoarelor

  • Acum aveți directorul dorit, dar și două în plus.
  • Folosiți rmdir pentru a șterge directorul isaac.
  • Folosiți rm pentru a șterge directorul asimov.
    • Aveți nevoie de un parametru în plus pentru rm. Identificați-l folosind pagina de manual sau cartea de USO.
    • Care este diferența dintre rmdir și rm cu acel parametru? Folosiți, din nou, manualul.
  • Folosiți echo pentru a scrie textul Old wise man în fișierul john_ronald_reuel_tolkien/the_lord_of_the_rings/gandalf.
  • Afișați conținutul fișierului john_ronald_reuel_tolkien/the_hobbit/gandalf. De ce nu sunt cele două fișiere identice?
  • Ștergeți ultimul fișier și creați în locul lui un link simbolic la fișierul din the_lord_of_the_rings.
    • Pentru simplitate, intrați întâi în directorul destinație, unde veți crea link-ul.
    • Folosiți o cale relativă pentru a crea link-ul.
    • Comanda folosită este ln, dar trebuie să folosiți un parametru adițional pentru a specifica faptul că link-ul creat trebuie să fie simbolic.
  • Folosiți ls în format lung pentru a confirma că fișierul nou este, de fapt, un link.
  • Afișați conținutul link-ului pentru a vă asigura că fișierele gandalf din cele două directoare au același conținut.

5. Globbing

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

  • Nu este nevoie să le afișați și pe cele din subdirectoare.
  • Folosiți o singură comandă cat.

6. Utilizarea discului

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

  • du = disk usage
  • afișați doar totalul, nu cât ocupă fiecare fișier în parte
  • afișați dimensiunea în format human readable

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

  • afișați dimensiunile în format human readable

7. Arhivare

Folosiți tar pentru a arhiva directorul lab02.

  • Atenție: arhivați tot directorul, nu doar conținutul lui.
  • Creați două arhive (folosind două comenzi separate):
    • lab02.tar, care nu este comprimată
    • lab02.tar.gz, comprimată cu gzip

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

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

8. PPA

Uneori, unele pachete se găsesc în repository-uri private, aparținând unor dezvoltatori Ubuntu. Acestea se găsesc pe Personal Package Archives (PPA)

Instalați pachetul gmchess.

Folosiți acest tutorial ca hint.

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 și instalați folosind fișierul .deb obținut.

10. Compilare din surse

În trecut, pe Linux singura metodă de a instala ceva era compilarea din surse. Acum aproape toate sistemele oferă o metodă de instalare utilizând un package manager. Cu toate acestea, există situații când veți dori să instalați din surse (dacă pachetele sunt prea vechi, nu puteți să le luați din altă parte - PPA, deb sau versiunea următoare -).

Sistemele tip rolling-release folosesc mai des instalarea din surse. Gentoo și Arch sunt două asemenea sisteme (Arch are și package manager - pacman și yaourt).

Instalați din surse nmap

11. update-alternatives

Există situații când avem mai multe programe cu aceeași funcționalitate: Firefox și Chromium pentru browsing, vim și nano pentru editare.

Programele care au nevoie, de exemplu, de un editor, nu vor apela direct unul din aceste editoare. În schimb, vor încerca să apeleze un editor generic, numit editor. Administratorul sistemului va configura legătura între editor și editorul folosit

Folosind update-alternatives setați ca editor vim.basic. Comanda visudo ar trebui să deschidă un editor vim.

În spate, update-alternatives realizează un symlink între cele 2 executabile.

Verificați, utilizând which și ls -l care este executabilul apelat în momentul rulării comenzii vi.

Faceți astfel încât game să ruleze mahjongg (folosiți which pentru a vedea locația mahjongg).

În anumite cazuri veți dori să instalați un pachet din surse dar nu vreți ca resursele să fie instalate în directoarele standard (/usr/bin, /usr/lib de exemplu).

Pentru a putea rula executabilul instalat, puteti proceda în mai multe moduri:

* adăugați la PATH calea către noul executabil * realizați un alias pentru executabil * realizați un symlink pentru executabil și plasați link-ul într-un director din PATH

Primele două soluții vor fi analizate într-un laborator ulterior. Modul de aflare al directoarelor din PATH tot atunci.

Descărcați următorul program simplu. Vrem să-l rulăm ca pe o comandă oarecare. Realizați un link simbolic pentru test_ln_s în /bin. Ar trebui ca rulând comanda test_ln_s să putem rula executabilul.

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

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

Cine este autorul original pentru pachetul tree?

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

Hint: vedeți în manual ce fac opțiunile de la dpkg-query.

15. Dezinstalarea unui pachet

gwibber 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, împreună cu toate fișierele sale de configurare.

  • Folosiți pagina de manual a utilitarului apt-get.
  • Nu uitați să precedați comanda cu sudo, pentru că este vorba despre un task administrativ.

15. Readline

Readline este o facilitate care ajută la editarea eficientă a comenzilor pe care le scriem în shell. Vom explora câteva concepte utile.

  • Creați un director care se numește supercalifragilisticexpialidocious.

Combinația Shift-Insert este o scurtătură pentru Paste în terminal. Puteți face copy-paste pe numele de mai sus.

  • Ce rol are combinația de taste Alt-. (Alt și punct)?
    • Folosiți tasta Alt din stânga tastaturii.
  • Folosiți această combinație pentru a șterge directorul creat.
  • Repetați ultima comandă de tip mkdir folosind reverse search. Puteți citi mai multe despre acest concept aici, secțiunea Searching the command history.
  • Scrieți în terminal comanda rm -rf /tmp. Nu apăsați enter.
    • Folosiți combinația de taste Alt-# (Alt și diez).
    • Ce s-ar fi întâmplat dacă executam comanda?

16. Istoria directoarelor

  • Reamintiți-vă ce face forma cd -. Identificați o problemă a ei. Ce se întâmplă dacă o folosim de două ori consecutiv?
  • Explicați funcționarea comenzilor pushd și popd. Cum putem afișa stiva de directoare, fără a o modifica?
    • pushd și popd sunt comenzi built-in ale shell-ului. Drept urmare, nu au propria pagină de manual.
    • Shell-ul pe care îl folosim se numește bash. Folosiți pagina de manual aferentă pentru a găsi semnificația comenzilor pushd și popd.

17. chroot

Folosiți chroot pentru a face ca pwd în directorul /tmp/chroot_jail să returneze /. Puteți naviga în exteriorul directorului /tmp/chroot_jail, după ce ați făcut chroot?

Listați conținutul directorului din chroot. Faceți astfel încât listarea să fie posibilă (pentru a ieși din jail folosiți exit)

Construiți în directorul /tmp/chroot_jail directoare pentru executabilele bash, pwd (folosiți which pentru a afla locația lor) și pentru bibliotecile necesare acestor programe (folosiți ldd pentru a le afișa).

Folosiți aplicații precum chroot pentru a crea un mediu virtual, protejat, pentru testarea unor aplicații. Tehnica este denumită sandboxing.

FIXME

systems/uso/laboratoare/laborator-02.1348350369.txt.gz · Last modified: 2012/09/23 00:46 by paul.vlase
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