Comenzi şi drepturi de acces în GNU/Linux

Ubuntu este o distribuţie dedicată în principiu începătorilor. Dar am observat că obiceiurile căpătate în timpul folosirii Windows fac neclare unele aspecte importante ale utilizării unei distribuţii Linux. Am impresia că drepturile/permisiunile fişierelor şi structura comenzilor date în consolă/terminal încurcă mulţi începători, mai mult chiar decât alte chestii mai complexe. În măsura cunoştinţelor şi ¨talentului meu literar¨ am încercat să clarific puţin aceste aspecte. 



                          A) Structura comenzilor în GNU/Linux

Datorită avantajelor sale, comenzile sunt des utilizate în Linux. De cele mai multe ori când un începător are nevoie de ajutor şi apelează la alte persoane pe un forum specializat, răspunsurile primite vor fi sub forma unor comenzi.
Pentru a fi memorate şi folosite cu succes, comenzile trebuie înţelese. În principiu o comandă este o scurtă propoziţie: computer fă asta deci subiect+predicat+complement! Dar cum întotdeauna subiectul este acelaşi (computerul/calculatorul/PC-ul/maşina sau indiferent cum altfel îl numim), nu e necesar să apară în comandă, este subînţeles... Aşadar rămân doar predicatul şi complementul, altfel spus comanda (acţiunea) şi argumentele necesare acţiunii. Da, de multe ori avem nevoie de mai multe argumente, deci sintaxa va fi:
acţiune argument_1 argument_2 ... argument_n
Deasemeni e bine de reţinut ca aceste comenzi sunt prescurtări ale cuvintelor din limba engleză:
cd= change directory= schimbă directorul (folderul) curent
cp= copy = copiază
ls= list= listează (afişează)
mkdir= make directory= creează director
mv= move= mută
rm= remove= înlătură/ şterge



Să exemplificăm:
1)cd /home/user/Desktop   =>comanda aceasta va schimba directorul curent în directorul /home/user/Desktop, adică ne va muta în acel director. Această înşiruire care poate părea greoaie este necesară pt. a arăta sistemului calea exactă (path) către acel director. Dacă suntem în directorul /home/user ajunge comanda cd Desktop, deoarece sistemul vede directorul Desktop în directorul curent. Dar dacă suntem în / sau /usr/bin sau /home/user/Downloads, deoarece aceste directoare nu conţin un director Desktop vom primi outputul (ieşirea, răspunsul, eroarea) bash: cd: Desktop: No such file or directory! De aceea trebuie folosită calea exactă!
2)cp file.txt Documents   =>comandă ce va muta fişierul numit file.txt în directorul Documents. Se observă că am pus întâi acţiunea dorită (copiere) apoi argumentele necesare (ce mutăm + unde mutăm). Argumentele sunt date în această ordine: 1- fişierul/directorul sursă, 2- fişierul/directorul destinaţie...
3)rm –rf Muzică   =>această comandă şterge de pe maşină directorul Muzică. Dar dacă directorul nu e gol (conţine alte directoare şi fişiere), sistemul nu va executa acţiunea dorită! Pentru aceasta adăugăm comenzii unele OPŢIUNI, în cazul nostru -rf (opţiunile sunt precedate de o liniuţă -). r= recursive= se aplică atât directorului în cauză cât şi subdirectoarelor şi fişierelor conţinute, iar f= force = forţat = nu ne interesează că directorul nu e gol, sau că e important, nu ne interesează părerea sitemului. Deci, opţiunea f= force trebuie folosită cu ATENŢIE!!!
4)sudo aptitude install vlc    sau    sudo apt-get install vlc     =>comandă care va instala aplicaţia multimedia vlc. Sudo vine de la superuser do (facem ceva cu drepturi de root/superuser, avem drepturi depline pe sistem), aptitude (apt-get) este numele utilitarului cu care administrăm aplicaţii, install= instalează, vlc= programul pe care dorim să-l instalăm.
5)chmod 777 /home/user/Director   =>chmod= change mod= schimbă permisiunile/atributele/drepturile unui director/fişier, 777 sunt permisiunile date în cifre, /home/user/Director este directorul căruia dorim să-i modificăm permisiunile.
6)rm -f /home/user/.*   =>comandă care şterge toate fişierele a căror denumire începe cu ¨.¨ şi continuă cu orice şi oricâte caractere. Sunt fişierele de configurare şi sunt ascunse (punând punct în faţa numelui unui fişier/director îl ascundem. Această comandă este foarte utilă în cazul în care am făcut modificări în sistem sau aplicaţii, avem unele probleme şi nu ştim să remediem sau să revenim la setările anterioare. După rularea comenzii vom avea un sistem ¨virgin¨, cu toate setările iniţiale (temă, wallpaper, setări aplicaţii, conexiune net, semne de carte în Firefox, etc.), şi evident am scăpat de setările problematice.
7)rm -rf /   =>ESTE O COMANDĂ EXTREM DE PERICULOASĂ, ŞTERGE PARTIŢIA / (ROOT)!!! NU O RULAŢI NICIODATĂ! O DAU PENTRU UN SINGUR MOTIV: ÎNAINTE DE A DA O COMANDĂ INCERCAŢI SĂ ÎNŢELEGEŢI CE VA FACE ACEASTĂ COMANDĂ!!! În cazul acesta rm= remove= şterge, -rf= recursiv+forţat= se aplică tuturor directoarelor şi fişierelor, indiferent dacă e o prostie, / este directorul root, rădăcina sistemului de fişiere, efectiv curăţăm TOT... sad
8)Veţi primi eroare la unele din aceste comenzi. Motivul: nu aveţi permisiunea de a le folosi! Soluţia: trebuie să deveniţi root/superuser (sudo su, sau sudo su -, sau activaţi contul de root), sau să căpătaţi drepturile de root/superuser pentru o anumită perioadă (sudo pus înaintea comenzii date). Descoperiţi singuri care sunt cazurile în care trebuie căpătate drepturi suplimentare, sunt convins că aşa veţi învăţa mult mai multe şi mai uşor!

  Câteva comenzi mai des utilizate se găsesc la:
