Sunteți pe pagina 1din 505

Cursul #0

Intro

5 Octombrie 2021 1
Bun venit la
Facultatea de Automatică și
Calculatoare!
Mult succes!

05/10/2021 2
Why?
• Inițiere în lumea Linux
• Competențe de utilizare eficientă a
sistemelor de calcul
• Curs și comunitate suport pentru disciplinele
de inginerie
• Primii pași în domeniul sistemelor de
operare
• Prezentarea diversității perspectivelor
domeniului IT

05/10/2021 3
Resurse USO
• curs pe Teams
• laborator din pat/de la birou
• my.upb.ro - platforma studenti
• support.upb.ro - probleme de suport
• ocw.cs.pub.ro/uso – informații persistente
• Slide-uri, regulament, etc
• curs.pub.ro – informații dinamice
• Forumuri, feedback, etc
• facebook.com/uso.acs/ - informații efemere
• Referințe din lumea IT
• Concursuri cu hashtag-urile #uso2021 #usorulz
#usogeek

05/10/2021 4
Carte
• Utilizarea Sistemelor de Operare
• 150% din materia de curs și laborator
• recomandăm parcurgerea capitolului aferent
înainte de curs/laborator
• Stay tuned pentru cartea în formatul fizic

• Până atunci: https://github.com/systems-cs-pub-


ro/carte-uso/releases

05/10/2021 5
Desfășurare curs
• Prezentare interactivă – aproximativ 30 de slide-
uri de conținut
• Pauzele sunt importante pentru socializare
• Un curs = un subiect; corelare curs-laborator-
suport
• Moto + conținut + cuvinte cheie + stiați că +
sugestie carte + link-uri utile
• Recomandăm parcurgerea prezentării si a
capitolului din carte înainte/după curs
• Nu se poate asimila totul de la curs;
laboratoarele și suportul de carte sunt
importante

05/10/2021 6
Așteptări de la studenți
• Să fiți prezenți
• Dacă tot ați facut efortul să vă treziți, fiți atenți
• Să fiți implicați, să puneți intrebări, să discutați
• Să nu lăsați (prea multe) neclarități în urma unui
curs
• Folositi-vă de “resursa” profesor
• Întrebările cele mai bune încep cu “De ce?”
(analiză critică)
• Un răspuns frecvent este “Depinde”

05/10/2021 7
Notare
• 1 punct - laborator (11 laboratoare)
• 1 punct - examen practic la mijlocul semestrului - din primele 6 laboratoare
• 3 puncte - teme (4 teme)
• 1 punct - lucrări de curs (5 lucrări)
• 2.5 puncte - examen grilă final (sesiune)
• 2.5 puncte - examen practic final (sesiune) - din toate laboratoarele
• total - 11 puncte

ocw.cs.pub.ro/courses/uso/punctaj

05/10/2021 8
Hit List
• 12 pentru rezultate de midterm
• 23 pentru implicarea în activitățile de laborator
• 10 pentru implicarea în activitățile de curs
• 12 pentru rezultatele la examenul final
• 3 extra vor fi acordate pentru implicarea în comunitate
• 1 pentru suport pe forum teme
• 1 pentru suport pe channel-ul suport tehnic
• 1 pentru activitate pe Facebook-USO

systems.cs.pub.ro/bachelor/uso_hitlist

05/10/2021 9
05/10/2021 10
Curs #00
... despre sisteme de operare

05/10/2021 11
If you can't explain it simply, you
don't understand it well enough
Albert Einstein

05/10/2021 12
Ce este un sistem de operare?
• Îl vom abrevia de acum încolo SO (sistem de
operare)
• Un set de programe care ...
• Controlează distribuția resurselor unui calculator
• Mediază comunicarea dintre hardware și
aplicațiile utilizatorilor

05/10/2021 13
Rolul SO
• Arbitrarea accesului la resurse:
• Punte hardware-software
• Punte hardware - utilizatori

05/10/2021 14
Structura unui SO
• Nucleul (kernelul)
• Gestionează resursele
fizice
• Oferă o interfață
comună aplicațiilor

• Programele de bază
• Permit interacțiunea cu
nucleul și cu sistemul
fizic
• exemple: interpretoare
de comenzi, utilitare de
gestiune a utilizatorilor,
biblioteci

05/10/2021 15
Exemple de SO

Dedicate

Mobile
✔Windows
Generaliste

✔ IOS ✔ iOS
✔Mac OS (Cisco) ✔ Android
✔Linux ✔ JUNOS
✔FreeBSD, (Juniper)
OpenBSD ✔ FortiOS
✔ Orbis OS (Fortinet)

05/10/2021 16
Funcția SO: Multiplexare
• Armonizarea
utilizatorilor multipli
• Arbitrarea
competiției pentru
resurse

05/10/2021 17
Funcțiile SO
• Administrarea resurselor hardware
• Accesul la procesor, memorie, hard disk, comunicare
în rețea, dispozitive de intrare/ieșire
• Competiția utilizatorilor
• Competiția aplicațiilor – inclusiv cu SO însuși
• Portabilitate
• O aplicație poate rula pe sisteme fizice diferite
• Comunicarea cu dispozitive periferice
• Prin drivere – traduc comenzile SO în comenzi
inteligibile echipamentelor
• Gestiunea utilitarelor de diagnosticare și
monitorizare
05/10/2021 18
Responsabilități ale SO
• Administrarea procesorului
• Administrarea memoriei
• Administrarea echipamentelor și perifericelor
• Administrarea sistemelor de stocare a datelor
• Medierea: Interfața cu aplicațiile și cu utilizatorii
(system API)
• Utilitare: aplicații pentru utilizatori

Rolul principal al SO constă în impunerea de reguli pentru


folosirea coerentă a resurselor (denumită și multiplexare)

05/10/2021 19
Windows
• Microsoft
• cel mai răspândit pe
piața desktop
• număr foarte mare de
aplicații construite

05/10/2021 20
macOS
• Apple
• exclusiv pe sistem
Mac (Mac Pro, Mac
Mini, MacBook)
• axat pe utilizabilitate
• circa 9-10% utilizare
pe piața Desktop
• versiunea cea mai
recentă: macOS 11.6
Big Sur

05/10/2021 21
Linux
• proiecte de comunitate
• nucleul/kernel-ul Linux
(iniția de Linus Torvalds)
• cod open source
• găsit în distribuții de
Linux
• cotă 1-2% pe piața
Desktop
• răspândit pe piața
serverelor
• foarte răspândit în zona
embedded și smartphone
(Android și altele)

05/10/2021 22
Android
• dezvoltat în principal de
Google
• cod open source
• peste 70% cotă pe piața
smartphone
• are la bază nucleul
Linux
• aplicații dezvoltate în
Java
• versiunea cea mai
recentă: Android 11

05/10/2021 23
iOS
• Apple
• doar pe dispozitive
produse de Apple
(iPhone, iPad)
• circa 20-25% cotă
pe piața smartphone
• aplicații dezvoltate
în Objective-C
• versiunea cea mai
recentă: iOS 15

05/10/2021 24
Alte sisteme de operare
• Smart watches: watchOS, webOS, PebbleOS
• Smart TV: tvOS, Tizen, webOS
• Console de jocuri: Xbox OS, Orbis OS
(PlayStation), Nintendo Switch, SteamOS
• Mașini (automative): QNX, soluții bazate pe
Windows, soluții bazate pe Linux
• Yocto: crearea de distribuții Linux pentru
platforme embedded/încorporate

05/10/2021 25
Aplicații Desktop
• Browser de fișiere • BitTorrent
• Browser web • Firewall, antiviruși
• Calculator
• Editor de text
• Notițe
• Image viewer/editor
• Soluții de virtualizare
• Media player • Programatori: IDE
• Suită Office (Integrated
Development
• Client e-mail Environment), terminal
• Messenger/chat • Jocuri

05/10/2021
26
Aplicații mobile
• Calculator • Agenda
• Calendar • Notes
• E-mail
• Clock
• Google, Facebook,
• Browser Youtube, Twitter, Skype,
• Messenger Instagram, WhatsApp,
Dropbox
• Maps • Angry Birds, Plants vs
• Player Zombies
• Gallery • http://store.apple.com
• https://play.google.com
05/10/2021 27
Linux și Windows
Windows Linux
• Proiect comercial • Nucleul Linux
(Microsoft) • O serie de pachete
• Facilitatea și bazate pe proiectul
GNU
confortul utilizării
• Distribuții GNU/Linux
• Număr mare de • Comunitate de autori
aplicații și utilizatori
• Domină piața desktop • Open-source
• Closed-source • Prezent în piața
server și embedded
• Android

05/10/2021 28
Linux și Unix
• Unix este sistemul de operare de origine
• Bell Labs, 1969
• Ken Thompson, Dennis Ritchie
• SO existente pornite din codul Unix
• FreeBSD, NetBSD, OpenBSD
• Open Solaris
• Mac OS X
• Linux este un sistem de operare Unix-like
• nu deține componente din codul Unix
• este compatibil cu “standardul Unix” (Single Unix
Specification)
• Vom folosi, in general, termenul “Unix”; folosim
“Linux” pentru aspecte specifice Linux

05/10/2021 29
Istoricul Unix

05/10/2021 30
05/10/2021 31
Lumea Linux

05/10/2021 32
Distribuții Linux
• Bazate pe RPM

• Bazate pe Debian

• Bazate pe Gentoo

• Bazate pe Slackware

05/10/2021 33
Carte: Modern Operating Systems

• Ediția a 4-a, 2014


• Andrew Tanenbaum
– Vrije Universiteit
Amsterdam
• Carte răspândită
pentru sisteme de
operare
• Stil povestit, pe
alocuri amuzant,
ușor de parcurs
05/10/2021 34
Ken Thompson/ Dennis Ritchie
• inventatorii Unix, 1969,
Bell Labs
• limbaj de programare
C
• autorii mai multor cărți
de SO și programare
• Citate celebre:
• “C is quirky, flawed,
and an enormous
success”
• “When in doubt, use
brute force”

05/10/2021 35
Serendipity
• Thompson’s desire to play video games, led him to the
PDP-7. He was able to have a computer to himself to
work on Unix, because the PDP-7 was a largely abandoned
machine.
• Thompson had the time to write the first version of Unix
because his wife went away for a month to show their
new baby off to relatives.
• The severe limitations of DEC’s PDP series forced
Thompson and team to be highly efficient in their designs
for Unix.
• Unix had a community develop around it, because AT&T
“gave away” not only the OS, but the source code for it,
as well.

Joseph Crick, Lessons from the development of Unix

05/10/2021 36
Red Hat Inc.
• redhat.com
• “The World’s Open Source
Leader”
• Înființată în 1993
• Professional open-source
business model
• The first obe-billion dollar
open source company (2012)
• Principalul contribuitor
“corporate” în nucleul Linux
• RHEL – Red Hat Enterprise
Linux
• Comunitatea Fedora

05/10/2021 37
ReactOS
• Open source
• Sistem de operare
bazat pe Windows
XP/2003
• Lansat în 2004
• reactos.org

05/10/2021 38
Cuvinte cheie
• Sistem de operare
• Nucleu (kernel)
• Gestiune de resurse
• Mediere
• Windows
• Linux
• Unix
• Distribuții

05/10/2021 39
Resurse utile
• http://www.unix.org/
• http://www.kernel.org/
• http://www.gnu.org/
• http://www.distrowatch.com/

05/10/2021 40
Cursul #01
Utilizarea sistemului de fișiere

12 octombrie 2021 1
Best file compression around:
"DEL *.*" = 100% compression

12/10/2021 2
Suport de curs
• Utilizarea sistemelor de operare
• Capitolul 2 – Utilizarea sistemului de fișiere

12/10/2021 3
Recapitulare

User

Shell Applications

Low Level Utilities

Kernel

Hardware

12/10/2021 4
Recapitulare

12/10/2021 5
De ce?
• Sistemele de fișiere sunt banale, dar...
• Critice pentru funcționarea sistemului de
operare
• Permit controlul unei cantități tot mai mari de
date
• Separă resursele între utilizatorii multipli: umani
și non-umani

12/10/2021 6
Ce este un fișier?

12/10/2021 7
Ce este un fișier?
• Un document digital
• O poză, o melodie, un clip, o scrisoare, o pagină
dintr-un jurnal de călătorie
• Mai multe tipuri
• O formă de organizare digitală a datelor
• O separare a informațiilor în fragmente cu sens
pentru utilizator și gestionabile de sistem
• Au forma unei înșiruiri de octeți

13/10/2020 8
De ce folosim fișiere?
• Pentru a stoca informația în mod persistent
• Astfel aceasta nu se pierde la reboot
• Pentru a controla informația
• Informațiile folosite direct de utilizatorii umani:
poze, documente etc
• Informațiile folosite de aplicații
• Fișiere de configurare, baze de date, sunete

12/10/2021 9
Ce este un director?
• O colecție de fișiere și subdirectoare
• Identificată printr-un nume
• En.: folder, directory
• Permit organizarea ierarhică a informației
• Organizare ierarhică vs. plată
• Dacă fișier = foaie, atunci director = dosar
• Directoarele pot fi goale
• Directoarele pot conține alte directoare
• Dar directoarele sunt tot fișiere în Linux și Mac
OS X

12/10/2021 10
Sistemul de fișiere
• Controlează totalitatea directoarelor și
fișierelor
• Numirea lor
• Atributele lor
• Accesul
• Oferă o metodă de organizare fizică și logică
a fișierelor într-un mediu de stocare
• Are o organizare ierarhică:
• Director rădăcină (root directory)
• Subdirectoare
• Fișiere

12/10/2021 11
Structură plată vs ierahică

12/10/2021 12
Structura plată

12/10/2021 13
Structura ierahică

12/10/2021 14
Exemplu: 1.000.000 poze

12/10/2021 15
Ce ne dorim de la sistemul de
fișiere?
• Să meargă repede, să ajungem repede unde
ne dorim
• Să putem găsi ușor informația
• Să putem face operații multiple (creare,
ștergere, redenumire etc)
• Să ofere securitate (să nu ștergem fișiere
aiurea) și partiționare (să avem spații de
lucru separate pentru utilizatori)

12/10/2021 16
Ierarhia sistemului de fișiere
(Unix/Linux)

12/10/2021 17
Ierarhia în Windows

12/10/2021 18
Directorul rădăcină
• Linux și Mac OS: un singur director rădăcină
• Windows: câte o rădăcină pentru fiecare
partiție
• A, B: floppy
• C: hard disk
• D sau alte litere după hard disk-uri: CD-ROM,
DVD-ROM
• E: USB drive

12/10/2021 19
Directorul home
• Fiecare utilizator are un director home
• /root este pentru root
• /home/student este pentru student ș.a.m.d
• Este locul în care un utilizator obișnuit poate
face ce dorește
• „~” este o scurtătură pentru directorul home
al utilizatorului curent

12/10/2021 20
Cale în sistemul de fișiere
• path
• o succesiune de intrări în sistemul de fișiere
despărțite prin separator
• intrările intermediare sunt directoare, iar
cele finale pot fi directoare sau fișiere
Unix/Linux Windows

/(slash) \(backslash)

/home/student/facultate/curs2.pdf C:\Users\student\Cursuri\curs02.pdf

12/10/2021 21
Tipuri de căi
• Absolute
• Pleacă de la directorul rădăcină: / sau ~
• /home/student/facultate/an-1/uso/lab-01-
notite.txt
• când e cale depărtată și ajungem mai repede
pornind de la rădăcină
• Relative
• Pleacă de la directorul curent
• ../uso/lab-01-notite.txt
• utile când știm cum este poziționată destinația
față de directorul curent și e apropiat
12/10/2021 22
Intrările . și ..
• ”.” și ”..” sunt două directoare speciale
ce se găsesc în fiecare director
• ”.” = indică spre același director
• ”..” = indică spre directorul părinte

12/10/2021 23
Navigare în sistemul de fișiere
• pwd: print working directory
• Unde mă aflu?
• ls: list directory
• Unde pot merge?
• cd: change directory
• Cum ajung acolo?
student@uso:~$ ls
facultate
student@uso:~$ cd facultate/
student@uso:~/facultate$ ls
an-1 an-2 an-3 an-4
student@uso:~/facultate$ cd an-1/uso/
student@uso:~/facultate/an-1/uso$ pwd
/home/student/facultate/an-1/uso
12/10/2021 24
Formatul fișierelor
• Pentru utilizator: poze, texte, melodii etc
• Pentru sistem: fișiere text / fișiere binare
• Fișiere text
• Text simplu (plain text): alb.txt
• Cod sursă: alb.c, alb.java
• Formate de prezentare: alb.html
• Fișiere binare = non-text
• Imagini, programe executabile, fișiere comprimate etc
• De regulă formatul e asociat cu extensia

12/10/2021 25
Date binare vs Date text

Date Binare
• sample.c și notes.txt • scan.jpg și curs-02.pdf
Date Text

• conținutul poate fi • conținutul nu are sens


vizualizat de om pentru om
• conține caractere • conține caractere de orice
tipăribile fel (octeți, bytes)
• create de editoare de text • în general mai compacte
(Vim, Notepad++, Gedit) • create de utilitare
specifice (suită Office,
compilatoare, editoare de
imagini)

student@uso:~/facultate/an-1/pc$ file sample-printf.c


sample-printf.c: C source, ASCII text

12/10/2021 26
Extensia fișierelor
• Extensii: .txt, .tex, .mp3, .bmp, .png etc.
• Windows: .exe = executabil
• În Linux executabilele nu au extensie
• Interfață grafică alege programul de
deschidere în funcție de extensie

12/10/2021 27
Schimbarea tipului
• Dacă schimbăm manual extensia nu
înseamnă că schimbăm tipul
• Putem schimba tipul deschizând cu un
program și salvând ca alt tip
• .bmp în .png
• .docx în .pdf
• .mp3 în .rar (comprimare, numită și arhivare)
• .pdf în .rtf (OCR)
• .pdf în .mp3 (text to voice)

12/10/2021 28
Atribute pentru un fișier
Fișierul uso-curs-01.pdf
Nume uso-curs-01.pdf
Extensie .pdf
Conținut -
Dimensiune 1.9M
Tip de fișier imagine, arhivă, binar, text, etc (format
pdf, binar)
Informații de Permisiuni de acces
securitate Cine a creat / modificat fișierul
Unde au fost editate ultima dată

