This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
basic-unix:capitole:capitol-03 [2016/05/23 11:22] razvan [TODO 2] |
basic-unix:capitole:capitol-03 [2016/05/23 12:02] (current) razvan |
||
---|---|---|---|
Line 74: | Line 74: | ||
Vreau să copiez o comandă din terminal fără a folosi mouse-ul. Cum fac? | Vreau să copiez o comandă din terminal fără a folosi mouse-ul. Cum fac? | ||
* **R**: Folosim săgeată sus pentru a prelua comanda lungă anterioară. Apoi vom folosi ''**Ctrl+a**'' pentru a ne duce la începutul rândului. Apoi apăsăm ''**Ctrl+k**'' pentru a copia toată linia. Observăm că a dispărut. Acum apăsăm ''**Ctrl+y**'' (yank). | * **R**: Folosim săgeată sus pentru a prelua comanda lungă anterioară. Apoi vom folosi ''**Ctrl+a**'' pentru a ne duce la începutul rândului. Apoi apăsăm ''**Ctrl+k**'' pentru a copia toată linia. Observăm că a dispărut. Acum apăsăm ''**Ctrl+y**'' (yank). | ||
- | ==== TODO 2 ==== | ||
- | TODO | + | ==== Prompt-ul și comenzi simple ==== |
+ | Rulați comanda ''whoami''. Ce v-a afișat? Care este utilizatorul curent și care este numele mașinii? | ||
+ | |||
+ | Rulați comanda ''hostname'' și observați ce afișează. | ||
+ | |||
+ | Rulați comanda ''sudo su''. Verificați din nou utilizatorul curent cu comanda ''whoami''. | ||
+ | |||
+ | Părăsiți prompt-ul de ''root'' folosind comanda ''exit'' sau combinația de taste ''Ctrl+d''. | ||
+ | |||
+ | ==== Comenzi rulate de root ==== | ||
+ | |||
+ | Rulați, ca utilizator obișnuit, comanda | ||
+ | <code> | ||
+ | ifconfig | ||
+ | </code> | ||
+ | Observați că nu afișează nimic. | ||
+ | |||
+ | Apoi, rulați ''sudo su'' ca să obțineți un prompt de ''root'' și rulați și acolo comanda | ||
+ | <code> | ||
+ | ifconfig | ||
+ | </code> | ||
+ | Observați că acum afișează informații despre rețea. | ||
+ | |||
+ | Pentru a identifica această cauză, rulați, în fiecare dintre cele două prompturi (de utilizator obișnuit și de ''root'') cele două comenzi de mai jos | ||
+ | <code> | ||
+ | echo $PATH | ||
+ | which ifconfig | ||
+ | </code> | ||
+ | |||
+ | ==== Comenzi cu argumente ==== | ||
+ | |||
+ | Aflați informații despre Linux-ul instalat folosind comanda ''uname'' cu parametrul (flag-ul) ''-a'' sau {{{--all}}}. Ce alte flag-uri are comanda ''uname''? | ||
+ | |||
+ | Rulați comanda ''zip''. Merge fără a avea vreun argument? | ||
+ | |||
+ | Creați două fișiere cu comanda ''touch''. ''touch'' primește ca argumente (număr variabil de argumente) numele fișierelor. Rulati comanda | ||
+ | <code> | ||
+ | touch file1 file2 file3 | ||
+ | </code> | ||
+ | |||
+ | Arhivați fișierele //file1// și //file2// într-o arhivă //files.zip//. Comanda | ||
+ | <code> | ||
+ | zip files.zip file1 file2 | ||
+ | </code> | ||
+ | |||
+ | Rulati comanda ''zip'' fără parametri și observați flag-ul de "quiet operation". | ||
+ | |||
+ | Rulați comanda ''zip'' cu flag-ul ''-q'' pentru a adăuga și fișierul //file3// la arhivă. Adică rulați | ||
+ | <code> | ||
+ | zip -q files.zip file3 | ||
+ | </code> | ||
+ | |||
+ | ==== Documentație ==== | ||
+ | |||
+ | Aflați ce face comanda ''who'' folosind utilitarul ''whatis'': ''whatis who''. Ce argumente poate primi comanda ''who''? | ||
+ | |||
+ | <note tip> | ||
+ | Folosiți help-ul intern al comenzii: {{{who --help}}}. | ||
+ | </note> | ||
+ | |||
+ | Similar, aflați ce face comanda ''last''. | ||
+ | |||
+ | Rulați comanda | ||
+ | <code> | ||
+ | id | ||
+ | </code> | ||
+ | |||
+ | Pentru a afișa informații despre utilizatorul curent. Folosiți opțiunea pentru a afișa doar UID-ul utilizatorului. La fel, folosiți opțiunea pentru a afișa doar GID-urile grupurilor din care face parte utilizatorul. | ||
+ | |||
+ | ==== Rulare vimtutor ==== | ||
+ | |||
+ | Rulați comanda ''vimtutor'' pentru a vă acomoda cu editorul Vim. | ||
+ | |||
+ | ==== Scriere program C în Vim și compilare ==== | ||
+ | |||
+ | Deschideți un terminal. Dorim să ne asigurăm că suntem în directorul ''/home/training''. Folosiți comanda | ||
+ | |||
+ | <code bash> | ||
+ | pwd | ||
+ | </code> | ||
+ | |||
+ | Folosiți comanda ''vim hello.c'' pentru a edita un fișier C care afișează mesajul ''Hello, World!''. Puteți folosi programul de mai jos: | ||
+ | |||
+ | <code C> | ||
+ | #include <stdio.h> | ||
+ | |||
+ | int main(void) | ||
+ | { | ||
+ | puts("Hello, World!"); | ||
+ | return 0; | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Compilați programul scris la mai sus, folosind comanda | ||
+ | |||
+ | <code bash> | ||
+ | gcc hello.c -o hello | ||
+ | </code> | ||
+ | |||
+ | <note tip> | ||
+ | Încercați să scrieți de mână, **folosind tasta TAB** comanda astfel: ''gcc hel<TAB> -o hello'' | ||
+ | </note> | ||
+ | |||
+ | Spre deosebire de Windows, unde executabilele au, în general extensia ''.exe'', într-un sistem Linux fișierele executabile se numesc, în general, **binare**. ''hello'' este un astfel de fișier binar. | ||
+ | |||
+ | Se poate rula folosind comanda | ||
+ | <code bash> | ||
+ | ./hello | ||
+ | </code> | ||
+ | |||
+ | ==== Afișare mesaje la consolă ==== | ||
+ | |||
+ | Pentru a afișa mesaje la consolă putem folosi comanda ''echo'': | ||
+ | <code> | ||
+ | echo Hello | ||
+ | echo "I'm here" | ||
+ | echo -e "\t1\t2" | ||
+ | </code> | ||
+ | |||
+ | ==== Coduri de eroare ==== | ||
+ | |||
+ | O comandă își poate termina execuția cu succes (status 0) sau cu eroare (status diferit de 0). Într-un terminal statusul cu care s-a încheiat ultima comandă lansată se poate vedea cu ajutorul comenzii: | ||
+ | <code> | ||
+ | echo $? | ||
+ | </code> | ||
+ | |||
+ | true și false sunt două programe care întotdeauna se termină cu succes, respectiv cu eroare. Testați acest lucru: | ||
+ | <code> | ||
+ | true | ||
+ | echo $? | ||
+ | false | ||
+ | echo $? | ||
+ | </code> | ||
+ | |||
+ | Folosind operatorii ''&&'' și ''||'', putem rula o a doua comandă doar dacă prima s-a încheiat cu succes, respectiv eroare. Operatorii se aseamănă cu funcțiile logice AND și OR. | ||
+ | |||
+ | <code> | ||
+ | true && echo "Success" | ||
+ | false && echo "Success" | ||
+ | true || echo "Fail" | ||
+ | false || echo "Fail" | ||
+ | </code> | ||
+ | |||
+ | Căutați un fișier (folosind ''locate'') și afișați pe ecran "FOUND", în cazul în care fișierul a fost găsit. | ||
+ | |||
+ | |||
+ | ==== Globbing ==== | ||
+ | |||
+ | Am văzut în secțiunea de Demo că putem folosi anumite caractere ce țin locul unor bucăți de text, de exemplu caracterul ''*''. De exemplu, dacă dorim să listăm toate fișierele din ''/etc'' care încep cu stringul ''ssh'' putem folosi comanda: | ||
+ | |||
+ | <code bash> | ||
+ | student@uso:~$ ls /etc/ssh* | ||
+ | </code> | ||
+ | |||
+ | După cum observați, caracterul ''*'' ține loc pentru %%"oricâte și orice caractere"%%. Procedați asemănător și afișați fișierele sau directoarele din ''/etc'' cu extensia ''.conf''. | ||
+ | |||
+ | Realizați o arhivă de tipul ''zip'' în directorul ''home'' al utilizatorului ''student'' (''/home/student'') care să conțină toate fișierele și directoarele din ''/etc/'' care conțin stringul ''conf'' în numele lor. | ||
+ | |||
+ | <note tip> | ||
+ | Este foarte probabil ca printre fișierele și directoarele găsite să existe directoare care nu sunt goale. Pentru a arhiva și conținutul acestora trebuie să specificăm acest lucru explicit comenzii ''zip''. Căutați în output-ul comenzii | ||
+ | <code> | ||
+ | zip --help | ||
+ | </code> | ||
+ | după opțiunea care trece recursiv prin directoare (//recurse into directories//). | ||
+ | </note> | ||
+ | |||
+ | 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. | ||
+ | |||
+ | ==== Lucrul cu fișiere ==== | ||
+ | |||
+ | Creați trei fișiere, denumite ''unu'', ''doi'' și ''trei'' în directorul propriu (directorul de tip home) și afişați-le folosind comanda {{{ls}}}. Adăugați apoi parametrul ''-l'' comenzii ''ls'' pentru a afișa mărimile acestor fișiere. | ||
+ | |||
+ | Așteptați un minut după crearea fișierelor de mai sus. Folosiți comanda {{{touch}}} pe fișierul {{{unu}}}. Folosiți, din nou, comanda {{{ls -l}}}. Ce observați? | ||
+ | |||
+ | Creați în directorul propriu două directoare denumite ''dir1'' și ''dir2''. Listați conținutul directoarelor. | ||
+ | |||
+ | Creați fisierul {{{file.dat}}} care să conțină 10MB de date aleatoare, folosiți comanda | ||
+ | <code> | ||
+ | dd if=/dev/urandom of=file.dat bs=1M count=10 | ||
+ | </code> | ||
+ | |||
+ | Comprimare fișierul {{{file.dat}}} pe rând în format {{{gzip}}}, {{{bzip2}}} și {{{zip}}}. Care sunt diferențele de mărime ale arhivelor? | ||
+ | |||
+ | <note tip> | ||
+ | După fiecare comprimare fișierul inițial se șterge în cazul comenzilor ''gzip'' și ''bzip2'' așa că va trebui să-l regenerați. | ||
+ | </note> | ||
+ | |||
+ | Aflați cât durează fiecare comandă de comprimare folosind comanda ''time'' înaintea oricărei alte comenzi. |