Comenzi Unix.pdf

6

Click here to load reader

description

Unix

Transcript of Comenzi Unix.pdf

Page 1: Comenzi Unix.pdf

Laborator Sisteme de Operare

- Comenzi UNIX - Shell Unix

Shell-ul este principala interfaţă de comunicare între utilizator şi sistemul de operare. Deşi, în mod intuitiv, shell-ul este identificat cu o interfaţă în linia de comandă, poate fi şi o interfaţă grafică. Un exemplu îl constituie aplicaţia Explorer a sistemului de operare Windows.

În continuare ne vom oferi la interfaţa de tip CLI (Command Line Interface) oferită de sistemele de operare UNIX. Deşi este mai greu de învăţat decât o interfaţă grafică, CLI permite un control mult mai bun al sistemului. Mai mult, shell-ul dispune de un limbaj de programare.

Un program shell, denumit script shell, este folosit pentru a îmbina mai multe comenzi şi diverse structuri de control pentru a obţine o nouă funcţionalitate sau pentru automatizarea sarcinilor. În acest fel un script shell este un instrument esenţial pentru sarcinile administrative şi alte rutine repetitive care nu necesită funcţionalităţi ale unor limbaje de programare avansate.

În cadrul laboratoarelor ne vom referi la shell-ul Bash (Bourne Again SHell). Există şi alte shell-uri pe sisteme UNIX precum tcsh, zsh, ash, etc. De curând, Microsoft oferă PowerShell pe sistemele Windows. PowerShell are o abordare orientată pe obiecte şi un set de funcţionalităţi care acoperă nevoile de administrare ale unui sistem Windows. Exemplu “Hello world”

Un script simplu care doar afişează mesajul "Hello, World!" este următorul: #!/bin/bash # afiseaza mesaj echo "Hello, World!" exit 0

Este necesar ca fişierul să fie executabil pentru a putea fi interpretat. Acest lucru se poate realiza cu ajutorul comenzii chmod care conferă in acest caz dreptul de execuţie proprietarului fişierului :

$> chmod u+x hello.sh

Şirul #! de la începutul fişierului poartă denumirea de shebang. Acesta indică

sistemului ce program va fi invocat pentru a interpreta scriptul. Un script poate fi rulat si prin precizarea explicită a interpretorului în linia de comandă:

$> bash hello.sh

În această situaţie nu este nevoie ca scriptul sa fie executabil şi nici nu este nevoie de prezenţa liniei #!/bin/bash. Caracterul # semnifică începutul unui

Page 2: Comenzi Unix.pdf

comentariu care durează pană la sfârşitul liniei. Comanda exit este folosită pentru a indica valoarea de retur a scriptului. Implicit aceasta valoare este 0 (cu alte cuvinte nu era necesar să apară în script).

Comenzi UNIX uzuale Comanda ls Listează conţinutul directoarelor. Sintaxa: ls [opţiuni] director Opţiuni: -d // afişează numai directoarele din directorul curent. -l // afişează informaţiile în format lung: drepturi de acces, număr de legături, mărimea, etc. -s // afişează numărul de blocuri pentru fiecare fişier. -t // fişierele sunt sortate după data ultimei actualizări Exemplu: ls -lt /usr Comanda chmod Schimba drepturile de acces la un fişier ordinar sau director. Sintaxa: chmod atr fişier(e) atributul se exprimă ca un număr octal din patru cifre sau printr-o combinaţie de forma: [u | g | o | a] [+ | - | =] [r | w | x ] + adaugă permisiune ; - şterge permisiune; = atribuie permisiune u - proprietarul ; g – grupul ; o - restul utilizatorilor ; a – toţi utilizatorii r – Read ; w – Write ; x – eXecute Exemplu: chmod o-x f1 // Şterge dreptul la execuţie pentru restul utilizatorilor. chmod 0774 f1 // Fisierul f1 va avea permisiunile de acces rwxrwxr--. Alte comenzi uzuale

cd - schimbă directorul curent.

cp - copiază un fişier în altul sau fişiere într-un director.

echo - afişează argumentele sale la terminal. Comanda se utilizează în special în fişiere de comenzi pentru a afişa diferite mesaje.

man - afişează conţinutul manualului programatorului UNIX, legat de un anumit subiect.

Page 3: Comenzi Unix.pdf

