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.
Terminal windows, terminal emulator sau terminal virtual reprezinta o consola pornita din modul 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
|
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
Sistemul de fisiere
2.6.1 Prezentare generala
2.6.2 FHS
2.6.3 Structura sistemului de fisiere
2.6.4 Structura unui fisier
2.6.5 Tipuri de fisiere
2.6.6 Links
2.6.7 Piping & Redirectare
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 ext3 - Third Extended File System (default pt. RedHat, Fedora, Ubuntu) sau ReiserFS (default pt. 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/hda1 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 "/".
2 Capitolul 2 - Structura Linux » 2.6 Sistemul de fisiere » 2.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 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.
Nota
|
Partitia swap nu are mount point
|
Resurse
FSH - PDF Download
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
|
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
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
|
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. 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. Al 16-lea este "." care se gaseste in orice director, iar al 17-lea este ".." din fiecare subdirector al sau..
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
|
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
|
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.
|
Dostları ilə paylaş: |