Comenzi De Baza

April 13, 2017 | Author: Krisztina Faluvégi | Category: N/A
Share Embed Donate


Short Description

Download Comenzi De Baza...

Description

Comenzi UNIX

Capitolul II Comenzi Linux Obiective. Din punctul de vedere al utilizatorului, cunoaşterea comenzilor reprezintă primul pas în lucrul în mod text sub Linux. După parcurgerea acestui capitol, studenţii trebuie să cunoască sintaxa şi efectul comenzilor: - pentru operaţii asupra cataloagelor şi fişierelor; - pentru operaţii asupra proceselor; - de informare şi administrare. Comenzile prezentate conţin, pe lângă sintaxă, semantică şi opţiunile cele mai importante, şi exemple de utilizare, care ajută la înţelegerea modului de utilizare a acestora. 1. Forma unei comenzi Linux. O comanda Linux are 4 zone sau câmpuri:  Primul câmp conţine numele propriu-zis al comenzii (cp - copiere, rmstergere), care indică ce acţiune realizează comanda respectivă.  Al doilea este câmpul de opţiuni. O opţiune este de obicei o literă, care poate fi urmată de un argument şir de caractere sau un număr întreg. Un grup de opţiuni începe cu semnul '' - "(minus). Mai sunt unele comenzi care conţin opţiuni precedate de semnul " +"(plus).  Zona de expresii conţine un şir de caractere cerute ca argumente pentru comanda respectivă.  Zona de fişiere conţine numele fişierelor utilizate în cadrul comenzii lansate. Separarea câmpurilor sau zonelor se face prin spaţii. Dacă este necesară reprezentarea unui spaţiu, acel spaţiu se reprezintă între acolade sau ghilimele. Majoritatea programelor-comenzi Linux sunt astfel realizate încât să ajute un utilizator care nu este încă familiarizat cu comanda respectivă. Astfel, dacă se introduce numai numele comenzii sau apar erori de sintaxă la tastare (dar numele comenzii este tastat corect) execuţia comenzii constă doar în tipărirea (afişarea) unui scurt mesaj explicativ. Exemplu: $ rm produce rezultatul: syntax: rm -[rf] file(s) O posibilă clasificare a comenzilor întâlnite în mod obişnuit în sistemele Unix ar fi următoarea: 1. operaţii asupra fişierelor şi cataloagelor; 2. operaţii asupra proceselor; 3. operaţii de informare şi/sau administrare;

42

Comenzi UNIX

4. operaţii de prelucrare a fişierelor text; 5. operaţii asupra perifericelor; 6. diverse. Descrierea completă a comenzilor se găseşte în manualul de referinţă care însoţeşte fiecare implementare Linux, atât în formă on-line (accesibilă prin comanzile man sau info), câ şi în formă tipărită. Foarte multe din implementările recente oferă aceste informaţii şi pe CD, eventual în format hipertext. O convenţie adoptată încă de la primele variante de Unix este aceea ca manualul de referinţă este împărţit în secţiuni, iar comenzile sunt descrise în prima secţiune. Frecvent în literatura referitoare la Unix se întâlnesc expresii de genul: “pentru detalii consultaţi tar(1)”. Aceasta înseamnă că trebuie consultată pagina de manual pentru comanda tar în secţiunea l a manualului de referinţă. În cadrul fiecărei secţiuni informaţiile sunt prezentate în ordinea alfabetica a numelui “paginii”, deci tar(1) trebuie căutat spre sfârşitul secţiunii 1 în forma tipărită a manualului. În acest capitol va fi prezentată doar o selecţie de comenzi, iar descrierea acestora nu va fi atât de completă ca în manualul de referinţă. Se introduc însă mai multe exemple de utilizare, iar gruparea comenzilor pe operaţii (şi nu alfabetic) permite o mai uşoară înţelegere. 2. Redirectarea intrărilor şi ieşirilor. Majoritatea comenzilor Linux au asociate un “fişier de intrare” şi un “fişier de ieşire”. Implicit acestea sunt “intrarea standard” , respectiv “ieşirea standard”. În mod normal, fişierul standard de intrare este tastatura de la care se introduce comanda, iar fişierul standard de ieşire este ecranul calculatorului sau terminalului la care lucrează utilizatorul. Acestea primesc descriptorii de fişier 0 (intrare) şi l (ieşire) în procesul care este utilizat pentru execuţia comenzii. Un al treilea fişier standard, pentru erori, primeşte descriptorul 2 şi este transmis comenzii (de regulă este acelaşi cu fişierul standard de ieşire). Interpretorul Linux permite însă utilizatorului sa specifice explicit în linia de comandă o altă identitate pentru intrarea standard şi/sau ieşirea standard, prin caracterele speciale . Astfel: $ cat main.c >program.c face ca listarea fişierului main.c din catalogul curent să nu apară pe ecran, ci să fie salvată în fişierul program.c din catalogul curent. Pentru aceasta, înainte de a se ajunge la lansarea în execuţie a comenzii cat, shell-ul deschide pentru scriere fişierul program.c şi îi acordă descriptorul de fişier l în procesul care va executa comanda cat. Dacă fişierul program.c există deja, prin operaţia de deschidere pentru scriere conţinutul său anterior se pierde; dacă fişierul nu există, el va fi creat de către shell şi va avea iniţial lungimea nulă. Într-o comandă în care se redirectează atât intrarea cât şi ieşirea sintaxa va fi: $ command output

43

Sisteme de operare-Concepte avansate