mkdir - creează un director. Intrările . şi .. sunt create automat.

mv - redenumeşte un fişier sau mută un fişier într-un director.

pwd - afişează numele complet al directorului curent.

rm - sterge un fişier sau director.

rmdir - sterge un director dacă acesta este vid.

who - afişează numele utilizatorilor conectati în sistem.

Concatenarea comenzilor

Shell-ul prezintă o serie de operatori folosiţi pentru îmbinarea comenzilor. Următorii operatori sunt folosiţi pentru concatenarea diverselor comenzi:

command1 ; command2 - comenzile sunt executate secvenţial (una după alta) command1 && command2 - command2 este executată numai dacă command1 are valoare de retur 0 command1 || comand2 - command2 este executată numai dacă command1 are valoare de retur nenula Inlantuirea comenzilor

Înlănţuirea comenzilor se realizează folosind operatorul | (pipe). In aceasta situaţie ieşirea unei comenzi devine intrarea pentru cealaltă. De exemplu: ls -l | more aplică filtrul more pe rezultatul comenzii ls. Redirectări

Comenzile pot fi redirectate dinspre intrarea standard, ieşirea standard si eroarea standard către un fişier. O parte din operatorii folosiţi pentru redirectare sunt:

> - redirectarea ieşirii standard 2> - redirectarea erorii standard 2>&1 - redirectarea erorii standard in ieşirea standard. < - redirectarea intrării standard Pattern matching

In interacţiunea cu sistemul de fişiere se doreşte selectarea rapida a mai multor fişiere după câteva caracteristici de nume comune. Operaţia efectuata de shell se numeşte pattern matching. Exista următoarele caractere speciale: * - se potriveşte cu orice sir de caracter, inclusiv şirul vid ? - se potriveşte cu un singur caracter [...] - se potriveşte cu unul din caracterele din set; poate fi de genul [abc] sau [a-gA-G] sau [0-5h-zH-Z]

Page 4: Comenzi Unix.pdf

Comenzi utile in elaborarea scripturilor Comenzile echo, cat şi tac

Comanda echo este folosită pentru a afişa un şir de caractere, o variabilă la ieşire standard. Comanda cat afişează conţinutul unui fişier sau al intrării standard. Comanda tac afişează conţinutul unui fişier inversat. Comanda find

Comanda find este o comandă fundamentală pentru parcurgerea intrărilor dintr-o ierarhie a sistemului de fişiere. Opţiunea exec este folosită pentru a rula o comandă pentru fişierele găsite. Şirul {} este special şi se înlocuieşte cu numele fişierului găsit de find. Caracterul ; (citat cu ajutorul backslash) indică încheierea comenzii de executat. Exemplu următor caută toate fişierele sursa C din arborescenta directorului curent si afişează câteva informaţii despre acestea : find . –name « *.c » -exec ls –l {} \; Filtre de text

Variabilele, structurile de control si procedurile sunt întâlnite in toate limbajele de programare. Ce face insa un script shell indicat pentru sarcini administrative si repetitive este posibilitatea de îmbinare a comenzilor simple, de lucru cu fişierele sistemului pentru a obţine informaţiile dorite si pentru a adăuga o noua funcţionalitate. De obicei aceste sarcini necesita o procesare sofisticata. In aceste situaţii se folosesc filtrele de text. Comenzi folosite ca si filtre de text sunt head, tail, grep, sort, tr, cut. Comenzile head şi tail

Cele doua comenzi sunt folosite pentru afişarea numai a primelor sau a ultimelor linii de text din cadrul unui fişier. Sintaxa lor este asemănătoare: head [-n lines] files tail [-n lines] files

Primul argument, daca exista, afişează primele, respectiv ultimele n linii din text. Lipsa acestuia impune n = 10. In cazul comenzi tail o opţiune utila este -f care menţine fişierul de vizualizat deschis pe măsură ce programele scriu in el, spre exemplu pentru a vizualiza un fişier de log pe măsură ce informaţiile sunt scrise in el. Comanda grep

Comanda grep permite localizarea liniilor intr-un fişier care conţine o expresie căutată. Sintaxa de baza este :

$ grep word file file este numele fişierului in care vrem sa găsim cuvântul word. Un exemplu de utilizare este:

Page 5: Comenzi Unix.pdf

grep -r -l "#include <sys/wait.h>" .