Toate cele de mai sus, mai puțin conținutul, se cheamă


metadate. Conținutul se cheamă date.
12/10/2021 29
„We kill people based on metadata”

General Michael Hayden, former Director of the National Security Agency and
Director of the Central Intelligence Agency, 2014
https://www.nybooks.com/daily/2014/05/10/we-kill-people-based-metadata/

12/10/2021 30
Director vs fișier
• aceleași metadate
• directoarele nu au, în general, extensie
• directoarele conțin alte fișiere și directoare
(nu conțin date)

12/10/2021 31
Dimensiunea datelor
• datele sunt stocate/transferate în biți sau
octeți
• bit: valoare de 0 sau 1
• byte (octet): 8 biți, între 0 și 255 (11111111)

2^10 octeți = 1024 octeți = 1KB (kilobyte)


2^20 octeți = 1048576 octeți = 1MB (megabyte)
Gigabyte, terrabyte, petabyte, exabyte

12/10/2021 32
Operații uzuale cu fișiere

12/10/2021 33
Operații uzuale cu fișiere
• afișarea conținutului unui fișier - cat
• deschidere unui fișier într-o aplicație
• editarea unui fișier – vim, gedit, etc
• crearea unui fișier - touch
• ștergerea unui fișier - rm
• copierea unui fișier - cp
• mutarea/Redenumirea unui fișier - mv

12/10/2021 34
Operații pe directoare
• listarea conținutului unui director - ls
• afișarea directorului curent - pwd
• schimbarea unui director - cd
• crearea unui director - mkdir
• ștergerea unui director – rmdir, rm
• copierea unui director - cp
• mutarea/redenumirea unui director - mv

12/10/2021 35
Linia de comandă
• Command line
interface (CLI)
• Interfață de lucru
direct cu sistemul
• Alternativă la interfața
grafică
• Universală
• Mai rapidă de folosit

12/10/2021 36
Prompul Unix/Linux
Utilizatorul curent
Hostname
Directorul curent

student@uso:/home/student$

Utilizatorul nu este
administrator

12/10/2021 37
Ce este o comandă?
• șir de caractere corespunzător unei acțiuni
de executat
• poate avea parametri
• comanda poate eșua, caz în care urmărim
informațiile afișate
• după orice comandă de
modificare/actualizare/configurare, e
indicată folosirea unei comenzi de
verificare/validare (cd cu pwd, touch cu ls
etc)
12/10/2021 38
Tipuri de utilizatori
Utilizatori neprivilegiați Utilizatorul privilegiat
• au acces la un director • are acces la întreg
home, fără alte privelegii sistemul de fișiere
• au acces la directorul • controlează sistemul:
/tmp gestiunea pachetelor
• promptul se încheie în „$” software, gestiunea de
(dollar) utilizatori, gestiunea
rețelei
• promptul se încheie în „#”
(diez, hash)

12/10/2021 39
Advanced Programming in the Unix
Environment
• 1992
• Richard W. Stevens (cărți depre Unix și
TCP/IP)
• Steven Rago – ediția a 2-a, 2005
• Una dintre cele mai renumite cărți de
programare în Unix
• Carte de căpătâi pentru programarea de
sistem
• OSNews: „one of the best tech books ever
published”

12/10/2021 40
Theodore Ts’o
• Unul dintre primii contribuitori în nucleul
Linux
• Dezvoltator și maintainer al ext2, ext3, ext4
• Contribuții în zona sistemelor de fișiere
• Lucrează la google
• Autorul /dev/random/

12/10/2021 41
• www.oracle.com
• Larry Ellison
• Înființat în 1977
• Al treilea producător
de software (după
Microsoft și IBM)
• „flagship product” –
Oracle Databse
• A cumpărat Sun
Microsystems în
ianuarie 2010: servere,
Java, MySQL, ZFS

12/10/2021 42
• B-tree file system
• Copy-on-write file system
• Open source
• Început de Oracle în 2007
• Înca instabil
• Facilități similare cu ZFS
de la Sun:
• Snapshots
• Partiții foarte mari
• Creșterea/Reducerea
dinamică a partițiilor
• Viitorul sistem de fișiere
pe Linux

12/10/2021 43
Cuvinte cheie
• fișier • cat
• director • ls
• touch
• prompt
• mkdir
• comandă
• cp
• nume
• mv
• extensie
• rm
• metadate • rmdir
• date • pwd
• stat • cd
• date binare • ierarhie
• date text • director rădăcină
• ascii • cale relativă și
absolută
• bit, byte
• separator
• file • . și ..
• operații

12/10/2021 44
Cursul #2
Procese

19 Octombrie 2021 1
Recapitulare
When looking for an old file...

19/10/2021 2
Multitasking:
A polite way of telling someone
you haven't heard a word they said

19/10/2021
3
Suport de curs
• Utilizarea Sistemelor de Operare
• Capitolul 4 - Procese

19/10/2021
4
Ce este un proces ?
• Proces = acțiunea utilizatorului tradusă în
logica mașinii

19/10/2021
5
Ce este un proces ?
• Utilizatorul comandă o acțiune care
declanșează procese
• Procesele sunt aplicații ale SO ce pun în
practică solicitarea utilizatorului:
• Procesele sunt legate de utilizatorul care le-a
inițiat
• Procesele folosesc resurse ale sistemului
(procesor, memorie, spațiu pe disc etc)
• Exemplu: init, bash, firefox

19/10/2021
6
De ce ?
• Concept fundamental în sistemele de
operare prin care sunt definite acțiunile
• Procesul poate fi numit aplicație, task, job
sau, nu foarte corect, „program”
• Programul este, tehnic, executabilul din care se
naște procesul
• Procesul ia naștere dintr-un executabil după ce
se încarcă executabilul în memorie

19/10/2021
7
Procese în execuție

19/10/2021
8
Lansarea unui proces

19/10/2021
9
La ce bun ?
• Utilizator
• Depanarea sistemului prin examinarea proceselor
• Procesele pot cauza probleme prin consumul
excesiv de resurse
• Identificarea proceselor malițioase
• Dezvoltator
• Iluzia de multitasking
• Proiectarea unor aplicații eficiente

19/10/2021
10
Ce poate face un proces ?
• Ce poate face o rachetă de tenis ?

19/10/2021
11
Ce poate face un proces ?
• Orice proces aparține unui utilizator
• Depinde ce privilegii și permisiuni are pe
resurse
• Un proces poate crea un fișier, sau nu
• Un proces poate trimite pachete pe rețea, sau nu
• Privilegiile unui proces sunt date de utilizator

19/10/2021
12
Cum creează un utilizator procese ?

• Deschide aplicații
• Dublu click în GUI
• Rulează o comandă în linia de comandă
• Alt + F2 (Linux) sau Buton Windows + R
(Windows)
• La autentificare se pornesc procesele de
startup
• Interfața grafică pentru GUI
• Shell-ul pentru CLI

19/10/2021
13
Tipuri de procese
• Interactive
• Declanșate de un utilizator prin I/O
• Neinteractive sau daemon

19/10/2021
14
Interacțiune terminal

19/10/2021
15
Aplicații vs. procese
• Unele aplicații pot fi compuse din mai multe
procese:
• Navigatoare web (Chrome, Firefox)
• Server web (servirea cererilor din rețea)
• Terminal (procese shell)

19/10/2021
16
Resursele proceselor
• Un identificator la nivelul sistemului
• PID = process identifier
• Memoria: stochează instrucțiunile
executabilului (programului) și datele
prelucrate
• Procesorul: execută instrucțiunile
• Spațiu pe disc, dacă lucrează cu fișiere
• Dispozitive de I/O: placă de rețea, USB
devices
19/10/2021
17
Folosirea resurselor

19/10/2021
18
Resursele proceselor
• Procesele folosesc resursele SO
• Aplicații multiproces
• Se realizează o partajare a proceselor
• Integritatea sistemului
• Un proces nu poate corupe alt proces
• Procese care accesează o resursă comună
• Accesarea ei ordonată

19/10/2021
19
Resursele proceselor
• SO este
responsabil de
alocarea
echilibrată a
resurselor
• Un proces să nu
consume prea
multe resurse de
memorie,
procesor, etc.

19/10/2021
20
Monitorizarea proceselor
• ps, top, htop
• Task Manager
(Windows)

19/10/2021
21
19/10/2021
22
Procese peste CPU

19/10/2021
23
Instrucțiuni și atribute
• UID: identifică utilizatorul care deține
procesul
• PID: identificatorul unic al procesului
• Nu se poate schimba
• Instrucțiuni / cod:
• Memorate la crearea unui proces
• Se execută la rularea unei comenzi
• Atributele identifică un proces și decid
resursele utilizate

19/10/2021
24
Stările proceselor

19/10/2021
25
Utilitare procese
• Afișarea informațiilor despre procesele active din
sistem: ps, pgrep, pidof, pstree, lsof
• Monitorizarea sistemului: top, htop
• Investigarea amănunțită a proceselor: ltrace,
strace, ptrace
• uptime - afișează de cât timp funcționează
sistemul
• pidof – afișează PID-ul procesului cu numele
specificat
• Utilitarele ce lucrează cu procese își iau
informațiile din /proc, din procfs

19/10/2021
26
Utilitarul ps
• Utilitarul principal pentru afișarea
informațiilor despre procese
• Starea proceselor:
• Scheduled
• Sleeping
• top
• Prioritatea proceselor – parametrul nice

19/10/2021
27
Parametrii comenzii ps
• Afișare detaliată: ps aux
• a = arată procesele tuturor utilizatorilor
• u = afișează deținătorul procesului
• x = afișează și procesele ce nu aparțin
terminalului
• Vizualizarea ierarhiei de procese: ps -H

19/10/2021
28
Ierarhizarea proceselor
• Crearea unui proces printr-un:
• Fișier executabil (loading)
• Proces părinte (unul singur)
• Procesul init – rădăcina ierarhiei de procese
• Shell: proces care creează alt proces
(Windows Explorer, Bash)
• Afișarea ierarhiei de procese: comanda
pstree

19/10/2021
29
Ierarhia de procese

19/10/2021
30
Procesul init
• Rădăcina ierarhiei de
procese
• Primul proces al
sistemului
• PID 1
• Pornește serviciile
sistemului & procesele de
bază
• Shell-uri
• Adoptă procesele orfane
19/10/2021
31
fg & bg
• Procesul foreground
• Controlează intrarea standard
• Poate exista doar unul singur
• Procese background
• Nu mai are acces la intrarea utilizatorului
• Pot exista mai multe procese de acest fel
• Două stări: running, suspended
• Operatorul & trimite procesul în background
• Ctrl + Z
• Comanda job – starea procesului

19/10/2021
32
fg & bg

19/10/2021
33
Procese și fișiere
• Accesul către orice fișier se realizează
printr-un proces
• Când un proces deschide un fișier primește
un handle (mâner) către acel fișier
• O intrare în tabelul descriptorilor de fișiere
• Descriptorul de fișiere identifică fișierul pe care îl
rulează un proces
• Un proces poate deschide un număr finit de
fișiere (prevenirea atacurilor tip Denial of
Service)
• lshw > ls.out – redirectarea ieșirii standard
19/10/2021
34
Descriptori de fișiere

19/10/2021
35
Terminarea proceselor
• Un proces este terminat (distrus) atunci
când:
• Ajunge la sfârșitul zonei de execuție
• Este terminat de utilizator sau distrus de un alt
proces
• Se apelează exit sau o funcție similară
• Efectuează o acțiune nevalidă
• Abnormal termination, generarea unei excepții
• Utilitare: kill, pkill, killall

19/10/2021
36
Ce înseamnă terminare
• La terminarea unui
proces:
• Toate informațiile aferente
dispar
• Resursele (memorie,
fișiere) sunt eliberate
• Când un proces moare,
se șterge fișierul
executabil asociat ?

19/10/2021
37
Semnale
• Interacțiunea între procese
• SIGSPT – suspendă un proces
• SIGTERM – omoară un proces
• Ctrl + C ↔ SIGINT – întrerupe execuția
procesului curent
• Ctrl + \ ↔ SIGQUIT (>SIGINT)

19/10/2021
38
Exemple
• Listă semnale UNIX

stud@uso:~$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD
18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN
22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ
26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO
30) SIGPWR 31) SIGSYS

19/10/2021
39
Înlănțuirea proceselor
• Redirectare din fișier (< și >)
• Înlănțuirea de comenzi:
• Înlănțuire necondiționată (;)
• Sau (||)
• Și (&&)
• Pipe-uri (|)
• Sunt folosite la transferul de informație de la o
comandă la alta
• One-linere

19/10/2021
40
Interacțiuni
• Procesele interactive:
• Primesc date de intrare de la utilizator
• Shell – terminal – interacțiunea cu utilizatorul
• Procese neinteractive (batch)
• Sunt folosite la transferul de informație de la o
comandă la alta

19/10/2021
41
Daemoni
• Sunt detașați de terminal
• Oferă un anumit serviciu în sistem
• Au ca părinte procesul init
• Exemplu: atd
• Daemonizarea unui proces:
• nohup
• disown

19/10/2021
42
De ce „daemoni”?
According to Fernando J. Corbato who worked on
Project MAC in 1963 his team is the first to use
the term daemon. The use of the term daemon
was inspired by Maxwell's daemon, in physics and
thermodynamics as an imaginary agent which
helped to sort molecules.

„We fancifully began to use the word daemon to


describe background processes which worked
tirelessly to perform system chores.”

https://stackoverflow.com/questions/33690277/w
hy-are-daemons-called-daemons
19/10/2021
43
Daemonii ca metaforă
• Daemoni – inaccesibili prin I/O
• Dacă procese = gânduri & emoții, daemoni =
procese psihologice sub-conștiente sau
inconștiente ?

19/10/2021
44
Exemple
• nohup – redirectează rezultatul procesului
daemonizat într-un fișier (nohup.out)

stud@uso:~# kill -SIGINT 400

• disown – oprește procesul și continuă


execuția instrucțiunilor: disown JobID

19/10/2021
45
Operating Systems Concepts

• editia a 9-a, 2013


• editia a 10-a, 2020
• Silberschatz, Galvin, Gagne
• Una dintre cele mai renumite cărți de
programare în Unix
• Acopera foarte bine subiectele de gestiunea
proceselor si gestiunea memoriei

19/10/2021 46
Donald Knuth
• The Art of Computer Programming
• analiza algoritmilor
• autorul TEX, METAFONT
• umor profesional

19/10/2021
47
• International Business
Machines Corporation
• fondata, ca nume, in
1924
• una dintre cele mai
mari companii din
lume
• unul dintre cele mai
recunoscute brand-uri
• hardware (servere),
software, servicii
• Blue Gene
supercomputers

19/10/2021
48
DTrace
• dynamic tracing
• analiza dinamica (in timp real) a aplicatiilor si
sistemului de operare
• aparut ın 2005, Sun Microsystems
• ruleaza pe Solaris, Mac OS X si *BSD
• cand a fost apelata o functie, cu ce argumente
• ,,scriptat”’ cu ajutorul unui limbaj de programare
• a primit numeroase premii de inovatie
• modul de kernel portat pe Linux
• echivalent pe Linux este utilitarul SystemTap
(stap)
19/10/2021
49
Cuvinte cheie
• Resurse
• Instrucțiuni
• Atribute
• ps
• top
• Shell
• init
• fg
• fg
• Descriptor de fișiere
• kill
• killall
• Semnale
• Interacțiuni
• Daemoni

19/10/2021
50
Cursul #03
Rețelistică și Internet

1
Give a person a fish and you feed them for a day; teach that
person to use the Internet and they won’t bother you for weeks.

You know it’s love when you memorize her IP number to skip DNS
overhead.

2
Suport de curs
• Utilizarea sistemelor de operare
• Capitolul 11 – Rețelistică și Internet

3
Transformarea Internetului

https://www.tes.com/lessons/U2BXrfcbvDDNmg/copy-of-the-history-of-the-internet
4
IoT

https://www.semiwiki.com/forum/content/5559-quick-history-internet-things.html
5
Ce este o rețea?
• Stații/noduri (hosts) interconectate
• Legături fizice (fir, wireless) și logice
(conexiune) între stații
• Stațiile comunică între ele, rulează aplicații
de rețea
• Rețele sunt conectate la alte rețele
• Internet: totalitatea rețelelor interconectate
de pe planetă

6
Comunicare între dispozitive
• Dispozitivele participante trebuie să
primească nume
• Dispozitivele trebuie să fie suficient de
precis localizate – să aibă o adresă
• Participanții trebuie să identifice rutele prin
care se pot contacta
• Trebuie să stabilească câteva reguli simple
de comunicare - protocoale

7
Protocol de rețea
• Un protocol = reguli care stabilesc modul în
care două dispozitive schimbă informații
• Entitățile participante la comunicare cunosc
protocolul
• Formulează secvențe cerere – răspuns (request-
reply)

8
Rețea locală
• Formată din mai multe stații legate între ele
• Stații: calculator, laptop, telefon mobil, server etc
• Conectarea stațiilor în rețeaua locală se
realizează printr-un echipament de rețea
numit switch
• Switch: transferă informația între
calculatoare aflate în aceeși rețea locală
folosind interfețele lor de rețea Ethernet,
bazându-se pe adresa MAC

9
Adresa MAC
• Un număr cu o lungime de 48 de biți, care
identifică în mod unic fiecare interfață de rețea
Ethernet;
• Adresare plată, neierarhică
• Este înscrisă din fabrică într-o memorie ROM de
pe placă
• Nu poate fi schimbată de pe placă, dar poate fi
schimbată software

Numărul serial al plăcii

00:00:0c:ab:cd:c1

ID-ul producătorului
10
11
Comunicare între rețele
• Pentru a putea accesa alte rețele sau
Internetul, trebuie ca un echipament să aibă
și o legătură la altă rețea/Internet
• Acest echipament poate fi o stație, un
server, sau un echipament de rețea dedicat
numir ruter
• Transferul informației din rețeaua locală spre
Internet se bazează pe adresa IP

