|
Linux - Operatii de baza
Un cont reprezinta toate fisierele, resursele si informatiile care apartin unui utilizator.
Crearea unui utilizator
Cele mai multe distributii Linux vin cu un program pentru crearea conturilor. Exista cateva astfel de programe disponibile. Doua alternative din linie de comanda sunt adduser si useradd; poate exista, de asemenea si instrumente din interfata gragica. Fie ca este vorba de un program fie ca este o interfata grafica sunt putine lucruri de facut.
/etc/passwd si alte fisiere informative
Baza de date elementara din Unix este un fisier text, /etc/passwd (numit fisierul parole), care listeaza toti utilizatorii vazilizi impreuna cu informatiile asociate lor. Fisierul are cate o linie pentru fiecare nume de utilizator si este impartit in sapte campuri:
1. Utilizator.
2. Parola, in forma incriptata.
3. ID numeric pentru utilizator.
4. ID numeric pentru grup.
5. Numele intreg si alte descrieri ale contului.
6. directorul home.
7. Shell-ul de conectare.
Crearea unui utilizator manual
Pentru a crea un cont de utilizator manual, parcurgeti urmatorii pasi:
Editati /etc/passwd cu vipw sau pico si adugati o linie noua pentru contul nou. Fiti atenti la sintaxa.
In mod similar editati /etc/group, daca aveti nevoie sa creati si un grup nou.
Creati directorul principal (home) al utilizatorului folosind mkdir.
Copiati fisierele din /etc/skel in noul director home.
Stabiliti proprietarul si permisiunile cu comenzile chown si chmod. Optiunea
-R este foarte utila. Drepturile corecte variaza putin, dar in general daca faceti ca in exemplul urmator totul va fi OK:
cd /home/newusername
chown -R username.group .
chmod -R go=u,go-w .
chmod go= .
Stabiliti parola cu comanda passwd.
Dupa ce stabiliti parola contul va fi functional. Nu ar trebui sa stabiliti parola pana cand nu ati ajuns la final, altfel utilizatorul ar putea sa se conecteze inainte ca dumneavoastra sa fi terminat de copiat fisierele.
Mai usor
Exista o serie de comenzi care pot sa scrie/citeasca fisiere dar numai utilizatorul root are drepturile respective; insa sunt utilizate si de alti utilizatori.
Un exemplu il reprezinta comanda 'passwd' folosita pentru a schimba parola.
Daca va uitati la drepturile existente asupra fisierului password veti vedea probabil ceva asemanator cu FIG 5.1:
FIG 5.1. Drepturile asupra fisierului /etc/passwd
Cand utilizatorul X decide sa-si modifice parola el doar scrie comanda 'passwd', apoi i se cere sa scrie vechea parola o data (pentru a fi sigur ca persoana care modifica parola este utilizatorul insasi si nu o alta persoana care profita de conexiunea uitata deschisa a cuiva .) si apoi cere de doua ori parola noua)(FIG 5.2).
FIG 5.2. Comanda passwd
In exemplul de mai sus am introdus doua erori pentru a arata faptul ca sistemul verifica existenta unor parole triviale. Acest lucru nu se intampla la toate distributiile Linux!
Cand tastati parola nu vedeti ce ati tastat asa ca daca nu sunteti siguri incercati combinatia de taste CTRL+U pentru a sterge tot continutul liniei si reintroduceti parola.
Alegerea parolelor: este complet contraindicat alegerea parolei ca fiind numele utilizatorului, numele sotului/sotiei, cainelui, sau alte nume familiare, pe motiv ca sunt foarte usor de ghicit!
O parola buna trebuie sa aiba cat mai multe litere, cifre, alte caractere ca '%$@#_*&', si, pe cat posibil sa nu fie un cuvant uzual! Pe de alta parte trebuie sa fie usor de tinut minte, deci trebuie facut un compromis.
Exemple de parole bune: 'to1po2gan%', '(min*max)=', 'pfdicdp' (Parola Formata Din Initialele Cuvintelor Dintr-o Propozitie), etc .
Noua parola este apoi scrisa in fisierul '/etc/passwd".
Deci, cum este posibil ca fisierul '/etc/passwd', in care poate scrie doar utilizatorul root, sa fie completat de un simplu utilizator care doreste sa-si modifice parola?
Acest lucru este posibil datorita asa-numitului bit UID.
Cu alte cuvinte, acest bit ofera posibilitatea de a arata ca alt utilizator in
timp ce executi un program.
Remarcati faptul ca doar utilizatorul root are dreptul de a scrie in fisierul
/etc/passwd. Acum sa ne uitam la permisiunile asupra programului passwd.
Observati ca exista un 's' acolo unde ne
asteptam sa fie un 'x' pentru a indica dreptul de executie pemtru
proprietar. 'S' indica faptul ca bitul set UID este atribuit.
Avand atribuit bitul UID, atunci cand executati programul passwd ca utilizator
obisnuit, programul va fi executat ca si cu m ati fi administrator.
O treba a administratorilor sistemului Linux este aceea de a sterge sau de a adauga utilizatori pentru sistemul respectiv. Procedura este insa util de stiut de toata lumea.
Exista doua modalitati pentru a face acest lucru.
Puteti edita directfisierele in care este stocata informatia despre utilizatori (nu prea comfortabil !)
Puteti utiliza scripturi care sa va ceara anumiti parametri si apoi sa faceti toate celelalte lucruri pe care doriti.
De obicei aceste scripturi sunt 'useradd' si 'adduser'. Prezenta lor depinde de distributia Linux. De asemenea si felul in care ele lucreaza.
De exemplu, in Slackware-Linux comanda 'useradd' este diferita de comanda 'adduser', in timp ce in RedHat-Linux este acelasi lucru.
Mai intai sa ne uitam la continutul fisierului '/etc/passwd' (FIG 5.3):
FIG 5.3. Fisierul /etc/passwd
Exista cate o linie pentru fiecare utilizator, in care campurile sunt despartite de ':' .
Iata sintaxa pentru o linie :
UserName CriptedPassword UserID GroupID GeneralInfo HomeDirectory Shell
Este un sir de caractere unic, care identifica, defineste contul. Pentru conturile personale este asemenea cu numele folosit la login.
Este reprezentarea codata a parolei utilizatorului. Acest camp este stabilit folosind programul 'passwd'. Foloseste o schema de codare dificila dar nu imposibil de spart. Daca primul caracter din fisierul passwd este '*' (asterisk), atunci contul este inactiv iar utilizatorul cu numele respectiv nu se poate conecta.
Exemplu
bill: *: 150: 100: Bill Anderson-Phone 156789: /home/bill: /bin/bashEste un numar intreg pe care sistemul il foloseste pentru a identifica acel cont.
Este un numar intreg care se refera la grupul implicit al utilizatorului (vezi /etc/group)
Contine informatii aditionale despre utilizator, cum ar fi: numele real, alte informatii optionale ca numar de telefon, adresa, etc.
Este directorul utilizatorului, pentru uzul personal. Exista un simbol care face referire la el : '~'.
Este numele programului care ruleaza atunci cand utilizatorul s-a conectat la sistem. In cele mai multe cazuri este data toata calea, cum ar fi '/bin/bash'.
Exemplu
UserName
Antony
Cripted Password
xtrLYQ7BtNqgQ
User ID
502
Group ID
502
General info
not specified
Home Directory
/home/Antony
Shell
/bin/bash
Acum, adaugam doi noi utilizatori.
Acesta este structura directorului '/home' inainte de a adauga utilizatorii.
FIG 5.4. structura directorului /home
Daca nu va aduceti aminte cum se foloseste comanda 'adduser', puteti folosi aplicatia 'man' (sau 'Xman' daca folositi XWindows) precum 'man adduser'.
Alta soluti este de a tasta comanda fara parametrii:
FIG 5.5. Comanda useradd
Care este rezultatul tastarii liniilor urmatoare ?
adduser
-m -g users -p '' Ronald
adduser -m -g users -p '' -d /home/no-default-John John
Primul 'adduser -m -g users -p '' Ronald' inseamna:
adduser
Adauga un utilizator
-m
Creaza directorul home al utilizatorului daca nu exista
-g users
Atribuie utilizatorul grupului de utilizatori 'users'
-p ''
Fara parola (utilizatorul poate intra fara parola )
Ronald
Acesta este numele utilizatorului, UserName (Login), pentru noul utilizator
Observati ca unii parametrii ca UserID, data expirarii , .. , nu au fost specificate astfel incat sistemul a pus valori implicite pentru ei.
Al doile exemplu 'adduser -m -g users -p '' -d /home/no-default-John John':
adduser
Adauga un utilizator
-m
Creaza directorul home daca nu exista
-g users
Atribuie utilizatorul grupului de utilizatori 'users'
-p ''
Fara parola (utilizatorul poate intra fara parola )
-d /home/no-default-John
Numele directorului home este '/home/no-default-John'
John
Acesta este numele utilizatorului, UserName (Login), pentru noul utilizator
Asa cum se vede, avem un nou nume pentru directorul home al acestui utilizator. Implicit ar fi fost John, insa noi l-am modificat.
FIG 5.6. Continutul directorului /home
Fisierul de configurare principal pentru manipularea conturilor este '/etc/passwd', asa ca sa vedem ce s-a intamplat cu el:
FIG 5.7. Fisierul /etc/passwd
Acesta este fisierul '/etc/group', in care puteti vede un grup 'users' cu codul '100', exact cel prezent in '/etc/passwd' pentru noii utilizatori Ronald si John.
FIG 5.8. Fisierul /etc/group
Consola sistemului este alcatuita din tastatura si monitor (care sunt conectate direct la calculator). Totusi este posibil pentru un utilizator sa foloseasca mai multe console virtuale, putand deschide astfel mai multe sesiuni de lucru simultan! Pentru aceasta apasati tastele Alt-F2, iar la promptul login, introduceti numele si parola dvs. In acest moment ati deschis inca o sesiune de lucru !
Apasand Alt-F1, reveniti inapoi la prima sesiune. De regula sunt activate 7-8 console virtuale, dar pot fi activate mult mai multe 12, 24, sau chiar mai multe. Pentru a comuta pe consola 5 (de exemplu) se apasa combinatia de taste Alt-F5, s.a.m.d.. Nu uitati sa faceti 'logout' din fiecare la incheierea sesiunii de lucru.
In acest scop comanda 'w' poate fi utila, furnizand informatii despre consolele virtuale folosite.
In exemplul de mai jos se poate observa ca utilizatorul gxg foloseste consolele 1 si 2 (corespunzatoare combinatiilor Alt-F1 si Alt-F2), utilizatorul root consola 3 (Alt-F3), utilizatorul stud foloseste consola 7 (Alt-F7), iar utilizatorul stud2 este conectat la calculator prin retea.
Consola 1 se numeste 'tty1', consola 2 'tty2', s.a.m.d..
[stud@x stud]$ w
2:53pm up 24 min, 4 users, load average: 1.00, 1.01, 0.77
USER TTYFROMLOGIN@IDLEJCPUPCPU WHAT
gxgtty1 2:30pm 2:340.15s 0.15s -bash
gxgtty2 2:30pm 14:341.98s 1.74s /usr/bin/mc -P
root tty3 2:48pm 4:050.27s 0.27s -bash
stud tty7 2:50pm 0.00s 0.35s 0.06s w
stud2 ttyp1 x.ro 2:55pm 0.00s 0.24s 0.06s -bash
[stud@x stud]$
Iata un exemplu de structura arborescenta de directoare si fisiere prezentate intr-o alta forma (Lucrul cu directoarele si fisierele este detaliat in capitolele urmatoare).
|-- buli
|-- ftp
||-- bin
||-- etc
||-- lib
|`-- pub
|-- gxg
||-- nsmail
|`-- rc5
|-- httpd
||-- cgi-bin
||-- html
||`-- manual
|| |-- images
|| |-- misc
|| |-- mod
|| `-- vhosts
|`-- icons
|-- samba
`-- stud
Directorul 'ftp' este directorul parinte al directoarelor 'bin','etc', 'lib', 'pub', iar directorul 'pub' este subdirectorul lui 'ftp'.
Numele complet al unui subdirector poate fi obtinut adaugand numele directorului parinte la numele subdirectorului si punand separatorul '/'.
[gxg@x /]$ ls
Office50 c etclost+found root usr
bincdrom home mntsbin var
boot devlibproc tmpw95
Obtinerea unor informatii detaliate referitoare la continutul directoarelor se face utilizand otiunea -l (optiunea -a ofera, in plus si informatii despre fisierele ascunse).
[gxg@x /]$ ls -l
total 84
drwxr-xr-x2 root root1024 Jan 7 08:58 Office50
drwxr-xr-x2 root root2048 Jan 7 12:54 bin
drwxr-xr-x2 root root1024 Jan 10 18:42 boot
lrwxrwxrwx1 root root4 Jan 8 20:41 c -> /w95
drwxr-xr-x2 root root1024 Jan 6 03:25 cdrom
drwxr-xr-x3 root root 21504 Jan 10 16:43 dev
drwxr-xr-x 26 root root3072 Jan 10 16:43 etc
drwxr-xr-x8 root root1024 Jan 10 14:41 home
drwxr-xr-x4 root root2048 Jan 6 05:10 lib
drwxr-xr-x2 root root 12288 Jan 6 05:00 lost+found
drwxr-xr-x4 root root1024 Jan 6 05:01 mnt
dr-xr-xr-x5 root root0 Jan 10 18:42 proc
drwxr-xr-x 13 root root1024 Jan 10 16:49 root
drwxr-xr-x3 root root2048 Jan 7 09:09 sbin
drwxrwxrwt3 root root1024 Jan 10 18:44 tmp
drwxr-xr-x 20 root root1024 Jan 6 05:06 usr
drwxr-xr-x 16 root root1024 Jan 6 05:14 var
drwxr-xr-x 16 root root 21504 Jan 1 1970 w95
[gxg@x /]$
Documentatie si manual. Comanda man.
Una dintre cele mai importante facilitati in Linux este manualul on-line!
Astfel aproape fiecare comanda Linux este insotita de manual!
Manualul poate fi accesat folosind comanda man, in felul urmator:
Exemplu:
[gxg@x gxg]$ man passwd
Formatting page, please wait
PASSWD(1) PAM only applications PASSWD(1)
NAME
passwd - update a user's authentication tokens(s)
SYNOPSIS
passwd [-u] [username]
DESCRIPTION
Passwd is used to update a user's authentication token(s).
Only the superuser may update another user's password by
supplying a username. The option, -u, is used to indicate
that the update should only be for expired authentication
tokens (passwords); the user wishes to keep their non-
expired tokens as before.
Passwd is configured to work through the Linux-PAM API.
Essentially, it initializes itself as a 'passwd' service
with Linux-PAM and utilizes configured password modules to
authenticate and then update a user's password.
A simple entry in the Linux-PAM configuration file for
this service would be:
#
# passwd service entry that does strength checking of
# a proposed password before updating it.
#
passwd password requisite pam_cracklib.so retry=3
passwd password required pam_pwdb.so use_authtok
#
Note, other module-types are not required for this appli-
cation to function correctly.
EXIT CODE
On successful completion of its task, passwd will complete
with exit code 0. An exit code of 1 indicates an error
occurred.Textual errors are written to the standard
error stream.
CONFORMING TO
Linux-PAM (Pluggable Authentication modules for Linux).
FILES
/etc/pam.conf - the Linux-PAM configuration file
BUGS
None known.
SEE ALSO
pam(8), and pam_chauthok(2).
For more complete information on how to configure this
application with Linux-PAM, see the Linux-PAM System
Administrators' Guide at
<http://parc.power.net/morgan/Linux-PAM/index.html>
SimplePAMApps 0.501996 Dec 14 1
(END)
Apasand sagetile de la tastatura puteti vedea defiland pagina (in cazul in care este mai mare decat ecranul). Pentru a termina programul man se apasa tasta q.
Chiar si comanda man are manual! Acesta poate fi accesat tastand la prompt 'man man' (adica manualul comenzii man).
Exemplu:
[gxg@x gxg]$ man man
Formatting page, please wait
man(1) man(1)
NAME
man - format and display the on-line manual pages
manpath - determine user's search path for man pages
SYNOPSIS
man [-acdfhkKtwW] [-m system] [-p string] [-C config_file]
[-M path] [-P pager] [-S section_list] [section] name
DESCRIPTION
man formats and displays the on-line manual pages. This
version knows about the MANPATH and (MAN)PAGER environment
variables, so you can have your own set(s) of personal man
pages and choose whatever program you like
Alte comenzi asemanatoare si foarte utile sunt comenzile whatis si apropos:
Pornirea (bootarea)
Probabil multi dintre cei care utilizeaza Linuxul sunt indragostiti de felul in care are loc pornirea sistemului. Multi dintre noi s-au plictisit privind la ecranele colorate cu logo-uri ale Windows-ului in loc sa afle ce se intampla in realitate. Daca un sistem Windows crapa trebuie sa te transformi in Sherlock Holmes si sa investighezi ce s-a intamplat. Cand Linux-ul nu reuseste sa porneasca fara probleme utilizatorul are foarte multe sanse sa descopere ce s-a intamplat doar privind ecranele ce se desfasoara la incarcarea sistemului, deoarece sunt afisate virtual toate sarcinile pe care le realizeaza acesta. Acelasi lucru se intampla si la oprirea sistemului.
Nucleul (kernelul) Red Hat Linux, inima sistemului de operare, este de obicei pastrat intr-un fisier compresat. Cand kernel-ul este pornit de catre managerul de boot (LILO, GRUB), se decompreseaza, initializeaza sistemul video si incepe verificarea celorlalte componente hardware atasate calculatorului. In timp ce descopera discurile hard, driverele floppy, placile de retea si asa mai departe, sunt incarcate si modulele driver corespunzatoare. Pe parcursul acestui proces sunt afisate pe ecran mesaje in format text. Figurile urmatoare prezinta o parte din aceste mesaje.
FIG 5.9. Mesaje la consola in timpul procesului de incarcare
FIG 5.10. Mesaje la consola in timpul procesului de incarcare
De la consola, in timpul acestui proces, puteti apasa combinatia de taste Shift + PageUp pentru a derula inapoi mesajele. Puteti sa vedeti mesajele afisate in timpul procesului de bootare ruland in orice moment programul dmesg. Fisierele /var/log/messages vor contine, de asemenea, multe mesaje din procesul de bootare.
In acest moment, kernelul va monta sistemul de fisiere radacina (/) ca read-only (doar cu drepturi de citire) si va verifica sistemul de fisiere. Daca totul este gasit in regula atunci sistemul de fisiere radacina va fi montat cu drepturi read/write (citire/scriere).
Daca apar probleme si kernel-ul nu reuseste sa monteze partitia radacina sau sunt descoperite probleme grave, kernelul va intra in panica si sistemul se va opri. Daca discul devine corupt din anumite motive, kernel-ul va asigura o optiune de rulare a unui program de verificare a sistemului de fisiere cum ar fi fsck.ext2 prin intermediul unui shell restrans.
Odata ce sistemul radacina de fisiere a fost montat, kernel-ul porneste un program numit init. Acest program porneste toate celelalte programe. Odata ce init a terminat de rulat toate programele necesare, sistemul poate fi considerat functional iar procesul de incarcare terminat.
Ceea ce ruleaza init ca parte a procesului de bootare este foarte personalizabil.
In timpul procesului de incarcare a sistemului, init va rula mai intai scriptul rc.sysinit si apoi scriptul corespunzator nivelului implicit de rulare. Nivelul de rulare implicit este stabilit in /etc/inittab utilizand o linie precum urmatoarea:
init:3:initdefault:
In acest caz nivelul implicit este stabilit nivelul 3. Aceasta inseamna ca init va rula scriptul necesar pentru a pune sistemul in modul de lucru multiutilizator.
Iata in continuare exemplificate utilizarile nivelelor de lucru (run level), exemplu obtinut prin editarea fisierului /etc/inittab.
FIG 5.11. Editarea fisierului /etc/inittab (runlevel-urile)
Puteti executa manual init manual si sa ii spuneti sa schimbe nivelul de lucru cu un nivel dorit de dumneavoastra. De exemplu,
init 0
va cere programului init sa schimbe nivelul curent cu nivelul 0. Cu alte cuvinte, sistemul va fi stins. Daca va aflati in modul multiuser (3), comanda precedenta nu este foarte recomandabila deoarece nu instiinteaza utilizatorii conectati la sistem ca acesta se va opri.
In mod obisnuit este utilizata comanda shutdown pentru a opri sistemul. Aceasta comanda trimite tuturor utilizatorilor conectati la sistem un mesaj de avertizare cu privire la modificarea nivelului de lucru. Aceasta comanda ofera si posibilitatea programarii in timp a opririi.
Comanda shutdown cere programului init sa schimbe nivelul curent al sistemului fie cu cel de oprire (halt=0) fie cu cel de repornire (reboot=6). De exemplu,
shutdown -h now
Aceasta comanda va cere init sa schimbe nivelul cu 0 (oprirea sistemului) imediat.
Asa cum am spus comanda shutdown permite programarea opririi sistemului la un moment viitor. De exemplu,
shutdown +10
Va programa oprirea sistemului peste exact 10 minute dupa ce comanda a fost introdusa de la tastaura. Daca doriti sa anulati oprirea programata puteti folosi comanda shutdown impreuna cu optiunea -c. De exemplu,
shutdown -c
va anula orice programare de oprire a sistemului.
Puteti executa manual init pentru a reporni calculatorul. De exemplu,
init 6
Daca va aflati in modul de lucru multiuser veti observa faptul ca aceasta comanda nu instiinteaza utilizatorii sistemului despre eveniment, astfel incat ar fi de preferat sa utilizati comenzile shutdown sau reboot pentru a ceasta. De exemplu,
shutdown -r +10
Acesta comanda va reporni sistemul in 10 minute. Toti utilizatorii vor primi un mesaj de instiintare. Acest lucru le va permite sa-si termine munca si sa-si salveze fisierele daca este cazul.
Pentru a reporni sistemul imediat puteti folosi:
shutdown -r now
sau
reboot
Sintaxa se refera la structura comenzii si specifica optiunile si argumentele permise. Forma generala a unei comenzi Linux este:
$ comanda [-optiune(i)] [argument(e)
Obs.: Ce este in paranteza inseamna elemente optionale, adica nu sunt intotdeauna necesare.
Comanda: Program executabil (specifica ce doresti sa faca sistemul)
Optiune(i): Modifica executabilul (cum doresti sa ruleze sistemul comanda)
Argument: Fisier sau director, incluzand calea sau un text. Daca nu este prevazuta calea atunci sistemul de operare va utiliza directorul curent.
Trebuie utilizat un spatiu ca delimitator intre fiecare parte a comenzii introduse. Comenzile in Linux sunt ntotdeauna scrise cu litere mic (lower case). Optiunile sunt de obicei formate dintr-o singura litera precedata de o liniuta (semnul minus). Optiunile multiple pot fi combinate utilizand doar o singura liniuta. Optiunile pot fi scrise cu litere mari sau litere mici in functie de ceea ce se doreste sa se faca.
Lansarea in executie a unui program
Promtul '$' arata ca sistemul este pregatit sa accepte comenzi de la utilizator.
Pentru a lansa in executie un program trebuie sa se tasetze numele fisierului care contine codul executabil.
Exemplu:
[gxg@x /]$ pine
Informatiile din paranteza au urmatoarea semnificatie:
gxg@x inseamna utilizatorul 'gxg' inregistrat la calculatorul cu numele 'x'
'/' inseamna directorul curent (in acest caz este radacina)
Toate aceste informatii impreuna cu semnul $ formeaza promptul.
La unele sisteme, el poate avea mici modificari! Astfel, inainte de semnul '$' poate aparea numai numele calculatorului, fara numele utilizatorului, dar acestea sunt setari care se pot schimba.
Aceasta comanda este echivalenta cu :
[gxg@x /]$ /usr/bin/pine
/usr/bin/pine reprezinta calea completa spre fisierul (executabil) pine. In exemplul precedent este optionala deoarece sistemul cauta fisierul 'pine' intr-o lista de directoare (specificate dinainte desigur), printre care si '/usr/bin'.
Exista si comenzi care trebuiesc lansate specificand (numai) numele complet!
In caz contrar pe ecran apare mesajul de eroare 'command not found', cu alte cuvinte sistemul nu stie unde este programul respectiv.
Exemplu:
[gxg@x /]$ /sbin/repquota
Usage:
repquota [-v] [-g] [-u] -a
repquota [-v] [-g] [-u] filesys
[gxg@x /]$ repquota
bash: repquota: command not found
De regula principalele comenzi folosite in Linux sunt puse in directorul '/bin' sau '/usr/bin', iar sistemul este configurat sa caute aceste comenzi in directoarele amintite.
Acest lucru este foarte convenabil, necesitand efortul minim din partea utilizatorului.
Un alt mod interesant de a ajuta utilizatorul este tasta 'Tab'!
Tastati cateva caractere dintr-o comanda si apoi apasati tasta 'Tab'. Sistemul va completa pentru dumneavoastra numele comenzii!
In cazul in care incep mai multe comenzi cu caracterele precizate, ve-ti auzi un bip, iar daca mai apasati inca o data veti vedea pe ecran toate posibilitatile. Exersand, veti observa ca aceasta tasta 'Tab' este rapida, si foarte utila in cazurile in care nu va amintiti exact unele comenzi.
Exemplu:
[gxg@x bin]$ ps2
ps2ascii ps2epsips2pdf
[gxg@x bin]$ le
lesslessecho lesskeylet lex
[gxg@x bin]$
Redirectarea iesirii unei comenzi
In unele cazuri este de dorit ca informatia produsa de o comanda (afisata pe ecran) sa fie directata intr-un fisier. Pentru aceasta, la sfarsitul comenzii adaugati semnul '>' urmat de numele fisierului care va fi creat si va contine aceasta informatie. Pe ecran nu va mai fi afisata aceasta informatie!
Atentie: Daca redirectati output-ul unei comenzi intr-un fisier care deja exista, tot continutul lui va fi suprascris!
Exemplu:
gxg@x gxg]$ ls -l > ls.txt
gxg@x gxg]$
Lansarea in background a unui program
Datorita posibilitatii de a lucra cu mai multi utilizatori deodata, sistemul poarta denumirea de "sistem multiuser".
Sistemul de operare Linux este si un sistem multitasking, ceea ce inseamna ca mai multe programe (procese) pot rula simultan.
Acest sistem de procese numit multitasking este utilizat pentru a aloca timpul de lucru al procesorului mai multor utilizatori in acelasi timp. In realitate nu este vorba de procese care se ruleaza in acelasi timp ci unele dupa altele la intervale de timp de ordinul milisecundelor.
Sistemul de operare aloca timpul in asa fel incat sa lase impresia de continuitate pentru fiecare utilizator. In timp ce unul dintre acestia lucreaza la terminalul sau el imparte cu ceilalti resursele de calcul.
Exista doua moduri de a lansa in executie un program: foreground (in fata) si background (in spate). Modul foreground este asociat cu programele interactive, care necesita interventia utilizatorului (de la tastatura) si ii transmite informatii pe monitor. De regula, programele lansate de utilizator sunt lansate in modul acesta.
Opus modului foreground, modul background este asociat de regula cu acele programe care nu necesita interventia utilizatorului in timpul desfasurarii lor. Totusi orice program poate fi lansat in executie in fiecare mod.
Un program se lanseaza in backgroung adaugand semnul '&' la sfarsitul comenzii.
Exemple de programe care pot fi lansate in foreground sau background
Programul de posta electronica 'pine' este un program care prezinta meniuri utilizatorului, acesta putand alege intre a citi posta primita, a trimite un nou e-mail, a tipari un mesaj, etc. El este exemplul ideal de program care ruleaza in foreground.
Programul care primeste posta electronica din retea si o distribuie fiecarui utilizator este un proces care ruleaza in background.
Un program poate fi lansat in background in felul urmator:
Exemplu:
[gxg@x /]$ tar -zcf ~/test.tgz /usr/doc/* &
[1] 1119
[gxg@x /]$
Avantajul lansarii unui program in background este posibilitatea utilizarii calculatorului si in timp ce procesul respectiv ruleaza. In exemplul precedent am folosit comanda tar (utila pentru arhivare/dezarhivarea fisierelor) ('-zcf ~/test.tgz /usr/doc/*' sunt parametrii comenzii 'tar' iar semnul '&' semnifica lansarea in background).
Sistemul raspunde '[1] 1119' si apoi afiseaza promptul asteptand alta comanda (in timp ce prima ruleaza!) ([1] inseamna ca este primul proces lansat in background iar 1119 este identificatorul de proces).
Manipularea proceselor. Comenzile 'jobs', 'fg', 'bg', 'ps', 'kill'
Asupra unui proces, odata pornit, se pot efectua urmatoarele operatii:
Terminarea
Suspendarea
Reluarea unui proces suspendat
Mutarea in background
Aducerea in foreground
Listarea proceselor
Comanda jobs va arata programele lansate in background de la terminalul curent.
[gxg@x /]$ jobs
[1]- Running yes >/dev/null & (wd: ~)
[2]+ Running tar -zcf ~/test2.tgz usr/doc/* &
[gxg@x /]$
Pentru a vedea procesele pornite si de la alte terminale puteti folosi comanda ps: Comanda 'ps' (prescurtare de la Processes Status) este mai tare decat 'jobs'. Pentru manipularea unui proces este necesara cunoasterea identificatorului procesului (PID) furnizat de aceasta comanda.
[gxg@x gxg]$ ps
PID TTY STAT TIME COMMAND
2871 S 0:00 -bash
2882 S 0:00 -bash
3292 S 0:00 /usr/bin/mc -P
331 p0 S 0:00 bash -rcfile .bashrc
3351 R 0:00 ps
[gxg@x gxg]$
Terminarea
In unele sitatii este de dorit oprirea fortata a proceselor inainte de terminarea lor fireasca. Dupa terminarea procesului memoria ocupata se elibereaza. Pentru aceasta se foloseste comanda 'kill'.
[gxg@x gxg]$ ps
PID TTY STAT TIME COMMAND
2871 S 0:00 -bash
2882 S 0:00 -bash
2893 S 0:00 -bash
3292 S 0:01 /usr/bin/mc -P
331 p0 S 0:00 bash -rcfile .bashrc
3481 S 0:01 top
3623 R 0:00 ps
[gxg@x gxg]$ kill 348
[gxg@x gxg]$ ps
PID TTY STAT TIME COMMAND
2871 S 0:00 -bash
2882 S 0:00 -bash
2893 S 0:00 -bash
3292 S 0:01 /usr/bin/mc -P
331 p0 S 0:00 bash -rcfile .bashrc
3633 R 0:00 ps
[gxg@x gxg]$
Daca programul este in foreground (accepta comenzi de la tastatura), atunci el (de regula) se poate opri folosind combinatia de taste Control-C. Cele doua metode sunt echivalente pentru ca in fiecare caz sistemul trimite procesului respectiv semnalul 'TERM' pentru incheierea programului.
Suspendarea
Suspendarea unui proces inseamna oprirea lui temporara, cu posibilitatea continuarii rularii sale. Spre deosebire de terminare, programul 'ingheata' in starea sa la momentul suspendarii, iar memoria ocupata cu acest proces NU este eliberata.
Pentru suspendarea unui program care ruleaza in foreground se poate apasa Control-Z. Daca programul ruleaza in background, pentru stoparea sa trebuie data comanda 'kill' cu parametrul '-STOP'
$ kill -STOP 435
435 reprezinta identificatorul procesului care se doreste a fi stopat.
Acest identificator il puteti afla folosind comanda 'ps'
Reluarea unui proces suspendat
In mod analog cu comenzile anterioare, 'kill -CONT' permite continuarea unui proces suspendat. Aceasta continuare se va face in background. Doua comenzi utile sunt 'fg' si 'bg': Comanda 'fg' continua in foreground un proces intrerupt, iar comanda 'bg' in background.
Aducerea unui proces in foreground
Daca procesul este stopat sau ruleaza in background, aducerea lui in foreground se face folosind comanda 'fg'. Daca sunt mai mult de 2 procese in aceasta stare, comanda 'fg' (sau 'bg') trebuie urmata de un numar in felul urmator:
[gxg@x gxg]$ jobs
[1]Stopped yes
[2]- Stopped yes
[3]+ Stopped grep k
[gxg@x gxg]$ fg 3
grep k
(Ctrl+Z)
[3]+ Stopped grep k
[gxg@x gxg]$
Dupa cum se vede din exemplul anterior, procesele sunt numerotate in ordine crescatoare, iar numarul corespunzator fiecarui proces il putem afla folosind comanda 'jobs'. Acest numar este diferit de PID (identificatorul procesului) aflat prin comanda 'ps' (Processes Status).
Mutarea unui proces in background
Pentru a muta un proces (care ruleaza in foreground) in background, se poate proceda in felul urmator: apasati Control-Z pentru a opri procesul. In acest moment procesul este suspendat. Tastati comanda 'bg' pentru a continua in background procesul stopat. Pentru aducerea lui in foregroung, tastati comanda 'fg'.