dar ordinea de specificare a redirectărilor nu este de regulă semnificativă. Bourne shell introduce câteva facilităţi de redirectare suplimentare, prezentate în continuare. Astfel, notaţia: n> unde n este un întreg, are semnificaţia de redirectare pentru scriere a fişierului cu descriptorul n. Se foloseşte această facilitate în special pentru redirectarea fişierului standard de eroare. Sintaxa unei comenzi în care toate cele 3 fişiere standard sunt redirectate este: $ command output 2> errors Pentru ca fişierul în care se redirectează ieşirea să nu fie suprascris, ci să se adauge la sfârşitul lui noi date, se foloseşte semnul >>. De exemplu, pentru adăugarea la sfârşitul fişierului de erori sintaxa este 2>>. Astfel: $ command >>logfile va determina ca mesajele produse de command să se adauge la sfârşitul fişierului logfile (fişierul jurnal în care se cumulează date despre serviciile oferite de comanda respectivă. Notaţia nume_fişier după care se introduc liniile fişierului, urmate de Ctrl-D; observăm că se realizează redirectarea ieşirii. Comanda cp (“copy” = copiază) Sintaxă: cp [opţiuni] nume1 nume2 Efect: Copierea unui fişier. Comanda are deci întotdeauna cel puţin 2 parametri.  Dacă ambii parametri reprezintă nume de fişiere obişnuite, nume2 va fi un fişier nou (i se alocă nod index şi blocuri de date proprii), cu conţinut identic cu cel al fişierului nume1.  Dacă nume1 este un fişier obişnuit, iar nume2 desemnează un catalog, atunci în catalogul nume2 se creează o intrare cu numele nume1 pentru copia fişierului.  Dacă atât nume1 cât şi nume2 reprezintă nume de cataloage, atunci comanda cp se poate executa doar dacă este prevăzută şi opţiunea -R sau -r, iar efectul este crearea în nume2 a unui catalog nume1 şi copierea recursivă a fişierelor din catalogul original nume1 în catalogul nou creat.  O altă opţiune importantă a comenzii cp este -i, care determină cerere de confirmare de la utilizator dacă prin copiere s-ar suprascrie un fişier existent. Comanda mv (“move” = mută, transferă) Sintaxa: mv [opţiuni] sursă destinaţie Efect: Schimbarea numelui (poziţiei) unui fişier.

49

Sisteme de operare-Concepte avansate

 Ca şi comanda cp, mv are minimum 2 parametri. O deosebire esenţială între cele două comenzi, este aceea că mv nu creează un fişier nou ci, pentru un fişier existent, doar schimbă numele său sau poziţia sa într-un sistem de fişiere. Din acest punct de vedere, se poate mai degrabă considera că mv este o operaţie asupra cataloagelor.  Dacă sursă şi destinaţie sunt nume de fişiere obişnuite, atunci intrarea de catalog cu numele sursă dispare şi se creează o intrare cu numele destinaţie.  Dacă sursă este nume de fişier obişnuit sau de catalog, iar destinaţie este nume de catalog, dispare intrarea sursa şi se creează o intrare cu numele sursa în catalogul destinaţie.  În situaţia că sursă este un catalog, prin această comandă întreaga sub-ierarhie sursă îşi schimbă poziţia.  Dacă intrarea destinaţie există, ea este suprascrisă. Se poate evita suprascrierea prin utilizarea opţiunii -i, la fel ca şi la comanda cp. Observaţie: Comanda mv nu poate realiza traversarea sistemelor de fişiere în situaţia în care sursă este un catalog (deci cataloagele nu se pot muta dintr-un sistem de fişiere în altul). Pentru fişierele obişnuite, într-un astfel de caz se creează un alt fişier (se alocă nod index şi blocurile de date necesare) în noul sistem de fişiere. Comanda ln (“link” = legătură) Sintaxă: ln [-fs] numecale [legătură] sau: ln [-fs] numecale... catalog Efect: Crearea unei noi legături pentru un fişier.  Comanda este înrudită cu cp în sensul că produce noi intrări în catalog, dar nu produce şi o copiere fizică a fişierului.  Dacă se foloseşte prima formă sintactică şi sunt prezente ambele argumente (fără opţiuni), atunci noua intrare de catalog apare sub numele legătură.  Dacă al doilea argument lipseşte, legătura creată în catalogul curent va avea acelaşi nume ca şi ultima componentă din nume_cale.  Dacă se foloseşte a doua formă sintactică, atunci în catalog se creează legături având ca nume ultimele componente din lista de nume_cale. Opţiuni. Există două tipuri de legături: fixe (“hard”), care se creează implicit şi simbolice, care se creează în prezenţa opţiunii -s. O legătură simbolică este de fapt un fişier text, al cărui conţinut este nume_cale şi al cărui nume este legătură (sau ultima componentă din nume_cale). Legăturile simbolice pot traversa sistemele de fişiere. Nu se pot crea legături fixe spre un catalog. Doar

50

Comenzi UNIX

superutilizatorul poate forţa această operaţie prin opţiunea -f (“force” = forţează). Exemplu:

$ cd/home/ij $ ln -s/usr/local/bin/change mychange $ ls -l mychange lrwxrvxrwx i ij staff 21 Oct 17 12:02 mychange ->/usr/local/bin/change În catalogul gazdă al utilizatorului s-a creat o legătură simbolică, mychange, spre fişierul /usr/local/bin/change. Se observă că prin comanda ls -l lungimea fişierului mychange este afişată a fi 21, ceea ce corespunde cu numărul de caractere din numele de cale dat. Comanda find (=găseşte) realizează căutarea într-o structură de directoare, specificând numele directorului(calea), criteriul de căutare şi opţional acţiunea care se execută asupra fişierelor găsite. Sintaxă: find lista-cale expresii Căutarea prin nume se face cu opţiunea -name Exemple: $ find / -name fisier va lista toate fişierele din sistem al căror nume este `fisier' ; această comandă va căuta în toate directoarele la care este permis accesul; dacă nu este permis accesul se va semnala acest lucru. Opţiunea -name este “case sensitive”; se foloseşte opţiunea `-iname’ dacă nu se doreşte să se facă distinţie între literele mari şi cele mici. $ find / -iname fisier Această comandă va include în rezultatul căutării şi Fisier sau fIsier , de exemplu. În căutarea fişierelor se pot folosi şi şabloane şi în acest caz numele de fişier este specificat între apostroafe. $ find / -name ‘fis*’ listează toate fişierele din sistem al căror nume începe cu caracterele `fis’. $ find / -name ‘fis???’ listează toate fişierele din sistem al căror nume începe cu caracterele `fis’, urmate de trei caractere oarecare. $ find /usr/share -name ‘*fis*’ listează

toate

fişierele

din

din

structura

care

porneşte

din

directorul

`/usr/share' cu textul `fis' inclus în nume. Se foloseşte -regex în locul lui -name pentru a face căutarea pentru fişiere al căror nume trebuie să îndeplinească un şablon definit printr-o expresie regulată $ find . -regex `.*\(net\|comm\).*` listează toate fişierele din structura care porneşte din directorul curent al căror nume contine şirurile `net` sau `comm` oriunde în numele lor. Căutarea fişierelor după dimensiune se face cu opţiunea -size, urmată de un număr natural, opţional precedat de un semn. Avem trei cazuri: când este precedat de semnul `+`, rezultatul căutării va fi toate fişierele care au dimensiunea mai mare decât numărul dat; când este precedat de semnul `-`,vor fi selectate toate fişierele a căror dimensiune este mai mică decât numărul dat; când nu este specificat nici un semn rezultatul va consta din toate fişierele care au exact aceeaşi

51

Sisteme de operare-Concepte avansate dimensiune. Unitatea implicită este blocul de 512 baiţi; dacă numărul specificat anterior este urmat de caracterul `k,respectiv `b' atunci unitatea de măsură este kilobaitul,respectiv baitul. Exemple: $ find /usr/local -size +1000k [RET] va lista toate fişierele din structura care porneşte din directorul `/usr/local' care au mai mult de 10,00 kilobaiţi. $ find ~ -size -500b va lista toate fişierele din structura care porneşte din directorul gazdă care au o dimensiune mai mică de 500 baiţi $ find / -size 42 va lista toate fişierele din sistem care au o dimensiune de 42 de blocuri a câte 512 baiţi. Se foloseşte opţiunea `-empty`pentru a se găsi toate fişierele de dimensiune nulă. $ find ~ -empty va afişa toate fişierele vide din structura care porneşte din directorul gazdă. Căutarea fişierelor după momentul modificării. Pentru a găsi fişiere modificate într-un interval de timp specificat, se folosesc opţiunile -mtime sau -mmin; argumentul folosit cu `-mtime` specifică numărul de zile, pe când cel cu `-mmin` specifică numărul de minute. Exemple: $ find /usr/local -mtime 1 va lista toate fişierele din structura care porneşte din directorul /usr/local care au fost modificate în ultimele 24 de ore. $ find /usr -mmin 5 va lista toate fişierele din structura care porneşte din directorul /usr care au fost modificate în ultimele 5 minute. Pentru a specifica un interval de timp, numărul utilizat ca argument, va fi precedat de semnul `+', respectiv `-', având semnificaţia selectării tuturor fişierelor pentru care timpul de la ultima modificare este mai mare sau egal, respectiv mai mic sau egal decât argumentul specificat. Exemple: $ find /usr/local -mtime -1 va afişa toate fişierele din structura care porneşte din directorul/usr/local care au fost modificate în ultimele 24 de ore. $ find /usr -mmin -5 va lista toate fişierele din structura care porneşte din directorul /usr care au fost modificate în ultimele 5 minute. Opţiunea -daystart va specifica faptul că contorizarea timpului se va face începând din ziua curentă, în loc de ziua trecută Exemple: $ find ~ -mtime 2 -daystart va lista toate fişierele din structura care porneşte din directorul gazdă care au fost modificate de acum două zile. $ find /usr -mtime +356 -daystart va lista toate fişierele din directorul structura care porneşte din /usr care au fost modificate de cel mult un an. $ find ~ -mtime 2 -mtime -4 -daystart [RET] va lista toate fişierele din structura care porneşte din directorul gazdă acum două până la patru zile. În exemplul precedent am combinat opţiunile -mtime 2 şi -mtime -4.

52

Comenzi UNIX Opţiunea -newer va fi folosită pentru a găsi fişierele mai noi decât un fişier dat. Exemplu: $ find /etc -newer /etc/fis va lista toate fişierele din directorul structura care porneşte din /etc care au au data de creare mai recentă decât fişierul /etc/fis. Pentru a căuta fişiere a căror dată de creare este ulterioară unei date specificate, se va folosi comanda touch pentru a introduce acea dată într-un fişier, care va fi argument pentu opţiunea -newer. Exemplu: $ touch -t 04010000 /tmp/timestamp $ find ~ -newer /tmp/timestamp va căuta toate fişierele din structura care porneşte din directorul gazdă care au fost modificate după 1 aprilie 2005(anul curent) Opţiunea –used este folosită pentru a găsi fişiere accesate după un număr de zile de la ultima modificare. Exemplu: $ find ~ -used +100 va căuta fişierele din structura care porneşte din directorul gazdă care au fost accesate după cel puţin 100 de zile de la data ultimei modificări. Căutarea fişierelor după proprietar Cu opţiunea –user, respectiv –group se pot căuta fişiere care aparţin unui anumit utilizator, respectiv unui grup de utilizatori. Exemple: $ find /usr/local/fonts -user florea va lista toate fişierele din structura care porneşte din /usr/local/fonts care aparţin utilizatorului florea. $ find /dev -group info va lista toate fişierele din structura care porneşte din directorul /dev al căror proprietar este grupul info. Execuţia de comenzi asupra fişierelor căutate se realizează cu opţiunea -exec care are ca argument o anumită comandă. Sfârşitul comenzii este marcat de caracterele ‘;’. Dacă se foloseşte şirul `'{}'` în cadrul comenzii, acesta este înlocuit cu numele de fişier care a fost găsit

Exemple:

$ find . -name ’’*.o’’ -exec rm ‘{}’ ‘;’; va şterge toate fişierele cu sufixul .o, situate în catalogul curent sau în subcataloagele acestuia. $ find ~/html/ -name '*.html' -exec grep linux `{}` `;` va găsi toate fişierele din structura care porneşte din directorul ~/html/ cu extensia .html şi va afişa liniile din aceste fişiere care conţin textul `linux’ . Pentru a se realiza comanda respectivă cu confirmare, se foloseşte -ok în locul lui -exec. $ find ~ -used +365 -ok rm `{}` `;` va găsi toate fişierele din structura care porneşte din directorul gazdă, care au fost accesate la mai mult de un an de când au fost modificate şi va aştepta confirmarea înainte de ştergere. Căutarea fişierelor după mai multe criterii. Se pot combina mai multe opţiuni pentru a se găsi fişierele care îndeplinesc criterii multiple.

Exemple:

$ find ~ -name 'fis*' -newer /etc/ultmod

53

Sisteme de operare-Concepte avansate va lista fişierele din structura care porneşte din directorul gazdă al căror nume începe cu şirul `top’şi care sunt mai noi decât fişierul /etc/ultmod $ find ~ -size +2000000c -regex '.*[^gz]' -exec gzip '{}' ';' va comprima toate fişierele din structura care porneşte din directorul gazdă şi care au 0 dimensiune de cel puţin doi megabaiţi şi care nu au fost comprimate folosind comanda gzip Legarea în pipe a comenzii find cu alte comenzi Exemple: $ find /usr/share \! -type d | wc -l va lista numărul fişierelor din structura care porneşte din directorul /usr/share. $ find /usr/share | wc -l va lista numărul fişierelor şi directoarelor din structura care porneşte din directorul /usr/share. $ find /usr/share \! -type f | wc –l va lista numărul directoarelor din structura care porneşte din directorul /usr/share.

Efect: Căutarea fişierelor după nume, parţial sau complet cunoscut (sau după alte criterii) în ierarhia de fişiere a unui sistem UNIX. Comanda lucrează în felul următor: pornind de la fiecare nume dat în pathname-list se caută recursiv fişiere care corespund lui expression considerată ca expresie logică. Legăturile simbolice întâlnite nu sunt traversate, ci sunt considerate ele însele ca fişiere la care se aplică criteriul de căutare. Operatorii care pot apare în expression sunt: b) -perm onum - “true” dacă drepturile de acces la fişier corespund exact numărului octal onum. c) -type c - “true” dacă tipul fişierului este c (un caracter care poate fi: f - fişier simplu; d - catalog; b - fişier special bloc; c - fişier special caracter; p - “pipe” (canal) cu nume; s - “socket” (pentru comunicarea în reţea). d) -user uname - “true” dacă proprietarul fişierului este uname; e) -atime n - “true” dacă fişierul nu a fost accesat de n zile; f) -mtime n - “true” dacă fişierul nu a fost modificat de n zile; g) -ctime n - “true” dacă fişierul nu a fost schimbat de n zile (schimbat înseamnă aici fie modificarea fişierului propriu-zis, fie modificarea atributelor sale); h) -print - întotdeauna adevărată, are ca efect afişarea numelui fişierului curent (care corespunde unui criteriu de căutare anterior specificat în expression); i) -ls - întotdeauna adevărată, are ca efect afişarea numelui de cale al fişierului curent şi informaţii suplimentare despre acesta (analog comenzii ls -li); j) -prune - întotdeauna adevărată, are ca efect colateral oprirea căutării la numele de cale curent, dacă acesta este catalog (nu se caută recursiv); k) -exec command - “true” dacă valoarea returnată de command este 0. Sfârşitul comenzii este marcat de caracterele \;. Frecvent ca argument al comenzii trebuie luat numele de cale curent, care se indică prin {}.