12
Protocolul IP
• Protocolul dominant care asigură
conectivitate în Internet
• Adresarea IP este ierarhică
• Cea mai recentă versiune: IPv6
• Rezolvă criza de adrese IPv4
• Adresa IPv6 este un număr de 128 biți
• Progres lent față de ritmul tehnologiilor actuale
• Infrastructură globală greu de transformat

13
Adresa IPv4
• 32 de biți scriși în 4 grupuri de câte 8 biți
• Fiecare grup e scris în format zecimal
• O adresă IP are două componente:
• Prima parte = adresa rețelei care include stația
• A doua parte = adresa stației în cadrul rețelei.
• Delimitarea dintre adresa stației și adresa
rețelei este dată de masca de rețea

14
Masca de rețea
• Are o lungime de 32 de biți
• Formată prin setarea biților de rețea și stație
• Biți rețea = 1
• Biți stații = 0
• Exemplu: dacă avem 24 de biți de 1
consecutivi, masca de rețea este /24 sau
255.255.255.0

15
Adresa de rețea și de broadcast
• Adresa de broadcast: adresă de difuzare,
pachetele sunt primite de toate stațiile din
rețeaua locală
• Acestea nu pot fi folosite ca și adrese de stații

• Pentru a identifica adresa de rețea se


efectuează un ȘI logic (&) între adresa IP și
masca de rețea
• Pentru a identifica adresa de broadcast a rețelei
se efectuează SAU logic (|) între adresa IP și
negatul măștii de rețea

16
Exemplu:
• Stația cu adresa IP 192.168.100.200 și masca de
subrețea 255.255.255.0 (/24)

• Pentru adresa de subrețea:


11000000 10101000 01100100 11001000 – 192.168.100.200
11111111 11111111 11111111 00000000 – 255.255.0.0
______________________________________________________
11000000 10101000 01100100 00000000 – 192.168.100.0

• Pentru adresa de broadcast:


11000000 10101000 01100100 11001000 – 192.168.100.200
00000000 00000000 00000000 11111111 – 0.0.0.255
______________________________________________________
11000000 10101000 01100100 11111111 – 192.168.100.255

17
Configurarea interfețelor
• Are un aspect fizic, legat de hardware și un
aspect logic, legat de protocoale și software
• Conexiunea fizică: codifică informația sub
formă de:
• Semnale electrice: cablu UTP
• Semnale optice: fibră optică
• Semnale electromagnetice: legături fără fir

18
Port vs interfață
• Concepte folosite interschimbabil
• Fizic vs logic:
• Interfață fizică: comunicare printr-un anumit
mediu și protocol (ex. Ethernet)
• Port fizic: punctul de contact cu exteriorul al unei
interfețe fizice
• Interfață logică: configurația realizată peste o
interfață fizică
• Port logic: adresă care permite unei interfețe logice să
gestioneze mai multe conexiuni simultan

19
Configurare adresă IP
• Se realizează în două moduri:
• Prin configurare temporară (static sau dinamic)
• Prin configurare permanentă (static sau dinamic)
• Static vs. dinamic
• Static = parametri configurați manual de
administrator
• Dinamic = parametri configurați automat

20
Configurare temporară
• Efectul este imediat,
• După ce se repornește SO, aceste configurări dispar
• Au efect imediat și se aplică ușor
• Statică:
• se folosește comanda ifconfig (folosită fără parametrii,
se identifică informații despre interfețele active)

ubuntu:/home/razvan# ifconfig eth0 10.1.1.3 netmask 255.255.255.0


ubuntu:/home/razvan# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:14:D1:38:73:A6
inet addr:10.1.1.3 Bcast:10.1.1.255 Mask:255.255.255.0

• Dinamică:
• Se realizează prin intermediul unui client DHCP, precum dhclient sau
dhcpd

21
Configurare permanentă
• Efectul nu este imediat
• Configurația nu se aplică după salvarea fișierului,
ci după repornirea SO
• Static și Dinamic:
• Se realizează interacționând cu fișierul
/etc/network/interfaces
iface eth0 inet static
address 10.1.1.2
netmask 255.255.255.0
network 10.1.1.0
broadcast 10.1.1.255
gateway 10.1.1.1
dns-nameservers 10.1.1.1

22
Gateway
• Conectează două rețele, astfel încât dispozitivele din
cele două rețele să poată comunica
• Se află la periferia rețelei și poate îndeplini adesea
funcții de protecție și filtrare a traficului, și de
asemenea convertește traficul dintr-un protocol în
altul
• De obicei îndeplinită de un ruter
• Specificarea temporară pentru o adresă de gateway
se realizează prin intermediul unei rute
• Ruta default gateway este folosită întotdeauna ca
un ultim efort în încercarea de a accesa o destinație
pentru care dispozitivul curent nu are o rută definită

23
Tabela de rutare
• O rută reprezintă calea de parcurs pentru pachete în
drumul lor spre destinație
• Aceste se rețin în tabela de rutare
• Pentru fiecare rută se reține: adresa destinației
(aceasta poate fi adresa unui echipament sau adresa
întregii rețele), masca de rețea și adresa
echipamentului de rețea spre care se transmit
informațiile pentru a putea ajunge la destinație.
ubuntu:/home/razvan# route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use
Iface
localnet * 255.255.255.0 U 0 0 0 eth0

24
DHCP
• DHCP (Dynamic Host Configuration Protocol)
este cel mai utilizat protocol în scopul
configurării dinamice
• Pentru a beneficia de acest suport trebuie ca în
rețeaua locală să existe un server de DHCP.
• Serverului îi este fixată plaja de adrese IP pe
care le poate atribui stațiilor și de asemenea
configurările corespunzătoare de rețea.
• Configurările dinamice permit atribuirea
automată a parametrilor precum adresă IP,
mască de rețea, server de DNS, gateway.

25
Serviciul DNS
• Reținerea unor nume este mai facilă decât
cea a unui număr de adrese IP => a apărut
serviciul DNS (Domain Name System)
• Corespondența între o adresă IP și un șir de
caractere
• Pentru serviciile de DNS sunt necesare
servere specializate; pentru a le accesa e
necesară cunoașterea adresei lor IP

26
Configurare DNS
• Adresele serverelor DNS se pot configura în
fișierul /etc/resolv.conf
• Exemplu: search localdomain
nameserver 10.1.1.1
nameserver 217.115.138.24
nameserver 128.107.241.185

• nameserver definește adresa pentru un


server DNS
• Configurările se aplică imediat

27
28
Aliasuri
ubuntu:/home/razvan# cat /etc/hosts
• Etichete asociate unor 127.0.0.1 localhost ubuntu
adrese de IP și 127.0.1.1 ubuntu
funcționează similar cu
cel de DNS #Servers
10.1.1.100 print.mydomain.ro my-
• 2 diferențe majore față print-server
de DNS: 10.1.1.101 ftp.mydomainro my-ftp-
server
• Etichetele nu trebuie să 192.168.1.150 mail-server
respecte aceleași
convenții ca cele ale # The following lines are desirable
numelor de domenii DNS for IPv6 capable hosts
• Dacă pentru DNS se ::1 ip6-localhost ip6-loopback
folosesc servere dedicate, fe00::0 ip6-localnet
când discutăm despre ff00::0 ip6-mcastprefix
aliasurile este vorba doar ff02::1 ip6-allnodes
de interogarea fișierului ff02::2 ip6-allrouters
/etc/hosts ff02::3 ip6-allhosts
29
Verificarea conectivității
PING Traceroute
• Utilizat pentru verificarea • Utilizat folosit pentru a valida
conexiunii între două stații calea urmată de pachete pe
într-o rețea ce folosește
protocolul IP traseul între sursă și
destinație
• Primește ca parametru
adresa IP a destinației • Acesta va afișa un mesaj
pentru fiecare echipament de
• Se trimite un ECHO REQUEST rețea prin care trec mesajele
către destinație, iar dacă
răspunsul destinație se în drumul lor spre destinație.
întoarce la sursă, conexiunea • Folosește câmpul TTL (Time
dintre ele este validată și To Live) definit în antetul
funcționează; în caz contrar,
nu funcționează fiecărui pachet de date
transmis

30
Probleme uzuale
• Două abordări pentru diagnoza problemelor:
• De jos în sus (bottom-up)
• De sus în jos (top-down)
• Ce e sus și ce e jos?
• Top / Up = Aplicații
• Bottom / Down = Conexiunile fizice

31
Abordare bottom-up
• Pagina web www.google.ro nu poate fi
accesată:
• Testarea legăturii fizice;
• Testarea conexiunii spre un gateway, care oferă
legătura stației către Internet;
• Verificarea disponibilității și a configurării corecte
a serverului DNS, pentru a se putea realiza
adresarea către site-ul dorit;
• Verificarea conectivității către alte servere,
pentru a detecta dacă situația este specifică
serverului respectiv sau generică.

32
Protocoale de comunicare
• Scopul unei rețele este acela de
a asigura comunicația și
interoperabilitatea între două
aplicații
• Rețelele trebuie să împacheteze
informația, să o transmită pe
mediul fizic, să se asigure că a
ajuns la destinație, să analizeze
răspunsul și să realizeze toți pași
astfel încât acest obiectiv sa fie
atins
• Protocoalele sunt cele care
trebuie să asigure suportul, iar la
rândul lui protocolul trebuie
respectat de toate echipamentele
disponibile într-o rețea
33
Modelul client – server
• Interacțiunea asimetrică
• Două roluri diferite:
• Serverul – oferă serviciul clientului
• Clientul – solicită serverului facilitățile aferente
• Clientul poate fi un proces sau o aplicație
• Modelul implică existența unui număr mai
mare al clienților decât al serverelor

34
Modelul peer-to-peer
• Interacțiune simetrică
• Partenerii în comunicație, numiți peers, solicită și
oferă unul altuia servicii
• Experiența unei colaborări simultane
• Este un model client-server ascuns
• Fiecare partener are, în cadrul implementării, atât
rol de server cât și de client
• Exemplu: BitTorrent, DirectConnect,
eDonkey, Skype

35
Servicii Internet
• O clasificare a serviciilor internet în funcție
de nevoia rezolvată și de tipul de tehnologie
folosită poate fi următoarea:
• Servicii de comunicare:
• Poșta electronică/e-mail (SMTP, POP3, IMAP)
• Mesagerie instantanee
• Servicii de transfer de fișiere:
• Protocolul FTP
• Serviciul web:
• Protocoalele HTTP, HTTPS
• Servicii de conexiune la distanță:
• ssh, telnet

36
Serviciul de e-mail
• Primul serviciu folosit în Internet
• Transmiterea de mesaje text între utilizatorii
diverselor sisteme de pe Interne
• Nu este conversație instant, precum în cazul
chat-ului
• Mesajele sunt stocate în căsuțe poștale
• Destinatarul și expeditorul sunt îndentificați
prin adrese de e-mail

37
Client local de e-mail
• Citire și transmitere de mesaje
• Citire cu protocolul POP3 sau IMAP
• Transmitere cu protocolul SMTP (către server)
• Citire cu POP3
• Mesajul este copiat/salvat pe stația locală
• Utilizatorul poate să își citească mesajele salvate
offline
• Citire cu IMAP
• Mesajele sunt „accesate”, nu copiate
• Se copiază doar header-ele, nu mesaje întregi
• Clienți de e-mail:
• Microsoft Outlook, Kmail, Mozilla Thunderbird
• Pine, Mutt, Gnus

38
Transferul fișierelor
• Descărcam fișiere publice de pe paginile
web, folosind protocolul HTTP
• Dacă dorim să descărcăm fișiere private sau
să încărcăm fișiere pe un server, există
protocoale precum FTP sau SSH File
Transfer Protocol (ambele au model client-
server)
• Putem partaja fișiere și pe modelul peer-to-
peer prin protocolul BitTorrent
• Peers = participanții la sistem
• Swarm = „roiul” colectiv de contribuitori

39
Serviciul World Wide Web
• Spațiu de informație
• Printre cele mai cunoscute servicii din
Internet – oferă acces la resurse și alte
servicii
• NU trebuie confundat cu Internetul
• Web-ul este un serviciu ce funcționează
deasupra Internetului
• Servicii bazate pe www:
• Engine-uri de căutare (Google)
• Rețele de socializare (Facebook)
• Webmail (Gmail, Yahoo)

40
Concepte www
• Trei tehnologii de bază
• URL (Uniform Resource Locator)
• HTTP (Hypertext Transfer Protocol)
• HTML (Hypertext Markup Language)
• URL: identificator al resursei
• Protocol://hostname/path/to/resource
• HTTP: protocolul folosit în web pentru
accesarea paginilor web (HTTPS – HTTP secure)
• HTML:
• Limbaj de descriere, folosit pentru a putea reda
informații, imagini și alte resurse pe o pagină web
• Informațiile sunt afișate de un navigator (browser)

41
Servere și clienți web
• Servere web
• Apache Web Server
• Microsoft IIS
• Lighttpd, nginx
• Clienți web (browsere, navigatoare)
• Microsoft Internet Explorer 6, 7, 8
• Mozilla Firefox 3.5, 3.6
• Opera
• Netscape Navigato
• Lynx, w3m

42
WGET și CURL
• Ambele sunt folosite pentru descărcarea
resurselor cu suport pentru protocoale web
precum HTTP și HTTPS și FTP iar în cazul
curl, IMAP, SFTP și altele
• Primesc un URL si pe baza lui descarcă
resursa web identificată

razvan@einherjar:~$ wget http://elf.cs.pub.ro/uso/curs-09-handout.pdf


[...]
2014-11-15 16:15:17 (8.59 MB/s) - ‘curs-09-handout.pdf’ saved
[2064143/2064143]

43
SSH
• Secure shell
• Protocol pentru comunicare sigură, criptată
• Folosit pentru conexiune la distanță (ssh)
• ssh username@hostname
• O dată realizată conexiunea la distanță se
pot rula comenzi ca într-un shell obișnuit
• Folosită pe sisteme cu acces SSH, putem
transfera fișiere, într-un mod sigur, cu
comanda scp
• scp local_file username@hostname:path

44
Atacuri cibernetice

https://phys.org/news/2018-03-spain-captures-alleged-mastermind-12b.html
45
Computer Networks
• Andrew S. Tannenabum
• Ediția a 5-a, 2010
• Privire de ansamblu a
rețelelor de calculatoare
(întreaga stivă)
• Stil degajat de prezentare,
ușor de înțeles
• Folosită ca suport pentru
multe cursuri de
rețelistică

46
Jon Postel
• Unul din principalii
contribuitori la dezvoltarea
Internetului
• Editorul RFC (Request For
Comments) – protocolul
IP, circa 200 RFC-uri
• Director al IANA (Internet
Assigned Numbers
Authority)
• Administrator al
domeniului .us din DNS

47
Cisco
• Cisco Systems, Inc
• Fondată în 1984
• San Francisco (de unde și
numele și sigla)
• Echipamente de rețea
• Produse pentru uz în Internet
și pentru „home users”
• Program de certificări (CCNA,
CCNP, CCIE)
• Cisco Networking Academy

48
OpenFlow
• Idee apărută în 2008, încă în dezvoltare
• Permite delegarea deciziilor de
rutare/comutare/forwarding de la
switch/ruter altundeva (în software)
• OpenFlow Switch + OpenFlow Controller
• Oferă flexibilitate
• Combinat cu soluții de virtualizare
• Adoptat în ultima perioadă, de majoritatea
producătorilor de echipamente de rețea
• http://www.openflow.org/

49
Cuvinte cheie
• Rețea
• Switch
• Ruter
• Gateway
• Servicii de rețea
• Protocol
• Client-Server
• Peer-to-peer
• Internet
• FTP, HTTP, wget, SSH
• E-mail
• www

50
Cursul #4
Dezvoltarea programelor

1
There are only two kinds of programming
languages: those people always bitch about
and those nobody uses.
Bjarne Stroustrup

2
Suport de curs
• Capitolul 6 - Dezvoltarea aplicațiilor
• https://github.com/systems-cs-pub-ro/carte-
uso/releases

3
Evoluția programării
• La început se foloseau
benzi magnetice sau
perforate pentru a executa
operații simple pe mașinile
de calcul
• Odată cu evoluția
procesoarelor, a apărut
limbajul de asamblare
• În prezent, folosim cel mai
des limbaje de nivel înalt

4
Conexiune dezvoltator - utilizator

Fișier
cod
Fișier Utilizator
obiect
sursă compilare

Fișier
Fișier Fișier Pachet
cod software
obiect executabil
sursă compilare

Dezvoltator biblio-
tecă Fișier
Fișier de
de
configurare
date
5
Pachete software
• Arhive cu fișierele necesare pentru instalarea
aplicației
• Fișiere de date, fișiere de configurare, fișiere
executabile
• Utilizatorul instalează pachetele software și apoi
folosește fișierele din acestea
• dpkg – manager de pachete

student@host:~$ dpkg -L tcpdump


[...]
/usr/share/man/man8/tcpdump.8.gz # pagina de manual
[...]
/usr/sbin/tcpdump # executabilul din pachet

6
Operațiile utilizatorului cu
aplicațiile
• Instalare
• Dezinstalare
• Parcurgere documentație
• Configurare și personalizare
• Rulare
• Dezvoltatorul trebuie să îi facă viața cât mai
ușoară utilizatorului

7
Fișiere cod sursă
• Conțin instrucțiuni scrise într-un anume
limbaj de programare, adesea limbaj de nivel
înalt
• Codul citibil al unui limbaj de programare:
format text
• Este scris de programator
• Primul pas în dezvoltarea unui program
• Aplicația principală necesară: editor de text

8
Editoare
În mod text: În interfață grafică:
• Vim • Sublime Text
• Recunoaște limbajele
• Se găsește pe toate de programare
sistemele Unix • Suportă extensii (ex.
• Funcționează în Git)
linia de comandă • Atom
• Foarte configurabil • Asemănător Sublime
Text, dezvoltat de
• Nano GitHub
• Are sursa deschisă și
• Pico nu percepe nicio taxă
• Emacs • Visual Studio Code

9
Caracteristici editoare
• Indentarea automată a codului
• Evidențierea cuvintelor cheie
• Semnalarea erorilor
• Autocompletion
• Utilitare pentru debugging integrate

10
Medii integrate de dezvoltare (IDE)

