User Tools

Site Tools


basic-unix:capitole:capitol-03

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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.
basic-unix/capitole/capitol-03.1463991754.txt.gz · Last modified: 2016/05/23 11:22 by razvan