54

Comenzi UNIX

Exemplu: ştergerea tuturor fişierelor cu sufixul .o, situate în catalogul curent sau în subcataloagele acestuia: $ find. -name ’’*.o’’ -exec rm {}\;

Comanda head (antet) Sintaxă: head [-n] [filename... ] Efect: Afişarea primelor linii dintr-un fişier. În absenţa unor nume de fişiere, fişierul standard de intrare este copiat în fişierul standard de ieşire. Opţiunea -n, unde n reprezintă un întreg între 1 şi 9999 precizează numărul de linii afişate (valoarea implicită este 10). Comanda tail (sfârşit, coadă) Sintaxă: tail +|-number [lbc] [f] [filename] sau tail + |-number [l] [rf] [filename] Efect: Afişarea ultimei porţiuni dintr-un fişier. Comanda se referă întotdeauna la un singur fişier (fişierul standard de intrare este implicit).  În absenţa opţiunii number se foloseşte valoarea implicită 10, iar unitatea de afişare poate fi: - linia (opţiunea l sau implicit); - blocul (opţiunea b); - caracterul (opţiunea c).  Dacă number este precedat de semnul +, poziţia de început a afişării este considerată relativă la începutul fişierului, iar semnul - face ca specificarea poziţiei să se considere relativă la sfârşitul fişierului.  Dacă se foloseşte a doua formă sintactică (unde se lucrează numai cu linii), opţiunea -r are efectul afişării în ordine inversă a liniilor (ultima linie din fişier este afişată prima).  Opţiunea –f (dacă fişierul nu este “pipe”) face ca operaţia să nu se termine după afişarea ultimei unităţi solicitate, ci să intre într-un ciclu infinit; după o pauză de o secundă se încearcă citirea şi afişarea înregistrărilor nou apărute în fişier. Astfel se poate urmări creşterea dimensiunii unui fişier scris de către un alt proces. Comanda wc(“word count” = număr de cuvinte) Sintaxă: wc [-lwc] [filename...] Efect: Determinarea numărului de linii, cuvinte şi caractere dintr-un fişier . Se