• Asemănătoare cu editoarele de text, acestea


au în plus funcționalități avansate, precum
faptul că au compilatoare sau interpretoare
integrate
• De obicei sunt adaptate pentru un număr
redus de limbaje
• Oferă sugestii mai relevante programatorului
și metode avansate de a depana programele
• Exemple: Eclipse, CodeBlocks, Microsoft
Visual Studio, NetBeans, Xcode
11
Compilare
• Codul sursă este translatat de un program
denumit compilator în cod mașină (machine
code), după care poate fi executat
• Exemple compilatoare: GCC – GNU Compiler
Collection (pt C/C++,Fortran), MSVC –
Microsoft Visual C (pt C/C++)
• Exemple de limbaj de programare compilat:
C, C++, Pascal

12
Etapele compilării
• Preprocesare: se înlocuiesc macro-uri, se
numerotează fiecare linie de cod; rezultatul e un
fișier cu extensia „.i”
• Compilare: codul sursă este transformat în cod în
limbaj de asamblare; rezultatul e un fișier cu
extensia „.s”
• Asamblare: codul în limbaj de asamblare este
transformat în cod mașină; rezultatul e un fișier cu
extensia „.o”
• Link-editare: se fac legăturile către fișiere externe
care conțin simboluri sau funcții apelate din fișierul
sursă; dacă avem o funcție definită într-un fișier și
folosită în altul, implementarea funcției trebuie
legată de apelul ei

13
Etapele compilării

14
Interpretare
• Un program este executat direct din cod sursă
prin intermediul unui interpretor
• Interpretorul ia fiecare linie, generează codul
mașină aferent ei, codul este rulat pe procesor,
după care operația este reluată
• Limbajele interpretate nu oferă acces direct la
resursele hardware, ceea ce le face mai sigure,
dar și mai ineficiente
• Pentru dezvoltarea de aplicații care nu țin de
sistemul de operare
• Exemple de interpretoare: GCL – GNU Common
Lisp (pt Common Lisp), Python (pt Python), Perl
(pt Perl)

15
Compilare vs interpretare
Compilare Interpretare
• Viteză mare de execuție • Codul sursă se
– compilarea e un compilează la fiecare
proces separat față de rulare
execuția programului
• Are mai multă
• Codul mașină rezultat în portabilitate, deoarece
urma compilării poate pot fi direct rulate pe
rula doar pe un anumit orice arhitectură
tip de procesor
• Limbajele interpretate
• Limbajele compilate presupun că orice
permit distribuirea unui mașină care va rula
executabil pe alte aplicația dezvoltată
mașini, fără sa fie nevoie trebuie să conțină codul
de publicarea codului sursă ce va fi rulat
sursă

16
Limbaje hibride
• Îmbină elemente de compilare cu elemente
de interpretare, pentru a rezulta în aplicații
portabile, rapide și sigure
• Transformă codul sursă într-un cd
intermediar, care se numește bytecode, care
va fi apoi interpretat
• Exemple de limbaje hibride: Java, C#,
JavaScript

17
Biblioteci și framework-uri
• Un alt aspect important în dezvoltarea
programelor
• Bibliotecile: colecții de resurse pe care le
integrăm în aplicațiile noastre pentru a ne
ușura procesul de dezvoltare
• Framework: oferă un schelet pe care
aplicația îl urmează pentru a beneficia de
proprietățile framework-ului
• Pentru a fi folosite, acestea trebuie să existe
pe sistemul pe care lucrăm
18
De ce programare în C?
• Limbaj foarte cunoscut
• Limbaj foarte puternic
• Limbaj aproape de hardware și de sistemul
de operare, ceea ce îl face eficient și rapid
• Aduce un nivel de abstractizare peste
limbajul de asamblare, ușurând scrierea
programelor, dar presupunând o cunoaștere
avansată a funcționării procesorului

19
De ce nu programare în limbajul C?

• Limbaj relativ greu de învățat


• Limbaj periculos, necesită experiență
• Limbaj mai puțin expresiv
• Durează mult timp să dezvolți o aplicație
• Posibile probleme de portabilitate (Linux,
Windows, Mac OS X, Android, etc)

20
Dezvoltarea aplicațiilor în C
• Cel mai cunoscut compilator este gcc (GNU
Compiler Collection)
• Pentru folosirea compilatorului este suficient
să rulăm comanda gcc cu parametrii aferenți

21
Compilare de program simplu în C
student@host$ ls -F
hello-world.c
student@host$ gcc hello-world.c
student@host$ ls -F
a.out* hello-world.c
student@host$ rm a.out
student@host$ ls -F
hello-world.c
student@host$ gcc -Wall hello-world.c -o hello-world
student@host$ ls -F
hello-world* hello-world.c
student@host$ ./hello-world
Hello, World!

22
Compilare și linking de program
simplu în C
student@host$ ls -F
hello-world.c
student@host$ gcc -Wall -c hello-world.c
student@host$ ls -F
hello-world.c hello-world.o
student@host$ gcc hello-world.o -o hello-world
student@host$ ls -F
hello-world* hello-world.c hello-world.o
student@host$ ./hello-world
Hello, World!

23
Modularizare și modul
• Do one thing, do one thing well!
• Funcționalitățile diferite intră în fișiere sursă
diferite
• Evităm ingrămădirea funcționalităților într-un
singur fișier
• Fiecare fișier este numit „modul” (module)
sau „unitate de compilare” (compilation unit)

24
Compilare și linking din surse
multiple
user@host$ ls -F
debug.h http_reply_once.c sock_util.c sock_util.h util.h
user@host$ gcc -Wall -c sock_util.c
user@host$ gcc -Wall -c http_reply_once.c
user@host$ ls -F
debug.h http_reply_once.o sock_util.h util.h
http_reply_once.c sock_util.c sock_util.o
user@host$ gcc http_reply_once.o sock_util.o -o
http_reply_once
user@host$ ls -F
debug.h http_reply_once.c sock_util.c sock_util.o
http_reply_once* http_reply_once.o sock_util.h util.h

25
Procesul de build
• Building: obținerea unui executabil, a unui
set de executabile sau a unui pachet
software din fișiere cod sursă
• O versiune de pachet construită se mai
cheamă și un build
• Pentru programe scrise în C înseamnă
compilare, linkind, împachetare

26
Sisteme de build
• Cele care permit automatizarea procesului
de build, deoarece este obositor să rulăm
toate comenzile de fiecare dată când
aducem o modificare codului sursă
• make: folosit foarte mult în lumea
Unix/Linux
• Ant, Maven: folosit pentru Java
• Scons: scris în Python
• Rake: folosit pentru Ruby
• altele

27
Automatizarea procesului de build -
make
• Utilitarul de automatizare cel mai folosit pentru
aplicațiile C/C++
• Pentru a folosi make e suficient să creăm un fișier
cu numele Makefile în structura programului nostru
• În Makefile se scriu reguli – un fel fișier cu rețete
• La rularea comenzii make, utilitarul găsește acel
fișier și execută instrucțiunile descrise
• Formatul unui fișier makefile:

Regula: dependinte
<tab> comanda

28
Exemplu fișier Makefile
build: utils.o hello.o help.o • Regula reprezintă numele
gcc utils.o help.o
hello.o -o hello unei instrucțiuni
• La simpla rulare a comenzii
all: make, prima regulă din fișier
gcc simple_hello.c -o este cea care va fi executată
simple
• make <nume_regula>: va
utils.o: utils.c executa comanda aferentă
gcc –c utils.o regulii cu numele respectiv
• Dependințele sunt fișiere sau
hello.o: hello.c
gcc –c hello.c reguli necesare pentru a rula
o regulă
help.o: help.c
gcc –c help.c

clean:
rm –f *.o hello

29
Folosire simplă make
all: hello-world

hello-world: hello-world.c
gcc –Wall hello-world.c –o hello-
world

clean:
rm –f hello-world hello-world.o

student@host$ ls -F
hello-world.c
student@host$ make
gcc -Wall hello-world.c -o hello-world
student@host$ ls -F
hello-world* hello-world.c

30
Folosire elegantă a Make pentru surse
multiple

.PHONY: all clean

All: http_reply_once
student@host$ ls -F
http_reply_once: http_reply_once.o sock_util.o Makefile debug.h http_reply_once.c sock_util.c
gcc http_reply_once.o sock_util.o -o sock_util.h util.h
http_reply_once student@host$ make
gcc -Wall -c http_reply_once.c
http_reply_once.o: http_reply_once.c util.h gcc -Wall -c sock_util.c
debug.h sock_util.h gcc http_reply_once.o sock_util.o -o
gcc -Wall -c http_reply_once.c http_reply_once
student@host$ ls -F
sock_util.o: sock_util.c util.h debug.h sock
util.h
Makefile http_reply_once* http_reply_once.o
gcc -Wall -c sock util.c sock_util.h util.h
debug.h http_reply_once.c sock_util.c sock_util.o
clean:
rm -f http_reply_once
http_reply_once.o sock_util.o
rm -f *

31
Depanarea programelor
• O mare parte din timpul destinat dezvoltării
aplicațiilor îl dedicăm depanării
• Se întâmplă de multe ori ca programul rulat să
arunce o eroare sau sa nu obținem rezultatul
dorit
• Erorile pot să varieze de la un simbol uitat până
la accesări ilegale de memorie sau erori în logică
• Unul din cele mai cunoscute utilitare este gdb
• Cea mai simplă metodă de depanare e să afișăm
mesaje pe parcursul execuției, dar nu este deloc
eficientă

32
Sisteme de management și
versionare
• Avem nevoie de ele pentru a ne ușura lucrul
în echipă la proiecte complexe, pentru a
partaja cod intr-un mod eficient si sigur
• Git:
• Sistem de management și versionare a codului
sursă care permite partajarea unui proiect în
cadrul echipei
• Proiectul este stocat într-un repository
• Fiecare utilizator lucrează la o versiune proprie a
proiectului, pe care apoi o urcă online și este
automat integrată în proiect

33
Licențe pentru programe
• Oferă informații despre dreptul de folosire și
distributie a programului
• Când publicăm un program pe care l-am dezvoltat,
este important să definim scopul aplicației și să îi
atribuim o licență corespunzătoare
• De asemenea, este foarte important să verificăm
licența fiecărui pachet extern pe care îl integrăm în
aplicația noastră
• Licența unui modul extern poate dicta licența pe
care trebuie să o atribuim programului nostru
• Cele mai cunoscute licențe software: GNU GPL, GNU
LGPL, MIT

34
Resurse utile
• http://www.oualline.com/style/index.html
• http://www.gnu.org/software/make/
• http://www.gnu.org/software/libc/manual/
• http://git-scm.com/
• http://gitimmersion.com/
• http://www.moolenaar.net/habits.html

35
Compilers: Principles, Techniques
and Tools
• The Dragon Book
• Aho, Sethi, Ullman
• 2nd Edition, 2006
• cartea de bază pentru toate cursurile de
compilatoare din universități
• expunere exhaustive a analizei sintactice,
semantice și parserelor

36
Guido van Rossum
• inventatorul limbajului de programare Python
• benevolent Dictator for Life (BDFL) pentru
Python
• a activat la Google în perioada 2005-2012
• din 2013 lucrează la Dropbox

37
Google
• google.com - cel mai folosit site din lume
• fondată de Larry Page și Sergey Brin
• Lansată în 1998
• Inițial: search engine + advertising
• Aplicații web
• Android
• Chrome
• YouTube

38
Valgrind
• http://valgrind.org
• detectarea de probleme la rulare (runtime)
• în principal folosit pentru probleme de lucru
cu memoria
• Linux și Darwin (Mac OS X)
• un engine peste care rulează componente
dedicate: memcheck (implicit), cachegrind,
callgrind, helgrind

39
Cuvinte cheie
• Cod sursă • Linking
• Cod mașină • Limbajul C
• Editor • gcc
• IDE • modularizare
• Pachet Software • Sistem de build
• Fișier executabil • make
• Fișier Obiect • Makefile
• Compilare • Git

40
Cursul #5
Interfața în linia de comandă

1
It was a mistake to think that GUIs ever would,
could, or even should, eliminate CLIs.

Jeffrey Snover (Architect of Windows


PowerShell)

2
Suport de curs

Capitolul 7 – Interfața în linia de comandă


• https://github.com/systems-cs-pub-ro/carte-uso
/releases

3
Utilizatorul și sistemul de
operare

app1 app2 app3

sistem de operare

hardware

4
Shell-ul

app1 app2 app3 shell

sistem de operare

hardware

5
Shell și proces
• utilizatorul folosește interfața shell-ului
• butoane, click (GUI)
• comenzi cu parametri (CLI)
• shell-ul identifică un fișier executabil
• shell-ul creează un proces copil
• procesul copil încarcă informațiile din
executabil
• procesul astfel creat e noul proces/aplicație

6
Shell GUI vs CLI
• interfață intuitivă • interfață text,
• culori, simplă
personalizare • opțiuni complexe
• eye-candy • comenzi, parametri
• ferestre • consum redus de
• butoane resurse
• meniu • consecvență
• resurse consumate

7
Interfețe în linia de comandă
• shell-ul CLI al unui sistem de operare (Bash,
zsh, tcsh)
• consola GRUB (bootloader)
• consola Python
• consola de configurare de echipamente de
rețea (Cisco IOS, Juniper JunOS)
• consola Matlab, AutoCAD, R
• consolă de jocuri (FPS)

8
De ce CLI?
• eficient
• consecvent
• posibilitate automatizare sarcini (scripting)
• ușor de adăugat o opțiune nouă
• o comandă nouă = un executabil nou

9
Funcționare CLI
• utilizatorul introduce comanda
• interfața traduce comanda într-un apel intern
sau de executabil intern
• creează un proces
• afișează rezultatul rulării comenzii

10
Shell CLI
• prompt pentru utilizator
• comenzile sunt:
• interne: sunt interpretate de shell, nu se caută
executabile externe: cd, exit, alias
• externe: căi către executabile

• http://www.pixelbeat.org/cmdline.html

11
Bash
• shell implicit în Linux
• Bourne Again Shell
• succesor al Sh (Bourne Shell)
• multe funcționalități sunt comune cu alte
shell-uri: zsh, tcsh
• executabilul este /bin/bash

12
Funcționare shell
• shell-ul traduce comanda în calea unui
executabil
• variabila de mediu PATH
• se iau căile din variabila de mediu PATH
• se localizează executabilul
• se creează un proces copil
• se încarcă executabilul
• se așteaptă încheierea rulării executabilului
• se reafișează promptul utilizatorului
13
Foreground și background
• un singur proces rulează în foreground
• oricâte în background
• în background pot fi suspendate

14
Foreground și background (2)

15
Shell și terminal

16
Funcționalități terminal
• tab-uri de terminal
• Ctrl+d: închide terminalul
• command history scrolling
• transparență
• blinking cursor, terminal bell

17
Funcționalități shell
• completare comenzi (command completion)
• Tab
• Tab Tab
• Alt+.
• istoricul de comenzi (reverse history search)
• Ctrl+r
• personalizare prompt
• variabila PS1
• editarea comenzilor (command line editing)
• deplasare: Ctrl+a, Ctlr+e, Ctrl+f, Ctrl+b, Alt+f, Alt+b
• ștergere: Ctrl+c, Ctrl+k, Ctlr+u, Alt+d, Alt+Backspace

18
Caractere speciale în shell
• spațiu (blank): separator de argumente
• #: comentariu
• *: wildcard
• &, |, ; - înlănțuire comenzi
• >, < - redirectări
• $ - expandări
• ’, ”, \ - escapări

• https://explainshell.com
19
Globbing
ana@host:~/code/tests$ ls
Makefile endian.c struct_bit struct_bit.o tcp_new_sock.c
endian endian.o struct_bit.c tcp_new_sock tcp_new_sock.o
ana@host:~/code/tests$ ls *.c
endian.c struct_bit.c tcp_new_sock.c
ana@host:~/code/tests$ ls end?an.c
endian.c
ana@host:~/code/tests$ ls [a-s]*.c
endian.c struct_bit.c
ana@host:~/code/tests$ ls *.{c,o}
endian.c endian.o struct_bit.c struct_bit.o tcp_new_sock.c tcp_new_sock.o

20
Escapări
ana@host:/tmp/uso$ ls -l
total 0
-rw-r--r-- 1 ana ana 0 2007-11-18 00:14 alfa beta.txt
-rw-r--r-- 1 ana ana 0 2007-11-18 00:14 d.txt
ana@host:/tmp/uso$ ls alfa beta.txt
ls: alfa: No such file or directory
ls: beta.txt: No such file or directory
ana@host:/tmp/uso$ ls "alfa beta.txt"
alfa beta.txt
ana@host:/tmp/uso$ ls 'alfa beta.txt'
alfa beta.txt
ana@host:/tmp/uso$ ls alfa\ beta.txt
alfa beta.txt
ana@host:/tmp/uso$ echo $a
4
ana@host:/tmp/uso$ echo "$a"
4
ana@host:/tmp/uso$ echo \$a
$a
ana@host:/tmp/uso$ echo '$a'
$a

21
Expandări
ana@host:-$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/usr/local/PacketTracer5

ana@host:~/tmp$ touch $(seq -f "file-%02g.txt" 1 20)


ana@host:~$ ls
file-01.txt file-03.txt file-05.txt file-07.txt file-09.txt file-11.txt file-13.txt [...]
file-02.txt file-04.txt file-06.txt file-08.txt file-10.txt file-12.txt file-14.txt [...]

ana@host:~$ a=3
ana@host:~$ ((a++))
ana@host:~$ b=$((a+1))
ana@host:~$ echo $b
5

22
Redirectări
• > - redirectarea ieșirii standard
• < - redictarea intrării standard
• 2> - redirectarea ieșirii de eroare standard
• pentru redirectare formatul comenzii este
command operator file
• în cazul comunicării între procese forma este
command1 |command2

23
Înlănțuirea comenzilor
ana@host:~$ svn log | less

root@asgard:~# apt-get update ; apt-get upgrade ;


apt-get dist-upgrade

ana@host:~$ id ana &> /dev/null && echo "da" ||


echo "nu"
da
ana@host:~$ id atilla &> /dev/null && echo "da" ||
echo "nu"
nu

