====== 2. Folosirea eficientă a liniei de comandă ====== TODO ===== Subiecte abordate ===== * TODO * TODO * TODO ==== Utilitare folosite ==== * TODO * TODO * TODO ===== Resurse utile ===== * TODO * TODO ==== Slide-uri ==== [[http://koala.cs.pub.ro/training/res/medium-unix/slides/cap-02.pdf|Slide-uri capitol 2]]
===== Exerciții ===== ==== Demo-uri ==== TODO TODO ==== Exerciții de încălzire ==== Scrieți la prompt, fără să rulați, comanda cd /h și apoi folosiți tasta {{{TAB}}} pentru autocompletare. Se completează la ''cd /home''. Pentru listarea tuturor comenzilor ce încep cu {{{ap}}}, scrieți acest prefix în terminal și folosiți de două ori consecutiv tasta {{{TAB}}}. Se completează la lista de comenzi care încep cu ''ap'' Scieți comanda ''apt-get install nmap'', fără să o executați. Folosiți combinația de taste {{{Ctrl + a}}} pentru a vă deplasa la începutul comenzii. Similar, folosiți {{{Ctrl + e}}} pentru a vă deplasa înapoi la finalul comenzii. Folosind săgețile, plasați cursorul după cuvântul {{{get}}}. După aceea, folosiți combinația {{{Ctrl + k}}}. Observați efectul. După ce comanda este din nou completă, din aceeași poziție a cursorului, folosiți {{{Ctrl + w}}} și observați ce efect are. Rulați următoarea comandă: ping -c 1 google.com > result.out După aceea, folosiți combinația de taste {{{Alt + .}}} (adică țineți apăsat tasta ''Alt'' și apoi apăsați tasta ''.'' (punct)). Observați efectul acesteia: completează ultimul argument al ultimei comenzi. Folosiți de mai multe ori {{{Alt + .}}}. Rezultatul este parcurgerea ultimului argument al ultimelor comenzi la fiecare apăsare Ștergeți ce s-a afișat la punctul anterior. Rulați comanda: echo $_ Diferența față de ''Alt + .'' este că este neinteractiv și că nu afișează expandarea acelui argument. În același terminal în care ați tastat comenzile de mai sus, rulați comanda: ping -c 1 8.8.8.8 Apăsați {{{Ctrl + r}}} și în noul prompt apărut tastați {{{ping}}}. Mai apăsați o dată {{{Ctrl + r}}}. Observați ce se afișează. Folosiți tasta {{{ENTER}}}. Apoi repeteți primul pas și folosiți {{{ESC}}}. Observați diferența dintre cele două utilizări. Rulați comanda de schimbare a directorului: cd /etc După aceea, folosiți: cd - pwd Observați ce efect are: schimbă directorul în directorul anterior. Rulați comanda {{{ls /var/cache/apt/archives/}}} (utilizând cât mai mult command completion). Ce comandă vă permite schimbarea cât mai eficientă în directorul {{{/var/cache/apt/archives/}}} ? Folosiți uname pentru a afișa doar versiunea nucleului și a arhitecturii sistemului. (Hint: {{{man uname}}}) ==== Lucrul cu documentația ==== Fiecare comandă din Linux este însoțită de pagini de manual. Pentru a accesa manualul editorului {{{vim}}}, folosiți comanda: man vim Navigați prin manual folosind {{{PageUp}}} și {{{PageDown}}}. Pentru a căuta prin manual după cuvântul {{{fork}}}, folosiți: /fork Deplasați-vă între aparițiile cuvântului folosind {{{n}}} și {{{N}}}. Pentru a obține o scurtă descriere referitoare la o comandă, cât și secțiunea din manual în care se află, tastați comanda: whatis make După aceea, folosiți comanda: apropos make Observați diferența dintre ce returnează fiecare comandă. Manualele sunt grupate pe secțiuni. Pentru a vedea ce conține fiecare secțiune, consultați manualul utilitarului {{{man}}}: man man și consultați tabelul aflat în paragraful {{{Description}}}. Rulați comanda: man printf În ce secțiune se află pagina? Pentru a afla informații despre funcția de bibliotecă {{{printf}}}, rulați comanda: man 3 printf Pentru a determina calea completă către comanda {{{ls}}}, folosiți: which ls De cele mai multe ori, comenzile builtin ale shell-ului nu au pagină de manual. Tastați comanda: type source Se observă că {{{source}}} este o comandă internă. Folosiți utilitarul {{{help}}} pentru a afla informații despre ea: help source Căutați în pagina de manual a comenzii {{{find}}} **exemplul** de comandă care căută în {{{/sbin}}} și {{{/usr/sbin}}} fișierele cu drept de execuție dar fără drept de citire. Ce conține secțiunea 5 a paginilor de manual? Aflați informații despre fișierul {{{/etc/passwd}}}. Determinați comenzile folosite pentru a lucra cu fișiere {{{.zip}}}. **Hint**: ''apropos'' Comanda ''unzip'' dezarhivează o arhivă ''.zip'' dar are și o opțiunea de listare a conținutului acelei arhive fără a o dezarhiva însă. Identificați acea opțiune. ==== Alte exerciții ==== === Terminale === În **mașina virtuală**, după ce vă autentificați, din meniul ''Applications Menu -> Terminal Emulator''deschideți un nou **terminal**. Puteți folosi quick run, cu ajutorul scurtăturii **Alt-F2** și rulând aplicatia **xfce4-terminal**. Pentru exercițiile viitoare, folosiți astfel de terminale. === Prompt-ul și comenzi simple === Rulați comanda ''whoami''. Observați **prompt-ul** și determinați utilizatorul curent și care este numele mașinii. Rulați comanda ''hostname'' și observați ce afișează. Rulați comanda ''sudo su'' și observați schimbările prompt-ului. Verificați din nou utilizatorul curent cu comanda ''whoami''. === Comenzi cu argumente === Aflați informații despre Linux-ul instalat folosind comanda ''uname'' cu opțiunea ''-a'' sau {{{--all}}}. Folosiți o opțiune adecvată pentru a afișa doar versiunea arhitecturii sistemului de calcul. Rulați comanda ''zip'' fără argumente și observați că nu funcționează fără argumente. Creați două fișiere (''file1'' și ''file2'') cu comanda ''touch''. ''touch'' primește ca argumente (număr variabil de argumente) numele fișierelor. Arhivați fișierele //file1// și //file2// într-o arhivă //files.zip// folosind comanda zip files.zip file1 file2 Rulati comanda ''zip'' fără parametri și determinați opțiunea de "quiet operation". Rulați comanda ''zip'' cu acea opțiune pentru a **adăuga** și un fișier //file3// la arhivă. Pentru a verifica faptul că avem un conținut adecvat al arhivei folosim comanda unzip -l .zip unde '''' este numele arhivei. === Documentație === Aflați ce face comanda ''who'' folosind utilitarul ''whatis'': ''whatis who''. Folosiți help-ul intern al comenzii: {{{who --help}}} pentru a vedea ce opțiuni poate primi comanda ''who''. Similar, aflați ce face comanda ''last''. Căutați în pagina de manual (rulați {{{man last}}}) după cuvântul cheie "full" (tastați "/full") pentru a afla flag-ul care afișeaza data și ora în format complet. Rulați comanda ''last'' cu parametrul aflat. ==== Folosire eficientă a liniei de comandă ==== Pentru a deschide un tab nou de terminal folosiți scurtătura ''Ctrl+Shift+t''. Închideți tab-urile nou deschise folosind scurtătura ''Ctrl+d''. Vreți să afișați discurile sistemului.Rulați comanda fdisk -l În cazul în care sistemul are disc cu suport de GPT, folosiți comanda gdisk -l /dev/sda Vă dați seama că trebuie să rulați sub ''sudo''. Ce faceți? (gândiți-vă la eficiență) Vreți să aflați informații despre executabilul aferent comenzii ''md5sum''. Întâi aflați care este calea către executabilul aferent comenzii. Pentru aceasta rulați comanda which md5sum Pentru a afla din ce pachet face parte executabilul trebuie să folosiți comanda dpkg -S /cale/catre/executabil Contrucția ''$(comanda)'' vă întoarce rezutaltul comenzii ''comanda''.Ce faceți? (gândiți-vă la eficiență) Rulați comenzile de mai jos pentru a crea un director nou și pentru a face o copie a fișierului ''/etc/passwd'': mkdir -p ~/store/system/ cp /etc/passwd ~/store/system/passwd-copy Folosiți comanda ''less'' pentru a vizualiza conținutul fișierului astfel copiat. Fiți eficienți, folosiți combinația ''Alt+.'' pentru obținerea ultimului argument al ultimei comenzi. Rulați încă o dată comanda care afișa din ce pachet face parte utilitarul ''md5sum''. Fiți eficienți, căutați în istoricul de comenzi. ==== Find the secret messages ==== Folosiți fișierul de la link-ul http://swarm.cs.pub.ro/~razvan/r și aflați mesajele secrete. Pentru a descărca fișierul de link-ul de mai sus folosiți comanda wget http://swarm.cs.pub.ro/~razvan/r Este un joc de tipul păpușă rusească (matroshka) în care aveți arhivă în arhivă în arhivă etc. La final veți ajunge la un fișier text cu un mesaj dat. Folosiți-vă de comanda ''file'' urmată de numele unui fișier pentru a afla informații despre acel fișier. Pentru fișiere comprimate LZOP instalați programul ''lzop'' folosind comanda: sudo apt-get install lzop Pentru fișiere comprimate XZ sau LZMA instalați programul ''xz-utils'' folosind comanda: sudo apt-get install xz-utils Pentru fișierele comrimate XZ sau LZMA trebuie să modificați numele fișierelor pentru a avea extensia ''.xz'' respectiv ''.lzma''. ==== Generare și folosire imagine ISO ==== Vrem să creăm o imagina ISO pentru toate fișierele dn ierarhia ''/etc''. Creați un fișier ''etc.iso'' folosind comanda ''genisoimage'' care să conțină fișierele din ierarhia ''/etc''. Apoi montați imaginea ISO pentru a valida structura corectă a fișierului ''.iso''. Folosiți indicațiile de [[http://askubuntu.com/a/193632|aici]]. ==== Comunicare în rețea folosind netcat ==== Folosiți ''netcat'' pentru a porni, pe un tab de terminal, un server și pe alt tab de terminal un client conectat la acel server, pe ''localhost'' (''127.0.0.1''). ''netcat'' este un utilitar care permite deschiderea de clienți și servere de comunicare în rețea. Urmăriți sintaxa clientul și a serverului în primele linii ale paginii de manual. === Folosire UDP === Rulați ''netcat'' pentru a permite comunicarea peste UDP. Căutați în pagina de manual după șirul ''UDP'' și folosiți opțiunea corespunzătoare. ==== Verificare lățime de bandă folosind iperf ==== Folosiți utilitarul ''iperf'' pentru a porni un client și un server și pentru a verifica lățimea de bandă pe ''localhost''. Urmăriți sintaxa comenzii din pagina de manual pentru a afla cum se pornește un client, respectiv un server. Porniți întâi serverul. Ca argument pentru client (pentru conectare la server) folosiți ''localhost'' (stația locală). Durează circa ''10'' secunde de comunicare între client și server pentru stabilirea lățimii de bandă.