Când nu se precizează un fişier se foloseşte intrarea standard, grep devenind ideal pentru lucrul cu pipe-uri. O alta opţiune utila este -v. Aceasta permite căutarea acelor linii care NU conţin cuvântul transmis ca parametru. Opţiunea -n permite afişarea numărului liniei care conţine cuvântul căutat. Comanda tr

Comanda tr (transliterate) este folosita pentru a translata caracterele dintr-un set de caractere intr-un alt set de caractere. Sintaxa de baza este: tr 'set1' 'set2'

Daca dorim sa translatam literele mari in litere mici, folosim: $ tr 'A-Z' 'a-z' < file

In cazul in care setul set2 are mai puţine caractere decât setul set1 acestea vor fi multiplicate pentru a ajunge la aceeaşi dimensiune. Următorul pas ar fi eliminarea spatiilor redundante. Opţiunea -s (squeeze) înlocuieşte o succesiune de doua sau mai multe caractere cu unul singur. Opţiunea –c (complement) realizează complementarea primului sir de caractere (set1). Opţiunea –d (delete) elimina toate caracterele din fişier ce sunt prezente in primul set. Comanda sort

Comanda sort este utilizata pentru sortarea liniilor alfabetic. O opţiune utila in cazul sort este sortarea după valoarea numerica a şirurilor. Pentru aceasta folosim -n. De multe ori ieşirea apare intr-o forma in care elementele de sortat sunt intr-o alta coloana (nu prima, cea folosita implicit de sort). Pentru aceasta se poate folosi opţiunea -k (key). Sintaxa, in cazul folosirii acestei opţiuni, este:

sort -k start, end file

Start este coloana de start a cheii, iar end este coloana de stop a cheii. Prima coloana este cea după care se face sortarea, iar, in cazul in care sunt doua sau mai multe elemente egale, se face deosebirea intre acestea folosind coloana următoare. Comanda wc

Comanda wc (word count) este folosita pentru a contoriza numărul de linii, de cuvinte sau de caractere dintr-un text sau de la intrarea standard. Pentru aceasta i se pot specifica opţiunile -c, -w, -l. Comanda cut

Comanda cut selectează numai anumite părţi (coloane) ale fişierului de intrare sau ale intrării standard. Sintaxa cea mai folosita este: cut -d delim -f fields

Page 6: Comenzi Unix.pdf

Folosindu-se delimitatorul delim se vor selecta numai câmpurile fields. Exemplu următor selectează primul si al treilea câmp din fişierul de mai jos:

Astazi e primul laborator Exersam comenzi Unix Maine invatam Shell

Cut –d “ ” –f1,3 Astazi primul Exersam Unix Maine Shell

Exercitii propuse 1. Afişaţi numele tuturor fişierelor prezente in arborescenta directorului curent care au extensia « .c ». 2. Calculaţi numărul de fişiere cu extensia « .c » din arborescenta directorului curent. 3. Ştergeţi toate fişierele cu extensia « .txt » care nu sunt vide din arborescenta directorului curent. 4. Calculaţi suma numerelor de caractere corespunzătoare tuturor fişierelor din directorul curent. 5. Calculaţi numărul total de linii care conţin un anumit sir de caractere (ales de voi) din toate fişierele directorului curent. 6. Calculaţi numărul de linii ce conţin cuvântul daemon intre primele 20 de linii ale fişierului /etc/passwd. 7. Afişaţi caracteristicile celui de-al treilea obiect (fişier sau director) din directorul curent, obiectele fiind ordonate in ordine cronologica a ultimei modificări. 8. Calculaţi numărul de vocale dintr-un fişier dat. 9. Calculaţi numărul de apariţii ale unui sir de caractere (fără spatii) dintr-un fişier. Nu se va număra decât o singura apariţie a motivului căutat intr-un cuvânt din fişier (ex. şirul « ba » in cuvântul “baba babababa ba” apare de 3 ori). De asemenea, este posibil ca motivul căutat sa apară de mai multe ori in cadrul aceleiaşi linii intr-un fişier. Ca separator se va considera spaţiu. 10. Listaţi pentru toate directoarele conţinute in directorul curent următoarele informaţii : numele proprietarului, numele directorului, data ultimei modificări. 11. Calculaţi lungimea celei mai lungi linii dintr-un fişier dat.