24
One linere
• înlănțuirea mai multor comenzi, de obicei
prin pipe
• ieșirea uneia e folosită de alta și tot așa
• quick’n’dirty
• funcționalități mai complexe într-o singură
linie

25
Filtre de text
• prelucratoare de text
• din alte fișiere
• din alte comenzi
• comenzi generatoare de text
• ps, dmesg, find, last, strace
• filtre/prelucratoare de text
• cat, tac, rev, nl
• Head, tail
• cut, tr
• sort, uniq, wc
• grep
• sed, awk

26
cat, tac, rev, nl
• cat: afișare conținut fișier
• tac: afișare conținut fișier în ordinea inversă
a liniilor
• rev: afișare linii inversate (primul element de
pe linie devine ultimul)
• nl: afișare număr de linie

27
head, tail
• head –n 10: primele 10 linii
• head –n -10: toate mai puțin ultimele 10 linii
• tail –n 10: ultimele 10 linii
• tail –n +11: începând cu linia 11

28
cut, tr
• cut –d ‘ ‘ –f 1
• cut –d ’:’ –f 2,3
• tr ‘ ‘ ‘,’
• tr –d ‘:’

29
sort, uniq, wc
• sort: sortează intrările
• sort –r –n: sortează invers, numeric
• uniq: elimină duplicatele (trebuie sortate mai
întâi)
• wc: numără elementele
• wc –c: numără caracterele
• wc –l: numără liniile

30
Exemplu

31
grep
• extrage liniile care se potrivesc cu
parametrul
• ps –ef | grep misc
• grep –r ”main()” code/
• grep ‘^admin:’ /var/log/messsages

32
Expresii regulate
• mod de a potrivi (match) mai multe șiruri
• a*: a de oricâte ori (posibil niciodată)
• a+: a de oricâte ori, măcar o dată
• a?: a o dată sau nici o dată
• ^: început de linie
• $: sfârșit de linie
• [a-z]: de la a la z
• [^a-z]: orice mai puțin de la a la z
• .: orice

• https://regex101.com

33
Expresii regulate
[_a-zA-Z][_0-9a-zA-Z]*: nume de
variabilă/funcție
07[:digit:]\{8\}: număr de telefon
[:upper:][:alpha:]+: numele unei persoane
[:digit:]\{2\}\.(pdf|png|svg): nume fișiere din
două cifre și diferite extensii
([01][:digit:]|2[0-3]):[0-5][:digit:]: timp în ore
și minute
^[:upper:]\{1,10\}$: linii conținând maxim 10
majuscule

34
Windows Power Shell
• CLI pentru Windows
• rulează de la Windows XP SP2 în sus
• integrare cu .NET framework
• cmdlets: aplicații .NET
• automatizare, scripting
• pipeline de obiecte (objects), nu de șiruri de
caractere ca în Unix

35
Resurse utile
• http://www.pixelbeat.org/cmdline.html
• https://explainshell.com
• https://tldr.ostera.io/
• https://regex101.com/
• https://mywiki.wooledge.org/BashFAQ (pentru
avansați)

36
Unix Power Tools
• ediția a 3-a, 2002
• enciclopedie a facilităților
Unix
• 1100 de pagini, 51 de
capitole
• pentru power users -
utilizatori avansați care vor
să folosească la maxim
sistemul
• capitole excelente despre
shell și shell scripting

37
Rob Pike
• parte a echipei Unix
• ulterior, dezvoltator
la Plan 9 și Inferno
• cărți și proiecte
împreună cu Ken
Thompson, Brian
Kernighan
• UTF-8

38
Amazon
• Amazon.com, Inc.
• comerț electronic (online retailer)
• fondată în 1994, online în 1995
• inițial librărie online
• Amazon Kindle
• în 2010, vânzările de e-books au depășit
vânzările de cărți în format printat
• Amazon Web Services: servicii de
stocare și rulare, cloud computing
• Amazon EC2: închiriere de mașini
virtuale
• Amazon S3: servicii de stocare

39
Cuvinte cheie
• interfață • editare comenzi
• shell • globbing
• GUI • escaping
• CLI • expandare
• Bash • redirectare
• terminal • înlănțuire
• istoric • one-liner
• completare • filtru de text
comenzi • expresii regulate
40
Cursul #6
Automatizarea sarcinilor. Shell Scripting

1
Some people, when confronted with a
problem, think “I know, I’ll use regular
expressions.” Now they have two problems.
Jamie Zawinski (JWZ)

2
Suport de curs

Capitolul 13 - Automatizarea sarcinilor


• https://github.com/systems-cs-pub-ro/carte-
uso/releases

3
Ce este un Script Shell
• O înșiruire de comenzi shell
• Este interpretat de shell: se interpretează
pe rând fiecare comandă
• Pe lângă comenzi externe, sunt folosite și
comenzi interne, precum if, for, while, case
• Facilități shell precum command expansion

4
Perspective pentru shell
scripting
• quick’n’dirty: dacă e prea complicat trebuie
apelat la un limbaj de programare
• folosește comenzi și resurse existente
• nu reinventa roata
• există mai multe moduri de a face un lucru
• alege cel mai bun pentru situația dată
• comunicare folosind text
• atenție la caractere speciale
• niciodată nu vei ști suficient de mult shell
scripting: documentează-te, exersează și
îmbunătățește
5
Rulare script
• bash myscript.sh
• chmod a+x myscript.sh && ./myscript.sh

• #! -> shebang
• indică interpretorul scriptului

6
Exemplu Shell Script

#!/bin/bash

sudo mdutil -a -i off


sudo launchctl unload -w
/System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo launchctl load -w
/System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo mdutil -a -i on
sudo mdutil -E /

7
Utilizarea Shell Scripting
• automatizare
• înlănțuire comenzi pentru un rezultat mai
complex
• task-uri repetitive
• se rulează scriptul la nevoie
• prelucrare de date
• task-uri simple
• quick’n’dirty
• se folosesc filtre de text: prelucrează text
(head, tail, grep, cut, tr, awk, sed)

8
One liner
• Înlănțuirea unor comenzi
• De obicei legate prin operatorul pipe ( | )
• Ceva util _acum_, nu neapărat permanent, in
schimb un shell script poate fi refolosit
• Orice shell script poate fi un one liner

• http://www.bashoneliners.com

9
Dezvoltarea de scripturi shell

10
Comenzi existente
• Nu trebuie să fie complicat
• acolo unde o comandă are opțiuni utile, se
folosesc acelea
• Comenzi de afișare: NU se folosesc în
scripturi
• ls, ps, df, ifconfig, w
• Comenzi de prelucrare: se folosesc în
scripturi
• stat, find, fișierele din /proc, grep

11
Înlănțuire de comenzi
• pipe (operatorul |)
• expandarea comenzilor: $( ... )
• folosire nouă a comenzilor existente
• preluarea outputului unei comenzi
• la intrarea standard a alteia (pipe)
• ca argument al alteia (expandare)

12
Variabile
• stocare de valori
• nu au un tip de date
• $?: codul de ieșire al ultimei comenzi
• $$: PID-ul procesului curent
• $#: numărul de parametri în linia de
comandă
• $1, $2, ...: al N-lea parametru

13
Controlul fluxului
• instrucțiuni de decizie: if, case
• intrucțiuni de ciclare: for, while

14
Construcția if
• De obicei, if comanda1 e if comanda1; then

de forma: else
comanda2

• If test conditie comanda3


fi

• Verifică dacă există • Verifică dacă există


fisierul: argumente:
if test –f ”$file”; then if test ”$#” –ne 1; then
echo ”Usage: $0 argument”
echo ”File $file exists.”
exit 1
fi fi

15
Construcția for
• List e o construcție for i in list; do
command1
asemănătoare cu o command2 ...

listă done

• Parcurgerea utilizatorilor din sistem


for user in $(cut –d ‘:’ –f 1); do
nlogins=$(last ”$user” | grep ”^$user” | wc -l)
echo ”User $user logged in $nlogins times recently.”
done

16
Construcția while read
• parsing cu while read while read field1 field2 ...; do

• mai puternic decât command1


command2 ...
cut, mai slab decât done < file

awk
• IFS: Input field separator
• Extragerea numelui de utilizator și a
directorului home
IFS=”:”; while read user x y z t home v; do echo ”$user:$home”;
done < /etc/passwd

17
For vs while
• for pentru elemente dintr-o listă
• listă de utilizatori
• listă de fișiere
• while pentru parsing (împărțire elemente de
pe o linie în bucăți)
• date tabelare pentru prelucrare

18
Funcții
• mai rar folosite ca într-un limbaj de
programare
• înglobarea unor acțiuni
• se apelează similar unui script
• pot avea argumente:
• $1, $2 ... devin argumentele funcțiilor

19
Exemplu funcții
#!/bin/bash
OFFLINEIMAP=/opt/local/bin/offlineimap
LOGFILE=~/.log/offlineimap-cron.log

function check_alive()
{
ps -ef | grep "$OFFLINEIMAP" | grep -v grep > /dev/null 2>&1
}

check_alive
if test $? -ne 0; then
nohup nice -n 19 "$OFFLINEIMAP" >> "$LOGFILE" 2>&1 &
fi

exit 0
20
Expresii regulate - Utilizare
• Regular expressions sau regex
• Cautare (searching, pattern matching)
• Validarea unui șir, a unui text, a unei intrări
(număr de telefon, URL, nume de variabilă)
• Substituirea unei expresii

21
Când să nu folosești expresii
regulate
• Când existe parsere
• Când există aplicații, tool-uri, funcții mai
bune pentru a face aceste lucru
• Pentru anumite tipuri de date (adrese de e-
mail, HTML): fie nu se poate, fie e foarte
greu
• Atunci când folosite abuziv, fac codul
nementenabil/nelizibil

22
Metacaractere în expresii
regulate
• ^ : început de linie
• $ : sfârșit de linie
• . : orice caracter
• [...] : set de caractere
• ? : expresia anterioară cel mult o dată
• * : expresia anterioară de oricâte ori posibil
niciodată
• + : expresia anterioară de oricâte ori cel puțin o
dată
• e1|e2 : expresia de dinainte sau cea de după
23
Exemple de expresii regulate
• [_a-zA-z][_0-9a-zA-Z]*
• Nume de variabilă/funcție
• 07[:digit:]{8}
• Număr de telefon
• [:upper:][:alpha:]+
• Numele unei persoane
• ^[:upper:]{1,10}$
• Linii conținând maxim 10 majuscule
• [:digit:]{2}\.{pdf|png|svg}
• Nume fișiere din două cifre și diferite extensii

24
Regex vs globbing
• Globbing este folosit în shell, în special
pentru filename expansion
• Globbing poate fi considerat o formă mai
slabă de expresie regulate
• Expresiile regulate sunt puternice cu mai
multe cazuri de utilizare și suport în
majoritatea limbajelor/framework-urilor
moderne

25
Suport expresii regulate
• Utilitare shell: grep, awk, sed
• Limbaje de programare: Perl, Python, PHP,
Ruby, Java, JavaScript, C++11
• Editoare: Vim, Emacs
• Baze de date
• Biblioteci cu suport de expresii regulate:
Gnulib

26
Sfaturi Shell Scripting
• nu folosiți shell scripting pentru ceea ce se
face mai bine/ușor/eficient în Python, C,
Java, Ruby, PHP etc
• nu reinventați roata
• folosiți ghilimelele când referiți valoarea
unei variabile
• folosiți cea mai bună opțiune (cut, grep, tr,
awk, sed, while read) după nevoie
• folosiți opțiuni de tip expresii regulate sau
similare între apostrofuri

27
Regular Expressions Cookbook
• Jan Goyvaerts, Stevemn
Levithan
• creatorii
http://www.regular-
expressions.info/,
http://regexpal.com/
• 2nd Edition
• practică, multe „rețete”
• o recenzie aici:
https://blog.codinghorror.co
m/regular-expressions-for-
regular-programmers/

28
Larry Wall
• creatorul Perl
• BDFL pentru
proiectorul PERL
• autorul programului
patch
• câștigător al
International
Obfuscated C Code
Contest

29
Lua
• limbaj de programare de scripting
• paradigme multiple (la fel ca Python)
• proiectat pentru a fi ușor încorporat în alte
limbaje
• API C simplu
• limbaj de scripting pentru dezvoltatorii de
jocuri
• folosit de limbajul de scripting al utilitarului
nmap
• folosit pentru configurarea managerului de
ferestre Awesome
30
Cuvinte cheie
• variabile
• variabile de mediu
• one line
• filtru de test
• script shell
• IFS
• while read
• for
• if
• expresii regulate
• metacaractere
31
Cursul #7
Componente hardware. Pornirea sistemului

1
Software gets slower faster than hardware
gets faster
Wirth’s Law

2
Suport de curs
• Capitolul 8 – Componente hardware
• https://github.com/systems-cs-pub-ro/carte-
uso/releases
• Capitolul 9 – Pornirea sistemului
• https://github.com/systems-cs-pub-ro/carte-
uso/releases

3
Hardware-la ce e bun?
• Suport pentru software, pentru rulare de aplicații –
procesor, memorie
• Interacțiunea cu utilizatorul – monitor, tastatură,
mouse, joystick, căști, micofon
• Stocare – hard disk drive (HDD), solid state drive
(SDD), USB flash drive, CD-ROM
• Interconectare – controllere de rețea (wireless,
Ethernet, 3G), porturi pentru interconectare (USB,
serial, paralel)

Rolurile se aplică peste tot: PC, Tabletă, Smartphone

4
Cunoașterea componentelor
• Cunoaștere utilă pentru:
• Achiziții de hardware
• Instalarea sistemului de operare compatibil
• Instalarea driverelor compatibile
• Optimizarea rulării aplicațiilor
• Depanare
• Monitorizarea sistemului

5
Clasificări hardware
Arhitectura Von Neumann
• O descriere logică a unui sistem
de calcul ce include:
• Unitate de procesare/Procesor
• Unitate de control – configurează
și dă comenzi perifericelor
• Unitatea aritmetico-logică –
realizarea calculelor
• Unitatea de memorie
• Oferă rapid procesorului datele
necesare realizării calculelor
• Dispozitive de intrare/ieșire (I/O)
• Datele provenite de la utilizatori

6
Clasificări hardware
Arhitecturi de procesor
• În funcție de tipul instrucțiunilor pe care îl execută
(ISA)
• Reduced Instruction Set Computer (RISC)
• Arhitectura load/store
• Orice operație se realizează prin încărcarea conținutului
memoriei în registre
• După finalizarea operației conținutul e salvat în memorie
• Complex Instruction Set Computer (CISC)
• Execută în aceeași instrucțiune primită de la utilizator mai
multe operații, numite micro-instrucțiuni

7
Clasificări hardware
Arhitectura ARM Arhitectura x86
• Arhitectură de tip RISC • Arhitectură de tip CISC
• Față de x86, toate • Utilizatorul poate înlocui
componentele sunt separat procesorul,
integrate pe aceeași memoria, plăcile de
plăcuță (SoC –System procesoare
on Chip)

8
Sisteme încorporate
• Embedded systems
• 98% din procesoare sunt folosite în sisteme
încorporate
• În general folosesc o construcție de tipul
SoC (System on a chip)
• Un SoC încorporează procesor, memoria
RAM, memoria flash, controllere, magistrale,
GPU
• Telefoane mobile, ceasuri inteligente

9
Componentele unui PC

10
Componentele unui PC
• Carcasă (chassis) + alimentare (PSU)
• Placa de bază (motherboard)
• Procesor (central processing unit – CPU)
• Memorie RAM
• Controllere de stocare: IDE, SATA, SCSI
• HDD, CD-ROM drive, floppy disk drive, zip drive,
USB flash drive
• Placă video, Placă de sunet, Placă de rețea
• Tastatură, mouse, monitor, webcam, microfon
etc

11
Placa de bază
• Elementul central de conexiune între
procesor, memorie și plăcile de extensie

12
Procesor (CPU)
• Execută instrucțiunile primite de la utilizator
• Principalele caracteristici:
• Frecvența (în mega/giga herți – Mhz/Ghz)
• Determină numărul de instrucțiuni executate pe secundă
• Mărimea memoriei cache (KB, MB)
• Numărul de nuclee (2, 4, 8 ...)
• Un CPU poate avea mai multe unități de execuție înglobate
în aceeași pastilă
• Viteza
• Cu care comunică cu restul componentelor prin
intermediul magistralei
• Arhitectură (x86, x86_64, ARM)
• Exemple: Intel Core I7, AMD Sempron, ARM
Cortex-A9 Core

13
Memoria
• Este în general de tip RAM (Random Access
Memory)
• Folosită de software/procese pentru
stocarea datelor și instrucțiunilor
• Datele și instrucțiunile sunt apoi folosite de
procesor
• Principalele caracteristici
• Capacitate (MB, GB)
• Frecvență (MHz)
• Latență (nanosecunde)
14
Ierarhia memoriei

15
Discuri
• Dispozitiv de intrare/ieșire pentru stocarea
permanentă/persistentă a datelor
• HDD, SSD, CD-ROM, USB flash drive
• Exemplu: când salvăm un fișier în curs de editare, acesta este
scris pe unitatea de stocare
• Spațiul de swap: pentru stocarea temporară a unor informații
din memoria RAM (cand e insuficientă)
• În general conțin partiții, iar partițiile sunt formatate cu
sisteme de fișiere
• Accesare mult mai lentă decât unitatea de memorie
• De aceea se preferă scrierea cât mai rară, mai ales dacă sunt necesare
acțiuni în timp real

16
Virtualizare în hardware
• Pe un sistem de calcul putem rula un singur
sistem de operare
• Pentru a eficientiza anumite operații sau pentru
a spori securitatea, ne dorim să rulăm mai multe
SO în același timp – virtualizare
• Dacă se rulează mai multe SO în același timp,
fiecare din ele va vedea o instanță virtuală a
fiecărei componente a sistemului – multiplexare
a componentelor hardware
• Viteză lentă în trecut, deoarece multiplexarea se
făcea în software; acum virtualizarea e
suportată de CPU
• Trebuie activată din BIOS

17
Interacțiunea hardware - software

• Toate componentele hardware trebuie


