User Tools

Site Tools


basic-unix:capitole:capitol-03

3. Interfața în linia de comandă

Interfața în linia de comandă este forma cea mai “portabilă” de folosire a unui sistem Linux/Unix. Interfața în linia de comandă, deși mai greu de folosit decât interfața grafică, are avantajul că se prezintă în aceeași formă pe toate sistemele Unix/Linux. În plus este foarte ușor extensibilă (se pot adăuga comenzi noi sau opțiuni noi la parametri) și se pot automatiza acțiuni folosind (shell) scripting.

Subiecte abordate

  • Terminal, shell
  • Prompt, comenzi
  • Command completion
  • Contul privilegiat
  • Comenzi: opțiuni, parametri

Utilitare folosite

  • touch, mkdir, ls, cd
  • sudo, su
  • tar, zip, unzip

Resurse utile

  • TODO
  • TODO

Exerciții

Demo-uri

Ce înseamnă promptul unei comenzi?

Copy paste în terminal

Folosirea TAB pentru completion-ul unei comenzi. Folosirea <TAB><TAB> pentru afișarea tuturor posibilităților.

Autentificarea ca root.

Rularea comenzii chown ca root și prefixată de sudo.

Anatomia comenzii

ps -e -o pid,ppid,cmd

Anatomia comenzii

tar -czvf a.tar.gz /etc/security/

Anatomia comenzii actualizate

tar -c -z -v -f a.tar.gz /etc/security
tar --create --gzip --verbose --file a.tar.gz /etc/security

Folosirea --help pentru documentare legată de o comandă.

Opțiuni, opțiuni parametrizate, parametri pentru o comandă.

Codul de eroare al unei comenzi

Copy-paste în terminal

După ce ați deschis terminalul dați următoarea comandă (nu trebuie să înțelegeți acum ce face):

cat /dev/urandom | tr -dc _A-Z-a-z-0-9 | head -c 33 && echo -ne "\n"

Cum dăm Copy&Paste într-un terminal?

  • Copy: Ctrl+Insert (valabil în orice terminal. În Ubuntu mai poate fi folosită și combinația Ctrl+Shift+c)
  • Paste: Shift+Insert (valabil în orice terminal. În Ubuntu mai poate fi folosită și combinația Ctrl+Shift+v

Am dat o comandă lungă pe care vreau să o mai dau o dată. Cum fac?

  • R: apasă uparrow (săgeată sus)

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

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

ifconfig

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

ifconfig

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

echo $PATH
which ifconfig

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

touch file1 file2 file3

Arhivați fișierele file1 și file2 într-o arhivă files.zip. Comanda

zip files.zip file1 file2

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

zip -q files.zip file3

Documentație

Aflați ce face comanda who folosind utilitarul whatis: whatis who. Ce argumente poate primi comanda who?

Folosiți help-ul intern al comenzii: who --help.

Similar, aflați ce face comanda last.

Rulați comanda

id

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

pwd

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:

#include <stdio.h>
 
int main(void)
{
	puts("Hello, World!");
	return 0;
}

Compilați programul scris la mai sus, folosind comanda

gcc hello.c -o hello

Încercați să scrieți de mână, folosind tasta TAB comanda astfel: gcc hel<TAB> -o hello

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

./hello

Afișare mesaje la consolă

Pentru a afișa mesaje la consolă putem folosi comanda echo:

echo Hello
echo "I'm here"
echo -e "\t1\t2"

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:

echo $?

true și false sunt două programe care întotdeauna se termină cu succes, respectiv cu eroare. Testați acest lucru:

true
echo $?
false
echo $?

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.

true  && echo "Success"
false && echo "Success"
true  || echo "Fail"
false || echo "Fail"

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:

student@uso:~$ ls /etc/ssh*

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.

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

zip --help

după opțiunea care trece recursiv prin directoare (recurse into directories).

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

dd if=/dev/urandom of=file.dat bs=1M count=10

Comprimare fișierul file.dat pe rând în format gzip, bzip2 și zip. Care sunt diferențele de mărime ale arhivelor?

După fiecare comprimare fișierul inițial se șterge în cazul comenzilor gzip și bzip2 așa că va trebui să-l regenerați.

Aflați cât durează fiecare comandă de comprimare folosind comanda time înaintea oricărei alte comenzi.

basic-unix/capitole/capitol-03.txt · Last modified: 2016/05/23 12:02 by razvan