55

Sisteme de operare-Concepte avansate

consideră cuvânt, un şir de caractere delimitat de spaţiu, tab sau “newline”. Fişierul standard de intrare este implicit. Prin opţiuni se specifică dacă se doreşte numărul de linii(l), cuvinte(w) sau caractere (c). Implicit se afişează toate. Dacă în comandă apar mai multe nume de fişiere se afişează şi numărul total, ca în următorul exemplu: $ ls -l *.txt total 2 -rw-r--r-1 -rw-r--r-1

ionel ionel

$ wc *.txt 2 6 42 4 16 91 6 22 133

fis1.txt fis2.txt total

42 91

Nov Nov

9 9

13:57 13:38

fis1.txt fis2.txt

Comanda sort (sortează) Sintaxă: sort [-bdfiMnr] [-tc] [sort-field...] [-cmu] [-o output-file][-T directory] [-y kmem] [-z recsz] filename... Efect:Sortarea conţinutului fişierelor text. Sortarea se poate face în ordinea dată de conţinutul liniilor sau a unor câmpuri din liniile fişierului. Comanda are un singur parametru obligatoriu: fişierul (fişierele) de sortat. Forma sortată este afişată implicit în fişierul standard de ieşire. Prin opţiunea –o, poate fi specificat un fişier care să conţină forma sortată. Sortarea după linii se face în ordine lexicografică, luând în considerare toate caracterele liniei, cu valoarea lor conform convenţiei ASCII. Sortarea după după valoarea anumitor câmpuri din linie, considerând textul unei linii divizat în câmpuri delimitate prin separatori. Câmpurile se indică prin opţiunea sort-field..., care are forma unor numere întregi precedate de semnele + sau -: +nr indică numărul de ordine al câmpului de la care începe sortarea iar -nr indică numărul de ordine al câmpului unde se opreşte sortarea (câmpurile se numerotează de la stânga la dreapta, începând cu 0). Ca separatori de câmpuri se consideră implicit caracterele “spaţii albe”. Se poate însă indica un separator explicit prin opţiunea -tc unde c reprezintă caracterul folosit ca separator. Frecvent este util în sortare ca valoarea unui anumit câmp să fie interpretată ca număr şi nu ca şir de caractere. Pentru aceasta se foloseşte opţiunea n care se ataşează la numărul de ordine al câmpului. Exemplu: Sortarea fişierului de parole după valoarea numerică a identificatorului de utilizator (UID), care este al treilea câmp al fiecărei linii: $ sort -t: +2n -3 /etc/passwd S-a specificat aici şi faptul că separatorul de câmpuri în acest fişier este caracterul : şi că valoarea celui de-al treilea câmp se interpretează ca număr. Exemplu: Sortarea unei liste de numere de telefon după numele de familie, iar în

56

Comenzi UNIX

cazul aceluiaşi nume de familie după numele de botez: Se doreşte ca lista să fie sortată după numele de familie, iar în cazul aceluiaşi nume de familie după numele de botez: $ sort +1 -2 +0 -1 listatelefoane Aici este necesar să se delimiteze câmpurile de sortare astfel încât după primul criteriu să nu se ia în considerare şi numărul de telefon (dacă -2 lipseşte se consideră implicit toate câmpurile care urmează până la sfârşitul liniei), iar după al doilea criteriu să se considere doar numele de botez. Câmpurile se iau în considerare în ordinea în care sunt specificate în comandă. O ultimă opţiune prezentată este -r care determină inversarea ordinii de sortare (din crescătoare în descrescătoare). Comanda sed (“Stream Editor” = editor în flux) Sintaxă: sed [-n] [-e] command files sau sed [-n] -f scriptfile files Efect: Linia de comandă specifică operaţia efectuată de către sed şi care sunt fişierele asupra cărora actionează(prima forma). De asemenea, este posibil ca sed să-şi preia comenzile dintr-un fişier în loc de a le primi în linia de comandă. În mod normal, sed trimite rezultatul prelucrării în fişierul standard de ieşire, nu înapoi în fişierul editat. Opţiunea -n suprimă ieşirea, ceea ce înseamnă ca se vor afişa numai liniile specificate cu comanda p a editorului. Opţiunea -e precizează că următorul argument este o comandă şi se utilizează când se specifică mai multe comenzi în aceeaşi linie. Opţiunea -f arată că următorul argument este un fişier care conţine comenzi de editare. Comenzile de editare pentru sed au următoarea sintaxă: [address[, address]][!]command[arguments] Editorul sed ia pe rând liniile din fişierul specificat ca intrare şi le aplică fiecărei comanda data, trimiţând rezultatul în fişierul standard de ieşire (dacă ieşirea nu este suprimată). Dacă în comanda lipseşte partea de adresa, comanda va avea efect asupra fiecărei linii din fişierul prelucrat. Dacă se specifică numai o adresă, comanda se aplică liniilor care corespund acelei adrese (adresa poate fi exprimată printr-un tipar). Două adrese separate prin virgulă în cadrul comenzii fac ca aceasta sa se aplice liniilor din fişier începând cu prima care satisface prima adresă şi până la cea care satisface a doua adresă, inclusiv. Dacă o adresă este urmată de semnul exclamării, comanda se aplică liniilor care nu satisfac tiparul de adresă. De obicei, tiparele de adresă constau din numere sau din simboluri puse între caractere “slash”. Exemple: 1, 30 liniile de la l la 30.

57

Sisteme de operare-Concepte avansate