controlate de un sistem de operare
• După încărcare, SO este lansat în execuție
• SO începe descoperirea, inițializarea și
configurarea elementelor hardware
• Driver: subcomponentă a SO
• este înglobată în SO sau încărcată la pornirea SO
• rol bine definit de componenta pe care trebuie să
o controleze

18
Vizualizare componente - Linux
• Pentru a afișa informații despre hardware,
după pornirea sistemului, folosim comanda
lshw
[root@monitor ~]# lshw -short
H/W path Device Class Description
=========================================================
system eserver xSeries 336-[883715Y]-
/0 bus Motherboard
/0/0 memory 60KiB BIOS
/0/4 memory 16KiB L1 cache
/0/5 memory 2MiB L2 cache
/0/8 processor Xeon
/0/9 processor CPU [empty]
/0/20 memory 6GiB System Memory
/0/20/0 memory 1GiB DIMM DDR
Synchronous
/1 eth1 network Ethernet interface

19
Vizualizare componente - Linux
• Pentru a afișa informații [root@monitor ~]# lscpu
despre procesor putem Architecture: x86_64
interoga intrarea virtuală CPU op-mode(s): 32-bit, 64-bit
Byte Order: Little Endian
/proc/cpuinfo sau lscpu CPU(s): 2
On-line CPU(s) list: 0,1
Thread(s) per core: 2
Core(s) per socket: 1
Socket(s): 1
NUMA node(s): 1
Vendor ID: GenuineIntel
CPU family: 15
Model: 4
Stepping: 3
CPU MHz: 3000.000
BogoMIPS: 6000.14
L1d cache: 16K
L2 cache: 2048K
NUMA node0 CPU(s): 0,1

20
Vizualizare drivere - Linux
• Vizualizarea driverelor se face cu ajutorul
comenzii lsmod

[root@monitor ~]# lsmod


Module Size Used by
nfs 431188 0
fscache 55636 1 nfs
nfsd 311382 13
lockd 73694 2 nfs,nfsd
nfs_acl 2647 2 nfs,nfsd
auth_rpcgss 46084 2 nfs,nfsd
sunrpc 266331 18 nfs,nfsd,lockd,nfs_acl,auth_rpcgss
exportfs 4236 1 nfsd

21
Pornirea sistemului
• Booting/Bootstrapping: un sistem pornit fizic
oferă o interfață de lucru utilizatorului
• Procesul de boot: de la alimentarea
sistemului, până la pornirea primelor procese
• Înțelegerea este utilă pentru:
• Configurarea hardware-ului sistemului
• Detectarea SO rulat
• Configurarea opțiunilor de rulare a SO
• Selectarea proceselor create la pornire

22
Pornirea sistemului
• După pornirea fizică
(power on), este încarcat
firmware-ul de boot (numit
BIOS)
• Apoi este identificat un
dispozitiv bootabil
• Se încarcă bootloader-ul,
apoi SO și apoi sunt
pornite procesele de
început

23
Firmware de boot
• O secvență de cod, rulată în momentul pornirii,
localizată pe un chip specific al sistemului
• În general rulează pe un chip ROM
• Roluri:
• Inițializează și verifică componentele hardware ale
sistemului (POST)
• Permite configurarea componentelor și opțiunilor
hardware ale sistemului
• Parcurge lista cu dispozitive de stocare posibile
pentru a transfera controlul către unul dintre acestea
• Configurări permise:
• Parolă de configurare, timpul sistemului, activare
virtualizare, viteză de acces la memorie,
activarea/dezactivarea folosirii porturilor USB

24
BIOS și UEFI
• Pe arhitectura x86, firmware-ul de boot se
numește BIOS (Basic Input-Output System)
• BIOS-ul începe să fie înlocuit de UEFI
(Unified Extensibe Firmware Interface)
• O formă îmbunătățită de firmware de boot
• Oferă o interfață grafică mai prietenoasă
• Se poate folosi mouse-ul
• UEFI este dezvoltat într-o formă
standardizată

25
Dispozitive bootabile
• Configurate de către firmware-ul de boot:
• Activarea și dezactivarea dispozitivelor de boot
• Selectarea ordinii în care sunt consultate pentru
booting
• Pot fi: discuri, USB flash drive-uri, CD ROM-
drive
• Un dispozitiv este bootabil, dacă acesta
• Conține o imagine de bootloader
• Aceasta va fi încărcată în memorie
• Apoi îi va fi transferat controlul, din partea
firmware-ului de boot

26
Schema de partiționare
MBR GPT
• Master Boot Record
• GUID Partition Table
• Schema clasică de partiționare
pe PC • Schema modernă de partiționare
pe PC
• Primul sector de disc (512 octeți)
conține tabela de partiții și prima • Există 128 de partiții, identificate
parte a bootloader-ului în mod unic, la nivel global
• Dată fiind dimensiunea redusă a printr-un șir numit GUID (global
acestui sector, doar patru partiții unique id)
pot fi descrise (partiții primare) • Elimină limitarea de 4 partiții a
• Pentru a compensa această schemei de partiționare MBR
limitare, putem alege o partiție
să fie o partiție extinsă și sa • Asociat cu bootarea folosind
creăm oricâte partiții logice acolo UEFI
• Acociat cu bootarea folosind
BIOS

27
Bootloader
• Rolul acestuia este de a permite
utilizatorului să selecteze un SO în care să
booteze, să configureze opțiunile acelui SO și
apoi să booteze în SO
• Va încărca un fișier numit imagine de kernel,
care contine codul SO, și apoi va transfera
controlul către acesta

28
GRUB
• Cel mai folosit bootloader în Linux
• Când instalăm Linux, bootloader-ul GRUB
este instalat corespunzător:
• 1st stage bootloader este în MBR
• 2nd stage bootloader este pe disc
(/boot/grub/core.img)
• Dacă sistemul are instalat și Windows, GRUB:
• detectează acest lucru
• configurează chainloading
• încărcarea unui bootloader din alt bootloader
• pentru a permite bootarea Windows

29
Kernel
• Realizează configurarea componentelor hardware ale
sistemului
• Încarcă driverele de dispozitive (device drivere)
• Montează sistemul de fișiere rădăcină
• pornește procesul init, primul proces al sistemului care va
porni alte procese
• Fișierul reprezentând imaginea de kernel în Linux se găsește în
/boot/vmlinux-<versiune>

student@uso:~$ file /boot/vmlinuz-4.15.0-29-generic


/boot/vmlinuz-4.15.0-29-generic: Linux kernel x86 boot
executable bzImage, version 4.15.0-29-generic(buildd@lgw01-
amd64-057) #31-Ubuntu SMP Tue Jul 17 15:39:52 UTC 2018, RO-
rootFS, swap_dev 0x7, Normal VGA

30
Kernel
• Pentru a afla informații despre acesta,
putem folosi comanda uname
student@uso:~$ uname -a
Linux uso 4.15.0-34-generic #37-Ubuntu SMP Mon Aug 27
15:21:48 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

• Pentru depanare sau informare, nucleul


