curs linux cma
Post on 18-Feb-2015
135 Views
Preview:
TRANSCRIPT
1 Introducere & Instalare » 1.1 Istorie Unix/Linux
Istorie Unix/Linux
Anii 60
Bell Laboratories (divizie de cercetare a AT&T) formeaza un consortiu impreuna cu MIT
(Massachusetts Institute of Technology) si General Electric pentru a dezvolta un sistem de
operare interactiv, multiuser si multi-tasking numit Multics (Multiplexed Information and
Computing Service) care sa ruleze pe Mainframe-uri GE-645. Proiectul nu a avut succesul
scontat, iar Bell Labs se retrage. Un programator pe nume Ken Thompson nu renunta si continua
dezvoltarea proiectului impreuna cu un alt programator pe nume Dennies Ritchie.
1970
Noul proiect este numit Unics (Uniplexed Information and Computing Service). Numele este
atribuit de Brian Kernighan, iar mai tarziu este schimbat in UNIX. Sistemul de operare este scris
in limbaj de asamblare.
1973
Unix este rescris in C pentru a putea fi portabil (sa ruleze si pe alte masini). Acest lucru a dus la
o dezvoltare accelerata. AT&T distribuie noul sistem universitatilor, marilor firme dar si
guvernului USA.
1973-1979
Unix-ul este in continuare dezvoltat in cadrul Universitatii Berkeley din California. Printre
imbunatatiri sunt shell-ul C, editorul VI precum si alte utilitare necesare. Tot aici este adaugat
suportul pentru lucrul in retea.
1980-1983
AT&T lanseaza prima versiune comerciala de UNIX fara a introduce modificarile aduse de
Berkeley.
1982
Un programator din cadrul proiectului BSD (Berkeley Software Distribution - Berkeley Unix)
impreuna cu cativa colegi de la Stanford University creaza firma SUN - Stanford University
Network. Prima lansare de Unix are loc in 1983 si se numeste SunOS. Printre altele sunt
introduse NFS (Network File System) care devine un standard.
1984
Richard Matthew Stallman (nickname RMS) paraseste MIT (care crea doar software proprietar)
pentru a crea un sistem de operare complet FREE (Free as in Freedom) - FREE (Free as in
Freedom). Noul proiect poarta numele de GNU (GNU's not UNIX). Primul program creat a fost
editorul emacs. In 1985 RMS creaza fundatia FSF - Free Software Foundation. Scopul acesteia
este ca software-ul sa fie free in sensul de liber si oricine sa poata avea acces liber si fara
restrictii la sursa. Acest tip de licenta se numeste GPL - General Public License.
1988
SunOS/BSD, AT&T System V Release 3 si Xenix ( Microsoft version of Unix pentru PC cu
procesoare Intel cumparat de la AT&T in 1979) au fost combinate in System V Release 4
(SVR4).
Nota
Xenix a fost versiunea Microsoft de Unix pentru PC cu procesoare Intel cumparata de la
AT&T in 1979. Aceasta a fost ulterior vanduta firmei Santa Cruz Operation(SCO) si a
devenit SCO UNIX.
1990
GNU continea aproape toate componentele necesare unui nou sistem de operare, mai putin
kernel-ul.
1991
Profesorul olandez Andrew Tanenbaum scrie o carte intitulata "Operating System" in care
explica conceptul unui nou sistem de operare numit Minix. Un student finlandez pe nume Linus
Torvalds de la Universitatea din Helsinki scrie un Kernel pentru GNU care sa ruleze pe
calculatoarele AT-386 si 484, bazandu-se pe anumite concepte din cartea lui Tanenbaum.
Ulterior intre Linus Torvalds si Andrew Tanenbaum se isca un conflict bazat pe viziunea diferita
pe care acestia o aveau asupra noului Kernel. Detalii
Celebrul anunt al lui Linus Torwalds precum ca a dezvoltat un kernel a fost postat pe un
newsgroup comp.os.minix:
Nota
Hello everybody out there using minix - I'm doing a (free) operating system (just a hobby,
won't be big and professional like gnu) for 386(486) AT clones. This has been brewing since
april, and is starting to get ready. I'd like any feedback on things people like/dislike in
minix, as my OS resembles it somewhat (same physical layout of the file-system (due to
practical reasons) among other things). I've currently ported bash(1.08) and gcc(1.40), and
things seem to work. This implies that I'll get something practical within a few months, and
I'd like to know what features most people would want. Any suggestions are welcome, but I
won't promise I'll implement them :) Linus (torvalds@kruuna.helsinki.fi) PS. Yes - it's free
of any minix code, and it has a multi-threaded fs. It is NOT portable (uses 386 task
switching etc), and it probably never will support anything other than AT-harddisks, as
that's all I have:-(.
Sistemul de operare creat astfel prin folosirea kernelului lui Linus Torvalds si a programelor si
utilitarelor GNU poarta numele de GNU/Linux.
Nota
Numele complet si corect al sistemului de operare nu este Linux ci GNU/Linux. Detalii
GNU/Linux este un sistem de operare multiuser si multitasking care ruleaza pe procesoare 32 si
64 biti pe aproape toate platformele hardware existente. Este format din kernelul lui Linus
Torvalds si programele de la GNU. Intre Linux si Unix exista o mare diferenta. Unix-ul este un
sistem de operare proprietar cu sursa inchisa, iar GNU/Linux este un sistem de operare FREE cu
sursa deshisa care la inceput a incercat sa imite sistemul Unix original.
Marile firme private si-au dezvoltat propriile sisteme de operare Unix astfel:
- HP-UX - Unix-ul celor de la Hewlett-Packard (SVR4). Versiunea actuala este 11.i
- AIX - Unix-ul celor de la IBM bazat pe SVR4
- BSD - Unix-ul celor de la universitatea din California. In prezent exista FreeBSD, OpenBSD,
NetBSD
Prima distributie de Linux a fost Slackware lansata in 1993.
Ulterior au aparut multe alte distributii fiecare avand specificul sau:
RHEL (RedHat Enterprise Linux - Sistem Comercial)
Fedora (varianta free de la RedHat)
SuSE (cumparat de Novell, Sistem Comercial)
Debian
Ubuntu
Gentoo
Mandriva
CentOS (bazat pe RHEL, necomercial)
Knoppix (prima distributie de Linux care ruleaza direct de pe CD - LiveCD)
Puppy
MEPIS
Nota
Sistemul de operare Android folosit pe Smartphone-uri si tablete este o versiune de Linux
aflata sub mentenanta Google. Detalii.
Exista in prezent mai multe sute de distributii de Linux. Detalii
Resurse
Linux - The Code
Unix
Linux
Richard Stallman
Linus Torvalds
1 Introducere & Instalare » 1.2 Consideratii Hardware » 1.2.1 ACPI
ACPI
ACPI (Advanced Configuration and Power Interface) este un standard dezvoltat de un consortiu
format din HP, Intel, Microsoft, Phoenix si Toshiba in 1996. Ultima versiune dateaza din
Noiembrie 2011.
ACPI reprezinta un standard prin care OS are controlul asupra recunoasterii elementelor
hardware si power management.
Folosind aceasta interfata BIOS-ul furnizeaza OS toate mecanismele necesare pentru controlul
low-level al componentelor hardware.
OS poate determina ca sistemul sa consume putina energie in anumite perioade si multa energie
cand este cazul (ca si in cazul laptop-urilor).
Exista pe tastatura "power management keys" pentru oprirea sistemului, cresterea luminozitatii
monitorului etc.
Hardware-ul (placa de baza si chiar CPU) trebuie sa fie compatibil cu acest standard.
Un sistem compatibil ACPI poate sa se gaseasca in urmatoarele stari:
a) G0 - Working - starea normala de operare a unui calculator cand aplicatiile ruleaza, CPU
executa instructiuni etc
b) G1 - Sleeping - are 4 substari ( Standby, Hybernation etc)
c) G2 - Soft off - Aproximativ asemanator cu G3 (mechanical off) doar ca anumite componente
raman alimentate cu energie astfel incat diferite evenimente sa poate aduce statia in starea G0
(keyboard, LAN, USB). Din aceasta stare sistemul trebuie sa buteze pentru a intra in starea G0.
d) G3 - Mechanical Off - Nivelul de energie consumat este aproape zero.
Wake on LAN (WoL)
WoL este o tehnologie care permite pornirea unui calculator de la distanta prin trimiterea unui
frame Ethernet special. Placa de retea este alimentata continuu cu energie si asculta primirea
frame-ului special.
Supportul pentru Wake on Lan (WoL) este implementat pe placa de baza. NIC-ul (care inca
primeste energie) asculta dupa acel pachet special numit "Magic Packet". Daca acesta este valid
buteaza calculatorul.
Magic Packet: se trimite pe adresa de broadcast folosind UDP si portul 0 (la inceput), 7 sau 9
(mai recent).
Datele din MagicPacket: FFFFFFFFFFFF urmat de 16 repetitii ale MAC-ului targetului si
eventual o parola formata din 4 sau 6 bytes
In afara de hardware (placa de baza) compatibil exista si componenta software si anume
programul care genereaza si trimite target-ului magic packet. Exista mai multe astfel de aplicatii
atat pentru Windows cat si pentru Linux. Un exemplu de astfel de program este Depicus
Nota
Daca se doreste pornirea calculatorului dintr-o alta retea de exemplu Internet, Routerul
trebuie configurat pentru redirectarea pachetelor "Directed Broadcast"
Resurse
Linux ACPI ACPI Wake On Lan
1 Introducere & Instalare » 1.2 Consideratii Hardware » 1.2.2 Hard Disks
Hard Disks
In prezent pentru PC-uri exista 2 standarde de conectare a hard disk-urilor la placa de baza:
SATA si PATA
ATA - Advanced Technology Attachment reprezinta o interfata prin care hard disk-urile,
CD/DVD se conecteaza la placa de baza. Odata cu introducerea SATA (Serial ATA) in 2003,
ATA a fost redenumita PATA (Parallel ATA).
Pe placa de baza a arhitecturii X86 exista 2 sloturi pentru conectarea hardiskurilor PATA. Pe
fiecare cablu paralel se pot conecta 2 hdd. Avem astfel in total maxim 4 hdd.
Ele sunt reprezentate in Linux astfel:
/dev/hda - primary master hard disk
/dev/hdb - primary slave hard disk
/dev/hdc - secondary master
/dev/hdd - secondary slave
Important
Fiecare Hard Disk poate contine partitii primare care pot fi maxim 4 si partitii logice care se
gasesc in cadrul unei partitii extinse.
A 4-a partitie primara este considerata partitia extinsa, este unica si va contine restul partitiilor
logice.
Nota
In cazul hard disk-urilor SATA sau SCSI acestea sunt reprezentate prin fisierele /dev/sda,
/dev/sdb, /dev/sdc si /dev/sdd. Notiunile de primary master, primary slave etc nu mai exista.
De asemenea ultimele versiuni de kernel folosesc o interfata standard de accesare atat pt.
PATA cat si pt. SATA si reprezinta inclusiv partitiile hard diskurilor PATA sub forma sda1,
sda2 etc.
USB stick-urile vor fi reprezentate de kernel tot sub forma sda.
1 Introducere & Instalare » 1.2 Consideratii Hardware » 1.2.3 RAID
RAID
RAID (Redundant Array of Inexpensive/Independent Disks)
Definitie
RAID reprezinta o metoda prin care mai multe hard diskuri fizice se grupeaza intr-o singura
unitate logica.
Tehnologia RAID a fost definita prima data de catre un grup de cercetatori de la universitatea
Berkeley din California.
Exista 2 categorii de configuratii
1. Software RAID. Hard diskurile sunt combinate intr-o singura unitate logica de catre sistemul
de operare. OS vede fiecare disk si trebuie configurat sa le foloseasca ca un singur ansamblu.
2. Hardware RAID. Hard diskurile sunt combinate intr-o singura unitate logica de catre un
controller. OS (Operating System) vede ansamblul ca un singur hard disk. Nu este nevoie de
nicio configuratie la nivel de sistem de operare.
Hardware RAID ofera mai multa securitate si performanta a datelor dar este mult mai scump.
Nivele RAID
- RAID 0 (Data Striping without redundancy). Acest nivel este cel mai eficient ca si performanta
dar nu ofera protectia datelor. Se formeaza din minimum 2 hard disk-uri. Informatia este "sparta"
in fragmente si redistribuita pe mai multe diskuri din array (ansamblul de diskuri fizice care
pentru sistemul de operare reprezinta o singura unitate logica). Se poate scrie/citi in paralel. Daca
un singur disk se defecteaza intreg sistemul devine inutilizabil.
- RAID 1 (Disk Mirroring). Nr. minim de diskuri din array este 2. Datele sunt salvate pe fiecare
dintre cele 2 hard diskuri. Securitatea datelor este maxima iar performantele de citire/scriere sunt
mari. Singurul dezavantaj este ca acest nivel necesita de doua ori mai mult spatiu de stocare.
- RAID 2 - Nu se foloseste.
- RAID 3 si RAID 4 (Striped Set with dedicated parity) - minimum 3 discuri.
- RAID 5 (Striped Set with Distributed Parity). Nr. minim de diskuri este 3. O defectiune a unui
disk nu duce la distrugerea tuturor datelor. Datele aflate pe diskul defect pot fi recuperate de pe
celelalte diskuri.
- RAID 0/1, RAID 10 - reprezinta o combinatie intre RAID 0 si RAID 1. Nr. minim de discuri
este 4.
Pentru RAID 0 si RAID 1 avem nevoie de cel putin 2 partitii pe 2 hard diskuri diferite. RAID 5
necesita 3 partitii. Se recomanda folosirea partitiilor de aceeasi marime.
Nota
Exista si posibilitatea folosirii unui singur hard disk, doar ca beneficiile RAID dispar.
Resurse
RAID - Intro
RAID
Linux Sofware RAID
1 Introducere & Instalare » 1.2 Consideratii Hardware » 1.2.4 LVM
LVM
LVM (Logical Volume Management)
Reprezinta posibilitatea prin care se pot crea "Logical Volumes" care se intind pe mai multe
diskuri si partitii.
Un volum logic poate fi folosit ca o partitie si anume se poate formata cu un sistem de fisiere si
monta intr-un anumit mount-point.
Mai multe "physical partitions" - hard diskuri intregi sau partitii se combina intr-un singur
"volume group".
LVM nu trebuie confundat cu RAID. Acestea sunt 2 tehnologii diferite care se completeaza.
EVMS (Enterprise Volume Management System) reprezinta o interfata comuna pentru LVM si
RAID.
Avantaje LVM:
se pot combina mai multe partitii sau hdd intr-un singur "volume group"
un "logical volume" poate fi largit cand este nevoie de mai mult spatiu intr-un mod foarte
simplu.
se pot adauga noi "logical volumes" la "volume group" fara a fi nevoie de oprirea sistemului
sau demontarea partitiilor.
se pot adauga noi hdd la "volume group" intr-un "running system"
Resurse:
LVM
Linux LVM
1 Introducere & Instalare » 1.3 Boot Loader/Boot Manager
Boot Loader/Boot Manager
Aceasta prezentare face referire la userul root. In Linux exista 2 categorii de useri: useri
neprivilegiati (toti ceilalti) si userul root. root este un utilizator cu drepturi depline,
administratorul sistemului. Orice sarcina administrativa se realizeaza de catre userul root. Pentru
detalii despre modul in care se executa comenzi cu drepturi de root cititi sub-capitolul: su si sudo
Boot manager & Boot loader
Boot Loaderul este primul program executat in momentul butarii unui calculator. Acesta este
responsabil sa transfere controlul catre kernelul sistemului de operare. Acesta din urma incarca
intreg sistemul de operare.
Definitie
Procesul de butare (booting) reprezinta incarcarea/copierea sistemului de operare de pe Hard
Disk in RAM si executarea de catre acesta a diferitelor functii pentru initializarea dispozitivelor
hardware (recunoasterea placii grafice pentru afisare la monitor, stabilirea rezolutiei monitorului,
montarea sistemelor de fisiere de pe hard disk, initializarea porturilor seriale, usb, initializarea
mouse-ului si a tastaturii etc. Detalii).
Un boot manager este un program care ajuta utilizatorul sa aleaga intre mai multe sisteme de
operare, sa seteze sistemul default, timeout etc.
Pe Linux se folosesc in principal 2 programe care contin atat boot loader cat si boot manager.
Acestea sunt LILO - Linux Loader si GRUB - GRand Unified Bootloader.
Grub este mai flexibil, este de preferat.
Grub este instalat automat de multe distributii de Linux dar si Unix (ex. Solaris).
Grub poate incarca si alte sisteme de operare (Windows, Solaris, etc).
Boot Loaderul se instaleaza intr-un singur sector al hard disk-ului numit sector de boot.
Exista 2 categorii de sectoare de boot:
1) VBR - Volume Boot Record - reprezinta primul sector al unui hard disk care nu a fost
partitionat sau primul sector al unei partitii a unui hard disk care a fost partitionat. Contine cod
pentru a incarca sistemul de operare de pe acel hard disk sau de pe acea partitie.
2) MBR - Master Boot Record - reprezinta primul sector al unui hard disk care a fost partitionat.
Contine cod pentru a identifica partitia activa si a invoca Volume Boot Record al acelei partitii.
Dimensiunea MBR este 512 bytes din care maximum 446 reprezinta cod executabil.
Exista 2 versiuni Grub: Grub sau Grub1 (Grub Legacy) si Grub2. Acestea difera fundamental
prin modul de configurare si operare. Ultimele distributii de Linux folosesc Grub2, care incetul
cu incetul va inlocui Grub1. In prezent (anul 2011) Grub legacy este inca folosit in special
datorita faptului ca este un program stabil, testat in multi ani.
Pentru a detecta versiunea de Grub instalata se ruleaza din consola comanda grub-install -v
Exemplu
Versiunea 1.98 nu inseamna Grub1 ci versiunea 1.98 a lui Grub2. In cazul Grub1 la
versiune va aparea 0.97 (sau mai putin).
Grub legacy
Fisierul de configurare al lui Grub este default in /etc/grub.conf sau in /boot/grub/menu.lst
Fisierul de configurare al GRUB este: /boot/grub/menu.lst
In momentul in care dorim modificari referitoare la modul de functionare al acestuia precum
adaugarea unui nou sistem de operare in meniul lui Grub afisat la pornirea calculatorului,
stergerea unui sistem de operare in care sa butam, modificare timeout etc trebuie sa modificam
fisierul precizat mai sus.
Structura acestuia este:
default 0
timeout 8
title Windows XP
rootnoverify (hd0,0)
chainloader +1
title Fedora Core
root (hd0,1)
kernel /boot/vmlinuz root=/dev/sda2
initrd /boot/initrd
title Solaris
rootnoverify (hd0,2)
chainloader +1
Grub2
Modul de functionare al lui Grub2 este dictat de mai multe fisiere:
1. /boot/grub/grub.cfg
Acesta este fisierul de configurare principal al lui Grub2 care precizeaza ce sistem de operare
incarca Grub2, pe ce partitie se afla acestea, sistemul default de butare etc si inlocuieste
/boot/grub/menu.lst al lui Grub1. Fisierul nu se editeaza manual nici macar de catre root. Fisierul
se genereaza automat (suprascriind vechiul fisier) de fiecare data cand se ruleaza comanda
update-grub pe baza fisierelor din directorul /etc/grub.d
2. /etc/default/grub
Acesta este fisierul in care se precizeaza timeout, modul de display al meniului etc.
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
#precizeaza sistemul de operare default care in care va buta.
#este ordinea de afisare in meniu, iar numerotarea incepe de la zeros
GRUB_DEFAULT=0
#optiunea este valabila doar daca exista un sigur sistem de oparare.
#daca sunt mai multe optiunea este ignorata
#optiunea precizeaza cat timp asteapta grub inainte sa buteaze sistemul
GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
#in cazul mai multor sisteme de operare este indicat timpul
# in care este afisat meniul inainte de butarea in sistemul default
GRUB_TIMEOUT=10
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX=""
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
#GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
#GRUB_DISABLE_LINUX_RECOVERY="true"
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1"
3. fisierele din directorul /etc/grub.d
Acestea sunt editabile de catre user (root), iar pe baza lor se genereaza /boot/grub/grub.cfg (in
urma rularii comenzii update-grub).
In comparatie cu Grub1, Grub2 detecteaza automat sistemele de operare instalate si actualizeaza
corespunzator /boot/grub/grub.cfg
Fisierele importante din acest director sunt:
- 10_linux -> detecteaza kernel linux;
- 30_os-proper -> cauta automat sisteme de operare Linux si Windows instalate si actualizeaza
/boot/grub/grub.cfg;
- 40_custom -> fisier care se editeaza de catre user cu sistemele de operare pe care dorim sa le
butam. In acest fisier se adauga sistemele Windows, Solaris etc daca nu dorim detectarea lor
automata;
In comparatie cu Grub Legacy, Grub2 incepe numerotarea partitiilor de pe un hard disk de la 1 in
loc de 0. Diskurile se numeroteaza in continuare de la zero.
Exemplu: (hd0,1) reprezinta prima partitie de pe primul hard disk, iar (hd1,3) reprezinta a 3-a
partitie de pe al doilea hard disk.
Exemplu: 40_custom in cazul in care se doreste configurarea Grub2 sa buteze un sistem
Windows care se gaseste pe prima partitie de pe primul hard disk.
menuentry "Windows XP SP3" { set root=(hd0,1) chainloader +1 }
In cazul in care adaugam manual in 40_custom un sistem de operare, acesta poate fi identificat si
automat astfel avem in lista meniu acelasi sistem de 2 ori. Daca nu dorim sa mai se detecteze
automat sisteme de operare se poate sterge fisierul 30_os-proper sau i se poate lua dreptul de
executie (chmod -x 30_os-proper).
Nota
De cele mai multe ori reconfigurarea GRUB-ului (ex: dupa instalarea unui noi sistem de
operare) are loc automat prin rularea comenzii upate-grub de catre userul root.
Resurse
GRUB
GRUB2
The GRUB2 Guide
1 Introducere & Instalare » 1.4 Instalare
Instalare
Instalarea unui sistem de operare Linux modern decurge asemanator cu instalarea sistemului
Windows. Installer-ul recunoaste componentele hardware, instaleaza drivere pentru acestea,
partitioneaza hard disk-ul, creaza utilizatori, configureaza reteaua etc. La sfarsit avem un sistem
de operare Linux perfect functional.
Nota
In comparatie cu Windows, o distributie Linux contine aproape toate programele necesare
utilizatorului. Acestea sunt incluse pe DVD-ul sau CD-urile de instalare, iar daca sunt alese
de utilizator sunt instalate o data cu sistemul de operare. La final vom avea acces la
majoritatea programelor necesare precum: editoare de text, playere video, mp3 player,
program de copiere CD-uri, program de Backup, client de E-mail, Browser, client de
messenger etc.
Pentru o echivalenta a programelor Windows-Linux cititi sectiunea capitolului "Mediul
Grafic" a acestui curs numita "Programe Desktop".
Aspecte care trebuie avute in vedere inaintea inceperii instalarii unui sistem de operare Linux:
1. Linux are nevoie de propria partitie pe care sa se instaleze. Aceasta poate fi creata anterior din
Windows folosind un program precum Partition Magic sau in timpul instalarii Linux.
Dimensiunea partitiei se recomanda sa fie de minim 10 GB pentru o folosire normala a
sistemului Linux. In cazul in care aceasta se creaza din Windows poate sa fie formatata cu orice
sistem de fisiere (fat, ntfs etc), iar in timpul instalarii Linux aceasta trebuie formatata cu un
sistem de fisiere specific precum ext3/ext4 sau reiserfs.
2. Pentru performante crescute, Linux necesita o partitie speciala de tip swap. Se recomanda ca
dimensiunea partitiei sa fie de 2 ori dimensiunea memoriei RAM. Partitia de swap trebuie creata
anterior din Windows sau in timpul instalarii Linux. Se va formata ca swap in timpul instalarii.
Partitia de swap NU este obligatorie.
3. Dupa downloadul fisierului ISO si inainte de copierea acestuia pe un CD/DVD si instalare, se
recomanda verificarea hash-ului acestuia folosind md5sum sau sha1sum.
Hash-ul este un rezumat criptografic unic pentru fiecare fisier (nu exista 2 fisiere cu acelasi
hash). Fiecare fisier are mereu acelasi hash (daca dorim sa calculam hash-ul de mai multe ori).
Astfel se compara hash-ul calculat local cu hash-ul de pe site-ul producatorului. In cazul in care
acestea sunt egale putem trage 2 concluzii: fisierul a fost downloadat fara erori (este integru) si a
fost nemodificat fata de versiunea originala de pe site-ul producatorului. In Linux exista
comenzile md5sum si sha1sum pentru calcul de hash-uri, iar in Windows trebuie instalate.
Detalii.
1 Introducere & Instalare » 1.5 Console/terminale virtuale
Console/terminale virtuale
In Linux si Unix exista conceptul de Consola Virtuala si Terminal Virtual sau Terminal Text.
Considerente istorice
Initial se folosea un singur calculator de tip mainframe sau similar la care se conectau mai multi
useri simultan folosind fiecare o consola. O consola era reprezentata printr-un ansamblu de
tastatura si monitor.
Linux pune la dispozitia utilizatorului 7 console virtuale (logice) care pot fi accesate folosind
combinatia de taste CTRL+ALT+F1 pt consola 1, CTRL+ALT+F2 pentru consola 2 etc.
In consola 7 este pornit mediul grafic.
Nota
Fizic, cele 7 console virtuale sunt reprezentate prin fisierele /dev/tty1-7, iar terminalele
virtuale sunt reprezentate prin fisierele /dev/pts*
Fisierul /etc/securetty contine pe fiecare linie locatiile de unde userul root are voie sa se
logheze
Terminal windows, terminal emulator sau terminal virtual reprezinta o consola pornita din modul
grafic.
Un terminal virtual se porneste in Ubuntu (Gnome): Start->Accessories->Terminal
In momentul in care deschidem un terminal virtual porneste shell-ul default al sistemului (Bash)
care asteapta rularea de comenzi.
Toate comenzile se scriu in Linux intr-un terminal virtual (sau consola virtuala).
Resurse
Starting a terminal (in Unity, Gnome, Kde sau Xfce)
1 Introducere & Instalare » 1.6 Linux rescue
Linux rescue
1.6.1 Refacerea configuratiei de boot
1.6.2 Recuperarea parolei de root
Linux este un sistem de operare bazat pe comenzi.
Comenzile sunt interpretate din punct de vedere al sintaxei de catre Shell (o componenta
importanta a sistemului) si transmise kernelului spre executie.
Comenzile se executa intr-un terminal virtual sau consola virtuala. Pentru a deschide un terminal
in Ubuntu: Start->Accessories->Terminal
De asemenea in Linux exista 2 categorii de useri:
1. userii neprivilegiati (toti inafara de root)
2. un singur user privilegiat numit root
Userii neprivilegiati nu au nicio permisiune in sistem, de accea orice comanda care presupune
modificari in sistem trebuie rulata de catre root. Ex: modificare IP, instalare programe, update
programe, practic orice modificare.
Pentru a se rula comenzi ca root exista 2 posibilitati:
1. "Devenim" root temporar ruland comanda su si introducand parola de root. Toate comenzile
ulterioare (pana la logout) vor fi executate de catre root
2. Fiecare comanda este rulata de catre un user neprivilegiat dar prefixata de comanda sudo.
Exemplu: in loc sa se ruleze comanda passwd root care modifica/seteaza parola lui root se
ruleaza sudo passwd root. In acest caz este ceruta parola userului neprivilegiat care ruleaza
comanda sudo. Aceasta din urma pleaca cu drepturi de root.
Nota
1. In Ubuntu initial dupa instalare, userul root nu are setata parola si nu se poate loga.
Pentru a folosi userului root in mod direct trebuie setata parola si anume se ruleaza: sudo
passwd root. Ulterior punem "deveni" root ruland comanda su ca user neprivilegiat
2. Userii care pot rula comnezi prefixate cu sudo sunt cei care fac parte din grupul admin,
iar initial este doar userul creat la momentul instalarii.
3. Distributiile de Linux bazate pe Debian precum Ubuntu sunt orientate foarte mult in
directia folosiri lui sudo. Celelalte distributii precum si Unix folosesc mai mult varianta de
devenire temporara root. Aceasta este si varianta considerata clasica si este folosita de multe
ori si in exemplele acestui curs. Diferentele dintre cele 2 metode nu sunt foarte mari si tin
mai multe de preferintele fiecarui administrator.
Notiunile despre console, comenzi, shell-uri si useri vor fi mult detaliate in capitolele urmatoare.
1 Introducere & Instalare » 1.6 Linux rescue » 1.6.1 Refacerea configuratiei de boot
Refacerea configuratiei de boot
Exista foarte multe cazuri in care sistemul de operare nu mai buteaza din cauza unei erori, cand
am "pierdut" parola de root sau cand vrem sa rescriem Grub-ul pe MBR pentru butarea in mai
multe sisteme.
Dupa instalarea Windows (Linux fiind deja instalat) MBR-ul este suprascris de Windows astfel
incat nu vom mai putea alege sistemul de operare in care sa butam sau sa intram in Linux.
Nota
CD-ul de rescue poate sa fie primul CD dintre CD-urile de instalare, un CD special in cazul
anumitor distributii sau DVD-ul de instalare.
Etapele sunt urmatoarele (in cazul in care folosim CD-ul de instalare Ubuntu - similar pentru alte
distributii):
1. Butam folosind CD-ul de instalare
2. Alegem optiunea de Live CD sau "Try Ubuntu"
3. Dupa butare deschidem un terminal si "devenim" user privilegiat (root) ruland comanda: sudo
su
Toate operatiile urmatoare pana la restartare se realizeaza de userul root.
4. Montam in /mnt partitia pe care se gaseste sistemul Linux caruia ii facem rescue (cel in care
nu mai putem intra datorita instalarii Windows sau defectarii Grub-ului de pe MBR). Pentru a o
identifica putem rula fdisk -l. Presupune ca aceasta este /dev/sda1
mount /dev/sda1 /mnt
5. Se instaleaza Grub cu vechea configuratie pe MBR prin comanda grub-install --root-
directory=/mnt /dev/sda
6. Se restarteaza sistemul (comanda reboot) urmand sa apara meniul GRUB. In cazul in care
Windows a fost instalat dupa Linux, in acest moment nu vom mai putea intra in Windows.
Trebuie sa ne logam in Linux si ca root sa rulam: update-grub
Nota
/dev/sda se inlocuieste cu fisierul care reprezinta Hard Disk-ul pe care se instaleaza Grub.
Grub se instaleaza pe MBR adica pe primul sector al hard dikului (Ex: sda) si nu pe o
anumita partitie (Ex: sda1). Directorul in care se monteaza partitia (in exemplu de mai sus
/mnt) poate fi inlocuit cu orice alt director existent.
1 Introducere & Instalare » 1.6 Linux rescue » 1.6.2 Recuperarea parolei de root
Recuperarea parolei de root
Exista cazuri in care parola userului root a fost uitata, schimbata accidental sau in mod
intentionat de o alta persoana care avea acces la contul de root astfel incat nu mai ne putem loga
ca root in sistem.
Important
Orice sarcina administrativa din Linux poate fi realizata DOAR de userul root deci accesul la
contul root este obligatoriu. In Linux orice modificare a unei setari a sistemului de operare se
realizeaza modificand un fisier text aferent numit fisier de configurare. Aceste fisiere se gasesc
in directorul /etc
Un user normal sau neprivilegiat are permisiunea de a modifica DOAR fisierele si directoarele
din propriul Home Directory.
Nota
Recuperarea parolei de root poate avea loc DOAR daca avem acces fizic la calculator !!.
Vechea parola de root NU poate fi gasita ci schimbata.
Butarea sistemului folosind CD-ul de instalare si alegand LiveCD. De asemenea se poate buta cu
orice LiveCD precum Knoppix.
Dupa butare se monteaza partitia pe care se gaseste sistemul de fisiere "/" si care contine fisierele
/etc/passwd (contine userii din sistem inclusiv root) si /etc/shadow (contine hash-ul parolei
uitate). Se ruleaza: mount /dev/sda1 /mnt
Nota: sda1 se inlocuieste corespunzator, iar in locul lui /mnt se poate folosi orice alt director.
In continuare exista 3 posibilitati (prima este mereu disponibila si cea mai usoara):
a) Se editeaza folosind editorul preferat (Exemplu VI) fisierul /etc/shadow si se sterge hash-ul
parolei lui root. Dupa restartarea calculatorului ne putem loga ca root fara a mai fi necesara
parola. In acest caz dupa logarea ca root fara parola trebuie setata o noua parola lui root prin
comanda: passwd root
b) Se inlocuieste hash-ului parolei lui root cu hash-ul unei parole cunoscute a unui cont oarecare.
Se logheaza ca root folosind acea parola;
c) Se monteaza sistemul de fisiere pe care se gaseste sistemul Linux in root ( /) si se foloseste
comanda passwd root;
Exemplu
Presupunem ca Linux s-a instalat pe prima partitie primara de pe primul hard disk SATA (
/dev/sda1)
0. Butare cu un LiveCD.
1. mount /dev/sda1 /mnt
2. vi /mnt/etc/shadow
Se sterg cu mare atentie toate caracterele care reprezinta hash-ul parolei intre cele 2 doua
puncte (:).
Prima linie trebuie sa arate: root::14915:0:99999:7:::
3. Restartare si logare ca root fara parola.
4. Modificare parola root folosind comanda:
passwd root
2 Mediul Grafic » 2.1 Sisteme grafice
Sisteme grafice
Un sistem grafic (graphical environment/desktop environment) consta in icoane, ferestre,
toolbars, foldere, panels, widgets si influenteaza modul de lucru si experienta al utilizatorului.
In cazul unui server Unix/Linux administrarea si configurarea acestuia se realizeaza folsoind CLI
(command line interface) sau linia de comanda pentru un control total.
Chiar daca anumite aspecte ale sistemului pot fi configurate grafic (daca exista instalat un sistem
grafic) cunosterea in profunzime a CLI este obligatorie pentru orice administrator performant.
Nota
Pe multe servere dedicate mediul grafic nu este instalat (Ex: Ubuntu Server) astfel incat
administrarea sistemului are loc doar prin consola, de cele mai multe ori remote folsoind
ssh.
Existe mai multe Desktop Environments (DE), printre cele mai cunoscute si apreciate fiind:
1. Unity
Acest DE modern realizat de Canonical Ltd special pentru Ubuntu se bazeaza pe GNOME. Este
default pentru Ubuntu incepand cu versiunea 11.04.
Resursele hardware necesare sunt considerabil mai mari in comparatie cu alte DE.
Cerinte hardware: CPU 1GHz, RAM 1 GB
2. Gnome (GNU Noterwork Object Model Environment)
A aparut in 1997 ca o alternativa la KDE. Este DE default pentru multe distributii printre care:
Ubuntu (pana la versiunea 11.04), Debian, Mint, Fedora, CentOS, etc.
Exista in prezent doua versiune principale: Gnome 2 si Gnome 3.
Nota
Daca se doreste folosirea Gnome in Ubuntu acesta trebuie instalat: sudo apt-get install
gnome-shell
Trebuie ales apoi din ecranul de login pentru a fi folosit:
3. KDE
Este primul DE complex pentru Linux si este considerat cel mai configurabil si cu cele mai multe
optiuni. Multe destributii folosesc default KDE: Kubuntu, Mandriva, etc.
Nota
Daca se doreste folosirea KDE in Ubuntu acesta trebuie instalat: sudo apt-get install
kubuntu-desktop
Trebuie ales apoi din ecranul de login pentru a fi folosit.
Kubuntu este o distributie bazata default pe Kde.
4. Xfce
Reprezinta o alternativa la Gnome sau Kde. Aceste DE se axeaza pe performanta in loc de
feature-uri. Are un "look" clasic iar resursele consumate sunt minime. Este ideal pentru
calculatoarele mai vechi sau pentru utilizatorii care sunt interesati doar de performanta.
Cerinte hardware: CPU 300 MHz, RAM 192 MB.
Nota
Daca se doreste folosirea Xfce in Ubuntu acesta trebuie instalat: sudo apt-get install xfce4
Trebuie ales apoi din ecranul de login pentru a fi folosit.
Xubuntu este o distributie bazata default pe Xfce.
Resurse
Unity
Gnome
KDE
Xfce
Comparison of X Window System desktop environments
Gnome vs. Kde vs. Xfce
2 Mediul Grafic » 2.2 Programe Desktop
Programe Desktop
Un sistem de operare Linux modern poate inlocui COMPLET, eficient si fara probleme pentru
majoritatea utilizatorilor un sistem de operare Windows. Veti avea astfel un sistem de operare
mult mai stabil, mai sigur, cu mai multa functionalitate dar si complet gratuit.
Nota
Majoritatea aplicatiilor prezentate se instaleaza automat folosind un manager de pachete
perecum apt-get.
Exemplu:
sudo apt-get update sudo apt-get install wireshark putty gns3
Pentru mai multe detalii despre instalarea de programe cititi capitolul Administrarea
pachetelor software a acestui curs.
In tabelul de mai jos gasiti o mica descriere a celor mai importante programe Desktop pe Linux
precum si programul echivalent din Windows pentru o tranzitie cat mai usoara.
Nr.
Crt. Program Linux
Echivalent
Windows Nota
1 LibreOffice MS Office
Suita de program LibreOffice reprezinta o
alternativa eficienta la MS Office. Poate
lucra cu fisiere word, excel, PowerPoint
create cu MS Office. Proiectul LibreOffice
este urmasul lui OpenOffice. LibreOffice
ruleaza inclusiv pe Windows.
2 qtparted, gparted Partition Magic Program de partitionare, modificare partitii
etc
3 PartImage, PING Norton Ghost
Programe folosite pentru backup sau pentru
clonarea unei partitii. PING este un live CD
extrem de eficient care poate clona orice tip
de partitie (inclusiv NTFS).
4 k3b, brasero Nero Program pentru scrierea de CD-uri, DVD-
uri, imagini iso etc
5 xmms, amarok,
banshee, exaile Winamp
Programe pentru redarea de fisiere mp3 sau
alte fisiere muzicale.
6 mplayer, xine, vlc,
totem
Windows Media
Player
Programe folosite pentru vizualizare de
filme in orice format (divx, xvid, wma, dvd
etc). Codec-urile necesare se instaleaza de
cele mai multe ori automat.
7 Krusader
Total
Commander
Twin File manager cu functionalitate
multipla(client ftp, arhivator/dezarhivator
zip, rar etc)
8
Mozilla Firefox,
Google Chrome, Opera,
Lynx - Web Browser
text util pentru lucrul in
consola
Internet Explorer Web Browser
9 Mozilla Thunderbird Outlook Express Client de e-mail
10 gaim/pidgin
Yahoo
Messanger,
MSN, ICQ
Client de chat
11 gedit, kate Notepad,
Wordpad Editor text
12 xchm, gnochm
Vizualizator pentru fisierele chm
13 clamav, clamwin
Norton Antivirus,
Bit Defender,
AVG, Kaspersky
etc
Antivirus complet free. ClamAV este
varianta care ruleaza pe Windows
14 netfilter/iptables
Windows
Firewall, Norton
Firewall, Kerio
etc
Firewall extrem de eficient folosit cu
succes pe servere Enterprise. Ofera
facilitati de rutare/nat, modificare a
pachetelor(mangle) etc. Reprezinta
SINGURA solutie tip firewall disponibila
pe Linux
15 gtkpod itunes Program pentru ipod
16 GIMP Adobe Photoshop Editor de imagini
17 Ktorrent, Transmission BitTorrent,
uTorrent Torrent client
18 evince Acrobat Reader PDF Viewer
19 gftp Ftp Commander
20 Lame, Grip, CD
Paranoia
21 Quanta Plus, BlueFish HomeSite, Adobe
- Dreamweaver
IDE (Integrated development environment)
folosit pentru dezvoltarea de aplicatii web
(html, javascript, php, css etc)
Alte programe utile, recomandate a fi instalate pe Linux sunt:
GNS3 - Graphical Network Simulator - Emulator pentru echipamente Cisco (Routers,
Switches, ASA)
Password Gorilla - Password Manager
Putty - telnet/ssh client
Calibre - E-Book (mobi, epub etc) Manager
recordmydesktop - Desktop Recorder
Wireshark - Sniffer si analizator de pachete
Audacity - Audio Editor & Recorder
PdfEdit - PDF Editor
Nota
Multe programe folosite pe Windows ruleaza de asemenea si pe Linux. Dintre acestea
enumeram:
Acrobat Reader - PDF Viewer
Google Earth
Eclipse, NetBeans - IDE pentru aplicatii Java
VMware, VMware Player, VirtualBox - Virtualizare
Pentru rularea de programe native Windows pe Linux cum ar fi jocuri, Adobe Photoshop,
Visual Studio etc se foloseste WINE.
Pentru a monta partitii de Linux precum ext3 pe Windows se poate folosi EXT2ifs
Resurse
Best Free Software for Linux
Top 100 of the Best (Useful) OpenSource Applications
3 Structura Linux » 3.1 Structura Linux
Structura Linux
Un sistem de operare este format din urmatoarele componente:
1. Kernel
Reprezinta partea cea mai importanta a OS, cea care lucreaza cu CPU si este cea mai apropiata
de Hardware. Fizic kernelul se regaseste intr-un fisier iar de cele mai multe ori acesta este
/boot/vmlinuz-version_no
Functii:
I/O Management;
managementul memoriei RAM si SWAP;
apelarea functiilor de sistem;
lucrul cu echipamentele periferice prin drivere;
managementul sistemului de fisiere si al proceselor care ruleaza;
Memoria SWAP reprezinta un tip special de memorie care se gaseste pe Hard disk, dar care este
folosita de Kernel ca si cand ar fi memorie RAM. Dimensiunea acesteia se recomanda a fi egala
sau mai mare decat memoria RAM. Pe Linux se foloseste o partitie speciala pentru memoria de
tip Swap. Aceasta memorie este optionala.
2. Shell
Utilizatorul nu poate comunica direct cu Kernelul. Accesul la functiile kernelului se face prin
intermediul shell-ului. Acesta este un program care primeste comenzi de la user sau alte aplicatii,
le interpreteaza si le transmite kernelului pentru a le executa.
Printre functiile shell-ului se afla si customizarea intregului environment (mediu de lucru)
precum si programarea folosind shell scripts.
Exista mai multe shell-uri printre cele mai importante amintim:
a) Bourne Shell (sh) - Primul shell pentru Unix. A fost dezvoltat de Stephen Bourne la AT&T.
Nu are foarte multe optiuni.
b) Korn Shell (ksh) - A fost dezvoltat de David Korn la Bell Labs.
c) C Shell (csh) - A fost dezvoltat de Bill Joy la Sun si se bazeaza pe limbajul de programare C.
d) Enhanced C Shell (tcsh)
e) Z Shell (zsh) - Este asemanator de Korn shell dar are mai multe functii.
f) Bash (bash) - Bourne Again Shell - Default pe Linux. Cel mai folosit si mai puternic shell.
3. Sistemul de fisiere . Pentru detalii cititi subcapitolul "Sistemul de fisiere" al acestui curs.
3 Structura Linux » 3.2 Structura unei comenzi
Structura unei comenzi
Pentru managementul sistemului Linux (copiere de fisiere sau directoare, stergere, redenumire,
afisare continut, listare, editare etc) se folosesc comenzi. Exista peste 400 comenzi de baza in
Unix/Linux.
Exista comenzi incluse in shell ( Exemplu: alias, cd, umask) si comenzi independente
reprezentate prin programe ( Exemplu: ls, cp, rm etc).
Structura unei comenzi este urmatoarea:
NUME_COMANDA OPTIUNI [ARGUMENT 1] [ARGUMENT 2]
NUME_COMANDA = reprezinta numele comenzii. Trebuie sa apara primul. Directorul in care
se gaseste comanda trebuie sa fie in variabila PATH (la fel ca si in WINDOWS).
Nota
In contrast cu Windows, in Linux directorul curent reprezentat prin . (punct) nu se gaseste
in PATH. Pentru a executa o anumita comanda nu este suficient sa ne mutam in directorul
care contine programul respectiv sau comanda si sa executam respectiva comanda.
OPTIUNI
pot fi scurte (o litera). Exemplu: ls -R sau pot fi combinate mai multe litere. Exemplu: ls -Fal
pot fi formate din unul sau mai multe cuvinte. Exemplu: smart --ignore-locks
ARGUMENTE
reprezinta scopul comenzii. Pot fi fisiere sau directoare, adrese IP, nume de domenii DNS etc
Nota
Comenzile se scriu cu litera mica, iar argumentele pot fi cu litera mica sau litera mare, de
cele mai multe ori cu litera mica. Litera mica difera intotdeauna de litera mare.
Important
Apasarea tastei TAB o singura data dupa primele caractere dintr-o comanda sau fisier, are ca
efect completarea comenzii sau au fisierului daca comanda sau fisierul se identifica unic.
Apasarea tastei TAB de 2 ori determina afisarea tuturor comenzilor sau a fisierelor care incep cu
literele scrise deja. Daca tasta TAB nu completeaza comanda sau fisierul inseamna ca fisierul sau
comanda nu exista ori sunt scrise partial gresit. Este foarte important sa se foloseasca tasta TAB
pentru auto-completare atat pentru cresterea eficientei cat si pentru elimitarea erorilor.
3 Structura Linux » 3.3 Comenzile ls si less
Comenzile ls si less
1. Comanda ls
Una dintre cele mai folosite comenzi in Linux este ls (list). Aceasta afiseaza informatii diverse
despre fisiere si directoare.
ls OPTIONS FILE - listeaza continut
-l listare lunga, sortare dupa nume
-F afiseaza tipul fisierului
-t sortare dupa mtime
-h human readable
-i afiseaza inode
-R afiseaza recursiv
-S sortare dupa marime
-d afiseaza informatii despre director in loc de continutul acestuia
-c afiseaza ctime (in combinatie cu -l)
-u afiseaza atime (in combinatie cu -l)
-a afiseaza hidden files
2. Comanda less
Intreaga configuratie a unui sistem Linux, fie ca ne referim la servere care ruleaza, firewall sau la
rezolutia monitorului se gaseste aproape exclusiv in fisiere text. Una dintre sarcinile cele mai
frecvente ale unui admin este vizualizarea diferitelor fisiere text. Cea mai folosita comanda
pentru vizualizare care se gaseste pe orice distributie de Linux sau chiar de Unix este less.
less FILE - afiseaza continut fisier text
In timpul vizualizarii continutului fisierului putem folosi urmatoarele taste:
enter afisare urmatorul rand
space afisare urmatoarea fereastra
d afisare urmatoarea jumatate de fereastra
u afisare jumatatea de fereastra anterioara
/sir cautare sir forward
?sir cautare sir backward
n urmatoarea aparitie a sirului
N aparitia anterioara a sirului
g salt la inceputul fisierului
G salt la sfarsitul fisierului
q quit
h help
Resurse
man ls
man less
3 Structura Linux » 3.5 Runlevel
Runlevel
Reprezinta starea in care se afla si opereaza sistemul de operare la un anumit moment dat.
Exemplu: un sistem de operare Linux care intra in runlevel 0 se opreste, daca intra in runlevel 6
tocmai se restarteaza.
In functie de runlevel-ul in care opereaza sistemul de operare exista anumite facilitati oferite si
anumite procese care ruleaza. Un sistem de operare Linux se poate afla la un moment dat intr-un
singur runlevel.
Linux runlevels
Runlevel Semnificatie Descriere
0 Halt, Shut down Oprirea sistemului, aducerea lui in starea in care se intrerupe
alimentarea cu energie electrica
1 single-user
Modul administrator folosit pentru mentenanta. Nu exista retea,
mediu grafic si doar sistemele de fisiere locale sunt montate.
Exista un sigur user care se poate loga in sistem si anume root.
Este echivalentul lui Safe-Mode din Windows
2 multi-user Modul multi-user fara retea.
3 multi-user + retea Runlevel default pentru servere.
4 N/A Nu exista
5 multi-user + retea
+ mediul grafic Run level default pentru Desktop
6 reboot/restart Restartarea calculatorului
Mai poate exista runlevel-ul S sau s, care nu este folosit direct ci de catre programe si scripturi
care se executa cand se intra in runlevel 1.
Pentru trecerea dintr-un runlevel in altul se foloseste comanda: init noul_runlevel
Exemplu
1. Restartare calculator
/sbin/init 6
2. Oprire calculator
/sbin/init 0
3. Intrare in single-user mode
/sbin/init 1
4. Revenire in runlevel 5
/sbin/init 5
Nota
In cazul distributiilor bazate pe Debian precum Ubuntu runlevel-urile existente au o alta
semnificatie si anume nu se diferentiaza intre runlevel 2,3,4 si 5 iar default este runlevel 2.
Resurse
Runlevel - Wikipedia
3 Structura Linux » 3.6 Sistemul de fisiere » 3.6.1 Prezentare generala
Prezentare generala
Sistemul de fisiere reprezinta modul de organizare, structurare si accesare a fisierelor,
directoarelor si linkurilor pe hard disk.
Modul de organizare, accesare si recunoastere a particularitatilor fiecarui sistem de fisiere cade
in sarcina Kernelului. Acesta trebuie sa "ofere suport" pentru acel sistem de fisiere.
In prezent Kernelul de Linux recunoaste majoritatea sistemelor de fisiere existente: fat16, fat32,
ntfs, ext2, ext3, ReiserFS, nfs, smb, iso9660 etc.
Pentru majoritatea distributiilor de Linux default este ext4 - Fourth Extended File System
(default pentru RedHat, Fedora, Ubuntu, Mint etc) sau ReiserFS (default pentru Slackware,
SuSE, Xandros, Yoper).
De multe ori in studiul sistemelor de operare Unix/Linux gasim sintagma - "everything is a file".
Acest lucru se refera la faptul ca fiecare program, sau dispozitiv hardware este reprezentat printr-
un fisier. Nu mai exista alta modalitate de reprezentare a informatiei.
In Linux fisierele sunt case sensitive - se face distinctie intre litera mare si mica.
Un fisier se considera ascuns (hidden) daca numele sau incepe cu "." (punct).
Exemplu
/dev/sda1 reprezinta prima partitie de pe hard disk-ul primary master
/dev/cdrom reprezinta CD-ROM-ul. O scriere sau o citire de pe hard disk sau CD inseamna
de fapt o scriere sau citire din fisierul respectiv.
In Linux un director este tot un fisier (dar special care are anumite proprietati).
Sistemul de fisiere in Linux este arborescent (ca si in windows) doar ca avem un singur arbore
chiar daca avem mai multe partitii sau hard disk-uri.
Radacina sistemului de fisiere se numeste ROOT si se noteaza cu "/".
Atentie: a nu se confunda userul numit root cu radacina sistemului de fisiere care se numeste tot
root. Intre cei 2 termeni nu exista nicio legatura.
Resurse
Ext4 - Wikipedia
3 Structura Linux » 3.6 Sistemul de fisiere » 3.6.2 FHS
FHS
De-a lungul timpului s-a incercat standardizarea sistemului de fisiere pentru sistemele
Unix/Linux luand nastere astfel FHS - Filesystem Hierarchy Standard. Cu toate acestea nu exista
un standard general acceptat in prezent.
Principalele directoare care exista in majoritatea distributiilor de Linux si Unix sunt:
/sbin - utilitare pentru administrarea sistemului, multe accesibile doar lui root
/bin - utilitarele sistemului care trebuie sa fie disponibile atat userilor normali cat si lui root
/dev - fisiere speciale care reprezinta dispozitivele din sistem
/lib - librarii de functii folosite de aplicatii, kernel etc
/var - fisiere care in general isi modifica continutul (loguri, mailuri etc)
/usr - o ierarhie asemanatoare cu "/" ( /usr/sbin, /usr/bin, /usr/etc )
/etc - fisierele de configurare ale sistemului, ale serverelor care ruleaza etc
/root - home directory userului root
/home - home directory pentru userii din sistem. Fiecare user are home directory un director in
interiorul lui /home (de cele mai multe ori directorul poarta numele userului)
/proc - printre functiile principale ale kernelului este si aceea de a controla dispozitivele fizice si
de a coordona modul in care procesele folosesc aceste resurse. In /proc se gaseste statusul curent
al kernelului cu toate informatiile pe care acesta le cunoaste. Aceste fisiere si directoare sunt
create automat la butare. Ele se numesc virtuale. De aici vine si numele de "Sistem de Fisiere
Virtual" (acesta este proc). Aceste fisiere contin multe informatii utile, iar cu toate acestea
dimensiunea lor este de 0 bytes.
Nota
Fisierele din /proc pot fi modificate pentru a configura sistemul "on-the-fly".
Exemplu: echo "new-hostname" > /proc/sys/kernel/hostname
/media - mount point pt. sisteme de fisiere temporare
/mnt - mount point pentru sisteme de fisiere remote
/lost&found - fisiere care au fost salvate in timpul unui "failure"
/boot - fisiere necesare boot loader-ului, kernel-ului
/opt - programe si aplicatii adaugate ulterior care nu fac parte din distributie
/cdrom - mount point pt CD
Mount Point - reprezinta locul (directorul) din sistemul de fisiere UNIC in care se alipesc sisteme
de fisiere de pe alte partitii locale sau externe, de pe CD-ROM/DVD-ROM, USB Stick etc.
Exemplu: la introducerea unui stick usb acesta se va monta automat intr-un subdirecor al
directorului /media. Respectivul subdirector se numeste mount point.
Nota
Partitia swap nu are mount point
Resurse
FHS - PDF Download
3 Structura Linux » 3.6 Sistemul de fisiere » 3.6.3 Structura sistemului de fisiere
Structura sistemului de fisiere
Sistemul de fisiere in Linux este arborescent si unic. Radacina se numeste root si se noteaza cu
"/".
In Linux fisierele sunt case-sensitive - se face distinctie intre litera mare si mica.
In Linux "totul este un fisier". Nu mai exista alta forma de reprezentare a informatiei.
Un sistem de fisiere poate fi impartit in 4 parti distincte in urmatorea ordine:
1. Boot Block - aflat la inceputul partitiei si care contine cod (Boot Loader) pentru a incarca
sistemul de operare.
2. Super Block - contine informatii actuale despre sistemul de fisiere: marimea acestuia, nr. de
blocuri de date libere, locatia acestora, marimea lui inode table, nr maxim de inoduri etc.
3. Inode Table (List) - Lista statica definita initial la instalare si care nu se poate schimba si care
contine inodurile din sistem.
4. Data Blocks - Datele sunt salvate in blocuri (in general 1 block = 512 bytes).
Boot Block Super Block Inode Table Data Block
3 Structura Linux » 3.6 Sistemul de fisiere » 3.6.4 Structura unui fisier
Structura unui fisier
Un fisier consta in informatia pe care acesta o contine (text, date, imagine, sunet etc) dar si o
structura de date care se numeste inode (index node) si care contine informatii suplimentare
despre acel fisier.
Standardul POSIX stabileste ca fiecare inode sa contina urmatoarele informatii:
tipul de fisier
owner
group owner
drepturile de acces (citire, scriere, executie) pentru owner, group si others
nr. de hard linkuri catre aceeasi informatie
atime
ctime
mtime
marimea unui fisier (size)
pointer catre blocurile de date care reprezinta informatia tinuta de fisier.
inum - nr. intreg care identifica unic fiecare inode
Nota
Atentie !!! Numele fisierului nu este pastrat in structura inodului.
Un director este un fisier de tip container care contine perechi de nume_fisier si inode-ul
corespunzator.
In momentul in care ne referim (utilizatorul sau un proces) la un fisier, kernelul cauta in structura
de directoare conform cu calea relativa sau absoluta de referire la fisier, inode-ul corespunzator
pentru acel nume.
Fiecare inode se identifica unic printr-un numar de tip intreg numit "inode number" sau i-
number. Acesta poate fi vizualizat folosind comanda ls -i
Exista un nr. maxim pt. acest i-number care se defineste automat la instalarea sistemului in
functie de dimensiunea partitiei si deci exista un nr. maxim de fisiere (comanda df -i).
In Linux fiecarui fisier sau director i se ataseaza 3 (trei) timpi:
ctime (change time) - reprezinta data la care s-au modificat informatiile continute in inode-ul
fisierului sau directorului (permisiuni, owner, group etc). Nu se refera la timpul cand au avut loc
modificari ale continutului. Se afiseaza cu comanda ls -lc
mtime (modify time) - data la care s-a modificat informatia din fisier. Se afiseaza cu ls -l
atime ( access time ) - data la care s-a afisat continutul fisierului. Se afiseaza cu ls -lu
Comanda stat afiseaza de asemenea acesti 3 timpi.
Pentru modificarea celor 3 timpi ai unui fisier sau director se foloseste comanda touch
touch OPTIONS FILE - listeaza continut
fara optiuni modifica atime, mtime si ctime cu timpul curent
-t
DATE_TIMESTAMP
motifica atime si mtime cu DATE_TIMESTAMP in loc de data
curenta
ex: touch -t 200301231230 a.txt
-d DATE_STRING modifica atime si mtime cu DATE_STRING
ex: touch -d '1 May 2006 10:22' /etc/group
-a
modifica doar atime cu data curenta sau cu o alta data daca este
specificata
ex: #touch -a -d '23 May 2006 10:22' /etc/group
-m modifica doar mtime cu data curenta sau cu o alta data daca este
specificata
-r REFERENCE_FILE schimba atime si mtime cu cele ale lui REFERENCE_FILE
ex: touch -r b.txt a.txt
Nota
ctime nu poate fi setat in mod expres si independent de catre user
Resurse
POSIX
man touch
3 Structura Linux » 3.6 Sistemul de fisiere » 3.6.5 Tipuri de fisiere
Tipuri de fisiere
In Unix si Linux fisierele se impart in urmatoarele categorii:
1) fisiere standard (regular files). Acestea pot fi text, executabile, binare etc
2) directoare. Acestea sunt tot fisiere care au rol de container pentru alte fisiere sau directoare.
Ele reprezinta un tip special de fisier (container) folosit pentru formarea structurii arborescente.
3) link-uri. Pot fi soft links/sym links (echivalentele shortcut-urilor din windows) si hard links -
se refera la aceeasi zona de date, dar identificata prin nume diferite.
4) fisiere speciale (device files). Toate dispozitivele fizice (hard disk, RAM, etc) sunt
reprezentate printr-un fisier. Accesul la aceste dispozitive se realizeaza prin scrierea/citirea din
aceste fisiere.
Exista mai multe feluri de fisiere (dispozitive) speciale:
a) de tip caracter - folosite pentru accesarea byte cu byte a fisierului care reprezinta dispozitivul
hardware ( Exemplu: /dev/pts/0)
b) de tip bloc - folosite pentru accesarea in blocuri de date a fisierului care reprezinta dispozitivul
hardware ( Exemplu: /dev/sda1)
c) named pipes - procesele in Linux comunica cu ajutorul unui pipe (conducta) care se creaza cu
ajutorul caracterului "|". In acest mod outputul unui proces poate fi directionat ca input pentru un
alt proces. Acest tip de pipe exista doar pe timpul executiei comenzii. Exista un al doilea tip de
pipe numit "named pipe" introdus initial in Unix-ul de tip AT&T si care este folosit pentru
comunicarea dintre procese prin intermediul unei cozi de tip FIFO (First In First Out). Acest tip
de fisier se creaza de catre administratorul sistemului pentru a interconecta 2 procese cu comanda
mkfifo
d) Socket (unix domain socket) este asemanator cu pipe-ul, adica se foloseste pentru a conecta
doua procese. Exista o oarecare asemanare cu socketul TCP/IP chiar daca este vorba despre un
alt concept.
Comanda ls -lF afiseaza diferitele tipuri de fisiere folosind anumite simboluri:
Simbol Descriere
nimic fisier standard
/ director
* fisier executabil (ex: /bin/ls)
@ sym link (ex: /etc/grub.conf)
= socket (ex: /dev/log) - procesele scriu in /dev/log pentru a comunica cu syslogd
| named pipe (ex: /dev/initctl) - folosit pentru a comunica cu init
3 Structura Linux » 3.6 Sistemul de fisiere » 3.6.6 Links
Links
In Linux, comparativ cu Windows exista 2 categorii de linkuri:
1) hard links
se refera la asocierea unui nume de fisier cu un inode number (asocierea va fi prezenta intr-un
director). Avem astfel doua sau mai multe nume care sunt asociate cu aceeasi structura de tip
inode;
nr. de hard linkuri din structura inodului este incrementat de fiecare data cand se creaza un nou
hard link;
in momentul in care se sterge un fisier, se decrementeaza nr. hard linkurilor din inode, iar cand
se ajuge la zero este dealocat inodul si marcat ca liber;
nu se pot crea MANUAL hard linkuri catre directoare. Un director nou creat are default 2 hard
linkuri, 2 denumiri si anume numele directorului si . din director.
De fiecare data cand se creaza un subdirector, numarul de hard linkuri al directorului parinte este
incrementat fiindca se creeaza o noua referinta catre acesta si anume ".." care exista in orice
director. Daca un director are 17 hard linkuri inseamna ca acesta contine 15 subdirectoare.
nu se pot crea hard linkuri intre fisiere de pe partitii diferite;
daca fisierul initial este sters, redenumit sau mutat hard linkul nu este influentat;
un hard link se creaza folosind comanda ln
2) soft links / sym links
echivalentul shortcuts din Windows;
daca fisierul sau directorul initial este sters, mutat sau redenumit soft linkul nu mai
functioneaza;
listarea continutului folosind comanda ls -F identifica un symlink dupa caracterul "@" de la
sfarsitul numelui;
se pot crea symlinkuri catre directoare sau fisiere de pe alte partitii;
un symlink se creaza folosind comanda ln cu optiunea -s
Exemplu
1. Pentru a crea un soft link numit mylink.txt care pointeaza la /home/stud/proiect.txt se
foloseste comanda:
ln -s /home/stud/proiect.txt /home/stud/mylink.txt
2. Pentru a crea un hard link al lui /etc/passwd in /etc numit hl-passwd se foloseste
comanda:
ln /etc/passwd /etc/hl-passwd
3 Structura Linux » 3.6 Sistemul de fisiere » 3.6.7 Piping & Redirectare
Piping & Redirectare
Unix/Linux este un sistem de operare care se bazeaza pe comenzi foarte specializate care
lucreaza impreuna. Astfel mai multe comenzi pot fi combinate si se poate crea astfel o comanda
complexa.
Se foloseste astfel caracterul pipe "|".
Exemplu
ls -l | less - outputul comenzii ls -l este trimis lui less pentru paginare
ls -a | sort - outputul comenzii ls -l este trimis comenzii sort care sorteaza in ordine
alfabetica
ps -aux | grep init
Redirectarea outputului
In general scopul unei comenzi este de a trimite outputul catre standard output care este
monitorul. Este posibil ca outputul unei comenzi sa fie redirectat catre un fisier care exista sau
nu. Se foloseste ">" sau ">>"
Exemplu
ls -l /bin > /home/student/binaries.txt - creaza fisierul /home/student/binaries.txt (daca
acesta exista il suprascrie) care va contine outputul comenzii ls -l /bin
ls -l /sbin >> /home/stud/binaries.txt - adauga outputul comenzii ls -l /sbin fisierului
/home/student/binaries.txt (daca acesta nu exista il creaza)
Outputul unei comenzi poate fi redirectat in afara de standard output si catre standard error.
Pentru acesta se foloseste "2>".
Pentru a combina standard output cu standard error se foloseste "&>"
Exemplu
gcc program.c > output.txt 2> errors.txt - redirecteaza outputul compilarii fisierului
program.c catre output.txt, iar erorile sunt redirectate catre fisierul errors.txt
gcc program.c &> output.txt - redirecteaza catre fisierul output.txt atat standard output cat si
standard error.
4 Comenzi si Editoare » 4.1 Editorul VI
Editorul VI
In Unix/Linux exista mai multe editoare de text acestea impartindu-se in editoare grafice ( gedit,
kate ) si editoare care ruleaza in consola ( vi, vim, emacs, joe, pico, nano etc).
Editorul omniprezent pe orice sistem Unix/Linux este VI (Visual Editor).
Acesta este extrem de flexibil, complex si plin de optiuni.
Nota
VIM (VI Improved) reprezinta o varianta imbunatatita a lui VI care ofera multe facilitati
suplimentare si este de recomandat sa fie folosit atunci cand se poate. Toate regulile din VI
raman valabile. In Ubuntu VIM nu este instalat default. Trebuie rulata comanda: sudo apt-
get install vim
Se caracterizeaza prin 3 modalitati de operare:
1. Command Mode
In momentul in care se deschide VI suntem introdusi in "command mode". Se foloseste pentru a
accesa celelalte moduri, pentru a vizualiza si edita fisierul curent, copy/paste, search etc.
Pentru a schimba intre celelalte 2 moduri de operare ( Insert Mode si Last Line Mode) trebuie sa
trecem prin Command Mode. Se foloseste tasta ESC.
Modul comanda se foloseste pentru a sterge un caracter, un cuvant, un grup de cuvinte sau litere
precum si pentru a inlocui un text.
In modul command ne gasim dupa deschiderea unui fisier ( Exemplu: vim /etc/passwd) sau din
celelalte moduri apasand tasta ESC.
In timp ce ne aflam in modul comanda avem urmatoarele optiuni:
r - replace a char
x - sterge caracterul de sub cursor.
cw - change word - sterge cuvantul incepand cu litera de unde este pozitionat cursorul si ne
introduce in Insert Mode.
dd - sterge o linie (de fapt efectul este de cut, putem face paste ulterior)
7dd - sterge 7 linii
dw - sterge cuvantul de sub cursor incepand cu caracterul care se gaseste sub cursor.
u - undo
G - se duce la sfarsitul fisierului
$ - muta cursorul la sfarsitul liniei
0(zero) sau ^(carret) - muta cursorul la inceputul unei linii
:x - muta cursorul pe linia nr. x.
Exemplu: :37 - muta pe linia 37
shift+v, alt+v si ctrl+v ne introduce intr-un sub mod in care putem selecta vizual un bloc de text
sau mai multe randuri (valabil doar in VIM).
y(yank) - echivalentul lui copy din Windows
p(paste)
/(slash) - search forward.
? - search backward
n - urmatoarea aparitie
N - aparitia anterioara
ZZ (z mare, z mare) - salvare cu iesiere din fisier
2. Insert Mode
Este folosit pentru a insera text in documentul curent.
Pentru a intra in Insert Mode din Command Mode se pot folosi urmatoarele taste:
i - insereaza inaintea caracterului de sub cursor
I - insereaza la inceputul unui rand
a - insereaza dupa caracterul de sub cursor
A - insereaza la sfarsitul randului
o - insereaza pe randul urmator.
3. Last Line Mode
Se foloseste pentru a salva documentul curent, pentru revenire la varianta de la ultima salvare a
fisierului sau pentru a executa diferite comenzi (text substitution, afisarea nr. de linii etc).
Pentru a intra in acest mod se foloseste : (doua puncte) din Command mode.
In Last Line mode utilizatorul are la dispozitie urmatoarele comenzi:
wq - write and quit
q! - quit fara salvare
w! - salvare fara quit
e! - undo
set nu - numeroteaza liniile
Editorul VIM foloseste fisierul de configurare ~/.vimrc si/sau ~/.exrc. Acestea pot fi modificate
pentru customizarea editorului astfel incat setarile sa ramana permanente. Daca aceste fisiere nu
exista se pot crea (fosind touch/vim), iar VIM le va folosi.
Durata: 3.20 min
Marime: 614KB
Resurse:
VIM Tutorial - PDF
O'Reilly - Learning the VI Editor, 6th Edition
YouTube - Basic VIM Tutorial
4 Comenzi si Editoare » 4.2 Comenzi de baza
Comenzi de baza
In Linux exista peste 400 de comenzi folosite pentru managementul sistemului. Nu toate sunt
insa utilizate pentru taskurile zilnice ale unui administrator de sistem. Mai jos ne-am propus sa
explicam cele mai folosite comenzi din Linux. O intelegere buna a acestora este extrem de
importanta pentru a putea avansa in studiul unui sistem de operare Linux.
Important
Cunoasterea tuturor comenzilor si a tuturor optiunilor acestora este imposibila chiar si pentru cei
mai experimentati admini. Documentatia comenzilor se gaseste in man page-uri care trebuie
folosite intesiv in momentul in care se doreste aflarea efectului unei comenzi sau a unei optiuni a
comenzii.
Exemplu: man ls
pwd - Print Working Directory
Afiseaza directorul curent. Nu are optiuni sau argumente.
cd - Change Directory
Schimba directorul curent.
cd NEW_DIRECTORY - mutare in directorul NEW_DIRECTORY
.. = directorul parinte
. = directorul curent
~ = home directory
Exemplu
1. Directorul curent se schimba cu /etc/
cd /etc
2. Viitorul director curent va fi parintele directorului curent actual
cd ..
3. Directorul curent devine Home Directory al userului care executa comanda. Daca se
ruleaza comanda cd fara argumente se schimba directorul curent cu Home Directory. Cele 2
comenzi sunt echivalente
cd ~
cd
4. Directorul curent devine ultimul director in care ne-am aflat
cd - = mutare in directorul anterior
mkdir - Make Directory
mkdir OPTIONS DIRECTORY
Optiuni:
-p = creaza atat directorul cat si directoarele parinte daca acestea nu exista. Daca directorul
parinte nu exista comanda mkdir returneaza eroare daca se foloseste fara optiunea -p
-v = verbose
Exemplu: mkdir /home/stud/documents/privat
ls - List
Listeaza continut director sau listare informatii despre fisier.
ls OPTIONS FILE/DIRECTORY
Detalii
mv - Move
Muta sau redenumeste (in functie de context) fisiere si directoare.
In Linux nu exista comenzi diferite pentru mutare respectiv redenumire.
mv OPTIONS SOURCE DESTINATION
Optiuni:
-f = force (do not prompt before overwriting)
-i = interactive (prompt before overwriting)
-u = update (muta doar daca sursa este mai noua ca destinatia sau destinatia lipseste)
-v = verbose
Exemplu
1. Muta fisierul file1.txt din /home/paul/ in /home/dan/ sub numele de file2.txt
mv /home/paul/file1.txt /home/dan/file2.txt
2. Redenumire director
mv /home/dan /home/andrei
cp - Copy
Copiaza fisiere sau directoare din sursa in destinatie.
cp OPTIONS SOURCE DESTINATION
Optiuni:
-i = interactiv
-p = pastreaza owner, group si permisiuni pt. fisierul destinatie creat
-r = copiaza recursiv (obligatoriu pentru directoare)
-f = force (do not prompt before overwriting)
rm - Remove
Sterge fisiere sau directoare.
rm OPTIONS FILES/DIRECTORIES
Optiuni:
-i = interactiv
-r = sterge recursiv, obligatoriu pentru directoare
-f = force
Nota
Comanda rm (ca si comenzile asemanatoare din Windows) nu sterge efectiv informatia
reprezentata de fisier ci doar marcheaza inode-ul si blocurile de date catre care acesta
pointeaza ca fiind "libere pentru a fi utilizate din nou". Folosind programe speciale
informatia stearsa poate fi recuperata FOARTE USOR.
Programe cunoscute si folosite pentru investigarea unui sistem dupa compromiterea sa de
catre un Black Hat Hacker si care contin inclusiv utilitare pentru recuperarea informatiei
sterse accidental sau intentionat sunt The Sleuth Kit, Autopsy Browser si The Coroner's
Toolkit (TCT).
Important
Un fisier sau director sters folosind comanda rm nu mai poate fi recuperat in mod standard din
Recycle Bin. In Linux pentru fisierele si directoarele sterse folosind cumanda rm nu exista
Recycle Bin. Un fisier odata sters nu mai poate fi recuperat in mod conventional.
shred
Sterge securizat fisiere.
shred OPTIONS FILES
Exemplu
Suprascrie fisierul a.txt cu date aleatoare de 100 ori (optiunea -n) dupa care il sterge.
shred -vu -n 100 a.txt
touch
Creaza un fisier gol daca FILE nu exista sau reseteaza atime, mtime si ctime pentru FILE daca
acesta exista.
touch OPTIONS FILE
Detalii
cat
Concateneaza si/sau afiseaza continutul unui fisier
cat OPTIONS FILES
Optiuni:
-b = no. of nonblank lines
-n = no. of output lines
Exemplu
1. Afiseaza fisierul /etc/passwd la consola
cat /etc/passwd
2. Concateneaza fisierele /etc/passwd si /etc/shadow in fisierul /home/dan/passwd-shadow
pe care il si creaza daca nu exista sau il suprascrie daca exista.
cat /etc/passwd /etc/shadow > /home/dan/passwd-shadow
more & less
Programe de paginare.
more FILE
less FILE
Detalii
head
Afiseaza primele linii (default 10) dintr-un fisier
head OPTIONS FILE
Optiuni:
-n nr = afiseaza primele 'nr' linii
tail
Afiseaza ultimele linii (default 10) dintr-un fisier
tail OPTIONS FILE
Optiuni:
-n nr = afiseaza ultimele 'nr' linii
-n +nr = afiseaza incepand cu linia 'nr'
-f = afiseaza in timp real ultimele linii dintr-un fisier. tail -f fisier este cea mai importanta
comanda pentru urmarirea modificarii in timp real a logurilor.
Exemplu
1. Afiseaza fisierul /etc/passwd incepand cu linia nr. 5 si pana la final
tail -n +5 /etc/passwd
tail -n 5 /var/log/auth.log
3. Afiseaza in timp real ultimele 10 linii din fisierul cu loguri /var/log/auth.log
tail -f /var/log/auth.log
strings
Afiseaza caracterele printabile/ascii dintr-un fisier binar.
strings FILE
Exemplu: strings /bin/ls
wc
Afiseaza nr. de randuri, caractere sau cuvinte dintr-un fisier
wc OPTIONS FILE
Optiuni:
-l = nr. de linii
-w = nr de cuvinte
-m = nr de caractere
Exemplu:
1. Afiseaza nr. de useri din sistem
wc -l /etc/passwd
2. Afiseaza nr. userilor logati in sistem
who | wc -l
file
Determina tipul fisierului
file OPTIONS FILE
Optiuni:
-p = preserve atime
du - disk usage
Afiseaza marimea unui fisier sau director
du OPTIONS FILE
Optiuni:
-k = adauga prefixul KB
-s = sum (summarize)
-h = human readable format
Exemplu: du -ksh /etc/
df - disk free
Afiseaza spatiul total, spatiul ocupat si spatiul liber de pe fiecare partitie de pe hard disk.
df OPTIONS
Optiuni:
-h = human readable
-i = print used/free inodes
Exemplu: df -hi
cmp - compare
Compararea a 2 fisiere fara afisarea diferentelor dintre ele.
cmp FILE1 FILE2
diff
Compara FILE1 si FILE2 dupa continut si afiseaza diferentele
diff OPTIONS FILE1 FILE2
Optiuni:
-i = case insensitive
-B = ignora liniile goale (blank lines)
-w = ignora spatiile libere (white spaces)
-c = comparare detaliata
-y = afiseaza pe coloane
stat - statistics
Afiseaza informatii despre FILE (size, type, atime, mtime, ctime)
stat FILE
history
Afiseaza comenzile din history
history OPTIONS
Optiuni:
-c = sterge comenzile din history
-d nr = sterge linia nr. din history
which
Cauta si afiseaza calea catre o comanda
which
whereis
Cauta si afiseaza calea catre o comanda, man page sau sursa
whereis
uptime
Afiseaza timpul de cand hostul este pornit precum si load-ul din ultimele 1,5 si 15 minute
uptime
date
Afiseaza/modifica data
date
free
Afiseaza informatii despre RAM si SWAP
free OPTIONS
Optiuni:
-t = total
-m = MB
-k = KB
uname
Afiseaza informatii despre sistem (kernel version etc)
uname OPTIONS
Optiuni:
-a = all info
-s = kernel name
-r = kernel release
-v = kernel version
-m = machine
-p = processor
-o = operating system
Exemplu: uname -a
uname -s -r -v -m
vmstat - virtual memory statistics
Afiseaza informatii despre despre memorie, cpu, I/O blocks etc
vmstat
Informatiile afisate sunt documentate in man page-ul comenzii.
ifconfig - Interface configuration
Afiseaza informatii despre interfetele de retea. Se foloseste si pentru a seta caracteristicile
interfetelor de retea (IP, Network Mask, MAC etc).
ifconfig OPTIONS INTERFACE
Exemplu
1. Afiseaza informatii despre toate interfetele (active sau inactive)
ifconfig -a
2. Afiseaza informatii doar despre interfetele active
ifconfig
3. Afiseaza informatii doar despre interfata eth0
ifconfig eth0
Nota
Pentru exemple referitoare la modul in care se pot seta parametri placii de retea folosind
comanda ifconfig cititi capitolul Configurare retea.
netstat
Afiseaza informatii despre porturile deschise precum si despre conexiunile existente.
netstat OPTIONS
Optiuni:
-t = porturile tcp
-u = porturile udp
-p = afiseaza numele programului(client sau server) care foloseste portul
-a = all
-n = afisare numerica
Exemplu: netstat -tupan
lshw
Afiseaza informatii despre hardware.
Exemplu: lshw | less
lspci
Afiseaza informatii despre dispozitivele PCI.
acpi -V
Afiseaza informatii despre baterie in cazul laptopurilor.
iftop
Afiseaza informatii despre conexiunile din retea inclusiv Bandwidth. Se poate folosi si pe post de
"Bandwidth Meter". In cazul in care nu este instalat default trebuie rulat: sudo apt-get install
iftop
Exemplu: iftop -i wlan0 -B -P -n
wodim -prcap
Afiseaza informatii despre capabilitatile CD/DVD Rom.
Nota
Multe exemple din aceasta pagina au folosit fisierul /etc/passwd. Acesta este unul dintre
cele mai importante fisiere din sistem in care se gasesc utilizatorii sistemului, cate unul pe
fiecare linie, impreuna cu multe informatii despre acestia.
4 Comenzi si Editoare » 4.3 Regular Expressions
Regular Expressions
O expresie regulata (regex) reprezinta o modalitate (metoda) de identificare a unui string (sir de
caractere) dintr-un text dat conform anumitor reguli. Un regex este reprezentat fizic printr-un
string format din caractere speciale.
Reguli:
1. Blocul fundamental reprezinta un singur caracter si se selecteaza pe sine
2. O expresie paranteza patrata (bracket expression) reprezinta o lista de caractere cuprinsa intre
"[" si "]" si descrie un singur caracter din acea lista.
3. Daca primul caracter este ^ (caret) descrie orice caracter care nu se gaseste in lista.
Exemplu: regex-ul [0123456789] - reprezinta o singura cifra iar [^0123456789] reprezinta orice
caracter care nu este cifra.
4. In interiorul unei expresii paranteza patrata un "range expression" reprezinta 2 caractere
separate prin -(minus) si selecteaza(identifica) orice caracter care se gaseste intre cele 2 caractere
din range expression.
5. ^ (caret) in afara parantezelor drepte reprezinta un metacaracter care identifica inceputul unei
linii (daca este primul caracter din regex).
6. $ reprezinta un metacaracter care identifica sfarsitul unei linii (daca este ultimul caracter din
regex)
Exemplu
^ab - linie care incepe cu ab
ab$ - linie care se termina cu ab
^$ - linie goala
^a[a-z0-9] - linie care incepe cu "a" urmat de orice caracter intre "a" si "z" sau "0" si "9"
7. backslash ("\") urmat de un caracter special selecteaza caracterul special respectiv. Caractere
speciale sunt: ., *, [, \ (punct, asterix, paranteza dreapta deschisa si backslash). Caracterul special
"." (punct) selecteaza orice caracter mai putin NEWLINE (linie goala)
8. "?" (semnul intrebarii) selecteaza 0 sau 1 caractere anterioare
9. * (asterix) selecteaza zero (0) sau mai multe caractere anterioare
10. + (doar pt. expresii regulate extinse) selecteaza caracterul anterior o data sau de mai multe ori
11. {n} Elementul precedent este selectat de n ori (exact)
12. {n,} Elementul precedent este selectat de n sau mai multe ori
13. {n,m} Elementul precedent este selectat de cel putin n ori dar nu mai mult de m ori
Cand folosim acolade trebuie sa le precedam cu backslash ("\")
Exemplu
1. Gasirea tuturor liniilor care contin un string de tip CNP dintr-un fisier numit file1 (se
presupune ca un CNP incepe cu 1,2 sau 7 pentru cetatenii straini rezidenti).
grep '[127][0-9]\{12\}' file1
Daca se doreste gasirea tuturor liniilor care contin DOAR string de tip CNP se foloseste "^"
pentru ancorarea regex-ului la inceput de rand si "$" pentru ancorarea regexului la sfarsit de
rand.
grep '^[127][0-9]\{12\}$' file1
2. Sa se creeze un fisier care sa contina toate fisierele si doar fisiere (de tip regular file) din
/etc eliminand liniile goale liniile care contin cuvantul 'total' sau liniile care afiseaza
directoare
ls -lR /etc/ | egrep -v '(^$|^total|^/)' > etc_content
4 Comenzi si Editoare » 4.4 Comenzile find si grep
Comenzile find si grep
1. find
Comanda find cauta fisiere si directoare dupa criterii complexe in mod recursiv
find [path...] [expression]
Daca unul dintre argumente este numeric si are valoarea n se poate folosi:
+n for greater than n
-n for less than n
n for exactly n
-type f = tipul este fisier
-type d = tipul este director
-user uname = userul este uname
-group gname = grupul owner este gname
-maxdepth nr = specifica cate nivele in jos, in structura de directoare sa caute. Default este
infinit, cauta recursiv pana la ultimul subdirector
-links n = fisierul are n hard link-uri
-perm mode = permisiunile fisierului sunt exact mode (octal or symbolic).
-perm -mode = all of the permission bits mode are set for the file.
-perm +mode = any of the permission bits mode are set for the file.
-size n = marimea fisierului este n (poate fi folosit ca sufix c=bytes, b=blocuri de 512
bytes,k=kilobytes, M=megabytes, G=gigabytes).
Se poate folosi +n = mai mare decat n, -n mai mic decat n
-inum inode_number = fisierul are nr. inod inode_number
-name REGEX = cauta dupa nume folosind regular expression (vezi capitolul referitor la regular
expressions)
Exemplu
1. Cauta recursiv fisiere cu dimensiunea mai mare de 2M care-l au owner pe root
find / -size +2M -user root -type f
2. Cauta fisierele din /etc care nu-l au owner pe root
find /etc -not -user root
3. Cauta fisierele din /home/data care contin denumirea Linux in nume, 2 nivele
(subdirectoare) in jos
find /home/data -maxdepth 2 -name Linux
4. Cauta fisierele din / care au permisiunea SUID setata (alte detalii in capitolul Permisiuni
speciale)
find / -type f -perm -4000
Criteriile comenzii find sunt asociate folosind SI logic (optiunea -a care este default) si SAU
logic ( -o)
Nota
Fisierele pot fi cautate de asemenea folosind comanda locate. Aceasta comanda nu cauta
direct in sistemul de fisiere ci cauta intr-un fisier de tip index care trebuie creat anterior. Pe
Ubuntu fisierul este /var/lib/mlocate/mlocate.db. Modificarea fisierelor pe hard disk
(stergere, creare de noi fisiere, redenumire) nu actualizeaza in timp real mlocate.db.
Comanda updatedb este cea care actualieaza indexul folosit de comanda locate cu situatia
reala de pe hard disk. In general comanda updatedb se ruleaza in mod automat din cron o
data pe zi. Avantajul comenzii locate este rapiditatea cu care sunt gasite fisierele, iar
dezavantajul este lipsa optiunilor complexe de cautare.
2. grep
grep [options] PATTERN [FILE...] - cauta sabloane de text (string patterns) in FILE sau in
outputul unei comenzi
-i = ignore case
-n = line number din fisierul in care a fost gasit patternul
-R = recursive
-v = invert match
-w = cauta numai cuvinte
-H = afiseaza numele fisierului in care a fost gasit pattern-ul
Exemplu
1. Cautare cuvantul 'nameserver' in toate fisierele din /etc/
grep 'nameserver' /etc/*
2. Cautare cuvantul 'root' in /etc/passwd cu afisarea numarului liniei pe care se gaseste
grep -n 'root' /etc/passwd
3. Cautarea tuturor proceselor numite httpd care ruleaza
ps -ef | grep httpd
Durata: 3.16 min
Marime: 1.04MB
Durata: 2.23 min
Marime: 731KB
Resurse:
YouTube - Grep tutorial
5 Conturi de Utilizatori » 5.1 Concepte generale
Concepte generale
Conturile de utilizator permit sistemului de operare sa identifice si sa restrictioneze accesul la resurse.
Administrarea conturilor de utilizator reprezinta una dintre principalele sarcini ale unui administrator de
sistem.
In Linux sau in Unix fiecare actiune care are loc (proces care ruleaza) sau fiecare resursa de tip fisier este
controlata de un anumit utilizator.
Exista 2 categorii principale de utilizatori:
1. useri de sistem.
Fiecare daemon care ruleaza foloseste un user pentru a avea acces la resurse si pentru a executa
taskurile necesare.
Definitie
Un daemon este un proces care ruleaza in background fara interactiunea unui utilizator.
Exemplu: httpd ruleaza sub userul wwwuser si wwwgroup, sendmail ruleaza sub userul mail etc.
Important
In Linux si Unix orice proces sau daemon ruleaza cu drepturile utilizatorului care-l lanseaza in executie.
Exemplu: daca root lanseaza un proces, procesul are acces total asupra sistemului. Daca un utilizator
normal lanseaza acelasi proces, procesul va avea acces doar asupra fisierelor la care are acces
utilizatorul si in acelasi mod.
Acest concept este fundamental, iar pe el se bazeaza o mare parte din securitatea generala Linux/Unix.
2. useri persoane.
Se autentifica in general prin username si parola. Un asemenea cont de user este format din: username,
parola, home directory, mediul de lucru (environment) - $PATH, umask, shell-ul folosit etc.
Fiecare user este identificat printr-un UID. UID este in general pe 16 sau 32 de biti (intre 0 si 65535 sau 0
si 4294967295). Userul root are UID = 0.
Cu toate ca se recomanda ca UID-ul sa fie unic pentru fiecare utilizator acest lucru nu este obligatoriu.
Daca mai multi utilizatori au acelasi UID ei vor fi tratati in mod identic de catre sistem.
Userii sunt organizati in grupuri pentru a se putea seta permisiuni la nivel de grup.
Fiecare user face parte din unul sau mai multe grupuri. Exista deci pentru fiecare user un grup principal
(cel definit in /etc/passwd) si optional mai multe grupuri secundare.
Fiecare grup este identificat printr-un nr. unic numit GID.
5 Conturi de Utilizatori » 5.2 Fisiere specifice
Fisiere specifice
1. /etc/passwd
Userii sistemului se gasesc in fisierul /etc/passwd.
Structura acestuia este formata din campuri separate prin ":" (doua puncte) astfel:
user_name:parola:uid:gid_principal:comentariu:home_directory:shell_default
Exemplu
stud:x:500:500:User principal:/home/stud:/bin/bash
user1:x:501:501:user folosit pentru teste:/home/user1:/bin/bash
sshd:x:71:65:SSH daemon:/var/lib/sshd:/bin/false
Daca in loc de parola in /etc/passwd este "x" parola se gaseste in fisierul /etc/shadow (hash-ul acesteia
sau criptata). Comanda pwck verifica integritatea fisierului /etc/passwd
2. /etc/shadow
Structura fisierului /etc/shadow este urmatoarea:
username:password:last_change:min:max:warn:inactive:expire
username: userul din /etc/passwd. Reprezinta legatura intre fisierul /etc/passwd si /etc/shadow
password: forma criptata a parolei sau hash-ul acesteia
last_change: nr. de zile de la 1 Ian 1970 pana in ziua in care a avut loc ultima schimbare a parolei
min: nr minim de zile intre doua schimbari succesive
max: nr maxim de zile intre doua schimbari succesive
warn: nr. de zile dinaintea expirarii parolei in care userul este avertizat
inactive: nr de zile de la expirarea parolei si pana cand contul este dezactivat
expire: nr. de zile de la 1 Ian 1970 de cand contul este dezactivat
In fisierul /etc/login.defs se gasesc informatii care vor fi folosite default in momentul in care se creaza un
user (lungimea minima a parolei, in cat timp expira contul etc).
3. /etc/group
Grupurile se gasesc in fisierul /etc/group
Structura acestuia este formata din campuri separate prin ":" (doua puncte) astfel:
group_name:parola:GUID:userii_din_acest_grup
Exemplu
programatori:x:100:dan,vali,george
root:x:0:root
5 Conturi de Utilizatori » 5.3 Management conturi
Management conturi
Administrarea conturilor de utilizator presupune adaugarea de noi conturi, schimbarea parametrilor
unui cont (parola, grupuri, etc), stergerea de conturi etc.
Exista 3 modalitati principale de a administra conturile utilizatorilor:
1.Editarea directa a fisierelor care contin informatii despre useri, grupuri si parole folosind editorul
preferat cum ar fi VI.
Fiesierele care trebuie modificate sunt: /etc/passwd, /etc/shadow si /etc/group
Aceasta metoda trebuie evitata fiindca poate duce la erori si deci la instabilitate.
2.Admistrarea folosind unelte grafice
Fiecare distributie de Linux are propriile utilitare.
In Fedora in KDE si GNOME: System Settings -> Users and Groups
De multe ori, in special pe calculatoare cu rol de server mediul grafic nu este instalat sau nu ruleaza. In
plus de cele mai multe ori administrarea se face remote prin ssh deci aceasta metoda nu ne este mereu
la indemana.
3.Folosind comenzi de shell in consola.
a) Pentru adaugare/modificare/stergere useri: useradd, userdel, usermod
useradd OPTIONS USER -> adauga un utilizator
-c 'comment'
-d home directory
-g grupul principal
-G grup1, ... grupN
-s shell
-u uid
-m create home dir. Daca se foloseste optiunea -k skeleton_dir, fisierele si directoarele din scheleton_dir
vor fi copiate in home, daca nu vor fi copiate cele din /etc/skel
-k skeleton_dir (doar impreuna cu -m)
Exemplu
useradd -c 'dan programator' -d /home/dan -m -g programatori -G users,office -s /bin/bash -u 7878
dan
userdel -r USER -> sterge un user si grupul principal corespunzator (daca nu mai exista useri in acel
grup).
Optiunea -r se refera la faptul ca va fi sters si home directory.
passwd USER -> modifica parola utilizatorului user
usermod USER -> modifica datele unui user. Command usermod foloseste aceleasi optiuni ca si useradd
Exemplu
usermod -c 'dan contabilitate' -d /home/dan2 -m -g contabilitate -G users,office -s /bin/bash -u 80
dan
b) Pentru adaugare/stergere/modificare grupuri: groupadd, groupdel, groupmod
Exemplu
groupadd programatori
groupdel programatori
groupmod -n profesori programatori - schimba denumirea grupului programatori in profesori.
Unui grup i se poate seta o parola folosind comanda gpasswd.
Exemplu: gpasswd programatori
Aceasta este ceruta in momentul in care un utilizator doreste sa ruleze un shell (sa devina parte a unui
grup pentru a avea permisiunile grupului respectiv) cu un alt GUID folosind comanda:
newgrp NOUL_GROUP.
Modificare owner/grup owner pentru un fisier sau director
Fiecare fisier sau director are un owner si un grup owner. Acestea fac parte din structura inodului unui
fisier respectiv director. Default ownerul unui fisier este userul care-l creaza, iar grupul owner al
fisierului este grupul principal al userului care creaza fisierul sau directorul.
Exemplu: Daca userul dan creaza un fisier numit a.txt, fisierul il va avea owner pe dan, iar grupul owner
al fisierului va fi grupul principal din care face parte dan. Pentru a schimba ownerul si grupul owner al
unui fiser/director se foloseste comanda chown si chgrp. root este singurul user care poate modifica
ownerul respectiv grupul owner pentru fisiere si directoare.
Exemplu
1. Schimba ownerul fisierului a.txt in paul
chown paul a.txt
2. Schimba grupul owner al directorului /home/programe in programatori
chgrp programatori /home/programe
3. Se schimba in mod recursiv atat ownerul cat si grupul owner al directorului /home/programe in
dan respectiv programatori. Modul recursiv se refera la schimbarea ownerului si grupului atat
pentru director cat si pentru toate subdirectoarele si fisierele continute de acesta. Acest mod de
folosire al comenzii chown face ca comanda chgrp sa fie folosita extrem de rar in practica.
chown -R paul.programatori /home/programe
Important
Atentie! Intre grupul owner al unui fisier si grupul principal sau grupurile secundare ale ownerului
fisierului nu exista legatura. Un fiser poate sa-l aiba ca owner pe userul dan, ca grup owner sa apartina
grupului programatori fara ca dan sa faca parte din grupul programatori
5 Conturi de Utilizatori » 5.4 su & sudo
su & sudo
Odata logat in sistem un user poate "deveni" un alt user folosind comanda su (substitute user) care
porneste un nou shell cu UID si GID noului user. Urmatoarele comenzi vor fi executate cu UID si GUID
userului nou adica cu permisiunile acestuia.
Nota
In Ubuntu userul root este dezactivat default, in sensul ca nu este permisa logarea acestuia in
sistem (inclusiv 'devenirea' root prin executarea comenzii su). Activarea userului root presupune
setarea acestuia a unei parole:
sudo su -> se introduce parola userului neprivilegiat creat la instalare passwod root -> se seteaza
userului root parola
Din acest moment putem 'deveni' root executand comanda su ca user neprivilegiat si introducand
parola de root.
su [-] [username]
caracterul "-" are ca efect imprumutarea mediului de lucru (environment) al noului user.
Apar in acest moment 2 noi concepte: RUID (Real User ID) ca fiind UID-ul utilizatorului care s-a logat
initial in sistem si EUID (Effective User ID) ca fiind UID-ul utilizatorului devenit in urma rularii comenzii
su.
Pentru a vizualiza RUID se foloseste comanda who am i, iar pentru a vizualiza EUID se foloseste comanda
whoami sau id
Nota
Se poate configura ce useri au dreptul sa devina root folosind su. Din pdv al securitatii sistemului
este esential sa permitem numai catorva useri sa poata deveni root (chiar daca si altii stiu parola ei
nu pot deveni root).
Exemplu
Se editeaza fisierul /etc/pam.d/su astfel:
auth sufficient /lib/security/$ISA/pam_wheel.so trust use_uid
auth required /lib/security/$ISA/pam_wheel.so use_uid
Prima linie specifica faptul ca este suficient ca un user sa faca parte din grupul wheel pentru a
deveni root. Acesta devine root fara a i se mai cere parola.
A doua linie specifica faptul ca doar userii care fac parte din grupul wheel vor putea deveni root.
Alti useri chiar daca cunosc parola de root nu pot deveni root prin folosirea comenzii su.
Numai una dintre cele 2 linii poate sa apara in fisier. Pentru a comenta o linie se foloseste
caracterul # (diez).
Important
Un principiu de baza in Linux este ca userul root nu trebuie folosit in mod curent. Administratorul
trebuie sa se logheze folosind un user neprivilegiat iar in momentul in care are nevoie de executia unui
task ce necesita drepturi de root, acesta "devine" root folosind comanda su. Altfel sunt introduse grave
probleme de securitate care pot duce la rezultate distructive pentru intreg sistemul.
sudo reprezinta o alta modalitate de a executa comenzi cu drepturi de root fara a fi root sau a cunoaste
parola de root necesara devenirii root folosind comanda su.
Modul de folosire al comenzii sudo este: sudo command
Commanda command este executata cu drepturi de root.
In Ubuntu doar userii care fac parte din grupul numit admin pot rula comenzi cu permisiuni de root
folosind sudo. Initial doar userul care a fost creat la instalarea sistemului face parte din grupul admin.
Exemplu
Toate exemplele de mai jos sunt rulate de useri neprivilegiati dar cu drepturi de root
1. Instalarea unui program pe Ubuntu folosind apt-get
sudo apt-get install k3b
2. Configurarea parametrilor placii de retea precum IP si Network Mask
sudo ifconfig eth0 192.168.0.1 netmask 255.255.255.0
Nota
Modalitatea de a executa comenzi cu drepturi de root folosind sudo este folosita intensiv pe
anumite distributii de Linux si mai putin pe altele. Distributiile bazate in mod intensiv pe folosirea
comenzii sudo sunt cele derivate din Debian precum Ubuntu, Kubuntu, Knoppix etc. Pe alte
distributii precum cele bazate de RedHat sau Slackware, Gentoo etc se obisnuieste rularea de
comenzi cu drepturi de root dupa ce in prealabil userul neprivilegiat a devenit root folosind
comanda su
5 Conturi de Utilizatori » 5.5 Monitorizare useri
Monitorizare useri
Aceasta sarcina a administratorului de sistem presupune monitorizarea logarilor in sistem sau
vizualizarea userilor logati la un moment dat (prezent sau trecut).
Se folosesc urmatoarele comenzi:
1) who - afiseaza userii logati in sistem la momentul prezent.
Comanda afiseaza informatia sub forma tabelara in urmatorul mod:
username terminalul de unde s-a logat data logarii
Optiuni:
-H - afiseaza un header pentru a interpreta mai usor output-ul
-q - afiseaza nr. userilor logati
Exemplu
# who
stud :0 2007-01-30 09:32
root tty2 2007-01-30 11:35
dan pts/0 2007-01-30 11:33 (:0.0)
dan pts/1 2007-01-30 11:35 (:0.0)
Important
Comanda who afiseaza RUID adica userul logat initial in sistem.
2) w - afiseaza cine este logat in sistem si comanda curenta a fiecarui user.
Pe prima linie se afiseaza: data curenta, uptime, nr user logati si "system load" pt. ultimele 1, 5 si 15
minute.
Informatii despre userii logati se gasesc in fisierul /var/run/utmp (informatii despre utilizatorii logati in
acel moment) si /var/log/wtmp (informatii despre istoria logarii in sistem)
3) last - afiseaza informatii din /var/log/wtmp in ordine cronologica inversa.
Logurile se rotesc periodic. Pentru a vizualiza inregistrarile dintr-un fisier wtmp mai vechi precum
/var/log/wtmp.3 se foloseste optiunea -f
Exemplu: last -f /var/log/wtmp.3
Optiuni:
-n nr = nr. de linii afisate
nume_terminal = logarile de la terminalul specificat
Exemplu: last pts/2
4) lastlog - afiseaza inregistrarile din /var/log/lastlog (ultimele logari in sistem pentru fiecare user)
Optiuni:
-u user = lastlog doar pentru userul user
6 Sistemul de permisiuni » 6.1 Concepte generale
Concepte generale
Sistemul de fisiere in Linux imparte in mod standard utilizatorii in 3 categorii:
a) owner (proprietarul fisierului). By default (implicit) un fisier nou creat primeste ca owner creatorul
sau. Owner-ul are drepturi totale asupra fisierului, poate sa-l stearga, sa-l modifice sau sa-i schimbe
proprietatile.
Exemplu: Daca userul numit dan creaza un fisier nou numit raport.pdf, ownerul fisierului va fi userul dan
b) group (grupul proprietar al fisierului). Folosind grupul care detine fisierul se pot seta drepturi pentru
un nr. mai mare de utilizatori. By default un fisier nou creat primeste ca grup owner, grupul principal al
userului care-l creaza.
Exemplu: Daca userul dan are grupul principal numit contabili, fisierele create de acesta vor avea ca
owner pe dan, iar ca grup owner contabili.
c) others (ceilalti sau restul lumii). Toti utilizatorii care nu fac parte din cele 2 categorii.
Nota
Conceptele referitoare la owner si group owner mai sus mentionat sunt adevarate atat pentru
fisierele nou create cat si pentru directoarele nou create.
Fiecare dintre cele 3 categorii detine independent urmatoarele drepturi asupra unui fisier sau director:
a) r (read) - dreptul de citire
b) w (write) - dreptul de scriere
c) x (execute) - dreptul de executie
Aceste drepturi au efecte diferite in functie de tipul fisierului (fisier normal sau de tip director).
Permisiune Fisier Director
read dreptul de citire al
continutului fisierului dreptul de a afisa continutul directorului
write dreptul de modificare al
continutului fisierului
dreptul de a modifica continutul directorului(stergere, creare,
redenumire fisiere/directoare continute in director) impreuna
cu x
execute dreptul de a executa
fisierul acces la fisierele continute. dreptul de a ne muta in director.
Nota
Daca un director contine dreptul de scriere ( w) pentru o anumita categorie de user ( owner, group
sau other), acea categorie are dreptul de a sterge/modifica continutul directorului doar daca exista
si dreptul de executie pentru director.
Exemplu
1. Daca un director are pentru owner permisiunile de read(r) si write(w) dar nu si execute(x),
owner-ul nu va putea crea noi fisiere in director, nu va putea sterge continutul directorului si nu se
va putea muta in director. Motivul este lipsa permisiunii execute pentru director.
6 Sistemul de permisiuni » 6.2 Permisiuni speciale
Permisiuni speciale
In afara permisiunilor standard (read, write si execute) exista urmatoarele permisiuni speciale:
1) SUID (setuid).
Reprezinta o permisiune speciala pentru fisierele executabile.
Important
In Linux un fisier executabil are aceleasi drepturi ca si userul care il executa. Setand bit-ul SUID, la
executare fisierul are drepturile owner-ului si nu al celui care il executa.
Fisierele cu SUID setat si cu owner root reprezinta o grava problema de securitate. Oricine le poate
executa, iar in urma executiei procesul creat va avea drepturi de root.
Exemplu
1. Comanda rm este reprezentata fizic prin fisierul executabil /bin/rm care are drept owner pe
root. In momentul in care root executa comanda rm efectul este ca aceasta comanda are
drepturile lui root si poate sterge orice fisier din sistem. Daca un alt user executa comanda rm,
efectul este ca aceasta comanda va avea drepturile userului care a executat-o si deci nu va putea
sterge niciun fisier important.
In schimb daca se seteaza permisiunea SUID pentru fisierul /bin/rm, orice user non-root care
executa comanda rm va putea sterge ORICE fisier din sistem. Acest lucru se intampla fiindca
comanda rm are drepturile ownerului adica root si nu drepturile celui care o executa cum este
default.
2. User neprivilegiat care poate vizualiza fisierul /etc/shahow fiindca comanda less are SUID setat
Comanda ls -l afiseaza pentru fisierele cu SUID setat "s" (s mic) pe pozitia dreptului de executie pentru
owner daca fisierul are dreptul de executie pt. owner sau "S" (s mare) daca fisierul nu are dreptul de
executie pentru owner.
2) SGID (setgid).
Reprezinta o permisiune speciala care are efecte diferite daca se aplica unui fisier sau unui director.
Cand se aplica unui fisier, daca fisierul este executabil, procesul creat in urma executiei fisierului va rula
cu drepturile grupului care detine fisierul si nu cu grupul primar al userului care executa fisierul.
Aceasta permisiune ( SGID) este folosita mai ales pentru directoare si anume pentru a crea directoare
"shared".
Fisierele noi create in interiorul directorului vor avea ca grup care le detine grupul directorului si nu al
userului care le creaza cea ce se intampla default.
Comanda ls -l afiseaza pentru fisiere cu SGID setat "s" (s mic) pe pozitia dreptului de executie pentru
grup daca fisierul sau directorul are dreptul de executie pt. grup sau "S" (s mare) daca fisierul sau
directorul nu are dreptul de executie pentru grup.
3) Sticky bit.
Se foloseste pentru directoarele "world writeable" si are rolul de a preveni posibilitatea stergerii
continutului acestora de catre useri altii decat ownerul directorului cu sticky bit setat sau ownerul
fisierului din acel director, chiar daca drepturile directorului ar permite acest lucru (rwx).
Exemplu: /tmp
Nota
Root face exceptie, iar grupul fisierului se supune regulii (nu poate modifica).
Aplicatie: Sticky Bit se foloseste in momentul in care se doreste crearea unui director world writeable
(toate permisiunile pentru toti userii), dar cu protejarea continutului. Fara sticky bit orice user poate
crea fisiere in director, dar poate si sterge fisierele create de alti useri. Daca directorul are sticky bit,
fiecare user are dreptul sa stearga doar propriile fisiere.
Comanda ls -l afiseaza pentru directoarele cu sticky bit setat "t" (t mic) pe pozitia dreptului de executie
pentru other daca fisierul are dreptul de executie pentru other sau "T" (t mare) in rest.
6 Sistemul de permisiuni » 6.3 Modificare permisiuni
Modificare permisiuni
Pentru a modifica drepturile de acces ale unui fisier se foloseste comanda chmod (change mode) cu
urmatoarea sintaxa:
chmod [OPTION]... MODE... FILES
Exista doua posibilitati de setarea a drepturilor de acces:
1) Modul simbolic (relativ)
Trebuie avute in vedere urmatoarele:
a) ale cui drepturi se modifica (u pentru owner, g pentru group, o pentru other, a pentru all)
b) ce presupune modificarea (+ (plus) pentru adaugare, - (minus) pentru eliminare, = (egal) pentru
setare indiferent de permisiunile deja existente)
c) ce permisiuni se modifica (r pentru read, w pentru write, x pentru execute, s pentru setuid/setgid si t
pentru sticky bit)
Exemplu
1. Pentru fisierul /home/stud/orar.doc se modifica drepturile de acces astfel: pentru owner se
aduga r,w si x, pentru grup se adauga r si w, iar pentru o se adauga r. Totul este relativ la drepturile
avute deja.
chmod u+rwx,g+rw,o+r /home/stud/orar.doc
2. Pentru fisierul /home/stud/test_conexiune_internet.sh se modifica drepturile de acces astfel:
pentru owner si group se adauga dreptul de executie iar pentru other se elimina toate drepturile.
chmod ug+x,o-rwx /home/stud/test_conexiune.sh
3. Se seteaza sticky bit pentru directorul /home/stud/tmp
chmod +t /home/stud/tmp
Totul este relativ la permisiunile deja existente.
2. Modul octal (absolut)
Se folosesc 4 cifre in baza 8 (intre 0 si 7) in mod pozitional astfel: pentru fiecare grupa de permisiuni (u, g
si o) in functie de existenta sau lipsa unei permisiuni specific se aduna o cifra conform cu puterea lui 2
corespunzatoare acelei pozitii. Lipsa unei permisiuni se marcheaza cu semnul "-" (minus).
Exemplu
r w - r - x r - -
4 2 0 4 0 1 4 0 0
Permisiune fisier = 654
Prima cifra din cele 4 reprezinta biti speciali care se pot seta ( SUID, GUID si Sticky bit). Daca este zero
reprezinta lipsa lor. Daca se omite se considera zero ( Exemplu: permisiunea 654 este de fapt 0654).
Pentru prima cifra se poate folosi:
1 pentru sticky bit
2 pentru SGID
4 pentru SUID
Exemplu
Echivalenta dintre modul relativ si absolut:
rwx rwx rwx = 0777
Exemplu: chmod 0777 /home/stud/a.txt
r-- --- --- = 0400
Exemplu: chmod 0400 /home/stud/b.txt
rwS rw- r-x = 4665
Exemplu: chmod 4665 /home/stud/c.txt
rw- r-s rwx = 2657
Exemplu: chmod 2657 /home/stud/d.txt
6 Sistemul de permisiuni » 6.4 Umask
Umask
Conceptul de umask se foloseste pentru a stabili modul default de permisiuni cu care este creat un
director sau fisier.
By default fisierele au permisiunile 0666(rw- rw- rw-) iar directoarele 0777(rwx rwx rwx). Pentru a
modifica modul default de permisiuni se foloseste umask in urmatorul mod: din valoarea default se
scade umask (pozitional), rezultand modul in care vor fi create fisierele in ceea ce priveste permisiunile.
Exemplu
daca umask este 0002 noile fisiere create vor avea permisiunile 0664 iar directoarele 0775
daca umask este 0022 noile fisiere create vor avea permisiunile 0644 iar directoarele 0755
Fiecare user are propria valoare pentru umask. umask se seteaza per user.
Se vizualizeaza cu comanda: umask.
Pentru a modifica umask se foloseste comanda umask NOUA_MASCA ( Exemplu: umask 0222).
NOUA_MASCA poate fi reprezentata octal sau simbolic.
Nota
Umask nu trebuie schimbata decat in situatii deosebite. Modificarea umask poate duce la
instabilitatea intregului sistem.
Nota
Odata modificat umask, noua valoare nu se pastreaza decat pana la urmatorul restart. Pentru ca
modificarea umask sa fie permanenta se scrie comanda de modificare a umask intr-un fisier de
initializare al environment-ului utilizatorului precum ~/.bashrc.
6 Sistemul de permisiuni » 6.5 Atribute speciale
Atribute speciale
Sistemele de fisiere extinse precum ext3 folosesc pe langa permisiunile clasice si cateva atribute speciale
pentru fisiere si directoare.
Pentru setarea acestora se foloseste comanda chattr
chattr ATRIBUT FISIER
-i = immutable (nu poate fi sters sau modificat)
-A = nu actualizeaza atime
-R = modifica atributele speciale recursiv pentru directoare
-a = just append
Exemplu:
chattr +i a.txt
chattr -a a.txt
Pentru vizualizare atribute se foloseste comanda lsattr
-R = listeaza recursiv continutul directorului
-d = listeaza atributele directorului in loc de continutul acestuia
-a = listeaza atributele fisierelor ascunse
Exemplu: lsattr a.txt
7 Procese » 7.1 Concepte generale
Concepte generale
Una dintre sarcinile kernelului este si alocarea resurselor (RAM, CPU etc) diferitelor aplicatii.
Definitie
Un proces reprezinta unitatea elementara de alocare a resurselor in sistem si ruleaza in propriul sau
spatiu de memorie.
In momentul in care se executa o comanda este creat un nou proces. Parintele acelui proces este shell-ul
curent. Imaginea procesului reprezinta programul care se executa si care se incarca in memoria RAM.
Exista diferente intre un program si un proces. Acelasi program poate genera mai multe procese diferite.
Exemplu: deschiderea simultana a editorului VI sau folosirea de mai multi useri a comenzii ls.
Nota
Procesoarele (exceptie cele dual-core sau cu mai multe nuclee) executa un singur proces la un
anumit moment dat. Fiecare primeste un anumit slot de timp in care poate folosi procesorul, apoi
ofera posibilitatea altui proces de a folosi CPU. Astfel este creata senzatia de executie simultana.
Important
Fiecare proces care se executa are anumite drepturi asupra sistemului si anume drepturile userului care
l-a executat (user de sistem sau persoana). Un proces pornit de root are drepturile lui root (totale), iar
acelasi proces pornit de un user normal are drepturile userului (limitate). Exceptie fac programele care
au SUID sau GUID setat. Acestea pleaca cu drepturile ownerului sau grupului owner si nu ale celui care le
executa.
Exista comenzi care sunt incluse in shell si care nu se gasesc ca programe independente (fisiere
executabile)
Exemplu: cd, jobs, alias, umask, ulimit, echo etc
Acestea nu creaza un nou proces cand se executa.
7 Procese » 7.2 Caracteristici procese
Caracteristici procese
1. Sistemul de operare foloseste functia de sistem fork() pentru a crea noi procese. Prima etapa este
crearea unui proces identic cu parintele sau (aceleasi resurse, drepturi, practic se creaza o copie identica
a parintelui). Ulterior procesul nou creat "urmeaza propriul sau drum" adica modifica datele primite de
la parinte pentru a executa propria sarcina.
2. Fiecare proces are un parinte, cel care l-a creat. Exceptie face procesul init.
3. Procesele sunt identificate dupa un nr. unic pentru intreg sistemul numit PID (Process ID).
4. Parintele fiecarui proces este identificat cu un PPID (Parent Process ID).
5. Procesul init este primul care porneste la butarea sistemului si are PID = 1. Init se mai numeste si
parintele tuturor proceselor.
6. Un proces dureaza din momentul in care este creat de parintele sau si pana cand programul executat
de proces se termina iar rezultatul procesului este intors parintelui. In acest moment parintele comunica
Kernelului sa elibereze resursele alocate procesului.
Starile unui proces
Un proces se afla in urmatoarele stari de la nastere (fork()) si pana la terminarea sa.
a) created
Reprezinta etapa in care procesul este creat si asteapta permisiunea schedulerului pentru starea ready.
b) ready (waiting sau runnable)
Procesul a fost incarcat in memorie si asteapta executia procesorului. Exista mai multe procese care se
gasesc simultan in aceasta stare.
c) blocking (sleeping)
Procesul este blocat din cauza unei resurse inaccesibile (fisier, variabila de tip semafor, device). Este
sters din lista de asteptare pentru a fi executat de procesor. Daca resursa se elibereaza procesul intra in
starea "ready".
d) running (active sau executing)
Procesul este executat de procesor in acest moment. Daca isi depaseste slice-ul (timpul) alocat pentru
executie va trece din nou in starea ready.
e) terminated
Un proces intra in aceasta stare fie din starea running daca a terminat executia sau daca este omorat
(killed) printr-un semnal. Daca nu este sters din memorie devine zombie. Daca procesul are copii, acestia
sunt preluati de init.
f) suspended and waiting
Reprezinta procesele care au fost indepartate din memoria principala si duse in memoria de tip swap.
g) suspended and blocked
Reprezinta procesele care se gasesc in memoria de tip swap in starea de suspendare.
Atributele unui proces
Un proces detine urmatoarele atribute:
a) PID -> Process ID - identificatorul unic al unui proces
b) PPID -> Parent Process ID - identificatorul parintelui procesului
c) UID -> User ID - Identificatorul userului sub care ruleaza procesul
d) GUID -> Group ID - Identificatorul grupului sub care ruleaza procesul
e) Prioritate
7 Procese » 7.3 Categorii de procese
Categorii de procese
In Linux exista urmatoarele categorii de procese:
1. Parinte (parent)
Fiecare proces poate genera un alt proces si devine parinte. In afara procesului init fiecare proces are un
parinte.
2. Copil (child)
In momentul in care procesul copil se executa, parintele intra in starea de sleeping pana cand copilul
termina executia. Daca copilul se executa in background parintele intra/ramane in starea ready.
3. Daemon
Reprezinta un proces care ruleaza in background.
4. Orfan (orphan)
Reprezinta procesele ale caror parinti au intrat in starea terminated inaintea lor. Sunt preluate automat
de init, parintele tututor proceselor.
5. Zombie (defunct)
Reprezinta procesele care au terminat executia dar nu sunt sterse din tabela de procese. Nu pot fi
terminate in modul conventional (folosind comanda kill) ci doar de catre procesul parinte sau init daca
procesul parinte termina executia.
In general zombie nu fac rau sistemului fiindca nu consuma resurse.
7 Procese » 7.4 Comenzi vizualizare
Comenzi vizualizare
1. ps (process status) - afisarea tabelara a listei de procese
Optiuni:
fara optiuni = afiseaza procesele pornite din terminalul curent
-e (sau A) = toate procesele tuturor userilor
-f = full description
-u user = doar procesele userului user.
--forest = afiseaza arborescent
Fiindca de cele mai multe ori lista de procese nu incape pe un ecran, comanda ps se foloseste in
combinatie cu grep sau less.
Exemplu
ps -ef
ps -ef | grep init
ps -u stud -f | less
ps aux | grep sshd
2. pstree - afisare arborescenta a proceselor
-a = afisarea argumentelor liniei de comanda
-c = afisare decompactata a sub arborilor
-h = sublinierea procesului curent si a parintilor acestuia
-p = afisare PID
Exemplu: pstree -ahp
3. pgrep - afiseaza procesele care ruleaza, cautandu-le dupa nume.
-l = afiseaza si numele procesului nu doar PID-ul
-u username = afiseaza procesele detinute de username (EUID)
Exemplu: pgrep -l -u root,stud sshd
4. top = afisarea in timp real a proceselor cu optiuni diverse de ordonare dupa diferite criterii
Optiuni:
-c = afisarea comenzii complete.
-p PID = afiseaza doar procesul cu PID
-d ss.tt (seconds.tenths)= refresh la fiecare secunda.zecime (sunt permise numere mai mici ca 1)
-u username = doar procesele care ruleaza sub username.
Exemplu: top -d 0.3 = refresh la fiecare 3 zecimi de secunda.
In timpul operarii putem apasa urmatoarele taste:
h sau ? = vizualizam un help pentru top
q = quit
f = selectarea campurilor care vor fi afisate
o(o mic) = selectarea ordinii de afisare
O(O mare) = selectarea campului de sortare
d = insert delay refresh
u = afisarea proceselor doar pentru un user.
k = trimite un semnal unui proces.
Semnificatia celor mai importante coloane afisate de top:
PID = process id
PPID = parent process id
USER = utilizatorul sub care ruleaza procesul
PR = prioritatea procesului
NI = NICE = valorile negative reprezinta o prioritate mai mare, iar cele pozitive o prioritate mai mica.
RES = Resident Size = Cantitatea de memorie non-swap (kb) folosita
VIRT = Virtual Image (Swap + Res)
SHR = Shared Memory - memoria shared folosita. Acest tip de memorie poate fi impartita intre mai
multe procese.
S = Process Status
Statusul unui proces poate fi
D = uninterruptible sleep
R = running
S = sleeping
T = stopped
Z = zombie
%CPU = procentul din timpul CPU folosit de la ultima afisare
%MEM = procentul din memorie folosit
TIME
COMMAND
Nota
Tasks shown as running should be more properly thought of as 'ready to run' -- their task_struct is
simply represented on the Linux run-queue. Even without a true SMP machine, you may see
numerous tasks in this state depending on top's delay interval and nice value. SMP = Symetric
multiprocessing (multiprocessor computing)
http://en.wikipedia.org/wiki/Symmetric_multiprocessing
Sortarea dupa un camp afisat de top:
b = toggle on/off - afecteaza daca top va arata boldat coloanele dupa care se sorteaza si procesele
running.
x = afiseaza boldat coloana de sortare
y = afiseaza boldat randurile care reprezinta procesele "running" sau "ready to run"
Pentru a modifica campul de sortare se apasa "O" (o mare) si se alege campul corespunzator. Se poate
trece dintr-un camp in altul cu "<" si ">"
Shortcuts:
M = sort by memory
P = sort by processor
R = schimba modul de ordonare (crescator, descrescator).
Pentru a salva modificarile facute: W (salveaza in ~/.toprc)
Exista si comanda htop care ofera o reprezentare grafica mai atragatoare, dar nu exista de cele mai
multe ori si trebuie instalata (apt-get install htop).
5. nice
Pentru a modifica prioritatea unui proces se foloseste comanda nice (default +10)
Exemplu:
nice -n -20 sort nr.txt = prioritate maxima
nice -n +19 top = prioritate minima
Nota
1. Valori negative pentru nice pot setate doar de superuser.
2. Varianta 'nice -NR comanda' se considera obsolete si nu se mai recomanda a fi folosita. Exemplu:
nice -10 ls
7 Procese » 7.5 Comunicatia dintre procese / Semnale
Comunicatia dintre procese / Semnale
In Linux si Unix procesele comunica prin doua modalitati principale:
1 Pipes (conducte)
Procesele pot comunica prin canale speciale numite pipes. Un proces trimite informatie pe acest canal
care va fi folosita de celalalt proces. Sincronizarea este posibila fiindca in momentul in care un proces
doreste sa citeasca dintr-o conducta goala este blocat pana cand exista date disponibile.
Example: sort < numere.txt | head
Comanda sort ordoneaza fisierul numere.txt care reprezinta inputul sau. Outputul comenzii sort in loc sa
fie redirectat catre standard output este conectat la o conducta (care exista doar pe durata executiei
comenzilor) care transmite datele ca input comenzii head. Daca conducta "se umple", sort asteapta ca
head sa folosesca si sa indeparteze informatia din conducta.
Procesele pot comunica si folosind conducte de tipul named pipes sau domain named sockets.
Nota
Exemplu de procese care folosesc sockets pentru comunicare:
Procesul server de e-mail comunica printr-un socket cu procesul antivirus si printr-un alt socket cu
procesul care verifica daca un e-mail este spam. Astfel e-mailul este transmis prin socket intre
aceste procese, fiecare actionand intr-un anumit mod.
2. Intreruperi software (Semnale)
O alta modalitate de comunicare dintre procese este prin semnale sau intreruperi software. Exista
intreruperi software care pot fi ignorate de procese sau care nu pot fi ignorate.
Exista multe semnale in Unix (de ordinul sutelor).
Dintre acestea cateva mai importante sunt:
Signal Name Number Description
SIGHUP 1 Hangup (POSIX)
SIGINT 2 Terminal interrupt (ANSI) - CTRL + C
SIGQUIT 3 Terminal quit (POSIX)
SIGILL 4 Illegal instruction (ANSI)
SIGKILL 9 Kill(can't be caught or ignored) (POSIX)
SIGALRM 14 Alarm clock (POSIX)
SIGTERM 15 Termination (ANSI)
SIGCONT 18 Continue executing, if stopped (POSIX) (bg %jobid)
SIGSTOP 19 Stop executing(can't be caught or ignored) (POSIX)
SIGTTIN 21 Background process trying to read, from TTY (POSIX) - (Ctrl + Z)
SIGTTOU 22 Background process trying to write, to TTY (POSIX)
SIGIO 29 I/O now possible (4.2 BSD)
SIGPWR 30 Power failure restart (System V)
Procesele pot ignora, bloca sau "prinde" toate semnalele cu exceptia SIGSTOP si SIGKILL. Daca un
process "prinde" un semnal inseamna ca include cod care va actiona corespunzator la primirea
semnalului. Daca semnalul nu este "prins" de proces, kernelul va executa actiunea default.
Pentru a trimite un semnal in mod expres unui proces se foloseste comanda kill . Aceasta primeste ca
argument PID-ul procesului si tipul de semnal pe care sa-l trimita (default trimite SIGTERM(15)).
SIGTERM se numeste si soft-kill iar SIGKILL se numeste hard-kill. Un proces poate ignora semnalul 15 dar
nu si semnalul 9. La primirea semnalului 15 (daca nu este ignorat) sau 9 procesul trebuie sa intre in
starea terminated.
Nota
Trimiterea semnalului SIGKILL (9) lui init nu are niciun efect.
Comanda pkill primeste ca argument numele comenzii care ruleaza in procesul caruia ii va trimite
semnalul.
Comanda killall se foloseste pentru a trimite semnale tuturor proceselor care ruleaza sub acelasi nume.
Diferenta intre pkill si killall este ca pkill primeste ca argument doar o parte din numele procesului, iar
killall primeste ca argument intreg numele.
Pentru a specifica semnalul trimis se poate folosi codul numeric al semnalului sau numele acestuia.
Exemplu
#ps -ef | grep bash
root 13162 13158 0 11:59 pts/1 00:00:00 -bash
root 13403 13400 0 12:19 pts/2 00:00:00 -bash
#kill -15 13162
sau
#kill -SIGTERM 13162
sau
#pkill bash
sau
#killall bash
Aplicatii:
1) sa se trimita procesului reprezentat de comanda sleep 100 semnalul corespunzator combinatiei Ctrl+Z
2) sa se trimita procesului reprezentat de comanda sleep 50 semnalul corespunzator combinatiei Ctrl+C
Nota
Pidul unui proces care ruleaza poate fi aflat folosind comanda pidof. Exemplu: pidof init
7 Procese » 7.6 Job Control
Job Control
Job control se refera la posibilitatea de a opri/suspenda executia unui proces si repornirea sa la un
moment ulterior.
Pentru a rula o comanda in background se foloseste "&" la sfarsitul comenzii.
Exemplu: updatedb &
Fiecare job care ruleaza in background primeste un id (incepand cu 1). Comanda jobs afiseaza toate
aceste id-uri sub forma [1] 25647. Primul nr. reprezinta Job ID iar cel de-al doilea Process ID.
Daca sunt mai multe joburi in background, semnul "+" identifica job-ul care va fi utilizat ca default in
cazul comenzilor bg si fg, iar semnul "-" identifica job-ul care devine default daca job-ul curent termina
executia.
Exemplu
fg %job_id - aduce in foreground un job din background.
bg %job_id - porneste in background un job suspendat cu Ctrl+Z
La inchiderea terminalului acesta primeste semnalul SIGHUP. Toate procesele pornite din terminal
primesc la randul lor semnalul SIGHUP.
Comanda nohup este folosita cand se doreste ca un proces sa nu reactioneze la primirea semnalului
SIGHUP (hangup). La inchiderea terminalului, parintele (bash) intra in starea terminated si procesul este
preluat de init.
Exemplu: nohup comanda &
Exemplu
Se porneste un proces dintr-un terminal in mod normal (fara nohup) in foreground. Se doreste
inchiderea terminalului astfel incat procesul sa isi continue executia.
#wget -c http://download.fedoraproject.org/.../i386/iso/Fedora-8-i386-DVD.iso
#Ctrl+Z
#jobs
#bg %jobid
#disown -h %jobid
8 Backup si Cron » 8.1 Backup » 8.1.1 Strategii de backup
Strategii de backup
Introducere
Pentru orice afacere datele reprezinta una dintre cele mai importante resurse, o resursa strategica fara
de care firma respectiva nu poate exista.
Toata activitatea unei societati se afla pe hard disk-ul computerelor. O defectiune a acestora, un
incendiu sau o inundatie este echivalenta cu pierderea datelor si chiar cu falimentul companiei
respective.
Nimeni nu-si poate imagina astazi o banca ce isi pierde toate datele referitoare la clienti, conturi, sume
de bani trasferate, sau o companie de telefonie care nu mai gaseste informatiile referitoare la abonati,
numerele de telefon inca disponibile, plata facturilor etc.
Aceste pierderi fatale pentru o firma nu se intampla in realitate. Va puteti intreba de ce, din moment ce
hard diskurile se defecteza mereu, incendiile sau furturile echipamentelor sunt tot mai frecvente?
Pentru ca fiecare firma de pe glob care isi desfasoara activitatea fara a se intreba daca a doua zi mai
exista, are un sistem de backup al datelor.
Fie ca datele importante sunt copiate manual pe cd/dvd, fie exista un alt computer secundar pe al carui
hard disk se afla toate informatiile, fie este implementat un sistem profesionist de back-up pe banda
magnetica, o solutie de backup este nelipsita din strategia oricarei companii.
Important
Backup-urile trebuie depozitate off-site (in alta locatie fizica) in general in seif sau intr-un loc sigur astfel
incat o compromitere fizica a locului unde se afla datele (incendiu, furt, inundatie) sa nu afecteze si
backup-ul.
In principal exista 3 feluri de backup:
1. full backup - toate datele sunt salvate
2. backup incremental - doar datele care s-au modificat in raport cu ultimul backup sunt salvate
3. backup diferential - doar datele care s-au modificat in raport cu o perioada de referinta ( Exemplu:
prima zi a saptamanii) sunt salvate
Medii de stocare
1. Hard disk pe un alt calculator, eventual un hard disk extern pe USB sau FireWire de capacitate mare
(peste 300 GB) care poate fi depozitat off-site.
Avantajele acestei metode sunt multiple; pretul hard disk-urilor tinde sa devina tot mai redus, viteza de
copiere si de restaurare este foarte mare, accesul la date este direct. Un dezavantaj este fiabilitatea
scazuta. Hard disk-urile sunt sensibile la socuri mecanice, fluctuatii electrice sau magnetice etc. Nu de
putine ori auzim ca un anume hard disk s-a ars sau s-a spart.
2. Mediul optic - CD/DVD. Principalul avantaj este costul extrem de redus.
Dezavantajele sunt multiple: spatiu foarte redus de stocare (intre 600 MB - 4 GB), imposibilitatea de a fi
folosit acelasi cd/dvd un timp intelungat, dificultatea de a automatiza procesul. Aceasta solutie este
folosita mai mult de utilizatorii casnici, nu in mediul de afaceri.
3. Benzile magnetice. Aceasta solutie este preferata in mediul Enterprise. Fiabilitatea casetelor cu banda
magnetica este maxima. O caseta poate fi utilizata in conditii optime pana la 30 de ani fara intrerupere
daca sunt respectate recomandarile producatorului (umiditate, temperatura etc). Tape-urile nu au nimic
electronic in componenta, doar suport magnetic. Astfel devin imune la socurile mecanice. Informatia de
pe o caseta care a fost scapata jos si s-a spart sau a fost udata poate fi recuperata foarte usor (eventual
doar o mica parte din informatie a fost deteriorata). Pe o astfel de caseta incap pana la 240 GB.
Dezavantaje ar fi timpul lung necesar recuperarii datelor (acces secvential), viteza mica de scriere si
citire.
Exista programe de backup profesioniste atat comerciale cat si OpenSource. Un program de referinta
este AMANDA (The Advanced Maryland Automatic Network Disk Archiver). Acest sistem solid este
folosit cu succes in multe medii de afaceri. Folosind programele clasice de Unix ( tar, dump etc), pentru a
realiza un backup incremental pe banda magnetica, recuperarea datelor poate fi facuta doar cu aceste
utilitati aflate pe orice sistem Unix/Linux. Ultimele versiuni sunt compatibile cu Samba, astfel incat pot fi
incluse in circuitul de backup si share-uri Windows. Alte solutii profesioniste includ Arkeia, Veritas si
ARCserve.
Un alt aspect important este recuperarea informatiei aflata in circuitul de backup. Acest proces trebuie
sa fie sigur, usor si eficient. Dupa setarea sistemului de backup, trebuie verificat ca in caz de pierdere a
fisierelor, backup-ul chiar functioneaza si datele pot recuperate efectiv. Altfel cel mai complex sistem de
backup este nefolositor.
Securitatea datelor nu este de neglijat. De curand o companie aflata in Fortune Top 500 declara ca firma
de trasport FedEx a pierdut casetele cu backup in timp ce le transporta intr-o alta locatie. Imaginati-va
toate acele informatii in valoare de miliarde de dolari la indemana oricui ! De aceea este recomandat ca
datele sa fie criptate. In caz de pierdere/furt nimeni nu le poate accesa.
8 Backup si Cron » 8.1 Backup » 8.1.2 Comenzi specifice
Comenzi specifice
Comenzi de arhivare si comprimare
1. tar (tape archive) - reprezinta principala comanda de arhivare pe Linux. Tar nu realizeaza comprimare
(in mod default) ci doar arhivare.
tar optiuni output_file files/dirs
Comanda tar primeste obligatoriu una dintre optiunile:
-c = create - creaza o arhiva
-x = extract - extrage fisierele din arhiva
-t = table of content (vizualizare continut)
-r = adauga la sfarsitul arhivei
-u = adauga in arhiva doar fisierele noi
-C DIR = specifica directorul destinatie in care se va decomprima (altfel in directorul curent)
Important
Folosind optiunea -x se pot suprascrie fisierele care exista pe hard disk cu cele care se dezarhiveaza.
Alte optiuni:
-f = file (se specifica fisierul arhiva care se creaza)
-v = verbose
--atime-preserve = nu schimba atime pentru fisierele adaugate
Exemplu
a) se creaza arhiva.tar in directorul curent din directorul /home/stud/dir_care_se_arhiveaza
tar -cvf arhiva.tar /home/stud/dir_care_se_arhiveaza
b) vizualizarea continutului unei arhive
tar -tf arhiva.tar
c) adaugare fisier a.txt la arhiva.tar
tar -rf arhiva.tar a.txt
d) adaugare fisiere noi in arhiva. Acestea sunt adaugate, versiunile mai vechi din arhiva nu sunt
inlocuite.
tar -uf arhiva.tar f*
e) pastreaza atime pentru fisierele adaugate
tar --atime-preserve -cvf arhiva.tar dir1/
f) Extrage doar un fisier din arhiva
tar -xvf arhiva.tar a.txt
g) Extrage continutul arhivei in directorul /tmp
tar -xjvf arhiva.tar.bz2 -C /tmp
2. BZIP2, GZIP
Programul tar poate fi folosit si pentru a compresa fisiere. Se folosesc optiuni specifice care au drept
efect trecerea fisierelor printr-un program de compresie inainte de arhivare.
Optiuni ale comenzii tar pentru comprimare:
-j = create bzip2 (fisierele care se arhiveaza sunt trecute prin filtrul de compresie bzip2)
Exemplu
Creaza in directorul curent arhiva directorului /home/dan/dir1 numita archivefile.tar.bz2
comprimata cu bzip2
tar -cvjf archivefile.tar.bz2 /home/dan/dir1
echivalent cu
tar -cvf - /home/dan/dir1 | bzip2 > archivefile.tar.bz2
Extragere arhiva bz2:
tar -xjvf arhiva.tar.bz2
echivalent cu
bunzip2 arhiva.tar.bz2 - rezulta fisierul arhiva.tar
tar -xvf arhiva.tar
-z = creaza o arhiva comprimata cu gzip
Exemplu
tar -czvf arhiva.tar.gz dir1/
tar -xzvf arhiva.tar.gz
Exista si comenzile zip, unzip, gzip si gunzip dar sunt mai putin folosite datorita faptului ca in general se
foloseste comanda tar impreuna cu optiuni de compresie.
Exemplu: Backup la directorul /etc in /root : tar -cjvf /root/etc-$(date +%F).tar.bz2 /etc
3. SCP - Secure Copy (Copy over SSH)
Reprezinta posibilitatea de a copia fisiere remote de pe calculatoare conectate in LAN sau pe Internet.
Copierea are loc criptat.
Pentru aceasta avem nevoie de acces prin SSH la calculatorul de pe care dorim sa copiem sau pe care
dorim sa copiem. Datele sunt copiate folosindu-se un tunel SSH creat intre sursa si destinatie.
scp optiuni SURSA DESTINATIE
- P = port (poate folosi un alt port - default 22)
- p = preserve (atime, mtime si permisiunile)
- r = recursive copy (pt. directoare)
- v = verbose
Exemplu
a) Se copiaza fisierul arhiva.tar.bz2 de pe calculatorul local pe calculatorul cu IP-ul 192.168.0.1 in
directorul /home/dan sub numele de arhiva-stud.tar.bz2. Userul dan trebuie sa aiba acces prin ssh
la 192.168.0.1
scp /home/stud/arhiva.tar.bz2 dan@192.168.0.1:/home/dan/arhiva-stud.tar.bz2
b) Sursa poate fi host-ul remote identificat prin nume DNS. Conexiunea foloseste portul destinatie
2323 (daemonul ssh trebuie sa asculte pe acest port). Se copiaza fisierul /etc/passwd in dir. curent.
scp -P 2323 root@host.ro:/etc/passwd .
c) Copiaza recursiv directorul /etc/ sub numele /backup-etc/
scp -rpv /etc/ root@backuphost:/backup-etc/
4. rsync
Solutie de backup incrementala folosind rsync si Linux
Inainte de a configura o solutie de backup, care este critica pentru orice utilizator privat sau din mediul
de afaceri, trebuie sa ne punem cateva intrebari:
La ce vreau sa fac bakup?
Pentru cat timp vreau sa pastrez backup-ul?
Pe ce mediu vreau sa salvez datele?
Ce importanta au datele care sunt salvate?
Cel mai rau lucru care se poate intampla este ca solutia de backup in care ne-am pus toata increderea sa
nu functioneze la momentul oportun (dupa ce s-a produs pierderea datelor, sa nu le putem recupera).
De aceea verificarea functionarii backup-ul este de importanta capitala.
rsync (remote syncronization) este o utilitara inclusa in toate distributiile moderne de Linux. Aceasta
realizeaza sincronizarea fisierelor si directoarelor locale cu cele de pe un alt calculator remote sau cu un
alt director local.
Sintaxa de baza este:
#rsync /sursa /destinatie
Acesta comanda copiaza directorul numit /sursa in directorul numit /destinatie (cu crearea directorul
destinatie daca nu exista).
O varianta mai complexa poate fi:
# rsync -e ssh -av --delete /usr/local/backup/ daniel@backup.host:/home/backups/
Acesta comanda face un backup incremental (doar diferentele dintre sursa si destinatie) pe un calculator
remote.
-e ssh : reprezinta modalitatea de transport a datelor folosind protocolul ssh. Se creaza un tunel criptat
prin care fisierele si directoarele sunt copiate. Pentru a folosi ssh ca protocol de comunicare trebuie sa
fie setat ssh sa realizeze autentificare fara parola folosind chei publice si private. Altfel procesul nu poate
fi automatizat fiindca trebuie introdusa parola de autentificare.
-a : archive mode, echivalent cu -rlptgoD ( r = recursive, l = copiaza si linkurile, p = pastreaza permisiunile
fisierelor intre sursa si destinatie, t = pastreaza ctime, atime, mtime, o=pastreaza owner, g=group pt
fisier sau director, D = preserve device (numai pt Root))
-v : verbose
--delete : sterge fisierele sau directoarele de la destinatie care sunt diferite fata de sursa
/usr/local/backup reprezinta sursa backup-ului
daniel@backup.host:/home/backups -> username daniel pe calculatorul remote backup.host (poate fi
dat si ca IP) care are drept de scriere in directorul destinatie, iar /home/backups reprezinta destinatia
Rularea automata a script-ului de back-up
Pentru a executa un backup incremental automat in fiecare seara, se creeaza un cronjob.
Intr-un script (fisier cu drept de executie pt owner care trebuie sa fie root pentru a evita eventualele
probleme legate de drepturile de acces) scriem comanda de mai sus care realizeaza backup incremental
apoi ca root executam
# crontab -e : deschide fisierul cu cron joburile lui root pentru editare folosind editorul implicit (vi,
emacs, etc)
0 0 * * * /calea_catre_scriptul_creat_mai_sus: ruleaza scriptul cu numele
calea_catre_scriptul_creat_mai_sus la ora 0:0 in fiecare zi
Alta posibilitate ar fi sa copiem scriptul creat mai sus in /etc/cron.daily (redhat, fedora, slackware etc).
Fisierele aflate in /etc/cron.daily se executa automat la ora 22:00 (sau cea configurata in /etc/crontab) a
fiecarei zile.
rsync este o unealta cu foarte multe optiuni (vezi man rsync) simpla, dar foarte flexibila.
Exemplu
1. Pentru a realiza o sincronizare a doua directoare( /home si /backup/home) de pe acelasi
computer:
rsync -a --delete /home /backup/home
2. Daca vrem sa sincronizam/copiem un director recursiv, dar vrem sa omitem un anume director
sau fisier, putem folosi optiunea --exclude-from
rsync -e ssh -aq --delete --exclude-from=': /etc/.rsync-filter' /home/mihai/
root@10.0.0.2:/home/mihai/
Aceasta comanda sincronizeaza /home/mihai/ de pe calculator local cu /home/mihai/ de pe
calculatorul 10.0.0.2 omitand directoarele si fisierele precizate in fisierul .rsync-filter din /etc.
Autentificarea la serverul ssh de pe 10.0.0.2 se realizeaza cu userul root.
Fisierul /etc/.rsync-filter trebuie creat si trebuie sa contina pe cate o linie numele directoarelor sau
fisierelor pe care vrem sa le excludem sau sa le includem in sincronizare/copiere (pot si folosite si
"regular expressions").
O linie este formata din action apoi spatiu si numele fisierelor/directoarelor (patternul) care vor fi
excluse sau incluse. Action este + in cazul in care includem pentru sincronizare, respectiv - daca
dorim sa expludem.
In acest exemplu in care dorim sa excludem directoarele samba si jeny precum si toate fisierule cu
extensie php, fisierul .rsync-filter contine:
- samba/
- jeny/
- *.php
Daca se termina numele in / este director.
Exemplu:
Se copiaza doar directorul task si fisierele py si odt.
+ task/
+ *.py
+ *.odt
- *
3. Pentru a realiza o arhiva gzip a lui /usr/local/backup si a o copia temporar in /tmp si apoi pe
host-ul remote 192.168.3.l ca username jeny cu stergerea ulterioara din /tmp
#!/bin/bash
DATE=`date +%F`
tar -czpf /tmp/backupfile-$DATE.gz /usr/local/backup
rsync -e ssh -a /tmp/backupfile-$DATE.gz jeny@192.168.3.1:/home/backups
rm /tmp/backupfile-$DATE.gz
4. rsync poate fi folosit si pentru o simpla copiere ( ca si cp) rsync /etc/named.conf
/home/omi/named.conf
Comanda este echivalenta cu:
cp /etc/named.conf /home/omi/named.conf
rsync poate functiona si client-server. Cu clientul de rsync ne conectam la serverul rsync de pe
calculatorul destinatie. Astfel nu mai este nevoie de ssh ca protocol de trasport.
8 Backup si Cron » 8.1 Backup » 8.1.3 Servicii de backup
Servicii de backup
Deoarece importanta backup-ului este critica pentru companii dar si pentru persoane fizice, exista mai
multe servicii care ofera backup folosind cloud storage. Astfel fisierele importante pot fi usor
sincronizate intre mai multe dispozitive (smartphone, desktop, notebook, netbook etc), iar in cazul unei
defectiuni hardware sau stergere accidentala pot fi recuperate.
Aceste servicii ofera gratuit un anumit spatiu de stocare, iar daca se doreste spatiu mai mult se achita o
taxa lunara.
La alegerea unui serviciu de backup trebuie avuta in vedere si confidentialitatea respectiv "data at rest
protection" si anume daca fisierule sunt criptate, iar daca operatorul serviciului poate accesa
informatiile clientilor.
Dintre serviciile de cloud backup enumeram:
Ubuntu One Dropbox ADrive
Resurse:
Comparison of online backup services Data at Rest vs. Data in Motion
8 Backup si Cron » 8.2 Cron jobs
Cron jobs
Cron
Reprezinta o modalitate in Linux/Unix cu ajutorul careia se pot programa executii de comenzi sau
programe la un moment dat in viitor (in mod repetat sau nu). Comanda sau programul se executa in
background de catre un proces numit cron daemon.
Cron daemon (crond sau cron in functie de distributie) cauta fisierele cu joburi (sarcini sau comenzi) de
executat in directorul numit cron spool directory si care este /var/spool/cron/crontabs si unde se
gaseste un fisier text pentru fiecare user din sistem avand numele acestuia (daca utilizatorul are joburi
de executat). Aceste fisiere sunt incarcate in memorie. Fiecare utilizator din sistem are propriile cron
job-uri independent de ceilalti useri.
Cron daemon verifica la fiecare minut daca mtime al spool directory s-a modificat, iar daca s-a modificat
reincarca job-urile in memorie.
Exista 2 fisiere ( /etc/cron.deny si /etc/cron.allow) care stabilesc userii care au dreptul sa foloseasca
crontab.
Daca fisierul cron.allow nu exista, dar cron.deny exista si este gol, fiecare user are dreptul sa foloseasca
crontab.
Daca nici cron.allow nici cron.deny nu exista utilizatorii nu au dreptul sa foloseasca crontab.
Daca ambele fisiere exista dar sunt goale, niciun utilizator nu are dreptul sa foloseasca crontab.
Aceste fisiere se editeaza cu username-ul celui la care ne referim (cel care are dreptul sau nu sa
foloseasca crontab), cate un username pe fiecare linie. Poate fi folosit cuvantul ALL sau NONE.
Accesul sau restrictia unui utilizator la crontab se refera la dreptul acestuia de a edita fisierul din
/var/spool/cron/crontabs folosind crontab sau direct folosind un editor text. Nu se refera la dreptul de a
avea si executa cron job-uri. Userul root va putea in continuare sa editeze cron-urile pentru utilizator.
Crontab are 2 semnificatii:
a) este programul care instaleaza, dezinstaleaza si editeaza lista de job-uri (fisierele din
/var/spool/cron/crontabs) pentru fiecare utilizator folosite de cron daemon. Acesta foloseste de fapt un
editor text si valideaza corectitudinea fisierului care se modifica;
b) este fisierul de configurare al lui cron daemon din /etc;
Exista 2 categorii de cron jobs:
1. Joburi pentru fiecare utilizator ( /var/spool/cron/crontabs)
2. Joburi globale
Structura unui fisier cu job-uri din /var/spool/cron/crontabs este urmatoarea:
Pentru a evita erorile, nu se recomanda editarea in mod direct (cu editorul preferat precum VIM) a
fisierului care este folosit de cron daemon ci folosind comanda crontab.
In Ubuntu Cron Daemon pastreaza logurile in fisierul /var/log/syslog
Comentariile sunt permise dar trebuie sa fie unice pe linie. Se foloseste "#".
Exemplu
* 12 10-16/2 * * /root/scripts/backup.sh
identic cu
* 12 10,12,14,16 * * /root/scripts/backup.sh
Optiune:
-e = editare crontab sau creare daca nu exista - foloseste editorul default, cel definit in variabila globala
EDITOR sau VISUAL
-l = listare cron jobs
-r = remove user crontab
-i = interactiv la delete
La editarea crontab-ului se pot folosi intervale continue sau discrete folosit caracterul "-" (minus) sau ","
(virgula)
Exemplu: 1-5 * * 1,2 * script
In afara cronjob-urilor pentru fiecare utilizator care se gasesc in directorul /var/spool/con/crontabs,
cron daemon foloseste job-uri globale definite in fisierul de configurare numit /etc/crontab. Structura
acestuia este urmatoarea:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
Dupa declararea variabilelor pe care le va folosi cron, pe fiecare linie se gaseste un job de rulat.
Dupa cele 5 coloane care reprezinta timpii folositi de cron se gaseste user-ul care va executa programul
si comanda de executat.
run-parts este un concept original din Debian care are drept scop executarea tuturor scripturilor dintr-
un director.
Deci cron daemon va executa la fiecare ora, zi, saptamana si luna scripturile aflate in directoarele
/etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly si /etc/cron.monthly
Limitari: exista programe care nu pot fi rulate de catre cron ( Exemplu: ssh-agent) acest lucru in special
fiindca variabilele de environment nu sunt accesibile lui crond.
Important
La specificarea scripturilor care trebuie sa fie rulate in mod repetat este obligatoriu sa folosim cai
absolute fiindca crond nu are acces la variabilele globale ale sistemului si exista astfel posibilitatea sa nu
functioneze corect. Aceasta eroare este frecventa si greu de depistat.
Resurse:
man crontab man cron
9 TCP/IP & Networking » 9.1 TCP/IP
TCP/IP
Orice calculator comunica in retea folosind stiva de protocoale TCP/IP. TCP/IP este "de facto" industry
standard.
TCP/IP este o colectie de protocoale cele mai cunoscute si importante fiind TCP (Transmission Control
Protocol) si IP (Internet Protocol) de unde si numele TCP/IP. Pe langa aceste protocoale exista multe
altele fiecare gasindu-se la un anumit layer si avand o anumita functionalitate. Stiva TCP/IP se instaleaza
automat la instalarea sistemului de operare (Windows sau Linux).
Aceasta stiva de protocoale a fost creata de DoD (Department of Defense, USA) la inceputul anilor '70,
avand drept scop crearea unei retele care sa supravietuiasca in orice conditii, chiar in cazul unui atac
nuclear.
Este impartit in 4 layere:
1. Application Layer
La acest layer se gasesc protocoale precum: DNS, HTTP, FTP, TFTP, SMTP, IMAP, POP3, SSL, SNMP etc. La
acest layer se gasesc serviciile oferite de retea cele mai apropiate de utilizatorul final. Programele
existente sunt client sau server care implementeaza protocoalele enumerate mai sus.
2. Transport Layer
La acest layer se gasesc protocoalele TCP si UDP.
TCP (Transmission Control Protocol) este un protocol complex care garanteaza ajungerea datelor la
destinatie. Inainte de a se initializa transferul datelor are loc un schimb de mesaje intre sursa si
destinatie pentru se se sincroniza. Acest fapt il face sa fie "Connection-oriented"
UDP (User Datagram Protocol) este mai simplu decat TCP, nu garanteaza sosirea datelor la destinatie si
este "Connection-less"
Layerul Transport este responsabil cu prima impachetare a datelor. Informatia, pe care o primeste de la
nivelul aplicatie este impartita in segmente si ii sunt adaugate headere (informatie specifica nivelului
transport). La acest nivel are loc segmentarea datelor. Printre altele, headerul contine 2 numere, numite
PORTURI. Un port ocupa 16 biti si este intre 0 si 65535
Cele 2 numere (porturi) se numesc:
a) port sursa (identifica programul care a generat mesajul) - adresa aplicatiei sursa
b) port destinatie (identifica carui program ii este destinat mesajul pe hostul destinatie) - adresa
aplicatiei destinatie. Acesta este de obicei un server
Exemplu: daca unul dintre cele 2 porturi este 21, programul este FTP, daca este 25 este vorba despre un
e-mail, daca portul este 80 programul de la nivelul aplicatie este serverul web.
IANA este responsabila cu alocarea si inregistrarea porturilor.
IANA a definit 3 categorii de porturi:
1. Well Known ports (intre 0 si 1023)
Exemplu: 80 pt http, 110 pentru POP3, 993 pentru IMAPs (IMAP over SSL)
2. Registered Ports (intre 1024 si 49151)
Exemplu: 3036 pentru MySql, 3756 pentru canon
3. Dynamic / Private Ports (intre 49152 si 65535)
Un port se poate afla in urmatoarele 3 stari:
1) Deschis (open). Ne putem conecta (folosind 3-way handshake) la un port deschis, exista o aplicatie
(server) care accepta conexiuni folosind acel port. Se spune ca aplicatia destinatie (serverul) "asculta" pe
acel port.
Exemplu: un server web care ruleaza si care este configurat sa asculte pe portul 80.
2) Inchis (close). Nu exista nicio aplicatie care sa primeasca conexiuni pe acel port.
3) Filtrat (stealth). Portul este deschis, dar un firewall sau o lista de acces blocheaza conexiunile catre
acel port.
Scopurile nivelului transport:
a) segmenteaza informatia conform cu lungimea maxima admisa pe canalul de comunicatie
(segmentation)
b) numeroteaza aceste segmente pentru a-le pune cap-la-cap la destinatie si a forma mesajul initial
c) trimite confirmari (acknowledgment) celeilalte parti cum ca a primit pachetele. Se foloseste "positive
acknowledgment" - confirmarea se refera la urmatorul segment pe care asteapta sa-l primeasca.
Exemplu: daca trimite ca acknowledgment nr. 7, inseamna ca asteapta segmentul cu nr. 7, iar sursa stie
ca destinatia le-a primit cu succes pe primele 6
d) identifica segmentele primite gresit (cu erori) si notifica destinatia sa le retransmita (error recovery)
e) regleaza fluxul datelor (viteza de transmisie) (flow control)
Important
Pentru vizualizarea porturile deschise pe Linux se foloseste comanda netstat -tupan.
3. Internet Layer
La acest layer se gasesc protocoale precum IP (protocol rutabil sau rutat), ICMP (protocol de detectare a
erorilor si de testare a legaturii), protocoale de rutare (routing protocols) precum RIP, OSPF, EIGRP,
IGRP, BGP, IS-IS
Scopul unui protocol rutabil este de a transporta informatia catre destinatie prin incapsulare pe calea pe
care protocoalele de rutare o gasesc.
Primeste segmentul de la nivelul transport si ii adauga headerele specifice. Segmentul primit de la Layer
Transport se numeste la Layer Internet pachet. La acest nivel are loc impachetarea datelor.
Scopurile nivelului Internet:
a) rutarea pachetelor folosind cea mai buna cale (drum) pe care pachetele o pot urma catre destinatie
(routing)
b) gasirea celei mai bune cai catre destinatie dintre mai multe cai posibile (best effort delivery)
c) avertizarea celor implicati in comunicatie printr-o serie de mesaje specifice, testarea liniei de
comunicatie etc (protocolul ICMP).
d) impachetarea datelor ( segmentelor primite de la layer4 li se adauga un Header si devin pachete)
Se folosesc 2 adrese, numite si logice (adrese IP):
a) adresa sursa (identifica calculatorul sursa)
b) adresa destinatie (calculatorul destinatie)
O adresa IP are 32 de biti si se reprezinta prin 4 numere intre 0 si 255 separate prin .(punct)
Exemplu: 10.0.0.1 sau 192.89.43.251
4. Network Access Layer
La acest Layer se gasesc protocoale care definesc tipul de retea: Ethernet, WLAN, PPP, ADSL, CaTV,
FrameRelay, ISDN etc
Acest layer primeste pachetul de la Layer Internet si ii face o noua impachetare (a 3-a) astfel: adauga in
fata pachetului un header si la finalul lui un trailer. Pachetul se va numi la acest layer Frame.
In Frame se vor gasi alte 2 adrese care identifica placa de retea a fiecarui calculator implicat in
comunicatie (adrese fizice sau MAC).
O adresa MAC are lungimea de 48 de biti reprezentati prin 12 cifre hexazecimale.
Exemplu: 00:01:AC:17:AB:C9
Scopurile nivelului Network Access:
a) stabileste topologia retelei (bus, star, extended star, mesh)
b) adresarea fizica a fiecarui calculator folosind adrese MAC
c) identificarea erorilor (nu si corectia sau recuperarea lor)
Nota
Adresele de tip MAC exista doar in cadrul retelei locale de tip Ethernet. Acestea nu se transmit pe
Internet. Daca se folosesc alte tehnologii la Network Access Layer precum ISDN, PPP, Catv etc
adresele MAC nu se folosesc pe linkul respectiv.
Important
Protocoalele de layerele aplicatie, transport si internet sunt independente de protocoalele de la
Network Access. Protocolul DNS, IP sau TCP functioneaza identic, fara nicio modificare indiferent daca la
layer "Network Access" avem Ethernet, WLAN, ADSL sau ISDN. De fapt protocoalele superioare nu au
cunostinta despre protocoalele de la Network Access Layer.
Important
Procesul prin care datele (email-ul, pagina web etc) sunt transformate in segmente la Layer4 apoi in
pachete la Layer3 apoi in frame-uri la Layer2 si in biti la Layer1 se numeste incapsulare si are loc la sursa
care a generat mesajul. Procesul invers se numeste decapsulare si are loc la destinatie.
Incapsulare: data->segment->packet->frame->biti Decapsulare: biti->frame->packet->segment->data
Pentru o buna intelegere a modului in care retelele comunica este necesara o cunoastere aprofundata a
protocoalelor care fac parte din stiva TCP/IP.
Pentru vizualizarea tuturor pachetelor care parasesc interfata (placa de retea) calculatorului sau a celor
care sunt primite de interfata calculatorului se folosesc programe numite sniffere.
Cele mai cunoscute si folosite sunt: Wireshark si tcpdump. Acestea sunt cele mai utile programe pentru
troubleshooting in retea.
Wireshark functioneaza atat pe Linux cat si pe Windows iar modul in care pachetele sunt afisate este
grafic. Tcpdump ruleaza doar pe Linux in linie de comanda.
Resurse
OSI - Wikipedia TCP/IP - Wikipedia TCP/IP Protocol Suite and Architecture The Open System Interconnection (OSI) Reference Model
9 TCP/IP & Networking » 9.2 Clasificarea adreselor IP
Clasificarea adreselor IP
O adresa IP se mai numeste si adresa logica si apartine L3 OSI.
Se foloseste pentru a identifica logic hosturile conectate la retea. Rutarea pachetelor (trimiterea
acestora de la sursa la destinatie pe calea cea mai buna) se bazeaza in primul rand pe IP-uri. Fiecare
calculator conectat la retea trebuie sa aiba o adresa IP unica pentru acea retea pentru a putea fi
identificat.
In comparatie cu adresa MAC care apartine L2 OSI si care nu se poate modifica(teoretic), adresele IP
sunt setate de catre user. Fiecare placa de retea poate avea una sau mai multe IP-uri.
O adresa IP este formata din 4 bytes (32 de biti in total).
Acesta se scrie in baza zece, trasformand fiecare byte din baza 2 in baza 10 si separandu-i prin punct.
O adresa IP este formata din 2 parti:
1) Network Address (adresa retelei sau adresa firului)
2) Host Address (adresa hostului din retea). Deci bitii componenti ai unei adrese IP se impart in biti de
retea si biti de host.
Toate hosturile din aceeasi retea trebuie sa aiba aceeasi Network Address.
Network Mask
Strans legata de IP este notiunea de masca de retea (Network Mask). Scopul acesteia este de a stabili
care biti din IP sunt biti de retea si care sunt de host. Adresa IP nu exista fara masca, intotdeauna se
configureaza doar impreuna.
Exemplu
1. 255.0.0.0 sau /8
Daca transformam aceasta masca in baza 2 observam ca primii 8 biti sunt 1. Rezulta ca primii 8 biti
din adresa IP sunt biti de network, iar ultimii 24 de host.
2. 255.255.255.0 sau /24
Daca transformam aceasta masca in baza 2 observam ca primii 24 biti sunt 1. Rezulta ca primii 24
biti din IP sunt biti de network, iar ultimii 8 de host.
Important
Un Router realizeaza o operatie de AND LOGIC (si logic) intre IP si masca pentru a afla Network Address.
Varianta simplificata pentru a separa network address de host address este:
1) se transforma IP-ul si masca in baza 2
2) se aseaza IP si masca una sub cealalta, bit sub bit
3) bitii din IP care sunt in dreptul bitilor de "1" (unu) din masca se numesc biti de retea si formeaza
Network Address. Biti din IP care sunt in dreptul bitilor de zero ("0") se numesc biti de host.
Masca se mai poate scrie si sub forma slash ("/") urmat de nr. bitilor de 1. Network Prefix este sinonim
cu Network Address
Exemplu
255.0.0.0 sau /8
255.255.0.0 sau /16
255.255.255.0 sau /24
255.255.128.0 sau /17
Clasificarea adreselor IP
1. In functie de primii biti din primul octet exista 5 clase de IP-uri (definite de IANA in rfc1700)
bitii primului octet interval primul octet Masca default
clasa A 0xxxxxxx 0-127 255.0.0.0 sau /8
clasa B 10xxxxxx 128-191 255.255.0.0 sau /16
clasa C 110xxxxxx 192-223 255.255.255.0 sau /24
clasa D 1110xxxx 224-239 Nu exista
clasa E 1111xxxx 240-255 Nu exista
Exemplu
10.0.0.1 - IP de clasa A
12.12.255.8 - IP de clasa A
189.189.189.189 - IP de clasa B
213.12.0.1 - IP de clasa C
135.9.9.1 - IP de clasa B
224.0.0.10 - IP de clasa D (clasa de multicast)
249.90.90.1 - IP de clasa E (clasa rezervata)
Nota
1. 127.0.0.1 este rezervata si folosita ca adresa de loopback. Se foloseste de hosturi pentru
redirecta traficul pentru ele insele. Cel mai folosit caz concret este atunci cand atat clientul cat si
serverul se afla pe acelasi host. Exemplu: instalam un server Apache si ne conectam la acesta de pe
acelasi calculator folosind un Browser
2. Clasa D este o clasa speciala folosita pentru multicast. Nu se configureaza interfete sau placi de
retea cu aceasta adresa.
3. Clasa E este rezervata pentru studii sau cercetari. Nu este folosita in realitate.
Adrese IP speciale
1. Clasa E (adrese experimentale - rfc 3330) - 240.0.0.0 - 255.255.255.254
2. Clasa D (Multicast) - 224.0.0.0 - 239.255.255.255
3. Link-local address: 169.254.0.0 - 169.254.255.255 si se foloseste de hosturi pentru setarea automata a
unui IP cand nicio alta metoda nu este disponibila (DHCP, BootP, PPP, static etc). Se pot folosi doar in
reteaua locala, iar TTL este 1.
4. TEST-NET Address: 192.0.2.0 - 192.0.2.255 - teaching and learning purpose. Pot fi folosite in
documentatii si exemple. Device-urile le accepta in configuratie.
Se gasesc in multe ori in RFC pt. IP ale domeniilor example.com, example.net sau in documentatii ale
producatorilor
5. Loopback: 127.0.0.1
2. In functie de destinatia pachetelor, adresele IP pot fi:
a) Unicast - Identifica un sigur host intr-o retea.
b) Multicast - Identifica un grup de hosturi dintr-o retea. Un calculator sursa poate comunica simultan cu
un grup de calculatoare folosind adresa IP destinatie de tip multicast.
c) Broadcast - Identifica toate hosturile dintr-o retea.
Exista 2 categorii de Broadcast Address:
a. Directed Broadcast Address
Se calculeaza punand toti bitii din portiunea de host address pe "1"
Exemplu
1. Pentru IP-ul 192.168.0.1/24.
Masca este /24 sau 255.255.255.0 adica din cei 32 de biti ai mastii primii 24 sunt 1 iar restul 0.
Rezulta ca Network Address este reprezentata de primii 24 de biti din IP (atitia cati biti de 1 sunt in
componenta mastii). Restul bitilor se pun pe valoarea 0. Network Address = 192.168.0.0
Daca primii 24 biti din IP identifica Network Address, restul bitilor pana la 32 (8 biti) identifica bitii
de host.
Pentru a afla broadcast address se scrie adresa de retea (192.168.0.0) si se pun toti bitii din Host
Address pe 1. Rezulta Broadcast Address= 192.168.0.255
2. Pentru IP-ul 10.0.0.0/8 broadcast address este 10.255.255.255
3. Pentru IP-ul 190.190.0.17/16 broadcast address este 190.190.255.255.
4. Pentru IP-ul 210.210.210.67/27 broadcast address este 210.210.210.95
b. Limited Broadcast Address. Este invariabil 255.255.255.255
3. In functie de modul de procurare si utilizare exista IP-uri
a) Publice
- se cumpara sau se inchiriaza de la un LIR (Local Internet Registry) sau de la un ISP Local.
- sunt publice, oricine poate afla informatiile despre proprietarul unui IP (adresa, nume, email de contact
etc).
- identifica in mod unic un host pe Internet. Fiecare calculator conectat DIRECT la Internet trebuie sa
aiba o adresa publica.
b) Private
- nu se cumpara, nu se inchiriaza, nu se platesc
- sunt folosite doar in cadrul unui LAN
- pachetele de date nu au voie sa contina pe Internet IP sursa sau destinatie de tip privat (vor fi blocate
la primul Router)
- un Router trebuie sa fie configurat pentru NAT (Network Address Translation) astfel incat un LAN care
foloseste IP-uri private sa poate comunica pe Internet - IETF (Internet Engineering Task Force) a definit
clasele de IP-uri private in RFC1918.
Acestea sunt:
a) de clasa A -> 10.0.0.0 - 10.255.255.255
b) de clasa B -> 172.16.0.0 - 172.31.255.255
c) de clasa C -> 192.168.0.0 - 192.168.255.255
4. In functie de modul de alocare IP-urile pot fi:
a) Statice - sunt configurate pentru fiecare interfata de catre administrator sau user
b) Dinamice - sunt configurate prin intermediul unor programe speciale fara interventia user-ului.
Exemplu: DHCP, BootP sau PPP pentru DialUp
Important
Cunoasterea in profunzime a protocoalelor din stiva TCP/IP precum si modul acestora de functionare
reprezinta un aspect extrem de important pentru o cariera perfomanta in domeniul Networking.
Detalii complete despre stiva TCP/IP sunt prezentate in cursul Cisco CCNA1 Exploration organizat in
varianta cu predare aprofundata de catre Crystal Mind Academy.
Resurse:
Adrese IP rezervate TCP/IP Overview
9 TCP/IP & Networking » 9.3 Configurare retea
Configurare retea
Configurarea statica a interfetelor de retea
Pentru a comunica intr-o retea TCP/IP un host trebuie sa fie configurat cu:
1) IP (obligatoriu)
2) Network Mask (obligatoriu) - se configureaza impreuna cu IP
Exista 2 posibilitati de a configura IP-ul si masca:
a) Editand fisierul in care se salveaza configuratia placii de retea. Configuratia este permanenta, se
pastreaza dupa un eventual restart.
Acesta poate sa difere de la distributie la distributie. In Ubuntu exista un singur fisier pentru toate
interfetele si anume /etc/network/interfaces
Exemplu fisier:
auto lo
iface lo inet loopback
iface eth0 inet static
address 192.168.0.100
netmask 255.255.255.0
gateway 192.168.0.1
auto eth0
b) Folosind comanda ifconfig. Modificarea configuratiei nu se salveaza la reboot, iar sintaxa acesteia este
identica pe orice distributie de Linux.
Exemplu
1. Afiseaza configuratia interfetelor active
ifconfig
2. Afiseaza configuratia tuturor interfetelor instalate si recunoscute de sistem
ifconfig -a
3. Porneste/opreste o interfata (enable/disable)
ifconfig eth0 down | up
4. Configureaza IP si Masca pentru o interfata
ifconfig eth0 10.0.0.1 netmask 255.255.255.0 broadcast 10.0.0.255
5. Schimba adresa MAC interfata
ifconfig eth0 hw ether 00:0B:33:34:35:36
6. Modificare MTU
ifconfig eth0 mtu 1412
7. Creare sub interfata si setare IP si Masca
ifconfig eth0:0 10.0.0.0 netmask 255.0.0.0 broadcast 10.255.255.255
3) Default Gateway (optional)
Se poate configura de asemenea in 2 moduri:
a) Editand fisierul in care se gaseste (modificare permanenta).
In Ubuntu se gaseste in acelasi fisier cu IP-ul si Masca ( /etc/network/interfaces)
b) Folosind comanda route (modificare temporara, pana la restart)
route add default gw 192.168.0.1
Comanda route fara optiuni listeaza tabela de rutare a hostului.
4) Servere DNS (optional)
Se configureaza in /etc/resolv.conf pentru ORICE distributie de Linux iar setarea este permanenta
Continut /etc/resolv.conf:
nameserver 193.231.236.3
nameserver 193.231.236.25
Pentru a crea o mapare statica IP/NUME se editeaza fisierul /etc/hosts
Continut /etc/hosts
192.168.0.1 gateway
192.168.0.18 server
82.34.1.9 home
Fisierul /etc/host.conf determina ordinea de translatare a domeniului in IP (default: /etc/hosts si apoi
query catre serverele DNS)
Dupa fiecare modificare a parametrilor interfetelor de retea, serviciul retea trebuie restartat:
/etc/init.d/networking restart
Nota
Daca se doreste pornirea clientului dhcp pe o interfata eth0 pentru configurare automata se
ruleaza comanda: sudo dhclient eth0
9 TCP/IP & Networking » 9.4 Remote Management » 9.4.1 SSH
SSH
Protocolul SSH (Secure Shell) se foloseste pentru:
administrarea remote a unui alt calculator/server, a unui router, switch sau alt echipament de retea. In acest caz administratorul are acces intr-un mod securizat (criptat) la un shell de pe echipamentul remote unde poate rula comenzi de unde si numele de "Secure shell";
copierea in mod securizat de fisiere si directoare intre 2 calculatoare intre care exista o conexiune TCP/IP (comanda scp). Cele 2 calculatoare se pot afla in acelasi LAN sau pe Internet;
folosirea de catre alte protocoale precum rsync ca protocol de transport in mod securizat a datelor;
securizarea unui protocol care comunica in clar precum http, smtp, pop, imap etc. Acest lucru se numeste Tunneling;
evitarea regulilor unui firewall - Bypassing firewall rules; modificarea dinamica a unui firewall in functie de posibilitatea userului de a se autentifica la
serverul de ssh (metoda Lock & Key folosita de catre echipamentele Cisco);
Protocolul SSH ruleaza client server. Pe Linux serverul de ssh este sshd (ssh daemon), iar clientul ssh este
comanda ssh sau Putty (sudo apt-get install putty). Pe Windows cel mai folosit client ssh este Putty.
Nota
Pe Ubuntu serverul ssh nu este instalat by default.
Se instaleaza executand: sudo apt-get install ssh
Va porni de asemenea automat la butare.
Nota
Serveru ssh (sshd) asculta in mod default pe portul tcp/22. Fisierul de configurare al serverul ssh
(sshd) este /etc/sshd/sshd_config, iar al clientului (comanda ssh) este /etc/sshd/ssh_config).
Fisierul cu logurile serverului in care se pot observa incercarile de autentificare prin ssh precum si
posibilele erori este /var/log/auth.log
Exemplu
Exemple de conectare la un server ssh folosind clientul standard ssh (comanda ssh).
1. Conectare la serverul ssh cu ip-ul 192.168.0.1 care asculta pe portul standard 22. Autentificarea
clientului se realizeaza de catre server folosind username-ul care ruleaza comanda pe client.
Acelasi username trebuie sa existe si pe client si pe server.
ssh 192.168.0.1
2. Conectare la serverul ssh cu ip-ul 192.168.0.1 care asculta pe portul 2222 (portul standard a fost
modificat).
ssh -p 2222 192.168.0.1
3. Conectarea la serverul ssh cu ip-ul 192.168.0.1 care asculta pe portul 2222. Se autentifica userul
cmastud care trebuie sa existe pe server (nu si pe client, optional).
ssh -l cmastud -p 2222 192.168.0.1
scp (secure copy sau copy over ssh)
Se foloseste pentru copierea de fisiere in retea (LAN sau Internet). Fisierele se copiaza in mod securizat
folosind ssh. Intre cele 2 calculatoare (sursa si destinatie) trebuie sa existe o conexiune de retea tcp/ip
iar autentificarea prin ssh sa fie functionala.
Exemplu
1. Copiere fisier project.doc de pe calculatorul curent (cel de pe care se ruleaza comanda scp si
care este client ssh) pe calculatorul cu ip-ul 88.0.0.1 si care este server ssh si asculta pe portul
standard 22. Fisierul se copiaza in directorul remote de pe server /root
cmastud este userul cu care ne autentificam la serverul ssh (88.0.0.1).
scp project.doc cmastud@88.0.0.1:/root
2. In cazul copierii de directoare se adauga optiunea -r.
scp -r /home/documente/ cmastud@88.0.0.1:/home/documente_retea/
3. Optiunea -P se foloseste daca serverul asculta pe un alt port
scp -r -P 2288 /etc/ cmastud@88.0.0.1:/home/backup/
10 Diverse » 10.1 Managementul serviciilor si Procesul de Butare
Managementul serviciilor si Procesul de Butare
Linux Boot Process
O sarcina importanta a oricarui administrator de sistem este de a stabili ce servicii pornesc automat la
butare, ce servicii trebuie oprite etc.
Etapele butarii unui calculator care ruleaza Linux sunt urmatoarele:
1) BIOS executa POST (Power on Self Test) si conform cu configuratia sa (de unde este configurat sa
buteze: Hard Disk, CD-ROM, DVD-ROM etc) citeste MBR-ul care reprezinta primul sector al hard diskului
(primii 512 bytes).
2) In MBR (Master Boot Record - primul sector al Hard diskului) se gaseste un boot loader (GRUB sau
LILO) care incarca in memorie de pe disk, kernelul si initrd inainte sa monteze root file system.
Functionalitatea interna a lui GRUB permite sa citeasca de pe disk kernelul si initrd si sa le incarce in
memorie inainte sa monteze partitia pe care acestea se gasesc. Kernelul se decomprima si foloseste
modulele din initrd (monteaza initrd) pentru a buta de pe disk. Daca nu exista initrd functionalitatea pt.
a buta de pe hard disk trebuie sa fie compilata in kernel.
Nota
initrd reprezinta un RAMDISK
Fizic acesta este un fisier. Exemplu: /boot/initrd.img-2.6.22-14-server
initrd contine module necesare kernelului in prima faza a procesului de butare inainte sa monteze
root file system.
Exemplu: initrd ar putea contine un modul care reprezinta driver pentru SATA si care nu a fost
compilat in kernel. Kernelul are nevoie de acest driver pentru a putea monta hard diskul.
3) Primul program pe care kernelul il executa de pe disk este init (parintele tuturor proceselor).
Nota
Ubuntu nu mai foloseste initializarea clasica a sistemului folosind doar init ci foloseste si Upstart.
Detalii.
4) Se executa /etc/rc.d/rcS precum si toate scripturile din directorul /etc/rcS.d/
5) In functie de runlevelul in care intra sistemul (Ubuntu ruleaza in runlevelul 2) se executa /etc/rc*.d/*
* (asterix) reprezinta runlevelul in care intra sistemul. Poate fi 0,1,2,3,4,5 sau 6.
Exemplu:
Daca se intra in runlevel 2 (Ubuntu) se executa scripturile din /etc/rc2.d/
Daca se intra in runlevelul 5 (alte distributii precum Fedora) se executa scripturile din /etc/rc5.d/
Pentru fiecare serviciu exista in /etc/rc[0-6].d/ un fisier de forma SnrNumeServiciu si KnrNumeserviciu.
Exemplu: S10network si K10network (optional).
Fisierele care incep cu litera S se executa la intrarea in runlevelul respectiv iar cele care incep cu litera K
se executa la iesirea din runlevelul respectiv.
Ordinea de executie a fiecarui serviciu este importanta si se stabileste in functie de numarul care
urmeaza dupa litera S sau K.
Fisierele din /etc/rc[0-6].d/ sunt de fapt symlinkuri catre fisierele din /etc/init.d/ - directorul global cu
startup files. Fiecare fisier din /etc/init.d/ trebuie sa poata primi ca parametru start|stop|reload|restart.
Exemplu: executia fisierului /etc/rc3.d/S10network este echivalenta cu executia scriptului
/etc/init.d/network start.
Nota
rc = Runlevel Script / resource control
Managementul serviciilor
Pentru a stabili ce servicii pornesc la butare avem mai multe optiuni:
1) Varianta 1 (manuala)
a) se creaza un script in /etc/init.d/ care sa porneasca serviciul atunci cand primeste parametrul start si
sa-l opreasca atunci cand primeste parametrul stop.
b) se creaza un symlin in /etc/rc2.d/ catre /etc/init.d/nume_script. Acesta trebuie sa fie de forma
SnrNume. Exemplu: S99firewall
2) Varianta 2
Se foloseste comanda update-rc.d
Exemplu
1. Pornire serviciu ssh in mod default (cuvantul cheie default porneste serviciul in runlevel 2,3,4 si 5
si-l opreste in 0,1 si 6)
update-rc.d ssh defaults
2. Remove the symlink from /etc/rc[0-6]d/. Serviciul nu va mai porni in runlevelul specificat.
update-rc.d ssh remove
3. Stabilire runlevel explicit in care se porneste/opreste serviciul
update-rc.d ssh start 0123 stop 456
Nota: ssh este numele scriptului din /etc/init.d catre care se vor vrea symlink-urile
corespunzatoare.
Oprire/Pornire de servicii:
Pentru a opri/porni un serviciu exista in principiu 2 modalitati.
1. Folosind startup scripts si pasand argumentul start, stop sau restart.
Exemplu:
/etc/init.d/ssh start
/etc/init.d/network restart
2. Folosind comanda service
Exemplu:
service sendmail start
service apache2 stop
service ssh restart
Comanda service ruleaza scriptul pe care il primeste ca parametru ( Exemplu: sendmail) cu optiunile
aferente (start, stop etc). Scriptul trebuie sa se gaseasca in /etc/init.d/
Nota
/sbin/service este un script de shell
Daca nu dorim sa cream cate un script pentru fiecare serviciu putem adauga comenzi in fisierul
/etc/rc.local care este executat dupa terminarea tuturor celorlalte scripturi de initializare.
Trebuie sa existe un symlink catre el in /etc/rc[0-6].d/
10 Diverse » 10.2 Administrarea pachetelor software
Administrarea pachetelor software
10.2.1 deb & apt-get
10.2.2 rpm
Exista 2 posibilitati principale pentru managementul noilor programe (instalare/dezinstalare/update
etc).
1.Instalarea de programe folosind fisiere binare, care au fost deja compilate pentru o anumita distributie
si platforma hardware
2. Compilarea surselor respectivelor programe. Marea majoritate a programelor din Linux sunt
programate in C ( Exemplu: Kernelul, aproape toate serverele etc) si se compileaza folosind gcc (GNU C
Compiler)
Instalarea/dezinstalarea/update-ul de programe direct prin compilare este in general greoi fiindca nu
exista un management centralizat care sa tina evidenta fiecarui fisier cu care a venit programul, locatia
lui pe hard disk etc. Avantajele compilarii sunt in principal cresterea flexibilitatii (optiunile de instalare) si
performantei. Administratorul poate compila un server doar cu optiunile necesare task-ului sau si-l
poate optimiza pentru o anumita platforma.
Exista distributii de linux bazate pe compilare ( Exemplu: Gentoo, Slackware, LFS) precum si distributii
bazate integral pe fisiere binare deja compilate ( Exemplu: SuSE, RedHat, Fedora, CentOS, Debian,
Ubuntu/Kubuntu, Knoppix, Mandriva).
Nota
Compilarea de programe se poate realiza inclusiv pentru distributiile bazate pe fisiere binare, iar
cunoasterea modului de compilare a programelor pe Linux este OBLIGATORIE pentru orice Admin
chiar si daca se foloseste o distributie precum SuSe, RedHat sau Ubuntu.
Important
In Linux notiunea de instalare a unui program este echivalenta cu copierea fisierelor componente in
anumite locatii. Dezinstalarea unui program este echivalenta cu stergerea fisierelor care fac obiectul
programului respectiv.
Principalele formate binare sunt: RPM si DEB.
10 Diverse » 10.2 Administrarea pachetelor software » 10.2.1 deb & apt-get
deb & apt-get
Un format binar foarte des intalnit si folosit este deb. Acesta isi are originea in Debian si se foloseste
acum pe orice distributie Debian Based (Debian, Ubuntu, Kubuntu, Knoppix, Damm Small Linux, Mepis,
Linex, Xandros etc).
Nota
Numele Debian a fost dat de creatorul acestei distributii Ian Murdock si reprezinta o combinatie
intre numele sotiei sale Debra si numele sau Ian.
Un fisier deb este de fapt o arhiva Unix de tip ar care contine 2 alte arhive gzip sau bzip. Intr-una se
gasesc informatii metadata (versiune, release, dependinte etc) iar in cealalta binarele efective ale
programului care se gasesc in deb.
Nota
root este singurul user care poate instala/dezinstala/actualiza aplicatii. Comenzile specifice se
ruleaza de catre root (anterior s-a executat su) sau se ruleaza de catre un user neprivilegiat si sunt
prefixate cu sudo.
Programul folosit pentru instalarea, stergerea sau modificarea programelor instalate din deb-uri se
numeste dpkg. De multe ori acesta se foloseste cu ajutorul unui alt program numit apt. Synaptic este o
interfata grafica pentru apt. Pentru a instala synaptic (in cazul in care nu exista) se ruleaza: sudo apt-get
install synaptic
apt-get
apt-get este o aplicatie in linie de comanda folosita pentru managementul pachetelor deb si este
considerat user back-end tool pentru apt
Mod folosire:
apt-get [options] [command] [package ...]
Comenzi:
update = se foloseste pentru sincronizarea caracteristicilor pachetelor software instalate in sistem cum
ar fi versiunea acestora cu sursele acestora din repositoarele specificate in /etc/apt/sources.list . Se
recomanda rularea comenzii apt-get update inainte de rularea lui apt-get folosind optiunea upgrade. Cu
ajutorul acestei comenzi apt-get ia la cunostinta despre ultimele versiuni existente in repozitoare.
upgrade = se foloseste pentru instalarea automata a ultimei versiuni a tuturor pachetelor instalate in
sistem din repositoarele specificate in /etc/apt/sources.list. Pachetele sunt automat downloadate din
repositoare si upgradate la ultima versiune. NU se instaleaza pachete noi si nu se dezinstaleaza pachete
deja instalate.
dist-upgrade = pe langa procesul de upgrade, optiunea dist-upgrade are grija in mod inteligent si de
dependintele pachetelor care se upgradeaza.
install nume-pachet1 nume-pachet2 etc = se foloseste pentru instalarea de noi programe din
repozitoare impreuna cu dependintele necesare.
remove nume-pachet1 nume-pachet2 etc = se foloseste pentru dezinstalarea respectivelor pachete fara
a sterge si fisierele de configurare. Daca se doreste stergerea inclusiv a fisierelor de configurare se
foloseste optiunea purge.
check = reprezinta un tool de diagnostic folosit pentru update-ul cache-ului pachetelor precum si
verificarea dependintelor cu probleme
clean = sterge pachetele downloadate din repositor (cache-ul pachetelor) si care au fost sau nu deja
instalate.
Optiuni:
-m = ignora pachetele lipsa
-d = doar downloadeaza pachetele, dar nu le si instaleaza
-f = repara "broken dependencies"
Exemplu: apt-get -f install bind9
-y = se asuma raspunsul yes la orice intrebare. Folositor pentru upgrade automat.
-h = printeaza help-ul comenzii
-V = printeaza versiunile pachetelor care se instaleaza
Exemplu: apt-get -V install bind9
Nota
1. Daca se doreste generarea unei liste cu toate pachetele instalate in sistem se poate rula: dpkg --
get-selections > installed-software
2. Daca se doreste afisarea tuturor fisierelor continute intr-un pachet se ruleaza dpkg -L
NUME_PACHET.
Exemplu: dpkg -L coreutils
3. Daca dorim sa aflam din ce pachet face parte un fisier se foloseste optiunea -S a lui dpkg.
Exemplu: dpkg -S /bin/ls
4. Daca dorim sa instalam un pachet deb pe care-l avem local pe disk se ruleaza dpgk -i
NUME_PACKET.
10 Diverse » 10.2 Administrarea pachetelor software » 10.2.2 rpm
rpm
Nota
Toate exemplele si conceptele acestui curs au fost realizate si explicate pentru Ubuntu sau alte
distributii derivate din Debian. Informatiile din acest sub-capitol sunt folositoare persoanelor care
folosesc distributii bazate pe rpm-uri.
RPM reprezinta un acronim recursiv de la RPM Package Manager. Initial s-a numit Red Hat Package
Manager si a fost dezvoltat de firma RedHat.
RPM se refera la 2 aspecte:
1. Un format de fisier binar care reprezinta un program/aplicatie
2. O aplicatie care ruleaza in consola in modul text folosita pentru instalare, dezinstalare, update si
interogare a bazei de date cu toate programele RPM instalate.
RPM foloseste o baza de date care se gaseste in /var/lib/rpm. Este formata din fisierul Packages care
contine informatii de tip metadata despre rpm-urile instalate precum si alte fisiere folosite cu scop de
indexare.
Numele unui packet RPM este de cele mai multe ori conform unui "standard" si contine urmatoarele
informatii:
a) numele programului
b) versiunea programului
c) package release: identifica distributia pentru care a fost compilat (fc6, mdv, rhel4, suse100 etc)
d) arhitectura pentru care a fost compilat (i386, i686, athlon, noarch). noarch se refera la pachete care
nu sunt compilate pentru o arhitectura anume ( Exemplu: fonturi, sau alte elemente folosite de alte
aplicatii).
Exemplu: apache-1.3.33-6mdk.x86_64.rpm
lyx-1.4.3-3.fc4.i386.rpm
Un fisier rpm este format din urmatoarele componente:
1) Lead (identifica fisierul ca fiind rpm si contine headere absolute)
2) Semnatura digitala
3) Header (meta information - package name, version, file list, arhitecture)
4) arhiva gzip cu binarele programului
Distributiile de Linux care folosesc RPM sunt urmatoarele (lista incompleta):
RedHat Enterprise Linux
Fedora Core
Mandriva
CentOS
OpenSuSE
Yellow Dog (Fedora pentru PowerPC)
Turbo Linux
Comanda rpm
rpm OPTIONS package_name
Optiuni:
-i = install
-q =query
-e = erase
-F = freshen (upgrade doar daca o versiune mai veche exista deja)
-U = upgrade (instaleaza pachet daca pachetul nu exista sau upgrade pachet daca exista. Daca exista
versiunea mai veche este stearsa)
-v = verbose
-f file_name = query package owning file
-l = list files in package
--force = forteaza instalarea chiar daca nu sunt satisfacute dependintele
Exemplu
1. Afiseaza toate fisierele documentatie ale pachetului samba
rpm -qd samba
2. Afiseaza numele pachetului din care face parte un fisier din sistem
rpm -qf /usr/bin/clamav
3. Afiseaza toate fisierele care fac parte dintr-un pachet
rpm -ql tightvnc
4. Reinitializeaza baza de date daca aceasta se corupe
rpm --rebuilddb
5. Afiseaza toate RPM-urile instalate in sistem
rpm -qa
6. Instalare programe din rpm-uri locale sau direct de pe Internet
rpm -ivh httpd-1.3.3.fc4.rpm
rpm -ivh ftp://rpmfind.net/linux/fedora/core/4/i386/os/Fedora/RPMS/gftp-2.0.18-2.i386.rpm
top related