/^$/ toate liniile goale. 1, /^$/ liniile de la prima din fişier, până la prima linie goală. /SAVE/! liniile care nu conţin SAVE. Comanda cea mai frecvent utilizată este cea de substituţie, (s), cu sintaxa: s/pattern/replacement/[flags] Tiparul (pattern) al comenzii constă din şiruri de caractere care se reprezintă pe ele însele, sau din expresii regulate, construite după o sintaxă relativ complexă. Se precizează numai că şi aici prin * se redă orice şir, dar un caracter oarecare (şi numai unul) se indică prin punct(.), ceea ce face ca pentru specificarea punctului ca şi caracter obişnuit să fie necesară “citarea” cu \. Principalele fanioane sunt: g (global) Înlocuieşte toate apariţiile tiparului în linia prelucrată, nu numai prima apariţie. n Înlocuieşte a n-a apariţie a tiparului (implicit n are valoarea l şi se admit valori până la 512). p Tipăreşte linia dacă s-a produs o înlocuire. Înlocuiri multiple în linie duc la tipăriri multiple ale liniei. Două exemple de comenzi sed sunt: sed s/Unix/UNIX/g czi.tex sed s/^$/''Linie goala''/fisier.txt Prima comandă înlocuieşte în fişierul czi.tex toate apariţiile lui Unix cu UNIX. Rezultatul este afişat în fişierul standard de ieşire, conţinutul lui czi.tex rămâne nemodificat. Pentru salvarea conţinutului modificat trebuie redirectată ieşirea standard către un fişier diferit de czi.tex. Prin a doua comandă, liniile goale din fişierul test.txt se înlocuiesc cu linii care conţin textul Linie goala. În comandă a fost necesară utilizarea ghilimelelor din cauza blancului din textul de înlocuire. Alte comenzi ale lui sed sunt: a) d - pentru ştergerea liniilor adresate; b) a - pentru adăugarea de text după o linie; c) i - pentru inserarea de text înaintea unei linii. Comanda grep(“General regular expression processing”). Sintaxă: grep[options] regexp [files] Efect: Căutarea de tipare în fişiere text; operează, ca şi sed, la nivel de linie. Comanda afişează în fişierul standard de ieşire liniile care conţin un şir ce corespunde expresiei regulate. Opţiunile principale sunt: -c Tipăreşte numai numărul de linii care corespund tiparului (expresiei regulate). -i Ignoră deosebirea între litere mari şi litere mici. -v Afişează liniile care nu corespund expresiei regulate. -n Tipăreşte liniile însoţite de numărul lor de ordine în fişier.

58

Comenzi UNIX

Exemplu: Aflarea identificatorului de proces sub care rulează browse-rul netscape, cu scopul de a termina execuţia programului, care s-a blocat şi nu mai răspunde la comenzi. ps aux | grep netscape Comanda expr Sintaxă: expr arg1 operator arg2 [operator arg3...] Efect: Evaluarea expresiilor. Comanda expr evaluează o expresie şi scrie rezultatul în fişierul standard de ieşire. Fiecare atom din expresie apare ca un argument distinct (trebuie separat de alţi atomi prin spaţii). Operanzii din expresii sunt fie numere, fie şiruri de caractere. Comanda forţează transformarea tuturor operanzilor în valori întregi sau în şiruri de caractere, funcţie de operaţia care trebuie aplicată. Uneori pentru şiruri trebuie utilizate mecanismele de citare. Operatorii apar fie sub formă de simboluri infix, fie sub formă de cuvinte cheie prefix. Este permisă utilizarea parantezelor pentru grupări. De remarcat însă că parantezele trebuie citate pentru a interzice shell-ului evaluarea lor. Codul de retur al comenzii este 0 dacă valoarea expresiei este diferită de 0 sau de null, 1 dacă expresia are valoarea 0 sau null, sau 2 dacă expresia nu este validă. Operatorii aritmetici acceptaţi sunt +, -, *, / şi %. Se respectă regulile de precedenţă obişnuite. Se pot utiliza următorii operatori relaţionali: =, !=, >, >=, < şi = 10 dă rezultatul 1 (true) dacă valoarea variabilei v la care se adaugă 5 este mai mare sau cel puţin egală cu 10. Pentru exemplele următoare se consideră că variabila de mediu v are valoarea program.c. Atunci: $ expr ’’ $v ’’: ’.* ’ dă rezultatul 9, numărul de caractere din v.

59

Sisteme de operare-Concepte avansate

$ expr ’’$v’’: ’\(.* \)’ dă rezultatul program.c (s-au folosit paranteze pentru încadrarea tiparului). $ expr ’’$v’’: ’\([a-z]* \)’ dă rezultatul program. Comanda chmod (“change mode” = schimbă modul) Sintaxă: chmod [-fR] mode filename Efect: Schimbarea drepturilor de acces la un fişier. Categorii de utilizatori: u - “user” (proprietar) g - grup o - “others” (ceilalţi utilizatori) a - “all” (toţi), echivalent cu combinaţia ugo Corespunzator fiecarei categorii, sunt setati 3 biti: bitul care indica dreptul de scriere, respectiv cel de citire si cel de executie. Specificarea modului de setare a drepturilor se poate face numeric sau simbolic. În cazul specificării numerice, se redau în octal biţii corespunzători pentru fiecare din cele patru categorii. Astfel, 755 este echivalent cu rwxr-xr-x. În cazul specificării simbolice, modul dorit de stare are forma: [cine] op drept [op drept... ] unde cine este o combinaţie de u , g, o, a Dacă se omite cine, valoarea implicită este a. Operaţiile op trebuie să fie: + pentru a adăuga un drept; - pentru a şterge un drept; = pentru a fixa explicit un drept. Drepturile se specifică prin literele: r - read w - write x - execute X - dă drept de execuţie daca fişierul specificat este catalog sau dacă alte clase de utilizatori au drept de execuţie; s- specifică “setuid” (împreună cu u) sau “setgid” (împreună cu g) t - specifică “sticky bit”. Opţiuni: -f: “forţează”, adică nu vor apare mesaje de eroare dacă nu se poate schimba modul unui fişier; -R: “recursiv”, deci comanda se aplica recursiv pentru toate fişierele cu numele indicate (generic). Exemplu: $ ls -l total 479

60

Comenzi UNIX -rwxr-xr-x -rw-r-r-

1 1

ionel ionel

401408 80208

Oct Oct

26 25

11:53 14:19

tar tr92.ps.gz

Pentru ca fişierul executabil tar să devină “setuid”, adică pe durata execuţiei sale utilizatorul efectiv să fie proprietarul acestui fişier, trebuie emisă comanda: $ chmod u+s tar În urma acestei comenzi descrierea fişierului listată prin ls -l va fi: $ ls -l tar -rwsr-xr-x

1

ionel

401408

Oct

26

11:53

tar

2. Comenzi pentru operaţii asupra proceselor Comanda ps (“process status” = starea proceselor) Sintaxa: ps [opţiuni] Efect: Listarea proceselor active în sistem. Instrucţiunea furnizează informaţii mai generale sau mai detaliate (funcţie de opţiunile folosite), despre procesele existente în sistem. Fără opţiuni, comanda listează câteva informaţii despre procesele care aparţin utilizatorului, aşa cum arată următorul exemplu: $ps PID 5203 5206 3849 4435

TT p3 p3 p9 p9

STAT S R IW IW

TIME 0:00 0:00 0:02 0:00

COMMAND -tcsh(tcsh) ps -tcsh(tcsh) man ps