transmite informații care se jurnalizează
student@uso:~$ dmesg
[ 0.000000] Linux version 4.15.0-34-generic (buildd@lgw01-amd64-047) (
gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #37-Ubuntu SMP Mon Aug 27
15:21:48 UTC 2018 (Ubuntu 4.15.0-34.37-generic 4.15.18)
[ 0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.15.0-34-generic
root=UUID=a14d0991-a3d8-48d6-ac8c-327d1a524501 ro quiet splash
[ 0.000000] KERNEL supported cpus:
[ 0.000000] Intel GenuineIntel
[ 0.000000] AMD AuthenticAMD
[...]
31
Drivere
• Programe executabile ce conțin codul pentru
utilizarea și configurarea unui dispozitiv
hardware
• Localizate în Linux în directorul
/lib/modules/<version>/kernel
• <version> = versiunea de SO

student@uso:~$ file/lib/modules/4.15.029generic/kernel/drivers/net/
ethernet/intel/e1000/e1000.ko
/lib/modules/4.15.0generic/kernel/drivers/net/ethernet/intel/e1000/
e1000.ko: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV),
BuildID[sha1]=c2bcba22a6d98cf9d4c3735248bc48674ead034b, not stripped

32
Pornire procese
• Mai întâi pornește primul proces, numit init
• systemd
• Implementarea cea mai răspândită de init
• Executabilul: /lib/systemd/systemd
• După pornirea serviciilor inițiale (startup
processes), init/systemd pornește și
terminalele de login
• terminale virtuale
• Pe GUI, aceste terminale nu sunt accesibile
direct, pentru că este pornit mediul grafic
33
Pornire terminale virtuale și shell

34
Federico Faggin
• Proiectantul primului
procesor comercial
(Intel 4004)
• Fondator Zilog (Z80 –
HC – Home
Computer)
• A activat în mai multe
companii: Synaptics,
Foveon

35
Computer Systems:
A Programmer’s Perspective
• CS:APP
• Bryan, O’Hallaron – CMU
• Baza unui un curs de la CMU
• Carte de ,,sisteme” (systems)
• Utilă pentru a ști „What is under the hood”
• Trei părți; prima parte detaliază arhitectura
sistemului de calcul și cum poate fi folosită
pentru construirea de aplicații
• 2nd Edition 2010
36
Intel
• Integrated Electronics
• Cel mai mare producător de chip-uri
• Inventatorul arhitecturii de procesoare x86
• Gamă largă de produse hardware: motherboard
chips, plăci de rețea, GPU, CPU, embedded CPU
• Companie fondată de Gordon Moore (Moore’s
Law) și Robert Noyce
• Competiție din partea AMD, Texas Instruments,
Nvidia
• Pe piață mobile, competiție din partea
arhitecturii ARM (Intele Atom)
37
PandaBoard
• http://pandaboard.org
• Plăcuță de dezvoltare pentru platforme
embedded și mobile
• În jur de 150-170 USD
• ARM Dual Core 1.2 GHz, 1 GB RAM
• Rulează Android, Ubuntu, distribuții Linux
embedded
• Se pot conecta: monitor, dispozitiv pe USB,
expansion board
• Similar: Raspberry Pi, Beagle Board, Cubie Board

38
Cuvinte cheie
• Hardware
• Arhitectura von Neumann
• Arhitectura ARM
• Arhitectura x86
• Memorie
• Procesor
• Virtualizare
• Drivere
• Firmware de boot
• Dispozitive bootabile
• Bootloader
• Kernel
• Pornire procese

39
Cursul #8
Utilizatori

1
Treat your password like your toothbrush.
Don't let anybody else use it, and
get a new one every six months.

Clifford Stoll

2
SF – utilizatori – procese
proces utilizator fișier

Program File
name Username name

utilizator

kernel
UID UID UID

PID inode

3
Utilizator =?
• Perspectiva umană
• Persoană care
folosește un sistem
de calcul

4
Utilizator =?
• Perspectiva SO
• Cont pe un sistem
• Agent: execută acțiuni
• Acces, drepturi, acțiuni,
proprietate
• Identificat prin
username și UID
• Procesele sunt create
în cadrul unui utilizator

5
Separare
• Sisteme multi-utilizator
• Mai mulți utilizatori
rulează simultan
• Utilizatorii separă:
• Procesele
• Fișierele
• Alte resurse

6
Utilizator de ...
Sistem Aplicație
• Cont care permite • Ex: conturi în
• Crearea de procese aplicații web
• Deținerea fișierelor • Acces la resurse
• Crearea altor conturi gestionate de
aplicație
• Nu permit accesul la
resursele sistemului

7
La ce bun?
• Securizarea
sistemului
• Depanarea
problemelor de
autentificare
• Identificarea
acțiunilor
ostile / abuzive

8
Operații
• Autentificare (login)
• Furnizarea credențialelor
• Parolă, semnătură digitală, amprentă
• Deconectare (logout)
• Schimbare parolă, detalii acces
• Schimbare utilizator curent (switch user)
• Rulare de procese cu permisiunile
utilizatorului

9
Autentificare & permisiuni
• Bază de date cu toate username și forma de
autentificare
• După autentificare, un utilizator are anumite
permisiuni/drepturi
• Conturi de aplicație: roluri
• Moodle: student/profesor
• Bloguri: admin/editor/cititor

10
Acces bază de date

11
Parolă
• Formă tipică de
obținere a accesului
(login)
• Șir de caractere
tipăribile

12
https://imgflip.com/i/105mbt

13
Parolă sigură
• fără cuvinte comune (din dicționar)
• fără date de naștere
• dacă o notați, aveți grijă unde
• înlocuire periodică
• caractere, speciale, numere, majuscule
• fiecare cont cu parola lui

14
Autentificare centralizată
• Este complicat să ai un cont și o parolă
diferită pentru fiecare tip de aplicație
• Autentificare centralizată
• Serviciu care gestionează baza de date de parole
• Nume de utilizator și parolă unică pentru toate
aplicațiile
• Windows: serviciul AD – Active Directory
• Linux: serviciul LDAP – Lightweght Directory
Access Protocol

15
Autentificare centralizată

16
Autentificare multi-factor
• Autentificare prin...
• Ceva ce știi: parolă
• Ceva ce ai: token,
device, mobil
• Ceva ce ești:
biometric

17
Gestiunea utilizatorilor
Privilegiat Neprivilegiat
• Access complet la • Acces complet la un
resursele sistemului director tip Home
• Poate schimba • Acces de execuție
parolele altor
utilizatori sau read-only la alte
părți ale sistemului
• Nu poate afla de fișiere
parolele inițiale
• Accesul trebuie • Poate obține privilegii
securizat administrative

18
Acțiuni
Acțiuni privilegiate: Acțiuni
• gestiunea utilizatorilor neprivilegiate:
(adăugare, ștergere • parcurgerea
utilizatori) ierarhiei de fișiere
• gestiunea pachetelor • rularea de programe
• configurarea rețelei • conexiuni de rețea
• configurarea
parametrilor de boot
• configurarea nucleului

19
Grupuri
• Utilizatorii sunt grupați
• Un utilizator face parte dintr-unul sau mai multe
grupuri
• Un grup poate conține 0 sau mai mulți utilizatori
• Grupul definește accesul la resurse
• Atributele grupului sunt definite în fișiere de
configurare sau baze de date
• Vizibile pentru orice utilizator
• Modificabile de utilizatori privilegiați

20
Asociere utilizatori-grupuri

21
Utilizator privilegiat
• Unix: utilizatorul root
• prompt-ul începe cu #
• su sau sudo

• Windows:
• Utilizatorul Administrator
• Grupul Administrators

22
su
• Schimbarea utilizatorului
• Implicit / fără parametru: în root
• Cu parametru: în utilizatorul indicat
• Se cere parola noului utilizator
• Permite rularea unei comenzi fără a deschide
un shell prin -c

23
sudo

24
sudo
• substitute user do
• rularea unor comenzi cu drepturile altui
utilizator
• de obicei se rulează cu drepturi de root
• este solicitată parola utilizatorului care
rulează comanda
• prin configurarea /etc/sudoers un utilizator
poate rula comenzi ca root
• cine are permisiuni de root?

25
sudo
• configurat în /etc/sudoers
• putem configura granular privilegii: un
utilizator poate rula privilegiat doar anumite
comenzi
$ sudo apt-get install package-name
# install package-name
$ sudo su # open root
shell
$ sudo bash # open root shell

26
Operații cu utilizatori
Neprivilegiat Privilegiat
• Verificare informații • Adăugare/ ștergere
• /etc/passwd, utilizatori (adduser,
/etc/group deluser)
• Comenzi (id, who, • Schimbare parolă
whoami, users, utilizatori (passwd)
finger, pinky, • Oferire/revocare
last) privilegii

27
Gestiunea utilizatorilor
Utilizatori Grupuri
• Crearea unui • Crearea unui grup
utilizator
• Ștergerea unui grup
• Ștergerea unui
utilizator • Adăugarea / ștergerea
• Schimbarea parolei unui utilizator din
grup
• Modificarea
atributelor unui
utilizator
• Username, login shell,
director
28
Informații

29
Utilitare

30
Operații

31
Gestiunea parolelor
• Utilizator neprivilegiat: gestionarea proprie
parole
• Utilizator privilegiat: gestionarea parolelor
tuturor utilizatorilor

• Acțiuni
• Schimbarea parolei
• Stabilirea duratei de viață
• Blocarea parolei

32
Permisiuni
• Drepturi de acces
• Definesc acțiunile posibile pentru utilizator
• Drepturi generice:
• Citire: un fișier / o zonă de memorie poate fi
vizualizat(ă)
• Scriere: un fișier poate fi editat / se poate scrie în
memorie
• Un utilizator poate configura drepturile
pentru fișierele din proprietatea sa

33
Atribute
• Fiecare utilizator are
• permisiuni complete
pentru directorul Home
• permisiuni specifice
pentru o anumită resursă
• Informațiile despre
permisiuni sunt reținute
în atributele fiecărui
fișier
• atribute = metadate

34
Entități și permisiuni
• 3 tipuri de entități
• Utilizator (user)
• Grup (Group)
• Ceilalți (Others)
• 3 tipuri de permisiuni
• Citire (Read)
• Scriere (Write)
• Execuție (Execute)

35
Utilizatori și fișiere

36
Permisiuni în Linux
• Permisiunile = șir de 9 caractere
• 3 pentru utilizator
• 3 pentru grup
• 3 pentru ceilalți

37
Permisiuni în Linux

38
Format permisiuni
• Pe biți:
• r w - r- - r - - corespunde 110100100
• r w x r- x - - - corespunde 111101000
• r w - rw- - - - corespunde 110110000

• Octal:
• r w - r- - r - - corespunde 644
• r w x r- x - - - corespunde 750
• r w - rw- - - - corespunde 660

39
Gestiunea permisiunilor
• Linux: Fiecare fișier are metadate
• Metadate: User, Group, Permisiuni
• Entități: User, Group, Others
• Tipuri: Read, Write, Execute
• Windows: Liste de acces
• ACL: access control lists
• Permisiuni prezente doar pe NTFS, nu și pe
FAT32

40
Comenzi
• Afișare:
• ls –l
• stat
• Modificare:
• chown: modifică utilizatorul și grupul
• chgrp: modifică grupul
• chmod: modifică permisiunile

41
Permisiuni de creare
• touch și mkdir creează fișiere / directoare cu
metadate implicite
• Definite în masca de creare a shell-ului
• Fișiere: ȘI logic între 666 (octal) și masca inversată
• Directoare: ȘI logic între 777 (octal) și masca inversată

42
umask
• Afișarea și modificarea măștii shell-ului
• Fără parametru: afișează masca de creare
• Cu parametru: modifică masca de creare

43
Operații privilegiate
Operații neprivilegiate: Operații privilegiate:
• pwd
• fdisk
• cd
• ls • mkfs
• cat • mount
• touch, mkdir, ln • umount
• rm, rmdir
• cp, mv • chown
• tar, gzip
• chmod

44
Liste de acces Windows

45
Verificarea permisiunilor

46
Donald Knuth
• The Art of Computer
Programming
• analiza algoritmilor
• autorul TEX, METAFONT
• umor profesional

47
Cuvinte cheie
• Permisiuni
• Acces Informații
• Root
• Parole
• Privilegii
• Activități
• Operații
• Autentificare

48
Resurse utile
• Silberschatz, Galvin, Gagne - Operating
System Concepts, 7th Edition (chapter 3:
Processes)
• Tanenbaum - Modern Operating Systems, 2nd
Edition (chapter 2: Processes and Threads)
• https://en.wikipedia.org/wiki/Multi-
factor_authentication
• http://en.wikipedia.org/wiki/Category:Unix_sig
nals
• http://computer.howstuffworks.com/operatin
g-system5.htm 49
Cursul #09
Securitatea sistemului

1
The only truly secure system is one that is
powered off, cast in a block of concrete and
sealed in a lead-lined room with armed guards -
and even then I have my doubts.

Eugene H. Spafford

2
Suport de curs
• Capitolul 12 – Securitatea sistemului
• https://github.com/systems-cs-pub-ro/carte-
uso/releases

3
Atacuri din 2020
• Twitter social engineering attack – Înșelătoria a vizat conturile a 130.000 de persoane
publice, atacatorii putând reseta parolele conturilor.
• https://securityboulevard.com/2020/07/biggest-twitter-breach-accounts-of-us-high-profiles-
hacked-in-bitcoin-scam/

• Zoom data breach – 500000 de conturi zoom vândute pe dark web


• https://www.bleepingcomputer.com/news/security/over-500-000-zoom-accounts-sold-on-
hacker-forums-the-dark-web/

• Nintendo data breach – 160.000 - 300000 de conturi de utilizator au fost compromise


într-un singur atac
• https://www.forbes.com/sites/daveywinder/2020/06/12/300000-nintendo-users-hacked-what-
gamers-need-to-know-switch-gamers-account-passwords/

• Easy Jet – Atacul cibernetic a expus detaliile a 9M de clienților


• https://www.theguardian.com/business/2020/may/19/easyjet-cyber-attack-customers-details-
credit-card

4
Problematica securității
• protecția informațiilor prețioase (companii, instituții)
sau private (persoane)
• Ce este un sistem sigur?
• resursele sale sunt utilizate și accesate în orice împrejurare
așa cum se dorește
• Se poate obține un sistem sigur?
• Da. Complet izolat de lumea exterioară.
• nu este util, nici flexibil
• Ce înseamnă securizarea unui sistem de calcul?
• folosirea de metode de protecție suficient de puternice
• un potențial atacator va fi descurajat
• compromiterea sistemului este greu de realizat
• Securitatea este un proces nu o finalitate

5
Ce urmărește un atacator?
• bani și/sau faimă
• steal
• furt de informații (information disclosure)
• sunt vândute sau se cere răscumpărare
• cripple
• sistemul merge prost
• Denial of Service (DoS)
• sabotaj
• control
• de acolo se pot fura informații (sau ransomware)
• se poate extinde la cripple (DoS)
• se pot folosi resursele (bitcoin mining, trimis SMS-uri)

6
Fundamentele securității

7
Obiectivele securității
• confidențialitate
• integritate
• disponibilitate
• robustețe
• protejarea vieții private (privacy)

• discutăm în continuare cum atingem


obiectivele

8
Definiții
• Defect (bug)
• Vulnerabilitate
• Exploatare
• Atac, vector de atac
• Suprafață de atac
• Măsuri defensive
• preventive
• reactive

9
Principii de securitate
• principiul celui mai mic privilegiu (leastprivilege)
• principiul separării privilegiilor (privilege
separation)
• securitythroughobscurityvs. securitybydesign
• cea mai slabă verigă
• simplitate (feature creep)
• Bruce Schneier: Complexityis theworstenemyof
security.
• defense in depth
• securitate vs. utilizabilitate

10
Modelul subiect-obiect
• subiect sau agent efectuează acțiunea
• de exemplu un proces
• obiect sau resursă este ținta acțiunii
• de exemplu un fișier
• permisiuni specifice dictează accesul
subiectului la obiect
• de exemplu permisiuni în sistemul de fișiere
• o entitate specializată (reference monitor)
verifică permisiunile
• de obicei sistemul de operare

11
Autentificare
• accesul unui utilizator în sistem
• acesta poate crea procese
• pe baza unui identificator și token de
autentificare (de exemplu parolă)
• parolă
• biometric
• cheie publică (SSH)
• one-time password

12
Autorizare
• bază de date de permisiuni
• adăugarea unei noi permisiuni înseamnă
autorizarea unui subiect la un obiect
• chmod, chown

13
Controlul accesului
• verificarea permisiunilor în baza de date de
autorizare
• făcut de reference monitor la accesul unui
obiect de un subiect
• la comenzi precum ls, cat, vim

14
Securitatea datelor

15
Atacuri pe date
• furtul datelor
• modificarea datelor pentru a le face
neutilizabile
• criptarea datelor pentru a fi răscumpărate
(ransomware)

16
Protejarea datelor
• autentificare (pentru a limita accesul)
• criptare (pentru confidențialitate)
• algoritmi de message digest / message
authentication (pentru integritate)

17
Permisiuni pe date
• asociate cu autorizare
• în general read și write
• întâlnite în sistemul de fișiere
• uzual permisiunile sunt atașate fișierului
• pot fi schimbate (chmod)

18
Criptarea datelor
• confidențialitate

• mesaj de intrare (MI)


• cheie de criptare (K)
• algoritm de criptare (A)
• mesaj de ieșire (MO)

• MO = A(K, MI)

19
Chei simetrice și asimetrice
• chei simetrice
• aceeași cheie la transmițător și receptor
• problematic dacă este interceptată
• problematic să fie distribuită
• criptare rapidă
• AES
• chei asimetrice
• cheie privată și cheie publică legate matematic
• cheia publică criptează, cheia privată decriptează
• fără probleme de distribuție
• criptare greoaie
• RSA

20
Integritatea datelor
• modificarea datelor este detectată
• algoritmi de hashing / message digest
• se creează o sumă de control
• se verifică dacă se păstrează suma de control
• MD5, SHA

21
Securitatea accesului

22
Forme de autentificare
• parole (cea mai răspândită)
• biometric: retină, amprentă
• token hardware (one type password)
• cheie publică
• alt canal (SMS)

23
Multi-factor authentication
• mai multe forme de autentificare
• parolă și SMS
• parolă și cod de autentificare
• uzual altă formă este un dispozitiv pe care îl
are utilizatorul în posesie
• 2FA, 3FA

24
Recomandări de gestiune a
parolelor
• cel puțin 10-12 caractere
• să nu fie parole comune
• passphrase: parolă din cuvinte
• caractere speciale
• folosirea unui password manager
• schimbarea periodică a parolelor

• https://howsecureismypassword.net

25
Gestiunea parolelor în Linux
• Datele publice în /etc/passwd
• Informațiile de parole în /etc/shadow
• /etc/shadow accesat doar de root
• Parolele se țin într-o formă hashed (MD5,
SHA)
• funcție one-way
• e ușor să creezi dintr-o parolă hash-ul
• e foarte dificil să inversezi procesul

26
Securitatea transferului

27
Securitatea transferului
• Cum ne autentificăm peste rețea?
• Cum protejăm datele (integritate +
confidențialitate) transmise pe rețea de
atacatori?

• Un model descentralizat, în care cele două


entități comunicante își stabilesc identitatea
(SSH)
• Un model descentralizat în care există
autorități de certificare (CA)

28
Man in the Middle
• traficul poate fi interceptat
• switch, ruter
• atacuri de redirectare
• un atacator poate investiga și modifica
pachetele de rețea
• un atacator poate impersona celălalt capăt
al conversației

29
Firewall
• protejarea sistemului local de anumite
pachete din rețea
• pot fi selectate pe bază de adresă IP, port,
conținut, proces
• util pentru protejarea la atacuri de tip DoS
(denial of service)
• numite și flood

30
SSH pentru autentificare
• traficul este criptat
• se deschide la distanță uzual un shell
autentificat
• SSH este un protocol
• poate fi folosit pentru securizarea/criptarea și
altor tipuri de trafic
• spunem că tunelăm trafic prin SSH

31
Autentificare cu chei publice
• se generează pe client o pereche cheie
privată-cheie publică
• cheia publică este adăugată pe server
• cheia privată semnează un mesaj
• mesajul poate fi verificat cu cheia publică
• dacă este prezentă cheia publică, atunci
clientul este autentificat: are acces în sistem
• recomandat pentru SSH, simultan cu
dezactivarea autentificării pe bază de parole

32
Securitatea protocoalelor
• conexiunile HTTP, IMAP, POP3, FTP, LDAP
sunt implicit nesigure
• există variante sigure HTTPS, IMAPS, POP3S,
FTPS, LDAPS
• se folosesc de TLS (Transport Layer
Security)
• criptarea traficului
• verificarea identității serverului

33
Certificate digitale
• folosite de TLS
• un certificat este:
• o cheie publică
• o identitate
• o semnătură digitală care le asociează pe cele două
• semnătura este realizată de cheia privată a unei
autorități recunoscute (CA: Certification
Authority)
• clientul are cheia publică a CA-ului
• poate verifica semnătura din certificatul
serverului și valida, astfel, identitatea

34
Concluzie

35
Obiective atacator
• bani și/sau faimă
• steal
• furt de informații (information disclosure)
• sunt vândute sau se cere răscumpărare
• cripple
• sistemul merge prost
• Denial of Service (DoS)
• sabotaj
• control
• de acolo se pot fura informații (sau ransomware)
• se poate extinde la cripple (DoS)
• se pot folosi resursele (bitcoin mining, trimis SMS-uri)

36
Principii de securitate
• principiul celui mai mic privilegiu (leastprivilege)
• principiul separării privilegiilor (privilege
separation)
• securitythroughobscurityvs. securitybydesign
• cea mai slabă verigă
• simplitate (feature creep)
• Bruce Schneier: Complexityis theworstenemyof
security.
• defense in depth
• securitate vs. utilizabilitate
37
Componente în securitatea
sistemului
• securitatea datelor
• securitatea accesului
• securitatea transferului

38
RSA
• numele de la fondatorii: Ron Rivest, Adi
Shamir, Led Adleman
• inființată în 1982
• algoritmul de criptare cu chei publice RSA
• token-uri de autentificare (RSA SecurID
security tokens)
• RSA Factoring Challenge

39
AES
• Advanced Encryption Standard
• adoptat de guvernul US ca standard de criptare
în noiembrie 2001
• inițial denumit Rijndael după numele unuia
dintre inventatori
• înlocuiește algoritmul DES (Data Encryption
Standard) din 1977
• procesul de alegere a avut loc între 1997 și 2000
- destinat comunității criptografice
• inițial aleși 15 algoritmi, apoi 5 finaliști, apoi doar 1
(Rijndael)

40
Security Engineering
• Ross Anderson
• 2nd Edition, 2008
• toate capitolele disponibile:
https://www.cl.cam.ac.uk/~rj
a14/book.html
• o privire în ansamblu a
securității sistemelor și
rețelelor
• atacuri și apărare
• bogată în povestiri reale
• ușor de citit
• conține formalisme, dar
insistă pe aspecte practice
41
Bruce Schneier
• autorul mai multor cărți
de securitate
• algoritmi de criptografie
• Bruce Schneier on
security (blog:)
http://www.schneier.com
• Bruce Schneier Facts

42
BitDefender
• fondată în 2001 de
Florin și Măriuca Talpeș
• companie românească
producătoare de soluții
de securitate
cibernetică
• 38% dintre soluțiile de
securitate de pe piața
internațională
• sediu lângă Regie
43
Resurse pentru securitate
aplicată
• OWASP (Open Web Application Security Project}):
https://www.owasp.org/index.php/Main_Page
• wargames and challenge sites
• http://www.wechall.net/
• http://overthewire.org/wargames/
• http://captf.com/practice-ctf/
• https://w3challs.com/
• CTF (Capture the Flag) security contests
• https://ctftime.org/
• Stack Exchange
• http://security.stackexchange.com/
• http://crypto.stackexchange.com/
• http://reverseengineering.stackexchange.com/

44
Resurse utile
• http://www.unixtools.com/security.html
• http://insecure.org/
• http://www.linuxsecurity.com/
• http://www.schneierfacts.com/

45
Cuvinte cheie
• atacator • chei asimetrice
• vulnerabilitate • funcții hash
• exploatare • AES
• vector de atac • RSA
• suprafață de atac • multi-factor
• confidențialitate • parole
• integritate • password manager
• disponibilitate • /etc/shadow
• privacy • SSH
• subiect-obiect • man in the middle
• autentificare • firewall
• autorizare • SSH
• controlul accesului • TLS/SSL
• criptare • certificat digital
• chei simetrice

46
Cursul #10
Automatizarea sarcinilor

1
If it's worth doing, it's worth automating.

1/10/2022 2
Suport de curs
• Capitolul 13 – Automatizarea sarcinilor
• https://github.com/systems-cs-pub-ro/carte-
uso/releases

1/10/2022 3
Scenariu de automatizare

1/10/2022 4
Fie următorul scenariu

1/10/2022 5
Să ne reamintim

1/10/2022 6
Situație
• multe fișiere cod sursă
• modificări mici și frecvente

• Ce ne interesează?
• Să scriem cod, să fim creativi
• Să meargă repede procesul de compilare / build
• Să testăm ușor modificările

1/10/2022 7
Ce facem?
• Ne concentrăm pe scris cod, pe algoritmi, pe soluții
inventive, creative

• Folosim soluții de build automation


• Make, Scons, Cmake, Maven, Gradle
• Folosim soluții de setup automat al mediului de
lucru
• Docker, Python virtualenv
• Automatizăm testarea
• scripturi care rulează automat teste (unit tests, UI testing,
regression testing)
• Automatizăm deploymentul
• Scripturi / soluții care creează arhive, medii, împachetează
aplicații, publică pachete

1/10/2022 8
Putem mai mult?
• Rulăm scripturile / soluții de automatizare
noi
• Automatizăm inclusiv rularea acestor soluții
de automatizare
• nightly builds
• CI/CD (Continuous Integration / Continuous
Delivery/Deployment)
• Jenkings, TravisCI, GitLabCI, Bamboo, CircleCI
• Fiecare actualizare a codului duce la build, test, deploy

1/10/2022 9
CI/CD

1/10/2022 10
Automatizare pe pâine

1/10/2022 11
Automatizare pe pâine (2)

1/10/2022 12
Automatizare

1/10/2022 13
Automatizare
• acțiuni ale utilizatorului sunt preluate de
sistemul de calcul
• interacțiunea utilizatorului cu sistemul de
calcul trebuie să fie
• absentă sau
• minimă
• operații neinteractive sau minimal interactive
• utilizatorul este preocupat de acțiuni
creative

1/10/2022 14
Ce automatizăm?
• acțiuni standardizate, repetitive, necreative

• acțiuni periodice
• executate la anumite momente
• build automation
• generate de utilizator sau un eveniment
• când o modificare ajunge în repository
• acțiuni scalate
• aceeași acțiune rulată pe mai multe targeturi
• prelucrarea datelor financiare a mai multor companii
• crearea de pachete software pentru mai multe aplicații

1/10/2022 15
Is It Worth the Time?

https://xkcd.com/1205/
1/10/2022 https://www.explainxkcd.com/wiki/index.php/1205:_Is_It_Worth_the_Time%3F 16
Cum automatizăm?
• eficientizare (nu chiar automatizare)
• keyboard shortcuts
• aliasuri
• one linere
• pentru acțiuni combinate, execuții pe mai multe
targeturi
• scripturi
• pentru automatizare (de acțiuni existente)
• programe
• mai mult pentru noi funcționalități, nu neapărat
automatizarea unor acțiuni existente

1/10/2022 17
Programe vs scripturi
• nu există o demarcație clară între scripturi și
programe
• în general spunem că scripturile sunt
intepretate și programele compilate
• spunem că avem un script Python când
facem automatizare
• spunem că avem un program Python când
adăugăm o funcționalitate

1/10/2022 18
Shell scripting
• cel mai rapid mod de automatizare
• execuție lentă
• nu este potrivit pentru acțiuni ce necesită viteză
• folosește comenzi existente
• interacțiune între comenzi (pipe-uri, command
expansion)
• integrat cu shellul / sistemul de operare
• Curs 06: Automatizarea sarcinilor. Shell
scripting

1/10/2022 19
Exemplu / scenariu
• Prelucrare de date
• Acțiune multi-target

• Prezentăm scenariul în pași din ce în ce mai


complecși
• https://ocw.cs.pub.ro/courses/uso/cursuri/cu
rs-10#prelucrare_note

1/10/2022 20
Utilitare pentru automatizare

1/10/2022 21
Pornirea serviciilor
• scripturi de startup
• pornite de init
• tradițional în /etc/init.d/
• în /lib/systemd/system/ pentru systemd
• operații de pornire, oprire, repornire
• sudo systemctl stop ssh
• sudo systemctl start ssh
• sudo systemctl restart ssh

1/10/2022 22
systemd
-> /lib/systemd/system/my.service

[Unit]
Description=My service

[Service]
ExecStart=/var/lib/custom/my.sh

[Install]
WantedBy=multi-user.target

# sudo systemctl enable my

1/10/2022 23
supervisor
• gestiunea de servicii personalizate
• la alegere cu systemd
• permite gestiunea proceselor în numele unui
utilizator
• comanda supervisorctl
• start, stop, restart, add, remove
• configurat în /etc/supervisor/conf.d/