http://docs.google.com/viewer?a=v&q … k3aVXn3pGA
http://ss64.com/bash/

  Cred că aţi observat că am folosit caracterul * pentru a înlocui unul sau mai multe caractere (litere, cifre). * şi alte asemenea simboluri se numesc metacaractere (wildcards), şi sunt foarte utile. Metacaractere sunt: *, -, ?, [ ], etc. De fapt aproape toate simbolurile non-alfanumerice (deci care nu sunt litere sau cifre). Singurele caractere non-alfanumerice care nu sunt metacaractere sunt punctul (.) şi linia jos ( _ ).
Comenzile se pot grupa, deci putem da simultan 2 sau mai multe comenzi, despărţite de unele simboluri:
1)comenzi fără legătură între ele, comenzi executate pe rând (comenzi legate prin ; ):
                                pwd; ls -l   pwd= arată în ce director suntem, ls -l= arată conţinutul directorului, dar nu este influenţată de prima comandă sau invers, ambele comenzi se pot da separat cu aceleaşi rezultate, sau se poate inversa ordinea lor...:
camelia@stressat ~$  pwd; ls -l
/home/camelia                   
total 734100                   
-rw-rw-r--  1 camelia camelia        43 2010-01-20 17:59 cityfm_128.m3u
drwxrwxrwx  2 camelia camelia      4096 2010-03-06 16:13 Desktop/     
-rw-r--r--  1 camelia camelia   7676015 2010-02-14 08:49 dixit.qdb
drwxr-xr-x  7 camelia camelia      4096 2010-02-14 08:44 Documents/
drwxr-xr-x  8 camelia camelia      4096 2010-03-06 20:44 Downloads/

... etc. Sunt prea multe linii pentru a fi afişate aici.
   
     2)comenzi interdependente: a doua comandă se execută asupra rezultatului primei comenzi, cu condiţia ca prima comandă să se încheie cu succes (comenzi legate prin && ):
                               cd /home/user/Documents && ls -l  mai întâi schimbăm directorul, apoi vrem să ştim ce conţine:
camelia@stressat Desktop $ cd /home/camelia/Documents && ls -l
total 139244                                                 
drwxrwxr-x 2 camelia camelia     4096 2010-03-07 11:34 1-Tutoriale/
-rwxrwxrwx 1 camelia camelia  1247064 2009-09-10 18:37 5151_100_Linux_Tips_and_Tricks.PDF*
-rwxrwxrwx 1 camelia camelia    51952 2009-09-26 18:53 asher-samurai-jack.png*           
-rw-rw-r-- 1 camelia camelia   253159 2010-01-17 17:53 atheros.pdf                       
drwxrwxr-x 3 camelia camelia     4096 2010-01-27 19:58 bash-Mandriva/                   
drwxrwxr-x 2 camelia camelia     4096 2010-01-27 19:57 bash-Sabayon/
-rwxrwxrwx 1 camelia camelia   729088 2009-08-01 11:57 carte linux.doc*
-rwxrwxrwx 1 camelia camelia    21504 2009-08-01 11:53 Comenzi Linux.doc*

 
  Spuneam că prima comandă trebuie să fie corectă, să se încheie cu succes, altfel a doua comandă nu se poate aplica, e inutilă :
camelia@stressat ~$ cd /home/user/Documents && ls -l
bash: cd: /home/user/Documents: No such file or directory

    Greşeala este user în loc de numele corect al userului (în acest caz camelia).
camelia@stressat ~$ cd /home/camelia/Documens && ls -l
bash: cd: /home/camelia/Documens: No such file or directory

      Greşeala acum este Documens în loc de Documents.