Prima coloană afişată, cu antetul PID, reprezintă identificatorul procesului (pid), care identifică în mod univoc procesul pe durata existenţei acestuia în sistem. Coloana a doua, cu antetul TT (în alte implementări TTY) reprezintă terminatul de control, adică terminalul la care este “conectat” procesul. În exemplul dat, valorile p3 şi p9 corespund unor ferestre sau terminale virtuale dintr-o interfaţă grafică. A treia coloană indică printr-o secvenţă de litere starea procesului: R - running (în execuţie); S - sleeping (adormit) de mai puţin de 20 secunde; I - idle (inactiv), pentru procese adormite de mai mult de 20 secunde; W - swapped out, procese scoase din memoria principală; Z - zombie, procese terminate, care aşteaptă ca părintele lor să execute un apel wait(), pentru terminarea lor completă; N - nice, procese cu prioritate redusă. Coloana a patra, TIME, indică timpul de procesor folosit până în prezent de către proces (de regulă în minute:secunde). În ultima coloană (antetul COMMAND), se listează numele programului executat de către fiecare proces. În exemplul dat rezultă că utilizatorul are deschise două sesiuni (dacă numele shell-ului este precedat de caracterul - înseamnă că acesta este un shell de login) şi că într-o sesiune s-a executat comanda man ps iar în sesiunea mai recentă chiar comanda ps.

61

Sisteme de operare-Concepte avansate

Opţiuni: -a: determină afişarea de informaţii şi despre procesele altor utilizatori momentan conectaţi la sistem; -l: determină o afişare mai extinsa, incluzând câmpuri (coloane) cum sunt: UID: identificatorul numeric al utilizatorului (proprietarul procesului); F: fanioane care indică tipul de operaţii executate de proces; PPID: identificatorul procesului părinte; CP: factorul de utilizare a procesorului pe termen scurt, (folosit la planificarea procesului pentru execuţie); PRI: prioritatea procesului în sistem; NI: incrementul de planificare al procesului; SZ: dimensiunea combinata (în KB) a segmentelor de date şi stivă ale procesului; RSS: dimensiunea reală în memorie a procesului (în KB); WCHAN: evenimentul pe care procesul îl aşteaptă (o adresă în sistem sau un nume simbolic). Ieşirea produsă cu opţiunea -l pentru exemplul de mai sus este: F

VID

PID

PPID

CP

MI

HI

20488201

200

5203

5202

0

15

0

20000001

200

5247

5202

35

33

0

20088200

200

3849

3848

0

15

0

20008000

200

5217

3849

0

5

0

SZ 28 8 20 4 28 0 36

RS S 36 4 46 0 0 0

WCHAN

STAT

karnelm a

S R

karnelm a child

IW IW

T T p 3 p 3 p 9 p 9

TIME

COMMAND

0:00

tcsh(tcsh) ps -l

0:00 0:02 0:00

tcsh(tcsh) man ps

- u: determină afişarea rezultatelor după următorul format: USER PID %CPU %MEM SZ RSS TT STAT START TIME COMMAND unde noile coloane au semnificaţia: USER: numele proprietarului fişierului; %CPU: utilizarea procesorului de către proces; este o valoare medie pentru până la l minut de timp real; %MEM: procentul de memorie reală folosit de proces; START: timpul când procesul a fost creat (daca e în aceeaşi zi) sau data creării. Reluând exemplul de mai sus se obţine: $ ps -u USER PID ionel 5339 ionel 5349 ionel 3849 ionel

5203

%CPU 0.0 0.0 0.0

%MEM 0.0 2.1 0.0

SZ 36 204 280

RSS 0 460 0

TT p9 p3 p9

STAT IW R IW

START 13:24 13:26 Oct 13

TIME 0:00 0:00 0:04

0.0

1.7

288

368

p3

S

12:36

0:01

COMMAND man ps ps -u tcsh(tcsh) tcsh(tcsh)

-e: această opţiune determină ca la fiecare comandă să se afişeze atât argumentele

62

Comenzi UNIX

cât şi ambianţa de execuţie (variabilele de mediu şi valorile acestora); -x: în informaţiile afişate se includ şi procesele fără terminal de control (procesele sistem, cum ar fi: swapper, pagedaemon etc.). Informaţiile furnizate de comanda ps pot fi utilizate în diverse moduri. Frecvent însă valoarea PID obţinută prin ps pentru o anumită comandă (proces) va fi folosită pentru terminarea forţată a procesului, cum se arată la comanda următoare. Comanda kill(“omoară”, termină) Sintaxa: kill [opţiuni] [pid] Efect: Terminarea forţată a execuţiei unui proces Argumentul pid este de fapt obligatoriu, cu o singură excepţie: dacă se foloseşte opţiunea -l, cum se va descrie mai jos. În absenţa unei opţiuni, comanda kill termină execuţia proceselor al căror pid este menţionat de parametru. De exemplu: $ kill 5418 6230 va produce terminarea proceselor 5418 şi 6230, dacă acestea mai există în sistem şi aparţin utilizatorului care emite comanda. Numai superutilizatorul poate termina orice proces din sistem. Utilizarea lui kill este de regulă precedată de ps pentru a afla pid-urile proceselor care din diverse motive trebuie terminate. În realitate, comanda kill trimite un semnal la procesele identificate. În absenţa opţiunilor, semnalul transmis este TERM (“terminate”) care are ca efect terminarea execuţiei proceselor. Comanda permite şi transmiterea altor semnale a căror identitate se specifică în câmpul de opţiuni, fie sub formă numerică, fie sub formă simbolică. Simbolurile care pot fi utilizate se obţin astfel: $ kill -l HUP INT QUIT ILL TRAP IOT EMT FPE KILL BUS SEGV SYS PIPE ALRM TERM URG STOP TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALARM PROF WINCH LOST USR1 USR Simbolurile sunt listate aici în ordinea identificatorilor numerici ai semnalelor. În absenţa oricărei opţiuni se consideră că este transmis semnalul TERM(15), deci comenzile: $ kill -TERM 5418 6230 $ kill -15 5418 6230 $ kill 5418 6230 sunt echivalente. Dintre celelalte semnale sunt de remarcat: -HUP(1) (“Hang up” - pune receptorul în furcă - denumire cu justificare istorică)folosit frecvent de către procesele demon pentru a citi din nou fişierele lor de configurare; KILL (9) - cu efect sigur de terminare a unui proces.

63

Sisteme de operare-Concepte avansate

Comanda w(“what” = ce). Sintaxă: w [opţiuni] [utilizator] Efect: Listarea activităţii diverşilor utilizatori. Realizează un sumar al activităţii curente din sistem(incluzând procesul curent) al fiecărui utilizator. Implicit (fără opţiuni şi parametri) comanda se referă la toţi utilizatorii şi produce o afişare în format lung, ca în exemplul următor: * w 2:42 pm up 3 days, 23:55, 5 users, load avarage: 0.19, 0.03.00 User tty login@ idle JCPU PCPU what romeo ttyp0 Fri 8am 3 days 53 3 -tcsh vcretu ttyp2 12:31pm 2:11 ionel ttyp3 12:36pm 3 1 H romeo ttyp4 Fri 10am 3 days 31 4 -tcsh romeo ttyp8 Sun 9am 23:45 -