1/10/2022 24
Pornirea periodică
• la momente indicate
• la intervale periodice
• servicii sau comenzi
• at: rulare la un moment dat
• echo "sh backup.sh" | at 9:00 AM
• cron: rulare periodică

1/10/2022 25
cron
• rulare la intervale periodice
• granularitate de minut
• configurat în /etc/crontab, /etc/cron.*/ și la
nivelul utilizatorului
• utilizatorul rulează crontab pentru editare și
crontab –l pentru listare

1/10/2022 26
Rulare neinteractivă
• comenzi interactive necesită input de la
utilizator
• automatizarea necesită neinteractivitate
• înlocuirea lor cu comenzi neinteractive
• passwd vs chpasswd
• folosirea de apeluri / comenzi care transmit
input automatizat

1/10/2022 27
expect
• furnizare neinteractivă de input
• poate fi folosit în scripturi shell
• pyexpect: în Python
spawn ftp myftp
expect "username:"
send "hi\r"
expect "password:"
send "mom\r"
expect "ftp>"
send "prompt\r"
expect "ftp>"
send "cd getme\r"

1/10/2022 28
screen, tmux
• creare terminal virtual de rulare comenzi
• detașare de la terminal (comenzile rulează în
continuare)
• reatașare la nevoie
• util pentru rularea de comenzi (interactive)
la distanță: deconectare și apoi reconectare
• util pentru mai multe instanțe locale: un
terminal pentru dezvoltare, unul pentru
administrare etc.

1/10/2022 29
Automatizarea testării

1/10/2022 30
Automatizarea testării
• generarea și rularea automată de teste
• baterii de teste transmise automat
programului / dispozitivului
• program under test
• device under test
• se obțin rapoarte de defecte
• regression testing: teste vechi sunt refolosite

1/10/2022 31
CI/CD
• Continuous Integration / Continuous
Delivery/Deployment
• rularea automată a build-ului și testelor la
adăugarea de funcționalități noi
• validare rapidă de funcționalități
• Travis CI, Jenkins, GitLab CI, CircleCI,
Bamboo

1/10/2022 32
Fuzzing
• generare de input inițial
• testarea unui program
• actualizarea input-ului ținând cont de
inputul programului
• reluarea testării
• execuție automată
• durează ore / zile

1/10/2022 33
Fuzzing (2)

https://link.springer.com/article/10.1186/s42400-018-0002-y

1/10/2022 34
UI Automation
• GUI testing
• folosirea automată a componentelor grafice
• butoane, meniuri
• Web UI automation
• Selenium
• UI Exerciser (stress testing)
• Monkey (Android)

1/10/2022 35
Robotic Process Automation
• software bots
• urmărirea utilizatorului
• generarea automată de acțiuni pe baza
acțiunilor utilizatorilor
• poate integra componente de inteligență
artificială și învățăre automată
• UIPath

1/10/2022 36
Sumar
• delegare către sistemul de calcul
• concentrare pe acțiuni creative
• automatatizare acțiuni standardizate,
periodice și acțiuni scalate (multi-target)
• interacțiune minimă (de dorit deloc)
• cazuri de utilizare
• build automatizare
• automatizarea testării
• prelucrarea datelor

1/10/2022 37
Cuvinte cheie
• automatizare • screen, tmux
• neinteractivitate • expect, pyexpect
• scripting • build automation
• shell scripting
• CI/CD
• Makefile, Scons
• Maven, Gradle • automatizarea
testării
• systemd, systemctl
• supervisor, • Fuzzing
supervisorctl • UI automation
• at • RPA
• cron
1/10/2022 38
Cursul #11
Administrarea spațiului de stocare

1
Suport de curs
• Utilizarea sistemelor de operare
• Capitolul 10 – Administrarea spațiului de stocare
• https://github.com/systems-cs-pub-ro/carte-
uso/releases

1/18/21 2
Jesus saves.
Buddha makes incremental backups.

18.01.2021 3
18.01.2021 4
Spațiul de stocare
Perspectivă utilizator Perspectivă SO
• O interfață facilă de acces • Modul de stocare
persistentă a informației
la resurse (stocate pe un dispozitiv de stocare
persistent) • Dispozitiv de stocare: hard
• În general formată din disk drive, CD-ROM drive,
USB flash drive
fișiere și directoare
• Eficiență în alocarea
• Nume de fișier, tip fișier, blocurilor și sectoarelor de
moduri de utilizare pe dispozitivul de stocare
și a accesării datelor
• Creare ștergere, • Asigurarea consecvenței
modificare, redenumire informației
• Aspecte de securitate: ce • scandisk
• fsck
operații pot efectua asupra
fișierului • Garantarea securității
18.01.2021 5
Tipuri de discuri
• Subsistemul de stocare din cadrul unui sistem
de calcul este format dintr-un controller care
furnizeaza partea de logică a transferului de
date și de unul sau mai multe discuri
• Dispozitivele de stocare au următoarele atribute
principale:
• Spațiul disponibil
• Viteza de acces (transferul de pe disc în memoria
RAM)
• Mod de poziționare (intern sau extern)
• Mod de conectare (SATA, SAS, USB)
• Fiabilitate (câte ore de funcționare sau citiri/scrieri
suportă de-a lungul vieții)

18.01.2021 6
Hard Disk Drive - HDD
• HDD-ul prin construcție dispune de părți mobile
în interiorul acestuia: un braț, de citire/scriere si
unul sau mai multe platane pe care se stochează
datele
• Nu permite viteze de funcționare ridicate
comparativ cu memoria RAM
• Parametrii pentru performanță sunt:
• Numărul de rotații pe minut al platanelor
• Viteza interfeței de conectare la controller
• 2 tipuri de interfețe de conectare:
• SATA – 5400rpm/7200rpm; 6Gbps
• SAS – 10000rpm/15000rpm; 6Gbps
18.01.2021 7
Solid State Block - SSD
• Un răspuns la neajunsurile HDD-ului
• SSD-ul nu are părți mobile în interiorul acestuia
și funcționează pe principiul stick-urilor USB
• În general, are durată de viață mai mică decât
HDD-ul
• SO și SF trebuie să întreprindă operații specifice,
optimizate pentru SSD-uri, pentru a le prelungi
durata de viață
• Interfețe de conectare:
• SATA – 6Gbps
• SAS – 12Gbps

18.01.2021 8
Durată de viață a unui disc
• Pentru a prelungi durata de viață a unui disc,
trebuie să aveți în vedere următoarele
facilități:
• Defragmentare: procesul prin care se rearanjează
datele pe disc pentru un acces mai eficient;
(recomandată dezactivarea pentru SSD)
• Swapping: cănd sistemul rămâne fără memorie
RAM, acesta va folosi pe post de memorie discul;
(recomandată dezactivarea pentru SSD)
• Hibernate: atunci când trecem calculatorul în
starea Hibernate, acesta scrie întregul conținut al
memoriei pe disc; (recomandat să nu treceți
sistemul în Hibernate pentru SSD)

18.01.2021 9
Operații cu discul

partiționa formata montar backu


re re e p

disc
fsc utilizar
k e

18.01.2021 10
Partiționare
• Procesul de împărțire a unui disc în partiții
• Există 2 nivele de administrare: partiționare
și sistemele de fișiere; acestea sunt
independente și se aplică iterativ
• Utilitarul de bază Unix este fdisk/gdisk
pentru GPT
• Aplicațiile folosite pentru instalarea unui
sistem de operare dispun de un program de
tip partitioner
• GParted, Partition Magic

18.01.2021 11
De ce folosim partiții?
• O adresare liniară nu este suficientă pentru a
gestiona spațiul de stocare oferit de un disc
• Împarte spațiul disponibil în diverse zone
contigue, fiecare zonă având un specific
definit de la creare
• Partiție pentru sistemul de operare
Windows/Linux
• Partiție pentru date (home directory)
• Partiție pentru swap
• Penru o stocare eficientă (performanța
ridicată) și coerenta (să nu corupem datele)

18.01.2021 12
Tipuri de partiții
• În MBR partitioning scheme:
• Partiții primare (maxim 4)
• Extinsă – poate înlocui una din partițiile primare
• Logice – se regăsesc în interiorul partiției extinse
• În cazul GPT (GUID Partition Table) nu mai
există limitări date de numărul de partiții și
de dimensiunea maximă a unei partiții
• La GPT, fiecare partiție a discului are asociat
un număr unic de identificare (guid), generat
aleator și care garantează că fiecare partiție
de pe glob va avea propriul identificator

18.01.2021 13
18.01.2021 14
18.01.2021 15
Sisteme de fișiere
• Pentru a putea organiza datele pe o partiție
într-un mod facil și ușor de înțeles pentru
utilizatorul final al sistemului de calcul, pe
aceasta în general se instaleaza un sistem de
fișiere
• Procesul de instalare/alocare a unui system
de fișiere pe o partiție se numește formatare
• Sunt specifice SO:
• Linux: cel mai folosit este ext4 și xfs
• Windows: principalul SF este NTFS

18.01.2021 16
Montarea sistemului de fișiere
• La pornirea SO, se încarcă de pe disc sistemul
de fișiere rădăcină
• Ulterior, se pot monta (mount) alte sisteme de
fișiere
• Montarea unui nou sistem de fișiere
• Adăugarea sistemului de fișiere într-un anumit punct
din ierarhia curentă de directoare (mount point)
• Pe Windows orice sistem de fișiere se montează
automat într-o rădăcină separată (C:\, D:\ etc)
• Pe Unix există un singur director rădăcină
18.01.2021 17
Exemple
• Operația de montare (mount) - comanda
mount + partiția + locația
[root@monitor ~]# mount /dev/sdb1 /mnt/
[root@monitor ~]# mount | grep sdb1
/dev/sdb1 on /mnt type ext4 (rw)

• Operația de demontare (umount) - comanda


umount + locația
[root@monitor ~]# umount /mnt/
[root@monitor ~]# fsck /dev/sdb1
fsck from util-linux-ng 2.17.2
e2fsck 1.43-WIP (20-Jun-2013)
/dev/sdb1: clean, 11/13272 files, 6616/52916 blocks

18.01.2021 18
Montarea dispozitivelor
• În Windows, dispozitivele sunt montate
automat
• În Linux, acestea nu sunt întotdeauna
montate (mai ales dacă sistemul nu dispune
de un GUI) – cel mai întâlnit exemplu este
un stick USB care este detectat de sistemul
de calcul (comanda dmesg pentru a vedea
acest lucru), dar nu poate fi folosit până nu e
montat

18.01.2021 19
Montare SF la distantă
• Dacă dispunem de un server la distanță, ce are
serviciul de ssh funcțional, putem monta
sistemul acestuia de fișiere folosind utilitarul
sshfs
[root@monitor ~]# apt-get install sshfs
[root@monitor ~]# sshfs root@hp-wn01:/root/ /mnt/
[root@monitor ~]# mount | grep mnt
root@hp-wn01:/root/ on /mnt type fuse.sshfs (rw,nosuid,nodev)
[root@monitor ~]# ls -l /mnt/
total 4304336
-rw------- 1 root root 1285 Nov 13 2015 anaconda-ks.cfg
• După cum se poate observa, conținutul
directorului /root de pe mașină cu numele hp-
wn01 a fost montat local

18.01.2021 20
Replicarea datelor
• Defectarea sistemelor de stocare este iminentă
mai ales din cauză ca HDD-urile sunt sensibile la
șocuri, iar SSD-urile au un număr limitat de
scrieri din proiectare => nevoie de a replica
datele prin diverse mecanisme pe mai multe
unități de stocare
• Pentru servere:
• Mecanismul RAID
• Pentru sisteme desktop/laptop
• Crearea unei imagini a întregului disc
• Snapshot folosind sistemul de fișiere
• Copierea fișierelor pe un disc extern sau pe un alt
dispozitiv peste rețea - backup
18.01.2021 21
RAID
• Mecanismul RAID: Replicare datelor pe
discuri diferite se realizează automat la nivel
de bloc de date, atunci când acestea sunt
trimise de către SO
• Este utila atunci când sistemul rulează și
dorim protecție permanentă a datelor
• Se folosește cu precădere în sistemele de tip
server, deoarece este foarte costisitor
• Se pierde spațiul util și performanța e mai
scăzută
18.01.2021 22
RAID
• Poate fi implementat în hardware de către
controller-ul ed stocare sau în software de
către SO
• Are mai multe niveluri de protecție:
• RAID0: datele sunt distribuite pe toate discurile
configurate; nu există nici un nivel de replicare
• RAID1: datele sunt scrise pe 2 din discurile
configurate; dacă un disc se defectează, celălalt va
deține informația
• RAID5: datele sunt scrise pe 1 disc și se mai scrie o
sumă de control pe un alt disc; cel puțin 3 discuri;
datele sunt recuperate cu ajutorul sumelor de control
• RAID10: combinația dintre RAID0 și RAID1 (datele sunt
distribuite și replicate); unul dintre cele mai bune
niveluri de protecție

18.01.2021 23
18.01.2021 24
Replicarea pe sisteme desktop/laptop

• Crearea unei imagini a întregului disc este


utilă atunci când dorim să refacem un
sistem rapid ce a fost afectat de un defect
hardware sau de un virus
• Snapshot folosind sistemul de fișiere se
poate face doar dacă acesta suportă (cel mai
cunoscut este ZFS)

18.01.2021 25
Backup periodic pe Linux
• Cel mai folosit utilitar în replicarea eficientă a
fișierelor și directoarelor este rsync
• Rsync are două caracteristici:
• Face replicare incrementală => îmbunătățire
semnificativă a timpului de back-up
• Dispune de un control granular al atributelor replicate
• Sursa și destinația datelor poate fi locală, în SF
curent sau poate exista peste rețea
• Rsync primește următoarele argumente:
• / - sursa datelor (calea rădăcină)
• root@nas:/backup - destinația datelor (o locație în
rețea pe stația cu numele nas)

18.01.2021 26
Backup periodic pe Windows
• Există o multitudine de aplicații de replicare
a datelor
• Un exemplu este utilitarul Cobian Backup –
cu ajutorul acestuia putem configura
replicarea unui director sau a unui disc local
pe un stick USB sau la distanță peste rețea

18.01.2021 27
Logical Volume Manager
• Procesul de partiționare se poate aplica doar
asupra unui disc fizic
• Dacă în sistem sunt montate două discuri,
pentru fiecare din acestea trebuie realizată
partiționarea
• În sisteme de tip Linux, a fost introdus
conceptul de LVM pentru a rezolva acest
neajuns

18.01.2021 28
Logical Volume Manager
• În cadrul acestuia există următoarele obiecte:
• Physical Volume – sunt discurile fizica ale sistemului
asociate LVM-ului
• Volume Group – format din unul sau mai multe
discuri asociate anterior
• Logical Volume – alocate din spațiul disponibil intr-
unul din Volume Group-urile creata anterior; doar
acesta e vizibil în sistemul de operare și poate fi
formatat cu un sistem de fișiere
• Atunci când instalați o distribuție de Linux, aveți
opțiunea de a activa LVM-ul;
• Utilitatea acestuia apare atunci când mai
adăugați un disc și doriți să măriți dimensiunea
partițiilor existente
18.01.2021 29
Incluziunea celor 3 obiecte

18.01.2021 30
Exemplu LVM
• Pentru a lista discurile fizice folosim pvs
mamba:~# pvs
PV VG Fmt Attr PSize Pfree
/dev/md2 storage lvm2 a- 1.14t 130.47g

• Se observă un disc denumit /dev/md2 cu


capacitatea 1.14TB. Vom lista acum volumele:
mamba:~# vgs
VG #PV #LV #SN Attr VSize VFree
storage 1 6 0 wz--n- 1.14t 130.47g

• Se observa un singur volum denumit storage.

18.01.2021 31
Exemplu LVM
• Observați din ce discuri fizice este compus:
mamba:~# pvdisplay /dev/md2
--- Physical volume ---
PV Name /dev/md2
VG Name storage
PV Size 1.14 TiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 299641
Free PE 33401
Allocated PE 266240
PV UUID M9WAFG-pf9x-Uo0j-7r8N-spOy-5evy-tt0cyc

18.01.2021 32
Exemplu LVM
• Vom lista acum volumele logice, cele care
sunt vizibile sistemului de operare:
mamba:~# lvs
LV VG Attr LSize Origin Snap% Move Log Copy% Convert
home storage -wi-ao 20.00g
labs storage -wi-ao 200.00g
projects storage -wi-ao 200.00g
rosedu storage -wi-ao 100.00g
swarm storage -wi-ao 500.00g
titan storage -wi-ao 20.00g

• Toate acestea sunt prezente în calea /dev

18.01.2021 33
Resurse utile
• htttp://www.dartmouth.edu/~rc/help/faq/per
missions.html
• http://technet.microsoft.com/en-
us/library/bb727008.aspx
• http://technet.microsoft.com/en-
us/library/bb726984.aspx
• http://ss64.com/bash/chmod.html

18.01.2021 34
Unix and Linux System Administration
Handbook
• 2010, 4th Edition
• Evi Nemeth, Garth Snyder, Trent Hein, Ben
Whaley
• Una dintre cele mai apreciate cărți de
adminitrare Unix/Linux
• Aproape 1300 de pagini, 32 de capitole
• Sistemul de fișiere, utilizatori, procese,
rețelistică, servicii, securitate, virtualizare

18.01.2021 35
Bram Moolenaar
• Autorul Vim (Vi IMproved)
• Vim este unul dintre cele
mai răspândite editoare în
lumea Unix
• Programatori și
administratori
• Lucrează la Google

18.01.2021 36
Microsoft
• http://www.microsoft.com/
• Windows, Office, Internet Explorer, Xbox, Bing
• cel mai mare producător de software
• Bill Gates, Steve Ballmer
• fondată în 1975
• DOS, Windows 3.1, Windows 95, Windows 98
• Windows NT, 2000, XP, 2003, Vista, 2008, 7, 8, 10
• a cumpărat Skype în 2011

18.01.2021 37
Cuvinte cheie
• HDD
• SSD
• Partiționare
• Formatare
• MBR
• GPT
• RAID
• Back-up
• LVM
• Mount
• umount

18.01.2021 38

S-ar putea să vă placă și