Laboratorul 10 - Investigarea securității sistemului

Concepte

Comandă Descriere scurtă
cat afișare conținut fișier
seq generare secvență de numere
grep extrage linii care conțin o anumită expresie regulată
cut extragere anumite coloane
sed filtru de text avansat, folosit pentru substituții
wc contorizare număr de linii, cuvinte sau caractere
head afișare a primelor linii sau caractere
tail afișare a ultimelor linii sau caractere
for parcurgere listă de elemente pentru aplicarea de comenzi pentru fiecare element în parte
if condiție de execuție a unor comenzi
$(comm) expandarea unei comenzi (command expansion) - înlocuirea cu output-ul comenzii
comm1 | comm2 legarea a două comenzi: output-ul primei comenzi devine input pentru cea de-a doua comandă
$var sau ${var} valoarea variabilei var
${#var} lungimea valorii variabilei var (în caractere)
${var:2:3} un subșir al valorii variabilei var: de la indexul 2 se extrag 3 caractere

Pentru acest laborator vom folosi comenzi și noțiuni prezentate în laboratoarele de până acum în special laboratorul trecut (Laborator 07 - Automatizarea în linia de comandă). Vor fi puține comenzi nou introduse; cel mai mult ne va interesa cum, dându-se o situație practică, vom putea folosi shell-ul pentru automatizare.

Automatizarea sarcinilor se referă la delegarea / degrevarea acțiunilor utilizatorilor către programe în sistemul de calcul. Un program va face automat, de sine stătător, acțiuni pe care le-ar face utilizatorul, rezultând în timp mai puțin consumat de utilizator.

Acțiunile care sunt candidate pentru automatizare sunt în general acțiuni repetitive, nu foarte simple și neinteractive. Automatizarea acestora va elibera utilizator de la executarea repetată, plictisitoare, manuală a acestora.

Perspective pentru automatizare

Automatizarea sarcinilor urmărește eficiență, în special temporală. Cu cât face mai rapid acțiuni repetitive, cu atât este mai bine. Acțiunile repetitive necesită interacțiune minimă cu utilizatorul, pentru a eficientiza timpul

Când automatizăm, folosim scripting și funcționalități existente. Un principiu esențial al automatizării este don't repeat yourself (nu reinventăm roata). Dacă există comenzi sau funcționalități existente, le folosim pe acelea. Altfel spus, urmărim atât eficiența execuției cât și eficiența dezvoltării.

Eficiența execuției o putem realiza nu doar prin scripting, ci și prin acțiuni precum:

  • folosirea de scurtături de taste
  • folosirea funcționalităților de tipul command completion sau history search
  • folosirea de alias-uri de comenzi
  • folosirea de șabloane: globbing sau expresii regulate (regular expressions)

Atunci când folosim scripting în shell, ne folosim de funcționalități existente ale shell-ului, pe care le vom descrie mai jos.

Scripting

Scripting presupune folosirea unui limbaj interpretat (numit limbaj de scripting). Acesta poate fi un limbaj precum Python, Perl sau Ruby sau poate fi chiar shell-ul CLI (interpretorul de comenzi). Limbajele de scripting au avantajul dezvoltării rapide: adăugăm și testăm rapid funcționalități noi.

Shell scripting are avantajul folosirii comenzilor existente în shell (comenzi de lucru cu fișiere, cu procese, comenzi de filtrare de text). Pentru acțiuni rapide (de tipul quick'n'dirty), shell scripting este o soluție foarte bună. Atunci când avem prelucrări numerice sau prelucrări de șiruri, shell scripting poate fi insuficient și este indicat să apelăm la un limbaj de scripting mai complet, precum Python, Ruby sau Perl.

Funcționalități shell

Funcționalitățile shell-ului sunt folosite în eficiența rulării comenzilor și în automatizare. Le-am folosit și amintit pe parcursul ultimelor laboratoare, în special în laboratorul trecut. Astfel de funcționalități sunt:

  • redirectarea comenzilor în fișiere, folosind operatorii de redirectare: >, <, >>
  • redirectarea ieșirii unei comenzi către intrarea altei comenzi: operatorul | (pipe)
  • variabile shell
  • escaping folosind backslash, ghilimele sau apostrofuri

Pe parcursul acestui laborator vom folosi funcțioalități ale shell-ului care sunt în special folosite în shell scripting:

  • expresii regulate
  • argumente în linia de comandă
  • comenzi interne shell pentru controlul fluxului: if, for, while

Automatizarea prin shell scripting

Automatizarea prin shell scripting presupune, în mod uzual, o secvență de comenzi. Aceste comenzi sunt adăugate într-un script unde vor fi rulate la comun, fără a fi nevoie de rularea manuală a fiecărei comenzi.

Pentru a configura rulare unei secvențe de comenzi putem condiționa rularea scriptului folosind variabile sau argumente în linia de comandă. Acestea pot genera un comportament diferit al scriptului în funcție de valorile lor.

Pe baza variabilelor, argumentelor din linia de comanda sau datelor de intrare, un script poate lua decizii condiționate. Verificarea unei condiții poate duce la un comportament sau altul.

În rularea unui script adesea vom dori ca o acțiune să țintească mai multe fișiere sau procese sau șiruri. Pentru aceasta, vom urmări folosirea de bucle pentru parcurgerea de liste de elemente.

Comenzile folosite pot primi ca argument sau la intrarea standard ieșirea altor comenzi. În shell scripting folosim funcționalități de înlănțuire a comenzilor precum command expansion sau pipe-uri ducând la rezultate mai complexe.

info1/laboratoare/10.txt · Last modified: 2021/01/19 12:59 by alexandru.vochescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0