Prima linie afişată de comandă conţine: timpul curent, de cât timp este pornit sistemul, câţi utilizatori sunt conectaţi la sistem şi încărcările medii calculate pentru ultimele l, 5 şi 15 minute. Câmpurile afişate pentru fiecare utilizator sunt: - numele de login al utilizatorului; - numele terminalului de la care utilizatorul a început sesiunea; - momentul începerii sesiunii; - intervalul de când utilizatorul nu a mai introdus comenzi de la terminal; - timpul de procesor folosit de toate procesele şi fiii lor, generate de la acest terminal (în minute:secunde); - timpul de procesor folosit de procesele curente; - numele şi argumentele proceselor curente. Opţiunea -h (“header” = antet) produce o formă prescurtată de afişare, din care lipseşte prima linie. Opţiunea -s (“short” = scurt) determină omiterea coloanelor: numele terminalului, timpii de login şi procesor şi argumentele comenzilor. Dacă în comandă se indică drept argument un nume de utilizator, se obţin informaţii numai despre acel utilizator. Comanda top Sintaxă: top Efect: Listarea dinamică a proceselor din sistem. Spre deosebire de ps şi w care dau o imagine statică ( la un anumit moment) asupra activităţii din sistem, top afişează procesele din sistem şi actualizează periodic această informaţie. Ca şi în cazul lui ps, informaţia afişată variază de la o implementare la alta. Perioada de actualizare este implicit de 5 secunde, dar poate fi modificată printr-o opţiune. În cazul Linux-ului se obţine : 12:26am up 25 min, 0 users, load average: 0.00, 0.01

64

Comenzi UNIX 0.09 56 processes: 55 sleeping, 1 running, 0 zombie, 0 stopped CPU states: 1.9% user, 1.7% system, 0.0% nice, 96.2% idle Mem: 30680K av, 29792K used, 888K free, 28512K shrd, Swap: 72288K av, 6568K used, 65720K free PID 679 521 575 651 658 1 2 3 4 5 6 216 269 280 296 312 332

USER

PRI

ione l root

13

0

5

0

ione l ione l ione l root root root root root root

0

0

0

0

1

0

0 0 0 0 0 -20 0 0 0 0

0 0 0 0 0 20 0 6 0 0

0 0

0 0

bin root root daem on root root

MI

SIZ E 102 8 928 8 123 6 318 4 328 8 124 0 0 0 0 0

RSS

SHARE

STAT

992K buff 11528K cached

1028

824

R

LI B 0

%CPU

%MEM

2.3

3.3

TIME COMMAND

8272

920

S

0

0.7

26.9

1112

1016

S

0

0.1

3.6

0:00 gnome-smprox

3184

2524

S

0

0.1

10.3

0:00 deskguide_ap

3288

2596

S

0

0.1

10.7

0:00 gnome-termin

72 0 0 0 0 0

60 0 0 0 0 0

S SW SW SW SW SW<

0 0 0 0 0 0

0.0 0.0 0.0 0.0 0.0 0.0

0.2 0.0 0.0 0.0 0.0 0.0

0:03 0:00 0:00 0:00 0:02 0:00

init kflushd kupdate kpiod kswapd mdrecoveryd

88 208 368 80

0 144 0 0

0 124 0 0

SW S SW SW

0 0 0 0

0.0 0.0 0.0 0.0

0.0 0.4 0.0 0.0

0:00 0:00 0:00 0:00

portmap syslogd klogd atd

240 76

188 0

156 0

S SW

0 0

0.0 0.0

0.6 0.0

0:00 crond 0:00 inetd

0:01 top 0:14 X

În timpul executării, comanda top recunoaşte câteva “subcomenzi” sub forma unor caractere unice. Prin subcomanda h se obţine o listă a subcomenzilor acceptate. Subcomanda q termină execuţia lui top. O altă subcomandă este k prin care se poate termina execuţia unui proces; utilizatorului i se cere să introducă pid-ul procesului ce urmează a fi terminat. 3. Comenzi de informare şi administrare Comanda date Sintaxă: date [yymmddhhmm [.ss]] Efect: Afişarea datei şi orei curente.  În varianta fără argument comanda afişează data şi ora curentă a sistemului: $ date Tue Oct 15 08:36:42 EET 1996 Se observă că în sistemele Unix este precizat şi “meridianul” pentru care este raportată ora (în exemplu: EET = East European Time). Acest meridian este stabilit

65

Sisteme de operare-Concepte avansate

la generarea sistemului.  Varianta cu argument a comenzii date este accesibilă numai superutilizatorului şi serveşte la fixarea orei şi datei curente. În acest sens va fi vorba de fapt de o comandă de administrare. Pot fi omise cifrele care corespund anului şi lunii curente. Comanda who (“cine”) Sintaxă: who Efect: Afişarea utilizatorilor aflaţi momentan în sesiune, fără detalii despre procesele acestora. Exemplu: Afişarea terminalului la care sunt conectaţi utilizatorii şi datei începerii sesiunii curente $ who stoianov romeo ionel romeo crisan ioana

console ttyp0 ttyp1 ttyp5 ttypa ttypb

Oct Oct Oct Oct Oct Oct

15 11 14 11 14 14

08:45 08:40 12:36 11:47 17:36 17:51

(pppsrv1) (b512) (193.226.8.17:0.0) (routeret)

Informaţiile sunt extrase dintr-un fişier sistem, /etc/utmp (/var/run/utmp în alte implementări), actualizat la fiecare intrare şi ieşire din sesiune. O variantă a acestei comenzi, whoami poate fi utilizată pentru a afla numele de login sub care lucrează momentan utilizatorul. Comanda este utilă dacă se foloseşte în combinaţie cu su, care va fi descrisă în continuare. În cazul sistemelor conectate în reţele locale, comanda rusers produce o listă a utilizatorilor momentan conectaţi la toate sistemele din reţeaua locala: $ rusers tempusII1 tempus5

romeo ionel ionel ionel stoianov romeo ionel romeo crisan ioana

Comanda rusers acceptă ca argument un nume de calculator, afişând în acest caz numai utilizatorii momentan în sesiune la acel calculator. O simplă listă de nume a utilizatorilor de la acelaşi calculator de la care se emite comanda este produsă de comanda users: $ users alex ioana ioana ionel romeo romeo stoianov Comanda last Sintaxa: last[-number][-f filename][name]...][tty...] Efect: Afişarea utilizatorilor care au avut deschise sesiuni pe calculatorul curent, în ultima perioadă de timp.  Fără opţiuni şi argumente, comanda produce o listă a tuturor sesiunilor, înregistrate în fişierul sistem /var/adm/wtmp (sau/var/log/wtmp în unele implementări).  Opţiunea -number permite limitarea listei la ultimele number sesiuni.  Opţiunea -f filename ar specifica un alt fişier decât wtmp, în care să se caute înregistrările.

66

Comenzi UNIX

 Prin argumentul name... pot fi indicate numele de login pentru care se doreşte listarea, iar prin tty... se pot specifica terminalele care prezintă interes. Exemple de utilizare: $ last -3 console ionel console :0 ionel console :0 root console :0

Thu Tue Tue

Oct Oct Oct

10 8 8

14:50 09:04 08:55 -

still crash 09:04

logged in (2+05:42) (00:09)

S-a cerut listarea celor mai recente 3 intrări în sesiune de la consola sistemului. Ultimul (cel mai recent) utilizator este încă în sesiunea care a început la momentul afişat. Penultima sesiune s-a terminat după 2 zile, 5 ore şi 42 de minute printr-o cădere de sistem. Antepenultima sesiune a durat 9 minute.