3)comenzi interdependente: a doua comandă se execută DOAR dacă prima dă eroare(comenxi legate prin || ):
cd proba || mkdir -p proba    =>vrem să ne mutăm în directorul proba, dacă el există a doua comandă nu se mai execută, dar dacă nu există, intervine a doua comandă, care îl creează:
camelia@stressat ~$ cd proba
bash: cd: proba: No such file or directory
camelia@stressat ~$ cd proba || mkdir proba
bash: cd: proba: No such file or directory
camelia@stressat ~$ cd proba
camelia@stressat proba $
                Observăm că s-a creat directorul proba...
       




                  B)Permisiunile/drepturile fişierelor/directoarelor

  Un alt aspect cam neînţeles de începători se referă la permisiunile/drepturile/atributele fişierelor şi directoarelor. Spre deosebire de Windows, sistemele Linux au o politică strictă de departajare a utilizatorilor. De obicei ca user obişnuit vom avea dreptul de a face tot ce vrem în directorul nostru personal (/home/user), dar nu şi în directoarele altor utilizatori (/ este directorul userului root, /home/dan este directorul altui user/dan).
  Aceste drepturi asupra obiectelor se împart în trei categorii:
      1) read= citire= r= 4
      2)write= scriere= w= 2
      3)execute= execuţie= x= 1

şi se dau pentru trei categorii de utilizatori: proprietarul obiectului, grupul proprietarului, restul lumii.
  Aceste drepturi de acces se pot scrie în forma rwx sau 7 ( r+w+x   =>  4+2+1=7) pt. drepturi depline, sau r-x respectiv 5 (r+x  =>  4+1=5) pt. permisiuni de citire şi execuţie, dar nu de scriere (modificare a conţinutului).
Pentru a vedea drepturile de acces asupra unui obiect folosim comanda ls -l (ls -l file pt. Fişierul ¨file¨, sau ls -l pt. toate obiectele din directorul în care suntem (subdirectoare şi fişiere). Pentru a vedea şi fişierele ascunse comanda este ls -al.
Outputul (răspunsul sistemului) va fi ceva de forma:

dan@stressat Documents $ ls -l
total 139244                     
drwxrwxr-x 2 dan dan   4096 2010-03-07 08:18 1-Tutoriale/
-rwxrwxrwx 1 dan dan   1247064 2009-09-10 18:37 5151_100_Linux_Tips_and_Tricks.PDF*
-rw-rw-r-- 1 dan dan     3645 2010-01-09 12:37 Alex-linux-counter-500412.png     
-rwxrwxrwx 1 dan dan    51952 2009-09-26 18:53 asher-samurai-jack.png*           
-rw-rw-r-- 1 dan dan   253159 2010-01-17 17:53 atheros.pdf       

               
  Permisiunile de care vorbim sunt: rwxrwxrwx. Grupate pe useri ar fi cam aşa: rwx rwx rwx, trei grupuri de litere rwx. Primul grup reprezintă drepturile proprietarului, al doilea grup drepturile userilor din grupul proprietarului, al treilea grup drepturile celorlalţi, ale altor useri (cei ce nu sunt nici proprietari nici nu sunt în grupul acestuia). În exemplul de mai sus proprietarul e dan, iar grupul său tot dan. rwxrwxrwx arată faptul că toată lumea (proprietar, grupul acestuia, restul lumii) au drepturi depline asupra obiectului (citire+scriere+execuţie). Dacă un user nu are un drept în loc de acest drept vom avea o linie -.
d-ul din faţa liniei  drwxrwxr-x 2 dan dan   4096 2010-03-07 08:18 1-Tutoriale/  arată că obiectul este un director.
Următoarele caractere ne arată drepturile asupra obiectului: drepturi depline pt. proprietar şi grup, drepturi de citire şi execuţie (pt. directoare execuţie înseamnă deschidere) pt. ceilalţi, dar nu şi drept de scriere. În loc de w avem o linie -, ceea ce reprezintă faptul că aceşti useri nu pot modifica conţinutul obiectului – deci nu au drept de scriere...  În cifre drepturile se scriu 775.
 
Liniuţa – din faţa liniei   -rw-rw-r-- 1 dan dan   253159 2010-01-17 17:53 atheros.pdf    arată că avem de a face cu un fişier. Drepturile asupra acestui fişier sunt rw-rw-r--, drept de scriere+citire, nu şi de execuţie pt. proprietar şi grupul său, respectiv drept de citire (nu şi scriere şi execuţie) pt. restul lumii). În cifre drepturile ar fi: 664.

a)Modificarea drepturilor de acces se face prin comanda chmod.
Exemplu:    chmod 777 /home/user/Tutoriale/*                           
                chmod -R  777 /home/user/Tutoriale

               
Această comandă va da drepturi depline tuturor asupra directorului Tutoriale si asupra tuturor fişierelor conţinute de acesta! Detalii aflaţi cu ajutorul comenzii chmod --help
Sursa