$ last -3 ftp7349 ftp ttyp6 sorin ttyp1 adriana

tempus8.cs.utt.ro tempusII1.utt.ro tempus5.utt.ro

Thu Thu Thu

Oct Oct Oct

10 10 10

14:55 14:02 14:00 -

still 14:31 still

logged in (00:29) logged in

Comanda este rulată pe un sistem care este şi server de fişiere cu acces anonim (prima linie, ftp7439 reprezintă un astfel de transfer). $ last -2 reboot reboot system boot reboot system boot

Thu Fri

Oct Oct

10 4

14:56 15:26

Numele de login reboot poate fi folosit pentru a afla intrările din wtmp referitoare la ultimele încărcări ale sistemului (după căderi). Comanda du(“disk usage” = utilizare disk) Sintaxă: du [-s] [-a] [nume-fisier...] Efect: Afişarea spaţiului liber/ocupat într-un catalog sau sistem de fişiere.  Dacă un fişier are legături multiple, el este luat în considerare o singură dată.  Opţiunea -s determină afişarea doar a totalului general pentru numele de fişiere date ca argumente.  Opţiunea -a generează câte o intrare pentru fiecare fişier.  Dacă nu apare nici o opţiune se afişează totalul numai pentru cataloage.  În absenţa argumentelor (nume de fişier), comanda se aplică asupra catalogului curent. Exemplu: $ ls -ali total 163 134666 drwxr-xr-x 216317 drwxr-xr-x 134555 -rw-r--r-134557 drwxr-xr-x 134555 -rw-r--r--

3 37 2 2 2

ionel ionel ionel ionel ionel

512 2560 80208 512 80208

Oct Oct Oct Oct Oct

25 25 25 25 25

14:20 14:18 14:19 14:20 14:19

. .. art.ps.gz subdir tr92.ps.gz

Se observă că există 2 legături spre acelaşi fişier în acest catalog: nodul index 134556 apare la ambele legături, iar ls raportează la total suma lungimilor afişate pentru toate intrările. Exemplu:

67

Sisteme de operare-Concepte avansate

$ du -a produce rezultatul: 79 79 80 160

./tr92.ps.gz ./subdir/art.ps.gz ./subdir .

Examinarea acestui rezultat arată că spaţiul ocupat de fişierul cu 2 legături este raportat o singură dată (sub numele legăturii care a fost creată prima). Comanda df (“disk free” = disc liber) Sintaxă: df [-a] [-i][-t type][filesystem...] [filename...] Efect: Afişarea spaţiului liber şi ocupat pentru un întreg disc (sau partiţie). În absenţa oricăror opţiuni şi argumente, comanda afişează situaţia spaţiului pentru toate sistemele de fişiere montate Exemplu: * df Filesystem /dev/sd0a /dev/sd0g tempus0:/home/tempus tempus0:/usr/local

kbytes 7735 151399 492613 492613

used 5910 128358 410853 408244

avail 1052 7902 32499 35108

capacity 85% 94% 93% 92%

Mounted on / /usr /home/tampus /usr/local

Totalul coloanelor “used” şi “avail” este mai mic decât coloana “kbytes”, pentru că sistemul rezervă o parte din spaţiul partiţiei pentru informaţii de control. Dacă se folosesc argumente filesystem sau filename raportul se referă numai la sistemele de fişiere prezente în comandă. Rezumat. Acest capitol prezintă cele mai importante dintre comenzile pe care utilizatorii le pot adresa interfeţelor UNIX/LINUX. Comenzile pentru operaţii asupra cataloagelor şi fişierelor prezintă o serie întreagă de comenzi de creare a structurilor de directoare, de parcurgere a acestora, de schimbare a directorului curent, de copiere de fişiere şi structuri de directoare şi fişiere, precum şi de ştergere şi mutare a acestora. Sunt evidenţiate numărul mare de opţiuni şi parametri, asemănarea cu unele comenzi din MS-DOS, precum şi elementele specifice ale comenzilor UNIX. În continuare sunt prezentate comenzi pentru operaţii asupra proceselor. Aceste comenzi realizează o serie întreagă de acţiuni, printre care: - Listarea proceselor active în sistem(Comanda ps). - Terminarea forţată a execuţiei unui proces(Comanda kill) - Listarea activităţii diverşilor utilizatori(Comanda w). - Listarea dinamică a proceselor din sistem(Comanda top). Comenzile de informare şi administrare ajută atât utilizatorul obişnuit cât şi superutilizatorul să obţină o serie întreagă de informaţii despre: - data şi ora curentă(Comanda date);

68

Comenzi UNIX

- utilizatorii aflaţi momentan în sesiune(Comenzile who, rusers) sau utilizatorii care au avut deschise sesiuni pe calculatorul curent, în ultima perioadă de timp(Comanda last ); - afişarea spaţiului liber/ocupat într-un catalog sau sistem de fişiere(Comanda du), Afişarea spaţiului liber şi ocupat pentru un întreg disc (sau partiţie)(Comanda df ). Teste de autoevaluare. I.

Probleme propuse

1. Listaţi conţinutul directoarelor /, /bin, /usr, /etc, /usr/include. Acolo unde este cazul, paginaţi listarea (ls | less). 2. Căutaţi, în fişierul /usr/include/stdio.h, textul printf. 3. Creaţi, în directorul personal, următoarea structură de directoare şi fişiere: (dir. personal) | +-- abc | +-- x (fisier) | +-- y (fisier) | +-- t1 (fisier) | +-- t2 (fisier) | +-- t3 (fisier) | +-- t (director) | +-- a (fisier) | +-- b (fisier) | +-- zz (director) | +-- x (fisier) | +-- tt (director) 4. Copiaţi directorul abc cu tot conţinutul său (recursiv) ca subdirector al lui zz (va rezulta un subdirector abc în zz) . 5. Copiaţi conţinutul lui abc în directorul zz fără a suprascrie fişierele cu acelaşi nume (x, în cazul nostru). 6. Copiaţi fişierele t1 şi t2 din abc în tt (folosind specificator generic) 7. Creaţi un director pe care să vă daţi dreptul x fără a avea dreptul r. Creaţi în el un fişier. Ce observaţi? Daţi-vă apoi dreptul r şi luaţi-vă dreptul x. Ce observaţi ?

69

Sisteme de operare-Concepte avansate

8. Daţi drepturile potrivite astfel încât oricine să poată vizualiza conţinutul directoarelor abc şi abc/t, să poată adăuga fişiere în abc/t, să poată citi fişierele x, y, t1, t2, t3 din abc dar să nu poată citi fişierele a şi b din abc/t . 9. Listaţi în format lung fişierele t, t1, t2, t3 din abc (să se vadă drepturile de acces asupra lui t, nu asupra fişierelor din el. 10. Comanda copy /dev/zero /dev/null este un fel de 'ciclu infinit' (nu se termină). Lansaţi-o, mutaţi-o în background, listaţi procesele active, terminaţi comanda (în ambele variante: mutată în foreground şi oprită cu ^C, sau cu kill). 11. Creaţi în tt un link simbolic cu numele c către abc. Exploraţi funcţionarea lui, vis-a-vis de comenzile cd si pwd. 12.Creati un fisier text in care veti scrie comenzile cu care ati rezolvat cerintele de mai sus, precum si raspunsul la intrebari.

70

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF