ROWAREZ
rowarez hacking forum
Lista Forumurilor Pe Tematici
ROWAREZ | Reguli | Inregistrare | Login

POZE ROWAREZ

Nu sunteti logat.
Nou pe simpatie:
cristina25
Femeie
24 ani
Cluj
cauta Barbat
24 - 58 ani
ROWAREZ / Tutoriale / Sistemul de operare UNIX Moderat de mod
Autor
Mesaj Pagini: 1
Gamer
Administrator

Din: Transilvania
Inregistrat: acum 14 ani
Postari: 202
Cuvânt înainte

Având o istorie de peste 30 de ani, sistemul de operare UNIX s-a impus pe piaţa sistemelor de operare de reţea ca un sistem robust, fiabil, portabil, capabil să ruleze pe cele mai variate arhitecturi hardware.
Conform opiniilor specialiştilor în domeniu, UNIX reprezintă sistemul de operare original. De fapt, Microsoft Windows  şi MacOS (sistemul de operare ce rulează pe Macintosh) au fost iniţial dezvoltate ca alternative la UNIX şi nu invers. 
Cu toate că majoritatea PC-urilor actuale utilizează Windows, în ultimul timp se observă o tendinţă din ce în ce mai puternică spre utilizarea Linux-ului (care nu este altceva decât o variantă de UNIX) care are un mare avantaj: este gratis! De asemenea, ultimele tipuri de interfeţe grafice precum CDE (Common Desktop Environment), GNOME, KDE facilitează folosirea UNIX-ului pentru utilizatorii care nu sunt specialişti în domeniul calculatoarelor. 
Pe de altă parte, cunoştinţele legate de UNIX pot reprezenta o avere deosebită în lumea de astăzi a tehnologiei informaţiei. Multe dintre cele mai puternice reţele din lume şi site-uri Internet sunt bazate pe UNIX, existând o cerere deosebită pentru profesionişti specializaţi în administrarea sistemelor UNIX. Aceşti administratori de sisteme (cunoscuţi  şi sub denumirea de sysadmin) sunt printre cei mai bine plătiţi oameni din domeniul IT.
În primul capitol al lucrării de faţă sunt prezentate caracteristicile generale ale sistemului de operare  UNIX, istoric, tipuri de implementări, documentare, comenzi şi interfeţe grafice. 
În capitolul al doilea sunt prezentate noţiuni legate de sistemul de fişiere UNIX precum şi comenzi referitoare la fişiere şi directoare.
Capitolul al treilea se referă la administrarea fişierelor, comenzi legate de partiţii şi hard-disc-uri, căutarea şi sortarea fişierelor, arhivarea şi compresia fişierelor.
În capitolul al patrulea sunt prezentate serviciile de reţea oferite în UNIX, serviciile ARPA precum şi posibilitatea integrării cu alte sisteme de operare. 
Capitolul al cincilea face referire la editoare de texte utilizate pe sisteme UNIX; sunt prezentate aici editorul vi şi editorul pico.
În capitolul al  şaselea sunt prezentate noţiuni generale legate de shell-uri UNIX, variante, procese UNIX şi mediul de lucru.

1.1 Introducere

Sistemul de operare UNIX, împreună cu suita de protocoale TCP/IP pentru comunicaţia în reţea şi cu sistemul de fişiere NFS constituie o soluţie convenabilă pentru constituirea unui sistem complet de operare în reţea.
Dezvoltat iniţial în laboratoarele AT&T Bell Labs (cu participarea companiei General Electric şi a faimosului MIT – Massachusetts Institute of Technology), UNIX-ul reprezintă, de fapt, o mare familie de sisteme de operare înrudite ce descind din munca programatorilor Dennis Ritchie  şi Ken Thompson (creatorii limbajului C) la sfârşitul anilor 60 şi începutul anilor 70. Sistemele din familia UNIX pot fi rulate pe orice tip de calculator, plecând de la calculatoarele personale până la super-calculatoarele cu configuraţii extrem de avansate, utilizate îndeosebi în domeniul militar şi cel bancar. De asemenea, toate variantele de UNIX sunt multitasking, domeniu în care UNIX are o reputaţie deosebită.
Numele său derivă de la un jos de cuvinte al unui alt proiect  Bell Labs/MIT din acelaşi timp produs pe un calculator mainframe cunoscut sub numele de Multics (Multiplexed Information and Computing Service).
Sistemul de operare interactiv Multics fusese scris pentru un computer al companiei General Electric dovedindu-se după ani de dezvoltare mult prea costisitor, de aceea Bell Labs s-a retras ulterior din proiect.
În timpul lucrului la proiectul Multics, programatorul Ken Thompson a scris un joc de călătorie în spaţiu pentru computerul
General Electric. După sistarea proiectului, acesta a rescris jocul împreună cu colegul său Dennis Ritchie pentru a rula pe un computer DEC PDP-7 ce avea un display grafic mai performant. Acest calculator avea nevoie însă de un sistem de operare viabil. Iniţial, noul sistem de operare a fost numit de către Thompson UNICS (Uniplexed Information and Computing Service), apoi numele său s-a schimbat în UNIX iar jocul de călătorie spaţială a fost modificat pentru a rula sub UNIX.
Cu toate îmbunătăţirile aduse de-a lungul timpurilor, de la primele implementări de UNIX şi până acum, toate variaţiile sale urmăresc într-o mare măsură arhitectura şi funcţionalitatea originală UNIX.
                                               
Prin multitasking se înţelege capacitatea unui sistem de operare de a executa mai multe procese (task-uri) simultan. Acest lucru se realizează prin fenomenul „time slicing”  ce presupune că fiecare proces aflat în execuţie utilizează calculatorul pentru o perioadădeterminată de timp. Comportamentul multitasking este în opoziţie cu „task switching”, caz în care fiecare proces aflat în execuţie trebuie să se termine pentru a se începe execuţia unui nou proces.

1.2 Scurt istoric

Pentru a înţelege mai bine caracteristicile acestui sistem de operare, avantajele şi dezavantajele sale, este util să cunoaştem câteva lucruri legate de istoria sa.
După cum am spus mai înainte, UNIX a fost conceput iniţial la Bell Laboratories USA drept un proiect privat de cercetare, proiect început în 1969 de către un mic colectiv de cercetători. Scopul acestui colectiv de cercetare era acela de a concepe un sistem de operare care să corespundă următoarelor exigenţe: să fie elegant, simplu şi concis; să fie scris într-un limbaj de programare de nivel înalt şi nu în limbaj de asamblare; să permită refolosirea codului.
La început, UNIX a fost scris în limbaj de asamblare şi de aceea nu putea rula decât pe un calculator anume. Odată cu naşterea limbajului C în 1971, Ritchie şi Thompson au rescris în 1973 programele de sistem UNIX în C. În acest fel UNIX-ul putea fi mutat (portat) şi pe alte calculatoare fără un efort prea mare de programare. În aceeaşi perioadă, compania AT&T (firmă mamă pentru Bell Laboratories) a fost declarată monopol de Comisia
Federală de Comerţ a SUA. Drept compensaţie, Bell Laboratories a oferit gratis sistemul de operare UNIX universităţilor din SUA, astfel încât acesta a devenit extrem de popular în mediul academic. Cu timpul, UNIX s-a răspândit şi în mediul comercial, în care studenţii aplicau ceea ce au învăţat pe băncile universităţilor. 
Spre deosebire de majoritatea producătorilor de sisteme de operare din acel timp, care produceau sisteme mari şi scrise în limbaj de asamblare, UNIX avea un mic procent de cod scris în limbaj de asamblare (aproximativ 10% - kernelul), în timp ce restul codului era scris în C. Grupul de dezvoltare a sistemului a conceput iniţial munca în limbaj de nivel înalt, apoi, odată cu dezvoltarea sa, au apărut mici schimbări ce au fost făcute în kernel şi în limbajul de programare pentru a se definitiva UNIX-ul.
În cadrul acestei evoluţii continue, kernelul şi software-ul aferent au fost extinse până când s-a creat un sistem de operare scris în C, bazat pe kernelul în limbaj de asamblare. Codul sursă al sistemului de operare UNIX a fost făcut public şi disponibil universităţilor de pe întreg teritoriul SUA. Programatorii de la Universitatea Berkeley din California au făcut modificări substanţiale codului sursă original  şi astfel s-a născut BSD (Berkeley Software Distribution) UNIX. Această nouă versiune de UNIX a fost făcută cunoscută la rândul ei programatorilor din SUA care au adăugat instrumente şi cod. Cea mai importantă îmbunătăţire adusă sistemului de operare de către programatorii de la Berkeley a fost adăugarea software-ului de reţea ce permis sistemului de operare să funcţioneze într-o reţea locală. Varianta BSD UNIX a devenit extrem de populară printre producătorii de computere, dintre care: Hewlett Packard, Digital Equipment Corporation  şi Sun Microsystems. 
Scurt istoric al sistemului de operare UNIX
Tabelul 1.1

Code:

1969 – Începutul dezvoltării a ceea ce urma să devină  UNIX  de  către programatorii  Ken Thompson 
şi Dennis Ritchie la Bell Laboratories.  
1973 –  UNIX este rescris în C pentru a fi portabil şi a putea rula pe diverse computere. 
1975 – Se distribuie versiunea 6 în afara laboratoarelor Bell; prima versiune BSD derivă din această versiune V6. 
1980 –  Microsoft produce Xenix iar BSD 4.2 este larg utilizat. 
1984 –  Universitatea Berkeley din California distribuie versiunea 4.2 BSD ce include suita de protocoale TCP/IP 
pentru reţea şi alte programe aplicative. 
1984 – Apare versiunea SVR2 (System V Release 2); există aproximativ 100.000 de instalări de UNIX în întreaga lume. 
1986 – Apare versiunea 4.3BSD ce include internet name server. 
1987 – Apare versiunea SVR3; în acest moment există aproximativ 750.000 de instalări de UNIX în întreaga lume. 
1988 –  Apare UNIX SVR4 prin unificarea versiunilor System V, BSD şi Xenix. 
1991 – UNIX System Laboratories (USL) devine o companie în care acţionar majoritar este 
AT&T; Linus Torvalds începe dezvoltarea Linux-ului. 
1992 –  USL elaborează UNIX SVR4.2 iar Novell îşi anunţă intenţia de a prelua USL. 
1993 –  Apare versiunea 4.4BSD de la Berkeley. Novell preia USL. 
1999 –  UNIX împlineşte 30 de ani; kernel-ul Linux ajunge la versiunea 2.2. 
2001 – Versiunea 3 Single UNIX Specifications reuneşte eforturile POSIX, The Open Group şi ale altor companii. 
Kernel-ul Linux ajunge la varianta 2.4 
2003 –  Kernel-ul Linux ajunge la versiunea 2.5 
2004 –  Se află în lucru variante ale kernel-ului Linux versiunea 2.6

În timp ce firma Sun Microsystems avea sistemul de operare SunOS bazat pe versiunea BSD UNIX 4.2, compania AT&T folosea o versiune de UNIX cunoscută sub numele de System V (system five). În anul 1988, SunOS/BSD, AT&T System V Release 3 şi XENIX (o versiune de UNIX dezvoltată de Microsoft pentru PC-uri cu procesoare Intel) au fost combinate într-o nouă versiune UNIX denumită System V Release 4 (SVR4). Această nouă generaţie a sistemului de operare UNIX a fost creată în scopul combinării celor mai bune caracteristici din varianta BSD cât şi din varianta AT&T System V pentru a crea un standard în industria sistemelor de operare. Acest lucru a permis dezvoltarea de software pentru UNIX indiferent că era vorba despre System V sau BSD 4.2. Noua variantă SVR4 a devenit baza celor mai multe varietăţi de UNIX. 
În tabelul 1.1 regăsim istoria de peste 30 de ani a sistemului de operare UNIX.

1.3 UNIX – sistem de operare pentru reţea
Ca un vechi şi adevărat sistem de operare pentru reţea, UNIX oferă facilităţi avansate în acest sens, printre care:   
Operare multi-utilizator   
* Multitasking   
* Procesare distribuită   
* Nivel ridicat de securitate   
Facilitatea de operare multi-utilizator permite accesul simultan la sistem pentru mai mulţi utilizatori ce pot astfel partaja aceleaşi resurse ale sistemului. Sistemul de operare are grijă de fiecare resursă a computerului, fie că este vorba de memoria RAM, microprocesor, hard disk, scanner sau imprimantă, permiţând partajarea fiecăreia dintre acestea. Fiecare program aflat în execuţie poartă numele de  proces sau  task. Sistemul de operare UNIX ţine evidenţa mai multor procese simultan – această capacitate a sa este denumită multitasking. Acest fapt permite mai multor aplicaţii să ruleze în acelaşi timp pe computer.  De asemenea, capacitatea de procesare distribuită a sistemului de operare se referă la faptul că acesta permite utilizarea partajată a resurselor în cadrul reţelei. Cel mai simplu exemplu în acest sens este acela în care un utilizator poate accesa fişiere şi aplicaţii de pe hard disk-ul altui computer situat în altă parte a reţelei de calculatoare.

În fine, sistemele de operare pentru reţea au implementate sisteme de securitate foarte sigure; există multe alte facilităţi de asigurare a securităţii în afară de cea clasică nume-de utilizator/parolă. De regulă, facilităţile de asigurare a securităţii sistemului pot fi active sau nu, în funcţie de politicile de securitate implementate la nivelul companiei respective.

1.4 Arhitectura UNIX

Sistemul de operare UNIX este un sistem de operare structurat în principal pe următoarele două nivele:
* Programe sistem UNIX;
* Nucleul (denumit kernel) sistemului UNIX.
Majoritatea programelor sistem şi kernel sunt scrise în C, permiţând portabilitatea pe alte platforme hardware ce posedă un compilator C.
Programele de sistem UNIX oferă funcţionalitatea cerută de utilizatori prin iniţierea unui sistem de apeluri către nucleul sistemului UNIX. Nucleul îndeplineşte aceste cereri interacţionând cu nivelul hardware şi returnând rezultatele scontate utilitarelor şi programelor sistem. În această arhitectură stratificată, doar nucleul UNIX trebuie să se ocupe de echipamentele hardware specifice cu care trebuie să interacţioneze; în interiorul nucleului majoritatea codului specific hardware se limitează la driverele echipamentelor. 
Nucleul reprezintă centrul sistemului de operare  şi are rolul de a oferi funcţionalităţile de bază necesare funcţionării computerului. Nucleul este apropiat de microprocesor şi hardware, fiind un fişier executabil ce este încărcat în memorie atunci când are loc procesul de boot al calculatorului, fiind denumit generic  unix (pe sistemele bazate pe System V) sau  vmunix(pe sistemele bazate pe BSD). Odată cu încărcarea în memorie, nucleul începe execuţia următoarelor funcţii:
* Administrarea echipamentelor, a memoriei şi a proceselor;
* Asigură controlul funcţiilor de transmisie a informaţiilor între programele de sistem şi echipamentele hardware;
* Administrează entităţi precum spaţiul de swap, demonii  şi sistemul de fişiere.
Spaţiul de swap reprezintă o porţiune specială de pe  hard-disc ce este folosit de către kernel pentru procesare.
Bucăţi ale programelor ce se află în execuţie pot fi interschimbate între memoria RAM şi hard-disc ori de câte ori este nevoie. Acest mecanism de extindere a memoriei
RAM a sistemului prin utilizarea spaţiului de pe hard-disc poartă denumirea de memorie virtuală. 
Demonii sunt programe (sau procese) ce îndeplinesc un anumit rol; ei sunt procese speciale care îşi încep execuţia dupăîncărcarea sistemului de operare în memorie. După aceea, demonii aşteaptă  să ruleze anumite sarcini în sprijinul sistemului de operare, putând fi porniţi manual sau în mod automat. Un exemplu de proces demon este  dtlogin care determină apariţia ecranului de login CDE la începutul unei sesiuni UNIX sau după ce utilizatorul iese din File Manager-ul CDE. Procesele demon din lumea UNIX sunt similare cu serviciile (services) din Windows NT/2000/XP sau cu modulele NLM (Netware Loadable Modules) din sistemul de operare Novell Netware.
Sistemele de fişiere reprezintă modalitatea de organizare a directoarelor, subdirectoarelor, fişierelor pe hard-disc.
Sistemele de fişiere pot fi situate atât local (pe calculatorul local) cât şi la distanţă (pe alt calculator din reţea, de regulă un aşa numit server).
Programele  şi utilitarele sistemului, precum  şi aplicaţiile utilizatorilor sunt independente de hardware şi singura cerinţă pentru acestea este să iniţieze apeluri standardizate de sistem către nucleul UNIX. Cele mai multe dintre funcţiile nucleului UNIX se ocupă de managementul fişierelor sau al anumitor tipuri de dispozitive. Pentru a simplifica  şi standardiza apelurile de sistem, UNIX interpretează echipamentele ca fiind tipuri speciale de fişiere. Poate cea mai importantă caracteristică a sistemului UNIX este aceea a disponibilităţii codului sursă, ceea ce permite multor programatori să îmbunătăţească şi să modifice aceste sistem de operare de-a lungul anilor. Cele două proprietăţi remarcabile ale sistemului de operare UNIX sunt:
* Portabilitatea – aceasta se manifestă în două moduri: în primul rând, UNIX este portabil pe numeroase platforme hardware; în al doilea rând, programele scrise pentru UNIX sunt implicit portabile pe toate platformele UNIX, depinzând de nivelul de similaritate între nucleele  şi programele de sistem UNIX;
* Modularitatea  – UNIX este un sistem dinamic, a cărui funcţionalitate poate fi îmbunătăţită prin adăugarea de noi programe utilitare; de asemenea, este posibilă şi modificarea nucleului şi recompilarea sa pentru un sistem de operare mai bun.
Arhitectura generală şi cele mai importante funcţii ale nucleului UNIX sunt prezentate în figura 1.2.



1.5 Funcţionalităţi UNIX

Dintre cele mai importante caracteristici funcţionale ale sistemului de operare UNIX se disting următoarele:
* Operare multiutilizator;
* Multitasking preemtiv; 
* Multiprocesare;
* Suport pentru aplicaţii multi-threaded.
O altă caracteristică importantă este aceea a  managementului memoriei care este realizat prin două metode de bază: memoria virtuală (prin procedeul de  swapping)  şi paginarea. Prima metodă permite interschimbarea proceselor între memoria fizică şi partiţia de swap de pe hard disc, în timp ce procedeul de paginare caută să elimine sau cel puţin să minimizeze fragmentarea (care apare în procesul de swapping), permiţând astfel proceselor să execute doar acele porţiuni ale acestora care sunt prezente în memoria principală. Aceste porţiuni de dimensiune fixă încărcate în memoria principală la cerere sunt cunoscute sub denumirea de pagini, iar întregul proces este referit sub numele de sistemul de memorie virtuală (bazat pe cereri de pagini).

Altă funcţionalitate de bază este aceea oferită de  sistemul de intrare/ieşire care încearcă  să minimizeze interacţiunile (specifice hardware) necesitate de nucleul UNIX. Sistemul de intrare/ieşire al sistemului de operare UNIX este alcătuit din:
* Interfaţa socket, folosită pentru comunicaţiile între procese;
* Driverul dispozitivelor bloc, folosit pentru comunicarea cu dispozitive orientate pe bloc (de exemplu hard discuri sau unităţi de bandă. Transferurile efectuate de astfel de dispozitive se fac de regulă în blocuri de lungime fixă de 512 sau 1024 octeţi;
* Driverul dispozitivelor orientate caracter, folosite pentru comunicarea cu dispozitivelor orientate pe caracter (terminale, imprimante sau alte dispozitive care nu transferă date în blocuri de octeţi de dimensiune fixă.
În fine, un rol de bază în funcţionarea sistemului UNIX îl are controlul proceselor  şi intercomunicarea între procese (asigurată prin mecanismul de conductă –pipe- fie prin sockets).

1.6 Implementări de UNIX

Două dintre familiile importante ale sistemului de operare UNIX sunt:
* UNIX System V Release 4, cunoscut de regulă sub denumirea de SVR4 sau V.4, derivă din modelul original dezvoltat la Bell Laboratories, cunoscut mai târziu sub numele de UNIX Systems Laboratory (USL) şi vândut apoi către SCO (Santa Cruz Operation) şi Berkeley Software Distribution (BSD) versiunea 4.4., variantă cunoscută sub denumirea de 4.4BSD.
Există însă o mare varietate de sisteme de operare UNIX, majoritatea acestora fiind similare deoarece sunt bazate pe standardul SVR4. Celelalte varietăţi sunt bazate pe BSD. Cele mai multe diferenţe apar la comenzile de administrare a sistemului. Putem spune dacă lucrăm pe un sistem de operare bazat pe System V sau BSD şi după comenzile de printare (lp pentru System V  şi  lpr pentru BSD)  şi de vizualizare a proceselor lansate în execuţie  (ps –ef pentru System V şi ps –aux pentru BSD)

UNIX a devenit o marcă înregistrată (deţinută de The Open Group –), de aceea fiecare producător de UNIX  şi-a ales propriul nume. Spre exemplu, versiunea de UNIX a firmei Sun se numeşte Solaris, a firmei IBM se numeşte AIX iar a firmei Hewlett Packard se intitulează HP-UX. În tabelul 1.3 sunt prezentate o serie de implementări UNIX, platformele hardware pe care acestea activează precum  şi vânzătorii produselor.



Aceste variante de UNIX sunt concepute să ruleze pe platformele hardware specifice firmelor care le-au dezvoltat. Unele variante însă rulează pe mai multe platforme hardware; spre exemplu, Solaris rulează atât pe staţii de lucru Sun cât şi pe staţii cu microprocesoare Intel şi până la computere de tip mainframe şi supercomputere. 
Ultimul sistem de operare derivat din kernelul UNIX îl reprezintăLinux-ul, conceput să ruleze pe microprocesorul Intel de la staţii de lucru ieftine (chiar şi 386!) până la servere performante. Linux-ul a devenit foarte popular printre specialiştii entuziaşti ai computerelor în necesitatea găsirii unui sistem de operare stabil şi ieftin.

Totul a plecat în 1992 de la Linus Torvalds de la Universitatea din Helsinki, Finlanda, care a făcut public Linux-ul pe Internet şi a încurajat pe toată lumea să contribuie la dezvoltarea sa. În mod periodic un grup de dezvoltatori revizuiesc  şi testează ultimile contribuţii  şi elaborează o versiune stabilă a sistemulului de operare. Linux este gratis conform GNU General Public Licence ) dar există o serie de companii care adaugă sistemului produse de tip Office, interfeţe desktop, software pentru Web server, etc. precum şi CD-uri de instalare şi percep astfel o taxă (care este, oricum, mult mai mică decât a oricărui alt sistem de operare comercial).

1.7 GNU Not UNIX, free software şi open source

Conceptul de „free software” este un concept vechi; primele calculatoare personale au ajuns prima dată în universităţi, fiind instrumente de cercetare. Software-ul putea fi instalat în mod liber pe orice calculator, iar programatorii (puţini, la acea vreme) erau plătiţi pentru activitatea de programare, nu pentru programele în sine pe care le realizau. Ceva mai târziu însă,atunci când calculatoarele personale au intrat în lumea afacerilor, programatorii au început să restricţioneze drepturile de folosire a softwareului pe care îl produceau, percepând taxe de utilizare pentru copiile programelor.
Numele de GNU provine de la sintagma „GNU Not UNIX” şi s-a dorit a fi un sistem de operare precum UNIX ce este distribuit cu codul sursă şi poate fi copiat, modificat şi redistribuit. Proiectul GNU a fost iniţiat în 1983 de Richard Stallman  şi alţii ce au pus bazele Fundaţiei pentru Software Liber (FSF – Free Software Foundation). Concepţia lui Stallman este aceea că utilizatorii pot face ce doresc cu software-ul achiziţionat, putând face cópii ale acestuia pentru prieteni  şi modifica codul sursă redistribuind-ul la un  anumit cost. FSF stipulează termenul copyleft care înseamnă  că oricine redistribuie software free trebuie să lase în continuare libertatea de copiere şi redistribuţie a programului, asigurându-se în acest fel că nimeni nu va reclama drepturi de proprietate asupra unor versiuni viitoare şi nu va impune restricţii la utilizarea acestuia.
În acest context, termenul  free înseamnă libertate şi nu neapărat gratis. Fundaţia FSF percepe nişte costuri iniţiale la distribuţia GNU. Redistribuitorii pot, de asemenea, să perceapă taxe pentru copiile programelor în scopul profitului sau pentru acoperirea costurilor. Ideea de bază a software-ului liber  (free software) este aceea că se lasă libertatea utilizatorilor să modifice şi să reasambleze produsul fără nici o restricţie în afară de aceea că nici ei, la rândul lor, nu pot impune restricţii mai departe.  Stallman crede că unul dintre rezultatele filozofiei free software este acela că mai multe programe free vor coexista împreună provenind din alte programe  free. GNU este un exemplu în acest sens; acesta a devenit un sistem de operare când în august 1996 i-a fost adăugat un kernel (GNU Hurd şi Mach). Fundaţia FSF continuă  să dezvolte software free sub formă de programe de aplicaţii; un program de tip  spreadsheet este acum disponibil. Sistemul de operare Linux este conceput cu componente GNU iar kernelul este dezvoltat de Linus Torvalds. 
Munca lui Stallman a inspirat multe contribuţii de software free, iar definiţia  open source conţine multe dintre ideile lui Stallman, putând fi considerată drept un concept derivat. Open Source Definition a luat naştere odată cu distribuţia Debian GNU/Linux. Sistemul de operare Debian, o variantă de Linux populară şi în zilele noastre, a fost construit în întregime pe bază de software free. Cu toate acestea, deoarece avea alte licenţe diferite de  copyleft (care era prin definiţie  free), Debian a avut ceva probleme în definirea faptului că este free. Cu timpul au fost elaborate o serie de reguli definite în  “Debian Free Software Guidelines”, document ce defineşte
practic software-ul open source. 

Partizan împătimit al software-ului free, Eric Raymond a scris un articol intitulat „The Cathedral and the Bazaar” (Catedrala şi bazarul) în încercarea de a explica ideea de  free software. În acest articol, Raymond descrie software-ul comercial ca fiind dezvoltat în stilul unei catedrale, izolat de marea majoritate a dezvoltatorilor independenţi, în timp de software-ul free se construieşte în stil de bazar, oferind un loc de întâlnire pentru oricine doreşte acest lucru. În articol se susţine ideea că “modelul de bazar” este superior deoarece un număr mult mai mare de utilizatori  şi programatori contribuie la dezvoltarea de software mai bun şi într-un timp mai scurt. Toţi cei care doresc să contribuie la scrierea codului pentru proiect sunt bineveniţi, iar cel mai bun cod va fi ales pentru includerea în proiectul final. 

GNU s-a vrut iniţial să fie o alternativă la versiunile comerciale de UNIX. Acest lucru nu s-a întâmplat încă, dar Richard Stallman şi alţi programatori muncesc în continuare pentru acest ideal. Paradoxal este că primele succese înregistrate de GNU au fost aplicaţii adiţionale sistemelor proprietare UNIX. Componente GNU precum GNU Emacs, GCC (GNU C Compiler) şi bash (un înlocuitor free pentru Bourne Shell) sunt instalate astăzi implicit pe majoritatea variantelor de UNIX existente.

Articolul „The Cathedral and the Bazaar” a avut un mare succes şi o mare influenţă ulterior: oficialii de la Netscape au dezvăluit codul sursă al vestitului lor browser web (Netscape Navigator) în speranţa că dezvoltatori independenţi îl vor face mai bun. Mai mult, Netscape a început să îl consulte pe Raymond cu privire la integrarea firmei în curentul  free software. La începutul anului 1998, Eric Raymond s-a întâlnit cu o serie de susţinători ai conceptului de  free software pentru a discuta modalităţi prin care săîncurajeze şi alte companii precum Netscape să li se alăture. Printre ideile vehiculate atunci, s-a stabilit că termenul free (care în engleză are un sens dual, de  liber, dar şi de  gratis) sună anti-comercial, drept pentru care au propus termenul de  open source drept înlocuitor. Netscape a folosit termenul de  open software atunci când a anunţat distribuirea publică a codului sursă pentru Netscape Navigator iar faimoasa editură O’Reilly and Associates a adoptat acest termen în materialele sale promoţionale. Cu ajutorul acestor două mari firme, termenul de open source a început să aibă mare succes.  Similar cu acest concept a luat naştere şi ideea de „open hardware” cu privire la dispozitivele şi interfeţele hardware. Acest concept însă nu a avut acelaşi succes ca ideea de software open source, dar el încă există şi poate fi studiat la adresa web 

1.8 Comenzi şi interfeţe grafice în UNIX
Sistemul de operare UNIX posedă peste 350 de comenzi de sistem şi programe utilitare folosite pentru administrarea sistemului (adăugare de noi utilizatori, noi dispozitive hardware, etc.), administrarea sistemului de fişiere (creare, editare, copiere,  ştergere, printare, etc.), asigurarea conexiunii la reţea  şi comunicării cu alte sisteme  şi oferirea de ajutor.
Interpretorul de comenzi (shell-ul) preia comenzile  şi le execută. Unele dintre comenzi sunt înglobate în interpretor, precum comanda  cd (change directory) dar marea majoritate a comenzilor se află pe hard-disc, de regulăîn directoare specifice, precum directorul  bin  (prescurtarea de la  binary code).
Toate sistemele de operare moderne au un sistem grafic de interfaţă cu utilizatorul (GUI – Graphical User Interface); interfaţa grafică Macintosh, Microsoft Windows sau UNIX CDE sunt exemple de astfel de interfeţe.

Interfaţa grafică CDE (Common Desktop Environment)

Firma Sun Microsystems a fost una dintre primele firme ce a utilizat o interfaţă grafică pentru sistemul de operare UNIX. În anul 1993 s-a format un consorţiu de firme ce comercializau sisteme de operare UNIX, cu scopul de a dezvolta un mediu de interfaţă grafică, integrat, standard şi funcţional.
Printre membrii acestui consorţiu se numărau: Hewlett-Packard, IBM, Novell, Sun Microsystems, companii şi membri ai fundaţiilor OSF (open Software Foundation), X/Open  şi XConsortium. CDE este bazat  pe standardul Motif, oferind o serie de caracteristici generale, comune cu alte medii desktop, printre care: oferă un mediu GUI de interfaţă între utilizator şi sistemul de operare; include meniuri ce pot fi selectate de către utilizatori şi permite rularea unor programe fără a fi necesară scrierea comenzii la linia de comandă; oferă peste 300 de programe utilitare şi instrumente; permite utilizatorilor să controleze mai multe documente  şi aplicaţii pe ecran în acelaşi timp; controlează activităţile din ferestre atât cu ajutorul mouse-ului cât şi cu ajutorul tastaturii.
Ecranul CDE poate fi observat în figura 1.4, cu principalele programe şi instrumente de lucru: calendar, administrare de fişiere, e-mail, administrarea printării etc.



Figura 1.4 Interfaţa grafică CDE

Interfaţa grafică GNOME

O altă interfaţă grafică mai recentă în lumea UNIX este GNU Network Object Model Environment (GNOME) şi face parte din proiectul GNU open source. GNOME (vezi figura 1.5) posedă un mediu grafic uşor de utilizat pentru utilizator precum  şi un cadru propice de dezvoltare a aplicaţiilor – de asemenea, fiind software open source, este gratis. Interfaţa GNOME ) este inclusă în majoritatea versiunilor de UNIX BSD precum  şi în distribuţiile de GNU/Linux. De asemenea, GNOME funcţionează şi cu Sun Solaris ). GNOME posedă o interfaţă intuitivă, uşor de utilizat, combinând o organizare complexă a desktop-ului cu facilităţi de navigare ce permit un acces uşor la informaţii. 



Figura 1.5 Interfaţa grafică GNOME

1.9 Documentarea în UNIX

Fie că este vorba despre un începător sau despre un utilizator avansat în utilizarea UNIX-ului, totdeauna este utilă consultarea paginilor de help (care în UNIX se numesc pagini de manual, sau man pages). Dar să vedem cum se poate obţine ajutor în UNIX atunci când vrem să aflăm cum se utilizează o comandă ? 
Cea mai la îndemână soluţie este consultarea paginilor de manual, acest lucru făcându-se prin utilizarea comenzii  man. A doua soluţie ar fi utilizarea resurselor Internet. În continuare vom prezenta mai pe larg aceste două opţiuni.

1.9.1 Utilizarea comenzii man

Manualul programatorului UNIX (paginile de manual) descriu toate detaliile pe care trebuie să le cunoaştem pentru a utiliza comenzi, a programa sau a administra sistemul. De regulă, paginile de manual sunt instalate automat odată cu instalarea sistemului. Paginile de manual se prezintă sub formă de text, fără grafice, desene, etc. Pentru a accesa paginile de manual trebuie să utilizăm comanda man la prompter. Paginile de manual sunt deosebit de utile fie atunci când am uitat sintaxa unei comenzi sau dorim informaţii în plus cu privire la acea comandă. 
Paginile de manual oferă informaţii cu privire la sintaxa generală a comenzii, descrierea funcţionalităţii acesteia, opţiunile  şi argumentele utilizate şi exemple de folosire a comenzii. Unele dintre comenzi nu vor funcţiona la fel în cadrul shell-urilor diferite; în acest caz se va face referire la shell-ul Bourne (sh), shell-ul Korn (ksh), shell-ul Bourne Again Shell (bash) sau shell-ul C (csh).




Să vedem în continuare câteva moduri în care poate fi utilizată comanda man:

Code:

$ man  nume

Oferă informaţii cu privire la o comandă anume, unde nume este denumirea completă a comenzii respective
În figura 1.6 avem ca exemplu o parte din listing-ul obţinut în urma apelului comenzii man ls (informaţii cu privire la comanda ls).
O altă posibilitate de utilizare a comenzii man este aceea în care se foloseşte o anumită secţiune din manualul UNIX, având în vedere că paginile de manual sunt structurate pe mai multe secţiuni.
Dintre aceste secţiuni, cele mai importante sunt: secţiunea 1 - comenzi utilizator, secţiunea 2 - apeluri de sistem, secţiunea 3 - apeluri de biblioteci.
Comenzile precum man(1) sunt grupate deci în secţiunea 1.

Code:

$ man -s nr_sectiune nume

Oferă informaţii cu privire la o comandă cu numele specificat de nume, în secţiunea nr_sectiune
Observaţie
Această comandă poate să difere de la un sistem la altul. Modalitatea de apel prezentată mai sus se referă la Sun Solaris. Pe un sistem FreeBSD însă, comanda poate fi apelată în felul următor, fără a se specifica opţiunea -s: man nr_sectiune nume.
În cazul în care nu ştim numele comenzii, putem apela comanda man folosind opţiunea -k, prin care facem o căutare după un cuvânt cheie.

Code:

$ man -k cuvant_cheie

Oferă informaţii cu privire la comenzi referitoare la cuvântul cheie specificat
Exemplul următor ne arată cum am putea căuta informaţii cu privire la modificarea proprietarului (owner) unui fişier:

Code:

$ man -k owner 
chown(2), fchown(2), lchown(2) - change owner and group 
of a file 
chown(8) - change file owner and group 
$

Listingul anterior conţine o serie de referinţe care conţin cuvântul cheie  owner. Pe unele sisteme UNIX acest lucru se poate face utilizând comanda apropos, ca în exemplul următor:

Code:

$ apropos owner 
chown(2), fchown(2), lchown(2) - change owner and group 
of a file 
chown(8) - change file owner and group 
$

De asemenea, se pot afişa informaţii generale în legătură cu o comandă specificată folosind whatis. Comanda whatis se poate folosi astfel:

Code:

$ whatis comanda

Afişează linia de început din cadrul paginii de manual referitoare la comanda specificată
Comanda  whatis poate fi utilă în cazul în care ne reamintim comanda dar nu mai ştim la ce se foloseşte. 
În mod normal, listingul obţinut în urma unei comenzi man se poate întinde pe multe pagini. În acest sens, este util să cunoaştem câteva taste specifice utilizate pentru navigarea în cadrul paginilor listate pe ecran. În tabelul 1.7 sunt prezentate câteva taste folosite la navigarea prin listingul paginilor de manual.

Taste utilizate pentru deplasarea în cadrul paginilor de manual



1.9.2 Utilizarea referinţelor Internet

Pe Internet există o serie întreagă de documentaţii cu privire la sistemul de operare UNIX. În tabelul 1.8 sunt prezentate câteva adrese web utile ce conţin astfel de documentaţii.

Resurse Internet pentru diverse variante de UNIX



Dintre aceste adrese web, prima ) merită o
atenţie deosebită, deoarece prezintă pagini de manual şi pentru alte versiuni,
cum ar fi:
* BSD, 2.9.1 BSD, 2.10 BSD, 2.11 BSD
* BSD 0.0, 386BSD 0.1
* BSD NET/2, 4.3BSD Reno, 4.4BSD Lite2
* FreeBSD 1.0-RELEASE - FreeBSD 4.0-RELEASE
* FreeBSD 5.0
* FreeBSD Ports
* Linux Slackware 3.1
* Minix 2.0
* NetBSD 1.2 - NetBSD 1.4
* OpenBSD 2.1 - OpenBSD 2.6
* Plan 9
* RedHat Linux/i386 4.2, 5.0, 5.2,etc.
* SunOS 4.1.3, 5.5.1, 5.6, 5.7
* ULTRIX 4.2
* UNIX Seventh Edition


_______________________________________
Citeşte regulamentul forumului aici.

pus acum 14 ani
   
Gamer
Administrator

Din: Transilvania
Inregistrat: acum 14 ani
Postari: 202
2 SISTEMUL DE FIŞIERE UNIX ŞI COMENZI 

2.1 Generalităţi
Sistemul de fişiere reprezintă o construcţie logică ce oferă posibilitatea stocării şi regăsirii informaţiei ce se află pe un dispozitiv de stocare cu acces aleator. Un sistem de fişiere este parte integrantă a sistemului de operare  şi este format din fişiere, directoare precum  şi informaţii necesare pentru localizarea şi accesul acestora. Sistemul de fişiere UNIX ordonează şi grupează din punct de vedere logic fişierele într-o manieră eficientă, prin cuprinderea acestora în directoare ce sunt asemănătoare dosarelor ce conţin mai multe documente.  UNIX posedă un sistem de fişiere ierarhic, cu o structură arborescentă multi-nivel ce pleacă de la directorul rădăcină (root), simbolizată prin caracterul „/” (slash), putând de fapt să fie suportate mai multe sisteme de fişiere simultan pe acelaşi disc. Fiecare disc este divizat în porţiuni (partiţii) ce pot găzdui un sistem de fişiere, un domeniu de swap sau un domeniu de date speciale.

Code:

Directorul 
"root"

Reprezintă nivelul cel mai de sus din sistemul de fişiere şi este simbolizat de caracterul "/" (slash).
Nu poate exista decât un singur director  root  într-un sistem de fişiere UNIX. În UNIX fişierele sunt interpretate sub forma unor şiruri de octeţi;
astfel, cu toate că o aplicaţie face o cerere pentru un fişier cu o structură specială, nucleul stochează acel fişier pe disc ca o simplă secvenţă de octeţi, organizând fişierele în directoare. Funcţia de bază a sistemului de fişiere este aceea de a oferi servicii de fişiere aplicaţiilor respective fără ca acestea să fie preocupate de structura specială de stocare hardware.
Un fişier reprezintă un  şir de octeţi ce aparţine unui director. Conceptual, un fişier UNIX este precum un document îndosariat (dosarul este directorul din care face parte). Fişierul poate stoca informaţii diverse: text, grafică, video, sunet, imagine etc. Orice fişier din sistem are un nume; lungimea numelor de fişiere UNIX este în general limitată la 255 de
caractere. Caracterele valide sunt: orice caracter alfabetic, numeric, liniuţa de subliniere underscore ( _ ) şi punctul (.). Nu se folosesc spaţii în numele fişierelor, precum şi următoarele caractere speciale:

Code:

! " ` ' ;  /  \  $  *  &  <  >  (  ) | { } [ ] ~.

Directorul este un caz particular de fişier ce arată ca un cuprins de carte. El conţine două coloane de informaţie - numerele inode ale fişierelor şi numele fişierelor. Fiecare director conţine o referinţă  către el însuşi (identificat prin semnul „.”) şi către directorul părinte (identificat prin „..”).
Chiar  şi directorul rădăcină –  root  – conţine o referinţă  către directorul părinte, care în acest caz este o referinţă  către el însuşi. Directoarele pot conţine subdirectoare şi fişiere. La rândul lor, subdirectoarele pot conţine alte subdirectoare şi alte fişiere. Orice sistem de operare posedă o anumită modalitate de structură a directoarelor pentru organizarea informaţiei pe hard-disc; în UNIX un director se numeşte  directory, iar în Windows şi MacOS un director se numeşte folder, având însă aceeaşi semnificaţie. Chiar dacă detaliile sistemului de fişiere pot diferi în funcţie de tipul sistemului, următoarele componente sunt comune pentru majoritatea sistemelor de fişiere:



O caracteristică aparte a sistemului de fişiere UNIX o constituie legăturile. O legătură (link) reprezintă o posibilitate a unui fişier sau deacces la acesta prin mai multe nume. O legătură este, de fapt, o intrare într-un director ce face redirectarea spre un fişier stocat în alt director sau chiar spre un întreg alt director.
Directorul root are o serie de subdirectoare (ce diferă în funcţie de implementarea UNIX), printre care cele mai importante sunt, de regulă:

Code:

"bin", "dev", "etc", "opt", "lib","mnt", "tmp","home" şi "usr".

Aceste directoare au următorul conţinut:

/bin  Comenzi UNIX
/dev Director pentru dispozitive speciale
/etc Programe şi fişiere de date suplimentare
/lib Directorul bibliotecii de programe C
/mnt Directorul mount; rezervat pentru montarea sistemelor de
fişiere
/opt Conţine aşa numitele „software storage objects” (SSO's)
/tmp Director temporar
/usr Conţine rutine utilizator
/var Fişiere obiect nepartajate
/home Directorul utilizatorilor sistemului

Unele dintre directoarele UNIX sunt mai „interesante” decât altele; existenţa  şi conţinutul acestor directoare depinde de varianta de UNIX utilizată.
Nu există practic reguli foarte stricte cu privire la localizarea fişierelor. Spre exemplu, pentru a găsi anumite fişiere sistem binare, putem căuta într-unul din directoarele:

Code:

/bin, /usr/bin, /sbin, /usr/sbin şi chiar în /etc.

Fişierele binare moştenite se pot găsi în /usr/ucb sau /usr/bsd. Alte fişiere executabile se pot găsi în alte locuri din structura de directoare. Şi legăturile simbolice trebuie considerate cu atenţie; directorul /home poate fi definit ca având propriul sistem de fişiere (montat separat) sau poate fi definit ca subdirector al rădăcinii. Pe serverele Solaris, spre exemplu, el este găsit ca subdirector al directorului /export; de regulă, acest director conţine directoarele home ale utilizatorilor existenţi în sistem.
Spaţiul dedicat stocărilor temporare este localizat, de regulă, în directorul /tmp. Acest director poate fi accesat pe majoritatea sistemelor ca

Code:

/tmp, /usr/tmp sau /var/tmp.

Două dintre cele trei referinţe vor fi directoare reale iar cea de-a treia va fi o legătură simbolică  (symlink) către una din primele două. Varianta de UNIX utilizată va influenţa care dintre aceste referinţe este legătura simbolică.
Se recomandă totuşi ca aceste directoare să fie reconfigurate astfel încât o singură referinţă  să fie un director real, iar celelalte două  să fie legături simbolice către acest director.
Mai mult, acest director se recomandă a fi montat separat. Deoarece utilizatorii pot scrie fişiere de dimensiuni mari în spaţiul temporar /tmp, montarea separată asigură protecţia directoarelor „/”  şi „/usr” faţă de umplerea cu fişiere temporare.
O regulă general valabilă în acest sens este aceea că utilizatorii nu trebuie să aibă drept de creare  şi  ştergere de fişiere în locaţiile

Code:

„/”

şi

Code:

„/usr”.

Directorul /tmp trebuie să aibă permisiuni de acces 1777, nu 777.
Dreptul de acces 777 permite ca orice utilizator să aibă drepturi depline în directorul /tmp, în timp ce 1777 setează  aşa-numitul „sticky bit” ce înseamnă că directorul poate fi modificat sau şters doar de către proprietar. 
Directorul /usr poate fi montat separat sau poate fi subdirector al lui
„/”. Subdirectoarele sale pot fi:
* bin – fişiere binare
* include – fişiere pentru programare
* lib – biblioteci de programe
* local – pachete software locale, biblioteci, fişiere include, fişiere
binare (de regulă /usr/local se montează separat pentru a nu
umple directorul /usr).
* sbin – fişiere de sistem binare
* share – informaţie partajată, inclusiv pagini de manual. 
Directorul /var poate fi montat separat (ceea ce este recomandat) sau
poate fi subdirector al lui „/” sau „/usr”. Subdirectoarele sale pot fi:
* adm – stocare fişiere log (Solaris)
* crash – diagnostic în situaţii de oprire bruscă 
* log – stocare fişiere log (Solaris şi Linux Red Hat)
* mail – zona de stocare pentru poşta electronică
* spool – zona de spool pentru printare, utilitarul cron şi alte servicii
* yp – zona de stocare pentru fişierul de configurare NIS. 

2.2 Partiţii

Partiţiile reprezintă modalitatea de organizare a spaţiului de pe disc la nivel jos. Partiţiile sunt independente de sistemul de operare; un sistem de operare solid recunoaşte diviziunile la nivel jos de pe disc  şi adresează fiecare partiţie ca pe un echipament logic separat. 
Toate informaţiile cu privire la partiţii sunt localizate în aşa-numita tabelă de partiţii (partition table), stocată în eticheta de disc sau în header-ul de volum (volume header) al discului fizic.
Aceasta este modalitatea prin care discurile păstrează propriile informaţii referitoare la modalitatea de aranjare a datelor şi de aceea ele pot fi transferate de la un calculator la altul fără riscul pierderii informaţiei.
De asemenea, partiţiile permit existenţa mai multor sisteme de operare pe acelaşi calculator, instalate în partiţii diferite.
Iniţial, exista o corespondenţă strictă între partiţii şi sistemele de fişiere, partiţiile fiind considerate drept  containere pentru sistemele de fişiere.
Acum un sistem de fişiere se poate întinde pe mai multe partiţii prin utilizarea volumelor logice, astfel încât partiţiile pot fi considerate elemente de bază pentru stocarea informaţiei în loc de a fi interpretate drept simple containere.
Deoarece partiţiile sunt diviziuni la nivel hardware ale discurilor, ele pot oferi o protecţie la nivel jos împotriva supra-încărcării. Utilizându-se anumite politici de partiţionare, unele dintre partiţii pot fi supra-încărcate fără a afecta performanţele generale ale sistemului; în orice caz, umplerea unei partiţii nu are cum să afecteze spaţiul altei partiţii. 

2.3 Spaţiul de swap

Toate varietăţile de UNIX necesită minimum două partiţii: partiţia de root (/)  şi partiţia pentru  swap. În cazul (destul de puţin întâlnit în practică în care există doar aceste două partiţii, partiţia / va conţine întregul sistem de operare, aplicaţiile, fişierele de configurare, conturile locale ale utilizatorilor, etc. Spaţiul de swap sau, pe scurt, swap, permite accesul direct al sistemului de operare la spaţiul brut de pe disc, fără implicarea sistemului de fişiere.
Swap-ul a fost construit pentru a acţiona ca o extensie a memoriei principale (RAM – Random Access Memory) a calculatorului, permiţând, prin implementarea mecanismului memoriei virtuale, accesul la o cantitate de memorie ce nu este limitată de capacitatea memoriei RAM ci de spaţiul liber de pe disc.
Principalele mecanisme utilizate de către sistemul de operare pentru a accesa spaţiul de swap sunt paginarea (paging)  şi interschimbarea (swapping).
Spaţiul liniar al memoriei unui calculator este limitat iar o parte din acesta este rezervat pentru stocarea unor programe ce rămân rezidente în memorie (sistemul de operare, tabelele de paginare, etc.) pentru a fi accesate rapid când este nevoie de ele. De asemenea, multe procese  şi obiecte program nu necesită prezenţa permanentă în memorie ca în cazul programelor rezidente.
Atunci când sistemul de operare găseşte un astfel de proces, se caută modalităţi de înlocuire a lui cu altul ce trebuie executat şi deci încărcat în memorie. 
Procedeul de interschimbare sau  swapping este unul dintre mecanismele utilizate de către sistemul de operare pentru a administra alocarea memoriei. Atunci când un proces este interschimbat, el este copiat din memorie în spaţiul de swap împreună cu toate datele asociate şi alte informaţii de stare. În acest fel, porţiunea din memorie alocată procesului devine liberă şi poate fi utilizată pentru a stoca alt proces (program).
În momentul în care este nevoie din nou de procesul aflat în swap, acesta este transferat rapid din  swap în memoria principală pentru a fi executat.
În esenţă, procedeul de swapping constă în transferul unui proces din memorie în spaţiul de swap şi viceversa. Atunci când procedeul de swapping este intens utilizat înseamnă  că sistemul are nevoie de resurse hardware suplimentare (de regulă mai multă memorie RAM). 
Paginarea utilizează, de asemenea, spaţiul de swap. Spre deosebire de procedeul de interschimbare, care stochează împreună cu procesul şi o serie întreagă de informaţii legate de starea procesului, paginarea stochează doar porţiuni ale codului executabil al unui proces. Paginarea reprezintă o metodă obişnuită de administrare a memoriei de către sistemul de operare, metodă în care acesta determină în prealabil dimensiunea segmentelor de memorie (denumite pagini) ce pot fi menţinute în memoria principală.  Referitor la spaţiul de swap, unele variante de UNIX depind mult de acest spaţiu. Solaris-ul firmei Sun foloseşte spaţiul de swap pentru directorul
/tmp în mod implicit.
   
2.4 Tipuri de fişiere

Principalele tipuri de fişiere existente pe un sistem UNIX sunt:
* Fişiere text
* Fişiere de date
* Fişiere sursă (ce conţin codul sursă al unor programe)
* Fişiere executabile
* Programe shell
* Fişiere legătură
* Fişiere asociate unor dispozitive

a) Fişiere text
Cel mai simplu tip de fişiere îl constituie fişierul text, ce conţine doar caractere ca acelea pe care le puteţi citi în cadrul acestui capitol. Aceste caractere ASCII (American Standard  Code for Information Interchange) sunt literale sau caractere numerice ce reprezintă manifestarea muncii pecare o facem. Dacă utilizăm, spre exemplu, un editor UNIX pentru a crea un mesaj pentru poşta electronică atunci creăm un fişier text în cele mai multe dintre cazuri. Avem în continuare un exemplu de fişier ASCII de pe un sistem Linux:

Code:

:.Z:  :  :/bin/compress -d -c 
%s:T_REG|T_ASCII:O_UNCOMPRESS:UNCOMPRESS 
 :   : :.Z:/bin/compress -c %s:T_REG:O_COMPRESS:COMPRESS 
 :.gz: :  :/bin/gzip -cd %s:T_REG|T_ASCII:O_UNCOMPRESS:GUNZIP 
 :   : :.gz:/bin/gzip -9 -c %s:T_REG:O_COMPRESS:GZIP 
 :   : :.tar:/bin/tar -c -f - %s:T_REG|T_DIR:O_TAR:TAR 
 :   : :.tar.Z:/bin/tar -c -Z -f -
%s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+COMPRESS 
 :   : :.tar.gz:/bin/tar -c -z -f - 
%s:T_REG|T_DIR:O_COMPRESS|O_TAR:TAR+GZIP

b) Fişiere de date
Fişierele de date sunt fişierele ce conţin date utilizate de diverse aplicaţii de pe sistem. Dacă utilizăm un program de tipul FrameMaker pentru scrierea unei cărţi, fişierele create cu acest program vor fi de tipul suportat de acesta (la fel ca şi fişierele speciale de date de pe un sistem Windows).
Fişierele de date conţin pe lângă informaţia în sine (de tip text) şi informaţii speciale de formatare. Acelaşi lucru se petrece şi în cazul unui fişier bază de date, ce conţine atât date ce pot fi citite cât  şi informaţii specifice formatării respective. 

c) Fişiere cod sursă

Fişierele cod sursă sunt fişiere ce conţin date scrise într-un limbaj de programare precum C, C++, Java, Pascal, Fortran etc. Aceste fişiere au, de regulă, extensii conforme cu limbajul în care au fost scrise; spre exemplu, un program sursă scris în C va avea extensia „.c”.

d) Fişiere executabile

Fişierele executabile reprezintă programe obţinute cu ajutorul unui compilator (sau interpretor) şi editor de legături ce pot fi rulate (executate).
Dacă încercăm să citim un fişier executabil ca pe un fişier text, vom obţine o serie de caractere ciudate şi chiar sunete; în urma unei astfel de „citiri” se pot pierde setările ecranului. Majoritatea comenzilor UNIX sunt programe executabile (vezi directorul /bin).

e) Programe de tip shell

Un fişier de tip shell este atât un fişier text cât şi un fişier ce poate fi rulat.
El conţine linii text ce reprezintă instrucţiuni legate de programarea shell; de regulă, prima linie din program este o linie ce începe cu secvenţa de caractere “#!” şi precizează tipul de shell utilizat.
De exemplu, linia:

Code:

#!/bin/sh

specifică faptul că se utilizează shell-ul Bourne care este shell-ul clasic pentru un sistem UNIX.
În general, caracterul “#” reprezintă modalitatea de inserare a comentariilor în program; astfel, tot ce urmeazădupă “#” şi până la sfârşitul liniei este considerat comentariu.

f) Fişiere de tip legătură

Un fişier legătură  (link) este o referinţă  către un fişier stocat în altă locaţie în sistem.
În loc să avem două sau mai multe copii ale unui fişier pe disc, putem crea o legătură  către un fişier deja existent pe sistem. Un mod deosebit de utilizare a legăturilor pe un sistem UNIX a fost acela legat de apariţia unei noi versiuni a sistemului de operare. Cum locaţiile fişierelor se modifică uneori la apariţia unei noi versiuni a sistemului de operare, se folosesc legături de la locaţiile vechi către cele noi în loc de a învăţa noile locaţii. În momentul utilizării unei comenzi folosind vechea locaţie, legătura face referire la comanda ce acum se află în alt loc pe disc. 

g) Fişiere asociate unor dispozitive

Fişierele asociate unor dispozitive, denumite în UNIX  “device special files”(sau, pe scurt,  fişiere device) conţin informaţii legate de componente hardware ale calculatorului şi sunt fişiere speciale cu referire (de regulă la funcţii de administrare a sistemului.
Sistemul de operare UNIX tratează dispozitivele hardware ca fişiere, avantajul acestei metode de administrare fiind acela că permite accesul la disc precum o simplă operaţie de acces (Input/Output) la un fişier. Dispozitivele instalate pe computer pot fi accesate prin intermediul unor astfel de fişiere speciale. Discul, spre exemplu, poate fi accesat fie printr-un fişier de tip bloc, fie printr-unul de tip caracter. 

Semnificaţia subdirectoarelor din /dev la Solaris



Fişierele  device de tip caracter sunt cel mai des folosite pentru proceduri de copiere de octeţi (ca în cazul comenzii  dd). Majoritatea echipamentelor de bandă au asociate doar fişiere  device de tip caracter.
Fişierele device de tip bloc sunt utilizate pentru transferul de date în blocuri de octeţi, ceea ce este mai avantajos  şi mai rapid pentru majoritatea aplicaţiilor. Pentru varianta de UNIX Solaris, hard-discurile au asociate atât un fişier device de tip caracter cât şi unul de tip bloc. Fiecare dintre acestea sunt folosite în cazuri diferite. Operaţiile uzuale se fac prin intermediul fişierelor bloc, însă crearea sistemului de fişiere se face cu ajutorul fişierelor caracter.
Toate fişierele device standard UNIX sunt păstrate în directorul /dev (unele implementări de Linux Red Hat păstrează acest sistem). În varianta UNIX Solaris şi în unele noi implementări de Red Hat însă, conţinutul lui /dev tinde să fie o combinaţie de fişiere device şi de legături simbolice către fişiere  device situate în alte directoare. Într-un astfel de sistem, directorul /dev acţionează ca un redirector organizaţional.
În Red Hat directorul se numeşte /devfs iar sub Solaris se intitulează /devices. Fişierele şi directoarele din directorul  /dev variază foarte mult, chiar între versiuni ale aceleiaşi variante de sistem de operare.
În tabelul 2.1 sunt prezentate o serie dintre subdirectoarele reprezentative pentru /dev întâlnite la Solaris. 
În continuare vom prezenta câteva comenzi de bază referitoare la manipularea fişierelor şi directoarelor pe un sistem UNIX.

2.5 Comenzi referitoare la fişiere şi directoare

Pentru a putea naviga în cadrul sistemului de fişiere trebuie să cunoaştem în principiu două comenzi: prima comandă  (pwd) afişează localizarea curentă (directorul în care ne aflăm la un moment dat) iar cea dea doua comandă  (cd) este utilizată pentru a schimba directorul curent. Să vedem mai întâi care este sintaxa generală a unei comenzi UNIX. 
În momentul în care suntem conectaţi la sistem sau atunci când folosim o fereastră terminal, pe acran apare un prompter. În cazul  shell-urilor Bourne  şi Korn, prompterul este semnul dolar ($) pentru un utilizator obişnuit  şi semnul diez (#) pentru utilizatorul  root. În cazul  shell-ului C, semnul special pentru prompter pentru un utilizator obişnuit este semnul procent (%).
Odată cu apariţia prompterului, putem introduce comenzi la linia de comandă. Formatul general al unei comenzi UNIX este:

Code:

$ comanda  [optiune(optiuni)] [argument(e)]

În formatul general de mai sus, identificăm următoarele componente: semnul dolar $ reprezintă prompterul shell, comanda reprezintă programul executabil,  optiune/optiuni identifică posibilitatea modificării programului executabil pentru a rula în condiţii specifice iar  argument/argumentereprezintă fişier (fişiere) sau director (directoare), inclusiv cu calea către fişierul sau directorul specificat, sau un text. Separarea acestor componente se face prin semnul spaţiu; pe o singură linie putem introduce până la 256 de caractere (nu se recomandă, desigur, folosirea unui număr atât de mare de caractere pe o singură linie).
Toate comenzile UNIX sunt scrise cu litere mici.
Opţiunile sunt formate din litere precedate de semnul liniuţă sau minus (-). Se pot combina mai multe opţiuni folosind un singur semn minus.
Opţiunile pot fi atât litere mici cât şi litere mari, în funcţie de comandă. Nu toate comenzile necesită toate cele 3 componente. Se pot scrie mai multe comenzi pe aceeaşi linie, separate de caracterul punct şi virgulă (.
Principala comandă de navigare în cadrul sistemului de fişiere UNIX este cd (change directory). O altă comandă folosită pentru a afla directorul curent este pwd (print working directory). 
Comanda  pwd este des utilizată pentru a ne reaminti directorul în care ne alfăm la un moment dat (directorul curent). Comanda  pwd este folosită fără opţiuni si fără argumente; trebuie doar să tastăm pwd la linia de comandă şi să apăsăm tasta ENTER. Presupunând că ne aflăm în directorul /home/serban/test, vom obţine următorul răspuns al comenzii pwd:

Code:

$ pwd 
/home/serban/test

Modificarea directorului curent  şi navigarea în cadrul structurii sistemului de fişiere  şi directoare se face utilizând comanda  cd (change directory). Această comandă acceptă ca argument atât căi relative cât şi căi absolute. Sintaxa generală a acestei comenzi este:

Code:

$ cd  [nume_director]

Exemple:

Code:

$ cd  /tmp

Schimbă directorul curent în directorul /tmp, acest director devenind directorul curent, iar:

Code:

$ cd  /usr/stud

Schimbă directorul curent în directorul /usr/stud.
Observaţie:
Există două modalităţi de referire a unei căi în structura de fişiere UNIX:  calea absolută şi  calea relativă. O cale absolută este aceea care pleacă din rădăcină, deci începe cu "/". Un exemplu de cale absolută este: /usr/bin.
O cale relativă nu începe cu "/", ci reprezintă o localizare relativă la directorul curent de lucru.
Căile ce încep cu „../”, „./” sau altceva diferit de „/” sunt căi relative.
Căile relative au avantajul că sunt mai scurte decât căile absolute; pentru a le utiliza însă, trebuie să cunoaştem directorul în care ne aflăm deoarece acesta este punctul de plecare al căii relative.
Un exemplu de cale relativă întâlnim în exemplul următor:

Code:

$ cd  ../../bin

Uneori este mai uşor să utilizăm meta-caractere. În UNIX, caracterul star (*) este un caracter special (meta-caracter) şi semnifică orice combinaţie de caractere. Spre exemplu, comanda "cd /u*/s*" ne poziţionează în directorul  /usr/stud dacă acest director este singurul ce corespunde şablonului specificat. Mai multe noţiuni despre meta-caractere vor fi prezentate în cadrul capitolului curent.
Alte exemple:

Code:

$ cd

Comanda  cd apelată  fără nici un argument ne poziţionează în directorul home.

Code:

$ cd ..

Această comandă ne poziţionează în directorul părinte al directorului curent (cu un nivel mai sus în structura arborescentă de directoare).

Code:

$ cd ~

Această comandă ne poziţionează în directorul home.

Code:

$ cd ~-

Dacă se foloseşte shell-ul Korn, această comandă ne poziţionează în directorul anterior de lucru.

Code:

$ cd ~nume_utilizator

Această comandă ne poziţionează în directorul home al utilizatorului identificat prin nume_utilizator.
Listarea conţinutului unui director Comanda  ls (list) este folosită pentru listarea fişierelor  şi directoarelor, cu informaţii despre acestea. Comanda ls apelată simplu, fără opţiuni, listează fişierele din  directorul curent. Fişierele ale căror nume încep cu "." sunt considerate fişiere ascunse şi nu vor fi afişate în acest caz.
Fişierele ascunse sunt, de regulă, folosite pentru a personaliza mediul de lucru al unui utilizator. Aceste fişiere nu sunt implicit afişate deoarece nu sunt editate frecvent. Directorul curent (.) şi directorul părinte (..) sunt şi ele ascunse şi nu sunt afişate deoarece încep cu semnul punct (.).

Comanda ls are o serie întreagă de opţiuni, fiind una dintre cele mai folositoare şi flexibile comenzi UNIX. 
Exemple:

Code:

$ ls -a

Această comandă este folosită pentru a afişa toate fişierele, inclusiv cele ascunse.

Code:

$ ls -l

Această comandă ne oferă un "listing lung", adică informaţii suplimentare legate de fişiere (nu numai numele acestora). Aceste informaţii cuprind date referitoare la drepturile de acces la fişiere, proprietarul  şi grupul cărora aparţin, dimensiune, data şi ora ultimei modificări.

Code:

drwxr-xr-x  2 root     sys        60676 Aug 22  1994 Lib 
-r--r--r--     1  root     sys        60676 Aug 22  1994 README 
drwxr-xr-x  2 root     sys        60676 Aug 22  1994 Source 
-rwxr-xr-x  2 root     sys        60676 Aug 22  1994 gzexe 
-rwxr-xr-x  2 root     sys        60676 Aug 22  1994 gzip         
-rwxr-xr-x  1 bin      bin       242436 Feb 20 16:07 httpd 
-rwsr-xr-x  1 uucp    uucp      599604 Sep 22  1995 kermit       
-rwxr-x--x  1 root     sys       171195 Jan 22 12:15 memhog       
-rwxr-x--x  1 root     sys         5599 Jan 22 12:15 nlsym        
-rwxr-xr-x  2 root     sys       553836 Feb 20 16:40 perl      
-rwxr-xr-x  2 root     sys       553836 Feb 20 16:40 perl5.003 
-rwxr-xr-x  1 root     sys        13855 Feb 20 16:40 perlbug    
-rwxr-xr-x  1 root     sys         8984 Feb 20 16:40 perldoc     
drwxr-xr-x  2 root     sys        60676 Aug 22  1994 src 
-rwxr-x--x  1 root     sys       108781 Jan 22 12:15 u486mon

Funcţionalităţile celor două opţiuni de mai sus pot fi combinate folosind comanda ls -al. În figura 2.2 avem un exemplu de listare a fişierelor dintr-un director.
Alte exemple:

Code:

$ ls -al /tmp

Se poate specifica în mod explicit directorul pentru care să se facălistarea. Astfel, comanda anterioară va lista fişierele conţinute în directorul
tmp.

Code:

$ ls -alR /usr | more

Comanda anterioară va lista informaţiile despre fişierele din directorul /usr, precum şi din toate subdirectoarele acestuia. Opţiunea care determină acest lucru este -R. Un exemplu de listing pentru comanda ls -alR este prezentat în figura 2.3. Comanda more precizează că afişarea se va face pagină cu pagină.



Code:

$ ls -ld /usr

Comanda anterioară listează informaţii despre însăşi directorul /usrşi nu despre conţinutul acestuia. Aceste informaţiii sunt utile atunci când vrem să verificăm drepturile de acces la un director. 
În fiecare linie din listingul comenzii ls –al (ca cel din figura 2.2), primul caracter reprezintă tipul fişierului (d pentru director, - pentru fişier simplu,  l pentru fişier legătură, etc.). Următoarele 9 caractere reprezintădrepturile de acces la fişier pentru utilizatorul care este proprietarul fişierului, pentru grupul din care face parte proprietarul şi pentru ceilalţi utilizatori (în această ordine).

Code:

$ ls -F



Figura 2.4 Listing al comenzii ls -F

Această comandă afişează informaţii legate de tipul fişierelor.
Dacă fişierul afişat este director, numele acestuia este urmat de semnul slash (/).
Dacă fişierul este un fişier simplu ASCII, fără format special, nu apare nici un simbol special după numele acestuia. În cazul unei aplicaţii, comenzi sau fişier script ce poate fi executat, numele fişierului este urmat de caracterul asterisk (*).
Dacă numele fişierului este urmat de simbolul at (@) înseamnă  că acest fişier este o legătură simbolică. În figura 2.4 avem un exemplu de listing pentru comanda ls -F.



Coloana 1: Ne arată faptul că un fişier este director(d), fişier obişnuit (-), sau un tip special de fişier.
Coloanele 2-4: Ne arată care sunt drepturile de acces la fişier pentru utilizatorul care este proprietarul fişierului.  Drepturile de acces pot fi: de citire (r), scriere (w), şi execuţie (x).
Coloanele 5-7: Ne arată care sunt drepturile de acces la fişier pentru grupul proprietar al fişierului.  Drepturile de acces pot fi aceleaşi: citire (r), scriere (w) şi execuţie (x).
Coloanele 8-10: Ne arată care sunt drepturile de acces la fişier pentru utilizatorii care nu sunt în grupul proprietar al fişierului (others). Drepturile de acces pot fi aceleaşi: citire (r), scriere (w) şi execuţie (x).
Drepturile de acces la fişiere şi directoare se pot modifica folosind comanda  chmod (change mode). Mai multe despre această comandă în capitolul 5.

Tipuri de fişiere UNIX




Tipurile de fişiere UNIX sunt prezentate în tabelul 2.5.
Caracteristici:
* Fişierele simple (-) 
• Nu este impusă nici o structură asupra conţinutului - acesta reprezintă o înşiruire de octeţi;
• Aceste fişiere pot fi text (ASCII) sau binare.
* Fişiere director (d) 
• Reprezintă un fel de tabel de fişiere;
• Are o structură internă precis definită;
• Oferă posibilitatea organizării sistemului de fişiere.
* Fişierele bloc (b) 
• Identifică un dispozitiv;
• Este un bloc de I/O;
• Pot identifica unităţi floppy, hard-discuri, unităţi de bandă.
* Fişiere caracter (c ) 
• Identifică un dispozitiv;
• Reprezintă caractere de I/O;
• Pot identifica porturi seriale, paralele (terminale, imprimante).

* Fişiere de legătură simbolică (l) 
• Sunt fişiere pointer către alt fişier existent;
• Sunt de regulă folosite pentru a oferi un alias altui fişier.
* Fişiere de memorie partajată (m) 
• Permit mai multor programe să acceseze un spaţiu comun de memorie;
• Folosite de regulă de programele de aplicaţii.
* Fişiere pipe (p) 
• Folosite pentru a transmite date între comenzi sau programe.
* Fişiere semafor (s) 
• Folosite pentru sincronizarea proceselor active concurente;
• Folosite de programele de aplicaţii.



Considerând listingul anterior, putem observa  şi alte informaţii legate de fişierele şi directoarele afişate:
* Numărul de legături (link-uri) – reprezintă numărul de legături simbolice către acest fişier;
* Proprietarul – reprezintă numele utilizatorului care deţine acest fişier;
* Grupul – reprezintă numele grupului de utilizatori din care face parte proprietarul;
* Dimensiunea - este exprimată în octeţi;
* Data – data şi ora ultimilor modificări făcute asupra fişierului sau data de creare a fişierului;
* Numele fişierului. 

Observaţie
Pe un sistem Linux, comanda ls derivă din proiectul GNU fileutils, având o întreagă serie de opţiuni şi caracteristici speciale. Spre exemplu, numele de fişiere pot apărea listate în culori în funcţie de tipul de fişier.
Culorile folosite la afişare sunt definite în fişierul  /etc/DIR_COLORS; acestea se pot personaliza folosind  şi fişierul  .dir_colors din directorul curent home. 
Formatul acestui fişier este definit în fişierul  /etc/DIR_COLORS.
Pentru a afişa numele fişierelor fără culori dar cu simboluri, se pot folosi opţiunile  --color şi   --classify. În mod asemănător cu opţiunea  -F, simbolurile  --classify sunt următoarele: „/”pentru directoare, „*” pentru programe, „@” pentru legături simbolice, „|” pentru fişiere de tip pipe şi „=” pentru fişiere de tip socket. 
Astfel, listingul comenzii:

Code:

$ ls --color=never --classify 
studenti/  lista.sh*  text.sub

semnifică faptul că studenti este director, iar fişierul lista.sh este executabil.

2.6 Caractere speciale în UNIX

Caracterele speciale sau metacaracterele sunt caractere cu semnificaţie specială pentru shell-ul UNIX. În general, caracterele de pe tastatură care nu sunt alfanumerice sunt metacaractere. Metacaracterele sunt utilizate împreună cu majoritatea comenzilor UNIX pentru a oferi o mai mare flexibilitate. 
Câteva dintre metacaracterele folosite în UNIX sunt similare cu cele utilzate în MS-DOS. Caracterul asterisk (*) şi semnul de întrebare (?) sunt metacaractere cunoscute şi sub numele de wildcard-uri, fiind folosite pentru a lucra cu grupuri de fişiere într-un mod mai eficient. În tabelul 2.6 sunt prezentate câteva dintre cele mai folosite metacaractere împreună cu o scurtă descriere a funcţionalităţii acestora.   
Fiind vorba despre nişte caractere speciale, trebuie să nu folosim metacaractere atunci când denumim un fişier sau un director. Caracterul punct ( . )  şi caracterul  underscore ( _ ) sunt unicele caractere non alfanumerice care nu sunt metacaractere. Din această cauză aceste douăcaractere pot fi folosite în cadrul numelor de fişiere. Semnul minus ( - ), cu toate că este metacaracter, poate fi, de asemenea, utilizat în cadrul numelor de fişiere.

Cele mai uzuale metacaractere





Cele mai utilizate metacaractere sunt asteriskul (*), semnul întrebării
( ? ) şi parantezele pătrate ( [ ] ).
Caracterul asterisk sau star (*) este un caracter de substituţie pentru un caracter sau mai multe (sau nici unul !), cu excepţia caracterului punct de început al unui fişier ascuns. Caracterul star poate fi deosebit de util în unele situaţii, precum în cazul comenzilor ls (list),  cp (copy), mv (move) sau rm (remove). Dacă dorim să afişăm dintr-un director doar fişierele al căror nume începe cu litera “s” putem folosi comanda ls s*. Un exemplu de listing este în figura 2.7.


_______________________________________
Citeşte regulamentul forumului aici.

pus acum 14 ani
   
Gamer
Administrator

Din: Transilvania
Inregistrat: acum 14 ani
Postari: 202
3 ADMINISTRAREA FIŞIERELOR  ŞI DIRECTOARELOR

3.1 Introducere

În acest capitol vom prezenta atât comenzile de bază cât şi comenzi mai avansate utilizate în administrarea fişierelor  şi directoarelor pe un sistem UNIX.
Ne vom concentra asupra utilizării comenzilor la linia de comandă. Cu toate că administrarea fişierelor şi directoarelor se poate face şi prin utilizarea unei interfeţe grafice precum GNOME, spre exemplu, există două motive suficient de puternice pentru a ne convinge că un bun utilizator UNIX trebuie să ştie să folosească linia de comandă: ƒ în primul rând, linia de comandă oferă posibilitatea utilizării a numeroase opţiuni, deci oferă o mai mare flexibilitate;  în al doilea rând, prin intermediul liniei de comandă se poate face administrarea pe un sistem aflat la distanţă, pe care nu putem folosi o interfaţă grafică (cazul cel mai des întâlnit).

3.2 Funcţionalităţi ale liniei de comandă şi comenzi de bază

Cunoaşterea utilizării comenzilor la linia de comandă reprezintă piatra de bază ce stă la temelia cunoaşterii sistemului  de operare UNIX.
Multe dintre instrumentele de management ale sistemului de operare  şi dintre aplicaţiile de configurare a dispozitivelor hardware presupun folosirea liniei de comandă. De asemenea, de multe ori este necesară crearea aşa numitelor shell-scripturi, programe utilizate de regulă pentru automatizarea unor activităţi specifice sistemului de operare. 
Fişierele shell-script sunt compuse din comenzi UNIX  şi sunt asemănătoare cu fişierele de comenzi (batch) utilizate şi în alte sisteme de operare pentru reţea.

3.2.1 Folosirea combinaţiilor de control

Combinaţiile de control sunt utilizate pentru a realiza anumite sarcini specifice, cum ar fi terminarea sau pornirea afişării pe ecran, ieşirea din sesiunea de lucru curentă, terminarea imprimării etc.
Majoritatea tastaturilor de PC actuale au două taste de control, inscripţionate cu  Ctrl şi care se găsesc în colţurile stânga-jos  şi dreapta-jos. Atunci când apare pe ecran, semnul corespunzător tastei Ctrl este semnul caret  (^). Pentru introducerea unei secvenţe de control, se ţine apăsată tasta Ctrl şi simultan se apasă şi o altă tastă de pe tastatură. 
Cea mai uzitată secvenţă de control este probabil secvenţa Ctrl+c, utilizată pentru întreruperea unui program sau proces ce se află în execuţie.
Această combinaţie apare pentru shell drept ^C şi se obţine în urma apăsării simultane a tastelor Ctrl şi a tastei C.

Alte combinaţii de control care mai pot fi folosite sunt următoarele:

* Ctrl+s - determină oprirea defilării informaţiei pe ecran. Această combinaţie poate fi utilizată, spre exemplu, atunci când vizualizăm cu ajutorul comenzii cat un fişier mai mare pe ecran şi dorim oprirea defilării informaţiei pe ecran.
* Ctrl+q - reia defilarea informaţiei pe ecran atunci când aceasta a fost întreruptă cu Ctrl+s.
* Ctrl+c - întrerupe activitatea curentă şi este des folosită pentru oprirea forţată a programelor sau proceselor aflate în execuţie sau în cazul unor listinguri interminabile pe ecran obţinute în
urma comenzilor man,  cat sau ls. De exemplu, în cazul în care am folosit comanda man şi vrem să oprim defilarea în continuare a ecranelor cu paginile de manual (am văzut ceea ce ne interesa şi vrem să terminăm afişarea), putem folosi Ctrl+c pentru a ne întoarce la prompter (în acest caz, un rezultat identic se obţine prin apăsarea tastei q - quit).
* Ctrl+d - se foloseşte pentru a marca sfârşitul de fişier sau ieşirea (exit). Această combinaţie este folosită fie pentru a ieşi din unele utilitare UNIX (bc, write, etc.), pentru ieşirea dintr-o fereastră terminal sau pentru ieşirea din sesiunea curentă de lucru (logout).
Ca o regulă generală, putem încerca combinaţia  Ctrl+d ori de câte ori Ctrl+c nu funcţionează.
* Ctrl+u - se foloseşte pentru ştergerea întregii linii de comandă. Se poate folosi în cazul în care dorim să ştergem rapid întreaga linie deoarece ne-am hotărât să nu mai rulăm comanda introdusă.
* Ctrl+w - se foloseşte pentru ştergerea ultimului cuvânt de la linia de comandă.
* Ctrl+h - se foloseşte pentru ştergerea ultimului caracter introdus la linia de comandă. Se foloseşte atunci când suntem conectaţi la un sistem la distanţă şi tasta Backspace nu funcţionează deoarece pe sistemul de la distanţă această tastă nu este setată să acţioneze precum combinaţia Ctrl+h.

3.2.2 Determinarea tipului unui fişier

În cazul lucrului cu diverse fişiere este deosebit de util să cunoaştem
tipul fişierului cu care lucrăm. În acest sens, putem folosi:

Comanda file

Comanda  file este folosită pentru a determina tipul unui anumit fişier. Ea diferă puţin pentru fiecare implementare UNIX. Pentru un sistem UNIX, listingul în cazul unui fişier text va fi:

Code:

$ file temp.txt 
temp.txt: ascii text

În exemplul următor avem cazul unui sistem Linux:

Code:

$ file serban 
serban: ASCII text

Alt exemplu consideră afişarea tipurilor de fişiere al căror nume
începe cu litera „c” din directorul /bin:

Code:

/bin $ file c* 

cat: ELF 32-bit LSB executable 80386 
cd: sh commands text                
chgrp: ELF 32-bit LSB executable 80386 
chmod: ELF 32-bit LSB executable 80386 
chown: ELF 32-bit LSB executable 80386 
chroot:ELF 32-bit LSB executable 80386 
cksum: ELF 32-bit LSB executable 80386 
clear: Bourne/Korn shell commands text

3.2.3 Vizualizarea fişierelor text

Pentru a vizualiza fişiere de tip text (ASCII) vom prezenta în cele ce
urmează comenzile cat, more, head şi tail.

Comanda cat

Comanda  cat (denumirea provine de la  concatenate) ne oferăposibilitatea vizualizării fişierelor text. Deoarece comanda cat afişează rapid pe ecran conţinutul fişierului respectiv, trebuie să fim pregătiţi să folosim combinaţiile Ctrl+s şi Ctrl+q prezentate anterior sau să folosim comanda more. Exemplu:

Code:

$ cat /home/razvan/.profile

va afişa conţinutul fişierului /home/razvan/.profile pe ecran. În cazul în care
conţinutul fişierului este mai mare decât un ecran, această comandă poate fi
conectată prin pipe cu comanda more astfel:

Code:

$ cat /etc/passwd | more

şi astfel se va afişa ecran cu ecran conţinutul fişierului /etc/passwd.
Comanda cat poate fi utilizată şi pentru concatenarea a două sau mai
multe fişiere într-unul singur.  În acest caz, sintaxa este următoarea:

Code:

$ cat fisier_1 [fisier_2 [fisier_n]] > fisier_complet

Fişierele  fisier_1,  fisier_2, ...,  fisier_n vor fi concatenate într-unul
singur, fisier_complet.

Comanda more 

Comanda  more oferă posibilitatea vizualizării fişierelor text –
acestea sunt afişate ecran cu ecran. Exemplu:

Code:

$ more /etc/passwd

Comanda de mai sus afişează conţinutul fişierului /etc/passwd ecran
după ecran. Pentru defilarea liniilor pe ecran se pot folosi: tasta <SPACE>
pentru defilarea unui întreg ecran, tasta <ENTER> pentru defilarea unei
singure linii şi tasta <q> pentru terminarea afişării. 

Observaţie: 

Doar acele fişiere care determină defilarea ecranului pot fi editate cu ajutorul editorului standard UNIX,  vi  (visual editor) în timpul vizualizării fişierului prin intermediul comenzii  more. O alternativă a comenzii more este comanda less, considerată de mulţi mai performantă. Această comandăeste disponibilă pe majoritatea distribuţiilor Linux  şi UNIX; conţine funcţionalităţi în plus precum deplasarea înapoi. Spre deosebire de comanda more începe afişarea fişierului înainte ca acesta să fie încărcat în întregime în memorie.

Comanda head
Comanda  head este utilizată pentru afişarea primelor  n linii dintrunul sau mai multe fişiere.  Dacă se omite specificarea numărului de linii, se afişează în mod implicit primele 10 linii din fişier. Comanda head este utilă în cazul în care se doreşte vizualizarea rapidă a primelor linii dintr-un fişier, fără a lua în considerare mărimea acestuia. Sintaxa generală a comenzii este următoarea:

Code:

$ head [-n] fisier(e)

În figura 3.1 este prezentat un listing al comenzii head -5 lista (sunt
afişate primele 5 linii ale fişierului lista).



Figura 3.1 Exemplu de listing al comenzii head

Comanda tail 
Comanda  tail se foloseşte pentru afişarea ultimelor  n linii dintr-un fişier text. În mod asemănător cu comanda head, dacă se omite specificarea numărului de linii, se afişează în mod implicit ultimele 10 linii din fişier.
Comanda  tail este utilă în cazul în care se doreşte vizualizarea rapidă a ultimelor intrări într-un fişier log de dimensiuni mari. 
Utilitarele de backup utilizează frecvent această metodă de a scrie rezultatele într-un fişier log care ne arată pentru ce fişiere a fost făcută copia de siguranţă şi când. Ultima linie dintr-un astfel de fişier log conţine, de regulă, numărul total de fişiere care au fost procesate şi mesaje ce indicădacă procesul de backup s-a încheiat cu succes. Comanda  tail poate fi folosită în două moduri:

Code:

$ tail [-n] fisier(e)

sau

Code:

$ tail [+n] fisier(e)

În primul caz sunt afişate ultimele n linii din fişierul specificat, pe când în cel de-al doilea caz se porneşte afişarea începând cu a n-a linie din fişier, până la sfârşit. În figura 3.2 este prezentat un listing al comenzii  tail -5 lista (sunt afişate ultimele 5 linii ale fişierului lista).



Figura 3.2 Exemplu de listing al comenzii tail

3.2.4 Comenzi pentru compararea fişierelor

Pentru a vedea dacă două fişiere sunt diferite sau nu putem folosi fie comanda  wc, fie comanda  diff. Dacă specificul comenzii wc este de fapt altul, pentru a vedea într-adevăr diferenţele dintre cele două fişiere trebuie să utilizăm comanda diff. Să prezentăm în continuare cele două comenzi.

Comanda  wc
Comanda  wc provine de la  "word count" şi este utilizată pentru a determina numărul de caractere, cuvinte sau linii conţinute într-un fişier text. De asemenea, comanda mai poate fi utilizată atunci când dorim să comparăm două fişiere. Apelată  fără opţiuni, comanda  wc ne oferă informaţii despre numărul de linii, cuvinte word, octeţi din fişierul specificat. Folosind opţiunile comenzii, se poate specifica să se afişeze doar ce ne interesează. Formatul general şi opţiunile sunt:

Code:

$ wc [-optiune] fisier(e)

Opţiunile sunt:

-l       numără liniile
-w      numără cuvintele
-c       numără octeţii
-m      numără caracterele

Spre exemplu, comanda wc –l /etc/passwd  poate afişa:  26 passwd, ceea ce înseamnă că fişierul /etc/passwd conţine 26 de linii. Se pot specifica mai multe fişiere în cadrul comenzii  wc, de asemenea se pot folosi  şi metacaractere. În figura 3.3 este prezentat un alt exemplu unde sunt afişate informaţii referitoare la toate fişierele ce încep cu litera  l din directorul curent de lucru, precum şi un total al acestor informaţii.



Figura 3.3 Exemplu de listing al comenzii wc

Conform exemplului din figura 3.3, fişierul  lista conţine 17 linii,  90 de cuvinte  şi 610 octeţi, fişierul  lista1  are 10 linii, 83 de cuvinte  şi  556 octeţi iar fişierul lista2 are 7 linii, 7 cuvinte şi 54 de octeţi. În total, cele 3 fişiere însumează 34 de linii, 180 de cuvinte şi 1220 de octeţi.

Comanda diff 

Comanda  diff (difference) este utilizată pentru a compara două
fişiere text şi a găsi diferenţele dintre acestea. Formatul general al comenzii
este:

Code:

$ diff [optiune] fisier1 fisier2

Opţiunile acestei comenzi sunt:
* -i  ignoră diferenţele între litere mari şi litere mici (B este totuna cu b etc.);
* -c oferă o comparare detaliată şi produce un listing pe larg a diferenţelor, începând cu identificarea fişierelor  şi datele de creare a respectivelor fişiere.



Figura 3.4 Exemplu pentru comanda diff

Folosită cu opţiunea -c, comanda diff afişează informaţiile detaliate ale celor două fişiere, apoi o linie cu asterisk-uri (*) şi liniile din fişierul fisier1, cu un semn minus (-) în faţa liniilor ce diferă de  fisier2. Acelaşi format de afişare este valabil şi pentru fisier2,  cu  semnul  +  în  faţa liniilor diferite faţă de cele din fisier1. În figura 3.4 avem un exemplu de afişare detaliată pentru comanda diff, utilizată cu opţiunea -c. Este afişat conţinutul celor două fişiere cu ajutorul comenzii cat, apoi listingul comenzii diff.

Observaţie.
Dacă nu există diferenţe între cele două fişiere (dacă cele două fişiere sunt identice) atunci comanda diff nu va afişa nimic.

3.2.5 Comenzi de creare şi ştergere pentru fişiere şi directoare

Înainte de a descrie modalitatea de creare şi ştergere a fişierelor şi directoarelor în UNIX, să reamintim regulile de stabilire a numelor pentru fişiere şi directoare. Acestea sunt:

* Lungimea maximă a numelui unui fişier sau director nu poate depăşi 255 de caractere (cu toate acestea, numele prea lungi nu sunt recomandate);
* Se recomandă utilizarea caracterelor alfanumerice împreună  cu două caractere non-alfanumerice: liniuţa de unire (semnul minus -) şi liniuţa de subliniere (caracterul underscore _ );
* Se pot utiliza  şi alte caractere non-alfanumerice, dar nu este recomandat;
* Numele de fişiere conţin de regulă şi o extensie, dar pot avea şi mai multe extensii.
* Numele directoarelor nu au de regulă extensii, dar acest lucru nu este interzis.

Crearea fişierelor

De regulă, fişierele şi directoarele sunt create de utilizatorii obişnuiţi sau de către administratorul sistemului, dar există şi multe aplicaţii care creează fişiere. O modalitate de a crea un fişier nou, fără conţinut este aceea de a utiliza comanda touch. Sintaxa comenzii este următoarea:

Code:

$ touch fisier1 fisier2 … fisierX

Cu ajutorul comenzii  touch se pot crea chiar mai multe fişiere simultan, având în vedere că uneori trebuie să existe un anumit fişier înainte de a adăuga informaţii în el. Comanda  touch poate fi utilizată şi pentru a actualiza data şi ora ultimului acces la fişier, care va reseta bitul  archive, făcând posibil din nou backup-ul (utilitarele de backup analizează de regulă bitul archive pentru a actualiza copia fişierului respectiv sau nu). 
În figura 3.5 avem un exemplu prin care am creat 5 fişiere cu comanda  touch. Dacă fişierele respective nu există, comanda  touch le va crea, dacă există, va fi modificată doar data  şi ora timpului de acces/modificare.



Figura 3.5 Exemplu de utilizare a comenzii touch

Crearea directoarelor
În UNIX putem crea directoare cu ajutorul comenzii mkdir. Sintaxa comenzii este următoarea:

Code:

$ mkdir dir1 dir2 … dirX

Cu ajutorul comenzii mkdir se pot crea chiar mai multe directoare simultan, cu condiţia să avem drepturi (de acces) pentru a crea directoarele respective. În caz contrar, vom primi un mesaj de eroare de genul:

Code:

$ mkdir /usr/Test 
mkdir: Failed to make directory “/usr/Test”; Permission denied

Observaţie.
Pentru a crea o structură de directoare pe mai multe nivele trebuie să utilizăm comanda mkdir cu opţiunea -p. De exemplu, pentru a crea structura de directoare dir1/dir2/dir3 din directorul curent, vom utiliza comanda:

Code:

$ mkdir dir1/dir2/dir3

Considerând alt exemplu, comanda

Code:

$ mkdir –p /home/razvan/temp/seminar_unix

creează un nou director intitulat  /home/razvan/temp/seminar_unix, precum  şi toate directoarele intermediare necesare. Spre exemplu, dacă există doar directorul  /home/razvan, atunci vor fi create directoarele  temp(ca subdirector al directorului  /home/razvan)  şi  seminar_unix (ca subdirector al directorului /home/razvan/temp).

Ştergerea fişierelor

În UNIX putem  şterge fişiere cu ajutorul comenzii  rm. Sintaxa comenzii este următoarea:

Code:

$ rm [-i] fisier(e)

Fişierele şterse prin comanda rm sunt permanent şterse, fără a exista posibilitatea recuperării (doar când folosim o interfaţă grafică recuperarea mai este posibilă, deci trebuie să fim atenţi cum folosim această comandă.
Prin utilizarea opţiunii  -i avem posibilitatea de a fi atenţionaţi înainte de ştergerea fişierelor. 

Exemple:

Code:

$ rm student.txt

Se şterge fişierul student.txt

Code:

$ rm stud1 stud2 stud3

Se şterg fişierele stud1, stud2 şi stud3

Code:

$ rm -r TEMP

Se şterge directorul TEMP, împreună cu tot conţinutul său

Ştergerea directoarelor
Ştergerea directoarelor se face fie cu comanda rm -r nume_director, fie cu  rmdir. Pentru a putea însă şterge un director cu comanda  rmdir, trebuie ca directorul sau directoarele respective să fie goale, adică  să nu conţină nimic, nici un fişier sau subdirector. În caz contrar, vom obţine un mesaj de eroare, ca în figura 3.6. Comanda rmdir poate fi folosită astfel:

Code:

$ rmdir dir1 dir2 … dirX

Directoarele specificate trebuie să fie goale



Figura 3.6 Mesaj de eroare în cazul încercării de ştergere a unui director  care nu este gol cu comanda rmdir

Pentru a  şterge directoare care nu sunt goale, trebuie să utilizăm comanda rm -r, astfel:

Code:

$ rm -r [i] dir1 dir2 … dirX

3.2.6 Comenzi de copiere, redenumire, mutare şi redirectare
Copierea fişierelor


Copierea fişierelor şi directoarelor se face cu ajutorul comenzii cp. O operaţie uzuală este aceea de copiere a unui fişier. Spre exemplu, dacă trebuie modificat un fişier, vom face o copie de siguranţă a acestuia apoi vom face modificările necesare. Dacă dorim să ne întoarcem la versiunea anterioară a fişierului, putem folosi copia făcută mai înainte.

De regulă, putem copia un fişier în două moduri: fie îl copiem în acelaşi director cu alt nume, fie îl copiem în alt director cu acelaşi nume (putem să specificăm şi un nume diferit, totuşi). Pentru a copia fişierul în acelaşi director vom folosi comanda:

Code:

$ cp [-i] fis_sursa fis_destinatie

unde  fis_sursa este numele fişierului sursă iar  fis_destinatiereprezintă noul nume. În exemplul din figura 3.7 este copiat fişierul student cu noul nume  student.bak. Am obţinut în acest mod o copie a fişierului student.



Figura 3.7 Fişierul student este copiat cu noul nume student.bak  în directorul curent
Pentru a copia un fişier în alt director (păstrând acelaşi nume pentru fişier) vom folosi comanda:

Code:

$ cp [-i] fis_sursa dir_destinatie[

unde  fis_sursa  este  numele  fişierului sursă iar dir_destinatiereprezintă numele directorului destinaţie. În acest caz numele fişierului se păstrează, însă se poate specifica şi alt nume. Comanda:

Code:

$ cp razvan temp

va copia fişierul razvan în subdirectorul temp (dacă acesta există.
De asemenea, comanda:

Code:

$ cp /usr/razvan/student

va copia fişierul  student din directorul  /usr/razvan în directorul curent, iar

Code:

$ cp /usr/razvan/student /usr/serban

va copia fişierul  student din directorul  /usr/razvan în directorul /usr/serban.

Comanda  cp poate fi, de asemenea, folosită împreună cu metacaracterele *  şi ? pentru a se copia mai multe fişiere deodată. Spre exemplu, în figura 3.8 se copiază toate fişierele al căror nume începe cu litera l în subdirectorul temp.



Figura 3.8 Toate fişierele al căror nume încep cu l sunt copiate în subdirectorul temp

Observaţie.
Comanda cp nu ţine cont de existenţa fişierului destinaţie ce urmează a fi copiat. De aceea, pentru a preveni  ştergerea accidentală a vechilor fişiere, este util să folosim opţiunea -i (interactive) ca măsură de securitate.
Utilizarea acestei opţiuni face ca atunci când fişierul destinaţie există să fim întrebaţi dacă dorim copierea peste fişierul vechi sau nu, ca în figura 3.9.



Figura 3.9 Utilizarea comenzii cp cu opţiunea -i pentru prevenirea ştergerii accidentale a fişierelor

Copierea directoarelor

Copierea directoarelor se face cu ajutorul comenzii cp -r (recursive).
Folosirea opţiunii  -r face ca directoarele să fie copiate cu tot cu subdirectoare, dacă este cazul. Pentru copierea un director vom folosi comanda:

Code:

$ cp -r[i] dir_sursa dir_destinatie

unde dir_sursa este numele directorului sursă iar dir_destinatie este numele directorului destinaţie. În figura 3.10 este prezentat un exemplu de copiere a unui director folosind comanda cp -r.



Figura 3.10 Utilizarea comenzii cp  -r pentru copierea unui director
Redenumirea fişierelor

Atât fişierele cât  şi directoarele pot fi redenumite cu ajutorul comenzii  mv (move). Această comandă poate fi utilizată cu două sensuri: pentru a redenumi un fişier în cadrul unui director sau pentru a muta (nu copia!) un fişier dintr-un director în altul. Redenumirea unui fişier se face astfel:

Code:

$ mv [-i] fis_sursa fis_destinatie

unde fis_sursa este numele vechi al fişierului iar fis_destinatie este noul nume al fişierului. Dacă directorul este acelaşi atât pentru sursă cât şi pentru destinaţie, este vorba despre o redenumire; dacă directoarele diferă, avem de-a face cu o mutare a fişierului dintr-un director în altul. În figura 3.11 avem un exemplu de redenumire: fişierul  lista este redenumit în lista_nou.



Figura 3.11 Redenumirea fişierului lista în lista_nou

Pentru a muta un fişier în alt director, vom folosi următoarea sintaxă

Code:

$ mv [-i] fis_sursa dir_destinatie

unde se specifică numele fişierului sursă  (fis_sursa)  şi numele directorului destinaţie (dir_destinatie). În figura 3.12 fişierul  lista2 este mutat în directorul temp.



Figura 3.12 Mutarea fişierului lista2 din directorul curent  în subdirectorul temp
Redenumirea directoarelor
Redenumirea unui director se face astfel:

Code:

$ mv [-i] dir_sursa dir_destinatie

unde  dir_sursa reprezintă vechiul nume al directorului iar dir_destinatie este noul numele al directorului. În figura 3.13 avem un exemplu de redenumire a unui subdirector în cadrul aceluiaşi director (dir1este redenumit în dir_nou)



Figura  3.13  Redenumirea unui subdirector în cadrul aceluiaşi director

În figura 3.14 este considerat un exemplu în care subdirectorul nu este redenumit în cadrul aceluiaşi director, ci este mutat în alt director (directorul dir_nou este mutat în directorul temp).



Figura 3.14 Mutarea unui subdirector în alt director

Alte exemple:

Code:

$ mv student.txt student.doc

Se redenumeşte fişierul student.txt cu noul nume student.doc

Code:

$ mv student temp

Se redenumeşte fişierul student în  temp (de remarcat este faptul că, dacă temp este un director, fişierul student va fi mutat în acel director).

Code:

$ mv student /home/serban/temp

Se mută fişierul student în directorul /home/serban/temp

Observaţie.
Ca  şi în cazul comenzii  cp,  este bine să prevenim  ştergerea (rescrierea) accidentală a vechilor fişiere  şi directoare, prin utilizarea opţiunii -i (interactive)  ca măsură de securitate. Utilizarea acestei opţiuni face ca atunci când un fişier sau director cu acelaşi nume există  să fim întrebaţi dacă dorim suprascrierea sau nu, ca în figura 3.15. Vom introduce în (no) dacă nu dorim acest lucru sau y (yes) dacă dorim suprascrierea.



Figura 3.15 Exemplu de utilizare a comenzii mv -i

Redirectarea intrărilor şi ieşirilor
Sistemul de operare UNIX oferă o facilitate deosebit de utilă de redirectare a intrărilor sau/şi ieşirilor unei comenzi. Toate operaţiile ce se desfăşoară într-un computer au intrări şi/sau ieşiri. De exemplu, tastatura reprezintă fişierul standard de intrare (denumit  stdin) iar monitorul (ecranul) reprezintă fişierul standard de ieşire (denumit  stdout). Toate comenzile UNIX au un fişier standard de intrare (input) şi un fişier standard de ieşire (output). Intrarea este, de regulă, tastatura iar ieşirea este, de regulă, ecranul monitorului. Cu ajutorul operatorilor de redirectare se pot schimba însă aceste setări implicite.
Redirectarea ieşirii se face utilizând operatorul  >, redirectarea intrării se face cu ajutorul operatorului < iar redirectarea erorilor (mesajelor de eroare obţinute în urma rulării unor comenzi) se face prin utilizarea combinaţiei 2>. În continuare este prezentat formatul general al redirectării.
Fişierul aflat după simbolul de redirectare poate fi un fişier text sau un fişier asociat unui dispozitiv  (fişier device),  având în vedere că în UNIX toate dispozitivele sunt definite sub formă de fişiere. Spre exemplu, ecranul monitorului este referit de fişierul /dev/console, unitatea de floppy disc este referită de  /dev/fd  iar imprimanta de  /dev/lp. Formatul general pentru redirectare este:

Code:

$ comanda simbol_redirectare fisier

unde  comanda este numele comenzii, simbol_redirectare este unul dintre simbolurile de redirectare existente iar fisier este numele unui fişier text sau numele unui fişier generic asociat unui dispozitiv UNIX.

Redirectarea intrării
Conform formatului general de mai sus, pentru redirectarea intrării unei comenzi vom folosi următoarea sintaxă:

Code:

$ comanda < nume_fisier

Un exemplu de utilizare al redirectării intrării este:

Code:

$ mail serban < lista

În care utilizatorului serban i se trimite prin email conţinutul fişierului lista. 
Redirectarea ieşirii
Redirectarea ieşirii unei comenzi determină crearea unui nou fişier în modul următor:

Code:

$ comanda > nume_fisier

Un exemplu de utilizare al redirectării ieşirii este:

Code:

$ ls > lista

în care este creat fişierul lista ce conţine ieşirea comenzii ls. Exemplul este prezentat şi în figura 3.16



Figura 3.16 Exemplu de redirectare a ieşirii

Observaţie.
Pentru a redirecta ieşirea unei comenzi poate fi folosit şi operatorul >> care are acelaşi efect cu > dar este folosit pentru a adăuga ieşirea la sfârşitul unui fişier existent, în loc de a suprascrie fişierul. 
Redirectarea erorilor
Redirectarea erorilor generate de comenzi este utilă atunci când se doreşte analiza lor. Adminstratorii de sistem şi programatorii fac acest lucru atunci când scriu shell-scripturi de administrare. Pentru a redirecta fişierul standard de eroare, se foloseşte ca operator de redirectare combinaţia  2>, astfel:

Code:

$ comanda 2> nume_fisier

Se creează un nou fişier sau se suprascrie peste cel existent.

În exemplul din figura 3.17 am redirectat erorile în fişierul eroare, care este afişat în continuare. Eroarea provine din faptul că am încercat să copiem un director cu comanda cp fără opţiunea -r.



Figura 3.17 Exemplu de redirectare a erorilor

Observaţie.
Am putea include aici şi operatorul pipe ( | ) care se foloseşte atunci când ieşirea unei comenzi este redirectată ca intrare pentru o altă comandă.
Efectul folosirii unei „secvenţe pipe” este acela al scrierii unui mic program, deoarece se pot înşirui până la 20-30 de comenzi într-o astfel de secvenţăpipe. Spre exemplu, dacă dorim afişarea ecran cu ecran a fişierelor din directorul curent (atunci când avem multe fişiere în director) putem folosi secvenţa pipe următoare:

Code:

$ ls -la | more

Crearea de legături
Pentru a salva spaţiu pe disc şi a nu face o copie a unui fişier, de multe ori putem crea o legătură  (link) către acesta. În acest mod putem accesa fişierul specificat şi din alte locaţii de pe hard disk. Crearea de astfel de fişiere tip legătură este utilă atunci când mai mulţi utilizatori trebuie să lucreze asupra aceluiaşi fişier (un proiect la care lucrează o echipă de programatori, de exemplu) sau atunci când se doreşte o referinţă la un fişier utilizându-se un nume mai scurt. Comanda folosită este comanda ln (link)iar formatul general al este:

Code:

$ ln fisier fisier_nou

Comanda anterioară crează un link pentru fişierul fisier în directorul curent, cu numele  fisier_nou; pentru crearea unei legături în alt director decât cel curent, vom folosi formatul:

Code:

$ ln fisier director/fisier_nou

Observaţie.
Atunci când este creat un fişier, este creată o legătură dintre director şi acel fişier. Numărul de legături pentru fiecare fişier este de cel puţin 1 (referinţa proprie). Numărul de legături este afişat în cea de-a doua coloană a listingului comenzii ls -l. De fiecare dată când este creată o legătură  către un fişier, numărul de legături ale acelui fişier este incrementat.
În figura 3.18 avem un exemplu în care este listat numărul de legături (1) către fişierul  test, este creată o legătură  către fişierul  test şi apoi vedem că numărul de legături a devenit 2.



Figura 3.18 Exemplu de creare a unei legături cu comanda ln

Observaţie.
Pentru a şterge un fişier de tip legătură se utilizează aceeaşi comandă rm, care va şterge legătura către fişier dar nu şi fişierul original. Odată cu ştergerea fişierului de tip link, numărul de legături al fişierului original este decrementat cu 1.

continua in urmatorul mesaj...


_______________________________________
Citeşte regulamentul forumului aici.

pus acum 14 ani
   
Gamer
Administrator

Din: Transilvania
Inregistrat: acum 14 ani
Postari: 202
3.3 Comenzi legate de hard discuri şi partiţii

În ultimii ani hard discurile au devenit deosebit de încăpătoare astfel încât majoritatea sistemelor de operare le pot administra cu relativă uşurinţă.
Majoritatea sistemelor de fişiere existente au o dimensiune minimă a fişierelor şi un număr maxim de fişiere şi/sau directoare ce pot fi stocate pe un dispozitiv fizic, ceea ce vine în contradicţie cu dimensiunile din ce în ce mai mari ale hard discurilor. 
Pentru a rezolva această problemă, sistemele de operare moderne oferă posibilitatea împărţirii discului fizic în mai multe discuri virtuale ce se numesc  partiţii.  Şi sistemele de operare Windows  şi Macintosh oferă posibilitatea de partiţionare logică a discurilor, cu toate că, pentru sistemele desktop (la care aceste două sisteme de operare sunt folosite cu predilecţie) această facilitate (şi, pe de altă parte, protecţie) nu este atât de imperioasă ca în  cazul  unui  sistem  utilizat  pe  post  de  server  într-o  reţea. Lucrurile stau diferit în lumea UNIX faţă de cea Windows; astfel, într-un sistem UNIX pot exista sute de discuri virtuale (transparent faţă de utilizatorul obişnuit) – iar directorul  home se poate afla pe două sau trei partiţii diferite. Unul dintre motivele acestei strategii UNIX este acela că programele ce rulează au deseori tendinţa de a lăsa în urma lor fişiere de tip log (iniţializare) sau temp (temporare) care pot umple în mod inutil spaţiul liber de pe hard disc. Mai mult însă, trebuie să avem o grijă deosebită când este vorba despre spaţiul liber de pe hard disc deoarece sistemul de operare UNIX îşi diminuează considerabil performanţele atunci când duce lipsă de spaţiu liber. În acest sens trebuie avute permanent în vedere dimensiunile partiţiilor, fişierele de dimensiuni mari şi modalitatea de control al acestora înainte de a deveni o problemă pentru sistemul de operare.
Pentru controlul asupra gradului de ocupare a sistemului de fişiere putem utiliza comenzile df, du şi dfspace.
Comanda df
Comanda  df  provine de la „disk free”  şi este utilizată pentru a determina mărimea spaţiului liber de pe disc. Exemple:
# df   
Simplul apel al comenzii df va afişa spaţiul liber (blocuri şi i-noduri) pentru toate sistemele de fişiere montate. Chiar şi acest apel al comenzii ne oferă o serie de informaţii utile:



# df /

Afişează spaţiul liber din directorul specificat: / (root).

# df -kvi


Afişează spaţiul liber pe toate sistemele de fişiere montate măsurat în kilobiţi şi i-noduri.
Comanda df diferă câte puţin de la o variantă UNIX la alta. Există o serie de opţiuni cu care această comandă poate fi apelată, în funcţie şi de varianta sistemului de operare, cum spuneam mai înainte. Spre exemplu, Linux are opţiunea  –h pentru această comandă, care produce următorul output:

# df –h




Formatul folosit aici este mai inteligibil: putem vedea cu uşurinţă  că atât /home cât şi /usr au un spaţiu neutilizat de câte 20 GB!.
Spre deosebire de alte variante UNIX, Solaris 8 are o comandă df ce ne oferă informaţii foarte diferite de output-ul de mai sus. Comanda df se concentrează mai degrabă asupra fişierelor şi a sistemului de fişiere decât asupra discurilor şi a spaţiului utilizat de pe acestea:



În acest caz este mai greu de observat ce se „întâmplă”; putem observa însă  că informaţiile prezentate sunt, în ordine, următoarele: punctul de montare, identificatorul dispozitivului, dimensiunea acestuia în blocuri de câte 1KB şi  numărul de fişiere existente pe acel dispozitiv. 
Din acest listing nu ne putem da seama însă care este procentul de spaţiu ocupat pe disc din total; această comandă apelată  fără nici o opţiune nu ne oferă informaţii foarte importante din punct de vedere al administratorului. Există însă opţiunea –t (totals), care oferă un listing mai relevant şi informaţii utile unui administrator de sistem:



Comanda dfspace
Comanda dfspace este o comandă specifică sistemelor SCO UNIX, oferind o modalitate de vizualizare a spaţiului liber de pe disc mai uşor de înţeles faţă de comanda clasică df.

Code:

Comanda du

Pentru a determina spaţiul ocupat de un director din sistemul de fişiere UNIX se poate folosi comanda du (disk usage). Exemple:

Code:

$ du

Apelată  fără nici o opţiune, comanda du ne arată spaţiul ocupat de către directorul curent pe disc, măsurat în blocuri;

Code:

$ du -k

Opţiunea –k ne va arăta spaţiul ocupat în blocuri de câte 1KB;

Code:

$ du /home/razvan

Această comandă ne prezintă spaţiul ocupat de către subdirectorul
/home/razvan.

Code:

$ du –ks /home/razvan/*

Afişează un sumar al fiecărui subdirector din directorul
/home/razvan.
De regulă, comanda  du generează un listing destul de lung atunci când este vorba despre multe fişiere  şi directoare existente în directorul pentru care se face afişarea. Să considerăm următorul exemplu:



Prima valoare de pe fiecare linie reprezintă dimensiunea fiecărui director. Această dimensiune însumează dimensiunile tuturor fişierelor  şi subdirectoarelor din acel director. Astfel, directorul Lynx are dimensiunea de 13974, incluzând subdirectorul  Lynx/src (6848) care, la rândul său conţine subdirectorul Lynx/src/chrtrans de dimensiune 1110.
Ultima linie reprezintă dimensiunea totală însumată a fişierelor, directoarelor şi subdirectoarelor: 28484. Care este unitatea de măsură? Din păcate, aceasta depinde de implementare; de exemplu, în cazul Linux Red Hat 7.2, pagina de manual pentru comanda du ne arată că unitatea de măsură nu este explicit specificată! Există, din fericire opţiunea –k care ne permite afişarea dimensiunilor în blocuri de câte 1KB, deci liniile următoare:

Code:

# du –k | tail –1
28474 .

ne lămureşte că este vorba despre 28474 KB, deci aproximativ  27,8 MB (28474 / 1024).
3.4 Căutarea fişierelor pe disc
În momentul când dorim să  căutăm un fişier pe disc este foarte utilăcomanda find. Comanda find este una dintre cele mai puternice comenzi ale sistemului de operare UNIX. Sintaxa de bază a comenzii este:

Code:

$ find cale_de_cautare criteriu_de_cautare [comanda]

Comanda find poate fi folosită pentru a căuta fişiere pe hard discurile locale sau chiar şi pe sisteme la distanţă. Deoarece operaţia de căutare poate solicita destul de mult procesorul, trebuie să încercăm să începem căutarea din directorul cât mai apropiat de fişier; doar în cazul în care nu avem nici un indiciu legat de posibila localizare a fişierului vom începe căutarea din rărăcină ( / ). 
Putem face căutări ale fişierelor UNIX folosind mai multe criterii de căutare printre care: numele parţial sau întreg al fişierului, dimensiune, dată, drepturi de acces, dreptul de proprietate, etc. Calea de căutare specificată în comandă (conform formatului general de mai sus) poate fi semnul special tilda (~)  ce în UNIX reprezintă directorul  home al utilizatorului curent, punctul ( . ) ce reprezintă directorul curent sau o cale întreagă de directoare, relativă sau absolută. Ultimul parametru al comenzii  find îl reprezintă comenzi opţionale ce pot fi inserate la sfârşit.
În mod implicit, opţiunile de căutare sunt tratate ca o cerere „şi”, astfel încât toate expresiile introduse trebuie să fie prezente (adevărate). De asemenea, poate fi folosită opţiunea -o (or) între expresii pentru a specifica criterii de căutare de tip „sau” care sunt adevărate dacă cel puţin unul dintre criterii este adevărat. Majoritatea expresiilor de căutare necesită o valoare ce trebuie găsită şi uneori sunt folosite metacaracterele în cadrul argumentelor comenzii. Tabelul 3.19 ne înfăţişează câteva expresii de căutare; aceste expresii sunt evaluate de către comanda find ca fiind false sau adevărate.
Criterii de căutare pentru comanda find



Prezentăm în continuare câteva exemple:

Code:

$ find / -name ls -print

Se caută începând din rădăcină după nume fişierul  ls şi se va afişa rezultatul căutării (-print)

Code:

$ find / -name seminar_unix\



Code:

-type f -print

Se caută din rădăcină fişierul cu numele  seminar_unix.  Dacă este găsit, se va afişa pe ecran locaţia sa

Code:

$ find /usr -name hello -type\

Se caută începând din directorul usr după nume fişierul hello şi se va afişa rezultatul căutării

Code:

f -print



Code:

$ find /usr -name “sem*”\

Se caută din directorul usr toate fişierele al căror nume începe cu sem.

Code:

-type f -print



Code:

$ find ~ -name “*gif”\

Se caută plecând din directorul home toate fişierele al căror nume se termină cu gif

Code:

-type f -print

În figura 3.20 este prezentat alt exemplu. Se apelează comanda find fără nici un argument, fapt ce determină afişarea fişierelor din directorul curent, apoi se caută începând cu directorul curent fişierele al căror nume se termină în „.bak”, care apoi se şterg, folosindu-se opţiunea interactivă ok. 



Figura 3.20 Exemplu mai complex de utilizare a comenzii find

În figura 3.21 este prezentat alt exemplu în care se caută începând cu directorul curent fişierele deţinute de un anumit utilizator (daemon) şi se execută comanda  ls care este însă redirectată într-un fişier (daemon_files) pentru a fi accesat mai târziu.

Comanda următoare:

Code:

$ find . -name “rc.conf” -exec chmod o+r ‘{}’ \;

va căuta în directorul curent  şi toate subdirectoarele sale toate fişierele cu numele  rc.conf pentru care va executa comanda  chmod o+r.
Argumentul '{}' va insera fiecare fişier găsit în linia de comanda chmod, iar \; semnifică încheierea liniei de comandă exec. Rezultatul comenzii va fi acela că toţi utilizatorii vor avea drepturi de citire asupra fişierelor rc.conf.
Un exemplu mai complex de căutare a fişierelor utilizând operatorul  -o îl întâlnim în cazul următor:

Code:

$ find /usr/src -not\( -name "a*" -o -name "a.*" \) '{}' \; -print

Această comandă va căuta în directorul /usr/src precum şi în toate subdirectoarele acestuia toate fişierele,  cu excepţia celor de forma „a*” şi „a.*”. Argumentele implicate aici sunt:
•-not semnifică negarea expresiei ce urmează 
• \( semnifică începutul unei expresii complexe 
• \) semnifică sfârşitul unei expresii complexe
• -o semnifică o operaţie de sau logic într-o expresie complexă 



Figura 3.21 Alt exemplu de utilizare a comenzii find 

Comanda următoare:

Code:

$ find . -exec grep “infocib.ase.ro” ‘{}’ \; -print

va căuta în directorul curent şi în toate subdirectoarele sale şi va afişa toate fişierele ce conţin şirul de caractere specificat (infocib.ase.ro).
Această comandă poate fi utilă în cazul în care dorim să modificăm şirul de caractere specificat cu alt  şir de caractere pentru toate fişierele dintr-un director (spre exemplu, putem modifica infocib.ase.ro cu). În acest caz vom redirecta ieşirea către o comandă sed pentru înlocuirea şirului de caractere. 

3.5 Căutarea şirurilor de caractere în fişiere
Comanda grep


Comanda grep (global regular expression print) este folosită pentru căutarea unor şiruri de caracactere într-unul sau mai multe fişiere sau în ieşirile generate de comenzi.  Şirurile de caractere pot conţine pe lângă caractere alfanumerice şi spaţii sau diferite semne de punctuaţie, cu condiţia să fie încadrate de apostrofuri (’’). 
De regulă, comanda grep este utilizată ca filtru pentru ieşirile altor comenzi. Comanda grep face distincţie între litere mari şi litere mici în mod implicit; dacă dorim să schimbăm această setare implicită, putem folosi opţiunea  -i. Opţiunea  -v caută toate liniile ce  nu se potrivesc  şablonului specificat. Formatul general al comenzii grep este următorul:

Code:

$ grep [optiuni] sir_caractere nume_fisier

unde  sir_caractere reprezintă şirul de caractere căutat iar nume_fisier fişierul în care se va face căutarea.
Vom prezenta în continuare câteva exemple de utilizare a comenzii grep:

Code:

$ grep ‘razvan’ /etc/passwd

Această comandă caută toate apariţiile şirului de caractere "razvan" în fişierul "/etc/passwd". Toate liniile ce conţin acest şir de caractere vor fi afişate pe ecran.

Code:

$ grep ‘stud’ *

Această comandă caută toate apariţiile şirului de caractere "stud" în toate fişierele din directorul curent. Se poate folosi astfel comanda grep în cazurile în care căutăm un fişier al cărui nume l-am uitat dar ştim un şir de caractere conţinut de acel fişier. De asemenea, putem specifica opţiunea -n pentru a afişa  şi numărul liniei pe care se află şirul de caractere căutat.
Cunoscând numărul liniei, putem apoi cu un editor de texte să deschidem fişierul respectiv pentru editare la linia respectivă. În figura 3.22 se caută şirul de caractere „test” în fişierele din directorul curent. Se găseşte fişierul lista, ce conţine pe linia 11 şirul de caractere căutat.



Figura 3.22 Utilizarea comenzii grep cu opţiunea -n 
Comanda grep poate fi folosită pentru a căuta şiruri de caractere ce corespund unor  şabloane. Metacaracterele ce pot fi utilizate în acest caz sunt:



În figura 3.23 avem un exemplu în care comanda grep este conectată prin pipe comenzii ls:



Figura 3.23 Conectarea comenzii grep prin pipe comenzii ls 

Rezultatul comenzii de mai sus va fi afişarea directoarelor din directorul curent, având în vedere că în listingul comenzii ls -l, caracterul d la început specifică faptul că fişierul respectiv este director.

3.6 Sortarea fişierelor
În UNIX există posibilitatea de sortare a liniilor unui fişier sau a ieşirii unei comenzi folosind comanda sort.

Code:

Comanda sort

Comanda sort  oferă o modalitate rapidă de organizare a datelor în ordine alfabetică sau numerică. Comanda sort utilizează setul de caractere ASCII drept ordine de sortare, analizând cuvintele (şirurile de caractere) de la stânga la dreapta, caracter cu caracter. Comanda sort poate face sortarea pe mai multe nivele, sau pe anumite câmpuri, având intrare standard  şi oferind ieşire standard. Sintaxa generală a comenzii este următoarea:

Code:

$ sort [optiuni] [fisier_intrare]

În continuare sunt prezentate câteva opţiuni  ce  pot  fi  folosite  cu comanda sort:



În exemplul din figura 3.24 se foloseşte comanda  sort pentru a realiza o sortare inversă, numerică, după alt câmp decât cel implicit (primul). Rezultatul comenzii este afişarea fişierelor al căror nume începe cu litera e în ordine descrescătoare a dimensiunii lor.



Figura 3.24 Exemplu de utilizare a comenzii sort 

3.7 Arhivarea şi compresia fişierelor
3.7.1 Comanda tar


Comanda tar (tape archive) poate fi folosită pentru crearea de arhive pe suporturi magnetice (benzi sau discuri). Poate fi folosită, de asemenea, pentru crearea arhivelor de uz general pentru transferul fişierelor în reţele,
Internet, etc. Comanda  tar poate fi utilizată şi pentru crearea de copii de siguranţă pentru fişiere, fiind o comandă standard pentru toate versiunile de UNIX. Dezvoltată iniţial pentru lucrul cu arhive pe bandă magnetică, comanda tar poate copia însă fişiere oriunde (hard disc, floppy disc sau alte unităţi de stocare externe). 
Comanda tar poate crea o arhivă a unui singur fişier, dar ea este, de regulă, folosită pentru arhivarea de directoare întregi într-un singur fişier care va fi folosit mai târziu dacă este cazul. 
Observaţie. 
Comanda  tar nu asigură şi compresia fişierelor în timp ce creează arhiva (precum utilitarele winzip, pkzip, winrar, arj, ace, etc. pentru PC).
Cele mai întâlnite opţiuni ale comenzii tar sunt c, t şi x. Spre deosebire de majoritatea comenzilor UNIX, aceste opţiuni nu trebuie neapărat precedate de semnul minus (-). 
Sintaxa generală a comenzii este următoarea:

Code:

$ tar functie [modificator] [fis_iesire] nume_fis |nume_dir

Funcţiile comenzii tar sunt următoarele:
ƒ c (create) - este utilizată pentru a crea o arhivă dintr-un singur fişier sau director sau din mai multe fişiere sau directoare;
ƒ t (table of contents) - este utilizată pentru a vedea un tabel cu conţinutul arhivei. Acest tabel reprezintă un listing cu fişierele ce compun fişierul arhivă de tip tar;
ƒ x (extract) - este utilizată pentru a extrage fişiere dintr-o arhivă şi a le separa din nou. Fişierul arhivă tar există şi după această extragere.
Cei mai utilizaţi modificatori ai funcţiilor sunt:
ƒ f (file) - permite specificarea unui fişier  tar pentru creare (c), extragere (x) sau vizualizarea tabelei de conţinut (t);
ƒ v (verbose) - execută comanda în modul „vorbăreţ” care permite să vedem rezultatele detaliate ale comenzii  tar pe măsură ce aceasta rulează.

Prezentăm în continuare câteva exemple:

Code:

$ tar cvf /dev/rct0 /home

Comanda anterioară va crea o arhivă de tip  tar pe dispozitivul /dev/rct0 (bandă magnetică, copiind toate fişierele şi subdirectoarele din directorul /home.

Code:

$ tar cvf  /dev/fd0  /home/razvan

Această comandă va crea o arhivă tar pe discheta /dev/fd0, copiind toate fişierele şi subdirectoarele din directorul /home/razvan.

Code:

$ tar cvf /tmp/home.tar /home

Comanda anterioară va crea o arhivă de tip  tar în fişierul /tmp/home.tar, copiind tot conţinutul directorului /home.

Code:

$ tar tvf dir.tar

Această comandă permite vizualizarea tabelului cu conţinut al arhivei specificate, în modul  verbose,  ce afişează în detaliu caracteristicile fişierelor, printre care drepturile de acces şi dimensiunea. În figura 3.25 este prezentat listingul obţinut în urma execuţiei comenzii anterioare.

3.7.2 Comanda compress
O operaţie frecventă pe un sistem UNIX este aceea de a arhiva fişierele care nu au fost folosite o perioadă îndelungată de timp şi apoi a le compresa pentru a reduce spaţiul ocupat pe hard disc. În acest sens, se poate folosi comanda compress. Toate fişierele, inclusiv cele arhivate cu comanda tar, pot fi  compresate  (sau  comprimate). Operaţia de compresie (comprimare) a fişierelor este o operaţie deosebit de utilă deoarece reduce spaţiul ocupat pe hard disc şi în acelaşi timp face ca fişierele comprimate să fie disponibile pentru o utilizare ulterioară.

Administrarea fişierelor şi directoarelor
Compresia fişierelor pe un sistem UNIX poate reduce dimensiunea unui fişier cu 20% până 80%, în funcţie de tipul fişierului. Dacă utilitarul de compresie ajunge la concluzia că fişierul nu poate fi comprimat sau nu există nici o reducere în dimensiune a fişierului, atunci fişierul va rămâne nemodificat. Fişierele comprimate cu comanda  compress sunt înlocuite cu un fişier cu acelaşi nume cu cel original, dar care are extensia  .Z (atenţie, litera mare Z). Comanda compress oferă posibilitatea compresiei mai multor fişiere o dată, precum şi folosirea metacaracterelor pentru specificarea mai multor fişiere.
Prezentăm în continuare câteva exemple:

Code:

$ compress /tmp/home.tar

Această comandă comprimă fişierul  /tmp/home.tar, înlocuindu-l cu un fişier denumit /tmp/home.tar.Z.



Figura 3.25 Exemplu de utilizare a comenzii tar 

Code:

$ compress -v install.log

Această comandă este apelată cu opţiunea verbose şi va afişa numele fişierului de intrare (install.log), numele fişierului de ieşire (install.log.Z) precum şi procentul de compresie obţinut.
Observaţie.
Fişierele comprimate sunt considerate fişiere binare, de aceea conţinutul lor nu poate fi vizualizat folosind comenzile cat sau more.
[/b]3.7.3 Decompresia fişierelor [/b]
Fişierele compresate pot fi aduse în starea iniţială comprimării prin utilizarea comenzii duale comenzii  compress,  uncompress. Deoarece fişierele comprimate nu pot fi utilizate sub această formă, ele trebuie aduse în starea de dinaintea comprimării, operaţia purtând numele de decomprimare sau decompresare. Formatul general al comenzii uncompress este următorul:

Code:

$ uncompress [optiuni] nume_fisier

unde se pot specifica anumite opţiuni  şi numele fişierului (nume_fisier) pe care vrem să îl decompresăm. Nu este neapărat necesar să specificăm extensia .Z, având în vedere că această comandă caută automat fişierul cu extensia implicită .Z. De asemenea, se pot decompresa mai multe fişiere o dată, folosind metacaracterele * şi ?. 
Pentru a vizualiza conţinutul unui fişier comprimat fără a face efectiv decomprimarea, se poate folosi opţiunea -c. De exemplu, pentru a vizualiza conţinutul unui fişier comprimat cu numele install.log.Z putem folosi comanda (am utilizat comanda  more pentru cazul în care fişierul decomprimat va apărea pe mai multe ecrane):

Code:

$ uncompress -c install.log.Z | more

3.7.4 Comanda jar
Comanda jar (Java archive) este asemănătoare cu comanda tar, dar înglobează şi compresia fişierului într-un singur pas. Fişierele arhivate sunt compresate prin intermediul aplicaţiei Java  jar  într-o arhivă de acest tip.
Utilitarul  jar reprezintă un instrument de arhivare bazat pe formatele de compresie zip şi zlib. Comanda jar este o comandă standard pentru sistemul de operare Solaris dar este disponibil pe orice sistem ce are instalat maşina virtuală Java (JVM - Java Virtual Machine). Sintaxa generală a comenzii este foarte asemănătoare cu aceea a comenzii  tar. Opţiunile disponibile pentru comanda jar sunt următoarele:



3.7.5 Alte utilitare pentru compresie
Există o sumedenie de utilitare pentru compresie/decompresie ce pot fi folosite pe UNIX. Cele mai populare sunt utilitarele gzip, gunzip şi gzcat (ce derivă din proiectul GNU şi sunt disponibile pe majoritatea versiunilor de UNIX). Există, de asemenea,  şi programele  zip şi  unzip (similare variantelor pentru Windows) care pot fi utilizate pentru compresia, respectiv decompresia fişierelor. Prezentăm în continuare utilitarele  gzip,  gunzip şi gzcat.

Comanda gzip
Sintaxa generală a comenzii este:

Code:

$ gzip [-acdfhlLnNqrtvV19] [-S sufix] [nume_fisier ...]

Utilitarul gzip foloseşte algoritmul de compresie Lernel-Ziv (LZ77) pentru a reduce dimensiunea fişierelor specificate în comandă. Pentru fiecare fişier specificat, fişierul original este şters şi înlocuit cu varianta sa compresată ce are acelaşi nume cu fişierul original căruia i se adaugă extensia  .gz. Fişierul compresat are aceleaşi proprietăţi referitoare la modurile de acces, permisiuni, data/ora de acces,  data/ora ultimei modificări, precum fişierul original. Atunci când nu se specifică numele unui fişier pentru a fi compresat,  gzip  citeşte de la intrarea standard, compresează şi afişează la ieşirea standard.

Pentru decompresie, se pot folosi comenzile  gzip -d,  gunzip sau gzcat. Atunci când decompresia se face (cu  gzip -d sau  gunzip) pe un alt sistem de fişiere decât cel iniţial, există posibilitatea ca numele original al fişierului să fie un nume invalid pentru noul sistem de fişiere. În acest caz, utilitarul de decompresie creează un fişier cu un nume valid pentru noul sistem de fişiere. 

Comanda gunzip
Programul gunzip citeşte fiecare fişier ce începe cu numele specificat şi are o extensie de tipul .gz, .z, .Z, .bz2, apoi şterge fişierul şi îl înlocuieşte cu varianta decomprimată a fişierului, înlăturându-i extensia. Sintaxa generală pentru gunzip este:

Code:

$ gunzip [-acfhlLnNqrtvV] [-S sufix] [nume_fisier ...]

De asemenea, comanda gunzip recunoaşte şi extensiile .tgz şi .taz ca prescurtări ale extensiilor .tar.gz şi .tar.Z. Aceste două extensii sunt folosite de  gzip  atunci când fişierele comprimate au extensia  .tar. În plus, gunzip poate decomprima fişiere comprimate cu alte comenzi, precum:  zip, compress,  compress -H, pack sau mkszip, recunoscând automat tehnica de compresie folosită. Există însă o serie de limitări la decompresie; de exemplu, fişierele comprimate cu  zip  pot fi decomprimate doar dacă ele conţin un singur fişier care a fost comprimat cu metoda „deflation”. În caz contrar, trebuie folosit utilitarul unzip pentru decompresie.

Comanda gzcat
Programul gzcat are un comportament asemănător comenzii gunzip -c.
Acest program poate decompresa fişierele specificate la linia de comandă, fie, dacă nu sunt specificate fişiere (sau în loc de numele fişierelor apare liniuţa -), intrarea este standard input. Sintaxa generală pentru gzcat este:

Code:

$ gzcat -fhLV [nume_fisier...]

Algoritmul (Lempel-Ziv) de compresie utilizat de gzip este identic cu cel folosit de utilitarele zip şi pkzip. Procentul de compresie depinde de tipul fişierului comprimat, dar de regulă este superior celui obţinut de comanda compress ce foloseşte metoda LZW sau de comanda pack ce foloseşte metoda de compresie Huffman. Din punct de vedere al vitezei de execuţie,
gzip --fast  este similară cu comanda compress. gzip modifică (îl comprimă fişierul specificat, chiar dacă rezultatul are o dimensiune mai mare decât fişierul iniţial. Semnificaţia opţiunile comenzilor gzip, gunzip şi gzcat sunt prezentate în tabelul 3.26. 

Opţiuni pentru comanda gzip



Exemple
Putem determina dimensiunea fişierului necomprimat cu o comandăde genul:

Code:

$ gzcat fisier.Z | wc -c

Atunci când utilizăm opţiunea  -l în conjuncţie cu opţiunea  -v, se afişează informaţii complete, de genul:

Code:

method: -metoda de compresie folosită
crc:  -crc-ul pe 32 de biţi pentru datele necompresate 
date/time   -data şi ora fişierului necompresat

Cu ajutorul comenzii gzcat putem citi un fişier compresat cu gzip
fără a realiza efectiv decompresia, ca în exemplul următor:

Code:

$ gzcat carte 
cap1 
cap2 
cap3

Compresia mai multor fişiere
Putem concatena mai multe fişiere comprimate. În acest caz, gunzip va extrage toate fişierele din fişierul rezultat prin concatenare. De exemplu:

Code:

$ gzip -c fisier1  > fiscat.gz
$ gzip -c fisier2 >> fiscat.gz

După crearea fişierului comprimat fiscat.gz, comanda:

Code:

$ gunzip -c fiscat.gz

este echivalentă cu:

Code:

$ cat fisier1 fisier2

Dacă unul dintre fişierele cu extensia  .gz sunt stricate, celelalte
este echivalentă cu:

Code:

$ cat fisier1 fisier2

Dacă unul dintre fişierele cu extensia  .gz sunt stricate, celelalte fişiere pot fi recuperate (fişierul stricat este înlăturat). Putem îmbunătăţi nivelul de compresie prin comprimarea tuturor fişierelor împreună, în loc de a le comprima individual şi apoi concatena rezultatele. De exemplu:

Code:

$ cat fisier1 fisier2 | gzip > fiscat.gz

ne va oferi o mai bună compresie decât în cazul:

Code:

$ gzip -c fisier1 fisier2 > fiscat.gz



_______________________________________
Citeşte regulamentul forumului aici.

pus acum 14 ani
   
Gamer
Administrator

Din: Transilvania
Inregistrat: acum 14 ani
Postari: 202
4 SERVICII DE REŢEA

Două dintre cele mai utilizate servicii de reţea  în  UNIX  sunt  NFS şi ARPA. Serviciile NFS (Network File System) reprezintă servicii de reţea ce permit partajarea de directoare în reţea. ARPA este rezultatul unei combinaţii între „servicii ARPA” şi „servicii Berkeley”. Serviciile ARPA oferă suport pentru comunicaţiile dintre sisteme ce rulează sisteme de operare diferite, în timp ce serviciile Berkeley oferă suport doar pentru sisteme ce rulează sub UNIX. În continuare sunt prezentate cele mai cunoscute comenzi ARPA-Berkeley.

4.1 Servicii ARPA

4.1.1 Serviciul telnet
telnet – reprezintă una dintre cele mai folosite metode de conectare la un sistem aflat la distanţă. Comanda telnet utilizează pentru comunicaţie protocolul cu acelaşi nume  şi este o alternativă pentru o altă comandă similară, rlogin. Exemplul următor prezintă modalitatea de stabilire a unei conexiuni telnet  cu un computer la distanţă (numele computerului este infocib):



4.1.2 Serviciul ftp
ftp – protocolul de transfer de fişiere FTP (File Transfer Protocol),reprezintă cea mai folosită metodă pentru transferul de fişiere de pe un computer pe altul. Se poate utiliza pentru transferul de fişiere între orice tip de staţii de lucru sau servere (Windows, UNIX, etc.). În exemplul următor se va copia fişierul test.file de pe serverul infocib pe staţia locală. Fişierul test.file se află în subdirectorul tmp al directorului home pentru utilizatorul stud.





4.1.3 Servicii Berkeley
Comanda rlogin
Comanda rlogin (remote login) oferă posibilitatea conectării la un sistem UNIX de la distanţă. Pentru a ne conecta de pe computerul local pe computerul infocib, vom utiliza comanda:

Code:

$ rlogin infocib

În continuare, dacă se cere o parolă, cei doi utilizatori (cel de pe sistemul local şi cel de pe sistemul de la distanţă nu sunt echivalenţi pe cele două sisteme.
Dacă nu se cere nici o parolă, atunci ei sunt echivalenţi. 
Comanda rlogin se poate utiliza şi astfel:

Code:

$ rlogin nume_sistem -l nume_utilizator

în care se poate specifica numele de utilizator (nume_utilizator) de pe sistemul de la distanţă (al cărui nume este nume_sistem) la care se face conectarea. 

Comanda rcp
Comanda rcp (remote copy) este utilizată pentru a se copia fişiere şi directoare de pe un sistem UNIX pe alt sistem UNIX. Pentru a copia fişierul /tmp/test.file de pe computerul local pe computerul  infocib, vom utiliza
comanda:

Code:

$ rcp infocib:/tmp/test.file /tmp/test.file

Comanda remsh
Comanda  remsh (remote shell) este utilizată atunci când suntem conectaţi la un sistem UNIX şi dorim să rulăm o comandă pe alt sistem UNIX. Rezultatele comenzii sunt afişate local. În exemplul de mai jos putem vizualiza conţinutul fişierului  test.file aflat pe serverul  infocibfolosind comanda more:

Code:

$ remsh infocib more /tmp/test.file

În acest caz trebuie ca utilizatorii de pe cele două sisteme să fie echivalenţi (să aibă acelaşi nume şi aceeaşi parolă.

Comanda rwho 
Comanda  rwho (remote who) este utilizată pentru a determina utilizatorii conectaţi la alt sistem UNIX. Pentru ca această comandă  să funcţioneze este necesară rularea daemonului rwhod. Există şi alte comenzi de tip „r” (remote) care diferă între ele în funcţie de varianta de UNIX utilizată.

4.1.4 Maparea numelor staţiilor din reţea
Un lucru important de configurat în reţea îl reprezintă modalitatea de recunoaştere şi mapare a numelor staţiilor din reţea. În acest sens există trei metode:

* BIND (Berkeley Internet Named Domain)
* NIS (Network Information Service)
* Fişierul /etc/hosts

Modalitatea cea mai simplă şi cea mai uzitată este aceea de implementare a numelor staţiilor folosind fişierul /etc/hosts. Acest lucru se întâmplă mai ales pentru reţele locale restrânse, ce au un număr mic de staţii de lucru. În reţele mari este utilizat sistemul DNS (Domain Name Server) care rezolvă maparea numelor staţiilor de lucru, utilizând BIND pentru a determina adresa pornind de la nume. 
Sistemul BIND funcţionează pe baza modelului client/server, astfel încât în momentul în care un client doreşte adresa unei staţii aceasta este oferită de către serverul BIND. Utilizarea sistemului BIND conduce la performanţe mai bune pentru menţinerea informaţiilor legate de nume deoarece datele sunt stocate doar în câteva locuri şi nu pe fiecare sistem în parte (ca în cazul fişierului  /etc/hosts). Staţiile client folosesc un fişier /etc/resolv.conf pentru configurarea programului  resolver (care determină adresa folosind numele). Serverul de nume  şi adresa IP a sa reprezintă elementele cheie în rezolvarea mapării adreselor. Configurarea sistemelor DNS şi BIND este sarcina administratorului de reţea. 

Fişierul /etc/hosts
Acest fişier conţine informaţii despre alte sisteme cu care suntem conectaţi în reţea. Informaţiile din fişier reprezintă adresa Internet a fiecărui sistem, numele sistemului  şi alte alias-uri pentru acesta. Dacă fişierul/etc/hosts este modificat pentru a conţine numele sistemelor din reţea atunci se poate folosi comanda rlogin pentru a accesa alt sistem. O linie din fişierul /etc/hosts arată în felul următor:

Code:

<adresa_ip> <nume_oficial> <alias>

Fişierul /etc/hosts.equiv
Acest fişier este utilizat în cazul în care se doreşte utilizarea comenzii rlogin fără ca utilizatorii să fie nevoiţi să introducă o parolă atunci când se conectează la un alt sistem. Totuşi, acest lucru presupune un mare risc de securitate  şi din această cauză acest procedeu nu este prea des utilizat. 
Numele de login ale utilizatorilor trebuie să fie aceleaşi pe ambele sisteme pentru ca fişierul  /etc/hosts.equiv  să permită utilizatorilor să se conecteze fără a introduce o parolă. Fişierul /etc/hosts.equiv trebuie săconţină numele staţiilor din reţea de pe care se doreşte conectarea, separat fiecare nume pe câte o linie din fişier. 

Fişierul /.rhosts
Fişierul  /.rhosts reprezintă alternativa fişierului  /etc/hosts.equiv pentru superuser. Dacă se face conectarea ca root, putem avea aceleaşi date stocate în /.rhosts ca cele din /etc/hosts.equiv. Acest lucru presupune însă o mare breşă de securitate în sistem şi nu este recomandat a fi utilizat. 
Utilizarea fişierelor /etc/hosts, /etc/hosts.equiv şi /.rhosts conduce la posibilitatea utilizării comenzilor ARPA  ftp şi  telnet, precum  şi a comenzilor Berkeley rcp, remsh, rlogin şi rwho.

4.1.5 Alte comenzi pentru lucrul în reţea
Comanda ping
Una dintre cele mai folosite comenzi de reţea este comanda  ping.
Aceasta determină existenţa unei conexiuni între două entităţi din reţea.
Comanda ping (Packet InterNet Groper) trimite un pachet ecou ICMP către staţia specificată o dată la fiecare secundă. În funcţie de varianta de UNIX utilizată, comanda ping poate diferi de la un sistem la altul, mai ales în ceea ce priveşte modalitatea afişării rezultatelor pe ecran atunci când comanda este apelată  fără nici o opţiune. În timp ce unele variante afişează rezultate detaliate despre conexiune, unele variante afişează doar un mesaj de tipul:
„conexiunea este activă”. 
Pe un sistem UNIX AIX putem specifica intervalul la care se trimit pachetele, precum şi dimensiunea şi numărul de iteraţii. Putem considera spre exemplu următoarea comandă, în care pachetele se trimit la un interval
de 3 secunde cu dimensiunea pachetului de 4096 octeţi de 8 ori:

Code:

$ ping –I 3 venus 4096 8 
PING venus: 4096 data bytes 
4096 bytes from venus (193.226.34.143): icmp_seq=0. time=8. ms 
4096 bytes from venus (193.226.34.143): icmp_seq=1. time=9. ms 
4096 bytes from venus (193.226.34.143): icmp_seq=2. time=8. ms 
4096 bytes from venus (193.226.34.143): icmp_seq=3. time=9. ms  
4096 bytes from venus (193.226.34.143): icmp_seq=4. time=9. ms 
4096 bytes from venus (193.226.34.143): icmp_seq=5. time=8. ms 
4096 bytes from venus (193.226.34.143): icmp_seq=6. time=8. ms 
4096 bytes from venus (193.226.34.143): icmp_seq=7. time=8. ms  
----venus PING statistics---- 
8 packets transmited, 8 packets received, 0% packet loss 
round-trip (ms) min/avg/max = 9/9/15

Comanda  ping este utilizată pentru depistarea manuală a eventualelor disfuncţiuni în reţea şi nu se recomandă a fi folosită în mod continuu deoarece generează mult trafic în reţea. 
Comanda netstat
Această comandă este utilizată pentru a determina diverse informaţii legate de rutarea din reţea. Opţiunea  –r ne va afişa tabela de rutare iar opţiunea –n poate fi folosită pentru a afişa adresele IP din reţea. Altă opţiune este -v pentru afişarea de informaţii adiţionale legate de rutare, cum ar fi masca de subreţea. În exemplul următor comanda  netstat este apelată cu opţiunea –nr:

Code:

# netstat –nr



Dar să vedem ce semnificaţie au informaţiile afişate mai sus.
Sistemul pe care lucrăm se numeşte  a1 şi posedă trei interfeţe. Prima interfaţă este interfaţa loopback  (127.0.0.1) denumită lop0, cea de-a doua este  .10 iar cea de-a treia  .110. Următoarele două linii specifică faptul că destinaţia noastră este 10.1.1.10 care este o reţea ce poate fi accesată prin intermediul uneia dintre interfeţele de reţea  .10 sau  .110. Ultima linie specifică faptul că trebuie trimise pachete la adresa  10.1.1.1 dacă nu se poate găsi o rută mai directă. Un interes deosebit îl au indicatorii „flags” prin care se defineşte tipul de rutare, astfel:

* 1=U  ↔ rutare către o reţea printr-un gateway care este chiar sistemul local;
* 3=UG ↔ rutare către o reţea printr-un gateway care este sistem la distanţă;
* 5=UH  ↔ rutare către o gazdă printr-un gateway care este sistemul local;
* 7=UGH ↔ rutare către o gazdă printr-un gateway la distanţă care este o gazdă.

Comanda route
Informaţia afişată de comanda netstat provine din tabelele de rutare ale sistemului care sunt automat create în momentul iniţializării sau în momentul activării interfeţei de reţea. Rutele către reţele sau gazde ce nu sunt direct conectate la sistem sunt introduse cu ajutorul comenzii route. În exemplul următor se modifică indicatorul „Flags” din U în UG:

Code:

$ /usr/bin/route add default 193.226.34.64 3

Comanda route de mai sus specifică faptul că dorim să adăugăm o rută  (add), adăugăm o destinaţie (cea implicită  - default), un gateway prin care să facă rutarea. În exemplu s-a considerat adresa IP, dar se poate specifica şi un nume de reţea. Valoarea  3 corespunde cu valoarea pe care dorim să o atribuim indicatorului „Flags” (specificăm dacă gateway-ul este local sau nu). 

Comanda ifconfig   
Această comandă ne oferă informaţii suplimentare legate de interfaţa de reţea. Exemplul următor ne înfăţişează listingul comenzii:

Code:

$ /etc/ifconfig eth0 
eth0:flags=863<UP,BROADCAST,NOTRAILERS,RUNNING> 
inet 193.226.34.141 netmask ffffff00 broadcast 193.226.34.255

Din informaţiile anterioare putem vedea că interfaţa funcţionează (este „UP”), are adresa IP 193.226.34.141 şi un netmask ffffff00. 
De asemenea, comanda ifconfig se poate utiliza pentru configurarea manuală a interfeţei, specificându-se adresa IP şi masca de subreţea. Spre exemplu, comanda:

Code:

$ /etc/ifconfig eth0 inet 193.226.34.141\ 
 netmask 255.255.255.0

configurează interfaţa de reţea astfel:
* netmask cu valoarea  255.255.255.0  corespunde notaţiei hexa specificate anterior (fffff00), fiind vorba despre o adresă IP de clasă C;
* eth0 este denumirea interfeţei ce este configurată;
* inet reprezintă familia adresei;
* 193.226.34.141 este adresa IP a interfeţei.
Observaţie
Caracterul backslash („\”) utilizat mai sus specifică continuarea comenzii pe linia următoare.

Comanda rpcinfo
Pentru determinarea funcţionalităţii unui sistem putem observa procesele de tip daemon ce rulează pe acesta. Comanda rpcinfo este utilizatăpentru a genera un apel de procedură la distanţă (RPC – Remote Procedure Call)  pe un sistem oarecare sau chiar pe sistemul local. Sintaxa comenzii rpcinfo este:

Code:

# rpcinfo -p nume_sistem

Considerăm următorul listing al comenzii rpcinfo –p:

Code:

# rpcinfo –p



Observăm în lista de mai sus că rulează o serie de procese daemonpe sistemul curent; spre exemplu, rularea daemon-ului mountd indică faptul că un server NFS poate monta sisteme de fişiere pe acest computer. 
Comanda arp
Cu ajutorul acestei comenzi se poate vizualiza conţinutul memoriei cache ARP. Corespondenţele între adresele IP şi adresele nivelului 2 MAC sunt memorate într-o zonă de memorie specială denumită memorie ARP cache. Maparea adreselor se face la interval de câteva minute; de aceea, pentru a vizualiza adresele recent mapate existente în memoria ARP cache putem folosi comanda arp –a:

Code:

# arp –a 
a1 (10.1.1.10) at 0:10:86:ff:a2:f3 ether 
l1 (10.1.1.11) at 0:10:86:ff:a3:b5 ether 
tape1 (10.1.1.12) at 0:10:86:ff:65:a3 ether

Se pot introduce manual corespondenţe în memoria cache ARP utilizând opţiunea –s.
Comanda nslookup
Această comandă este utilizată pentru determinarea adresei IP a unei gazde căreia îi cunoaştem numele. Pentru determinarea adresei IP, nslookup accesează fie fişierul  resolv.conf fie /etc/hosts. Exemplul următor ne prezintă utilizarea fişierului  /etc/hosts pentru a determina adresa IP a sistemului venus:

Code:

# nslookup venus 
Using /etc/hosts on: venus 
Looking up FILES 
Name: venus 
Address:193.226.34.141 
#

4.2 Integrarea cu alte sisteme de operare
De-a lungul anilor au fost dezvoltate o serie de instrumente software pentru a permite mai multor sisteme de operare să se integreze în aceeaşi reţea. Flexibilitatea şi puterea sistemului de operare UNIX oferă avantajul integrării a diferite variante ale acestui sistem de operare faţă de integrarea cu sisteme non-UNIX. Cu toate acestea, diverse variante UNIX tratează în mod diferit operaţiuni identice. Există, spre exemplu, diferenţe în controlul tipăririi între System V şi BSD, diferenţe care complică un pic lucrurile atunci când vrem să partajăm imprimante într-o reţea cu staţii de lucru sau servere Solaris, BSD sau Linux. 
Datorită realităţilor practice care ne impun ca de multe ori să integrăm sisteme UNIX cu sisteme ce rulează ceva cu totul diferit (Windows, NetWare sau MacOS) s-a impus apariţia unor instrumente care să transforme reţelele eterogene în ceva mai practic şi mai uşor de construit şi controlat. 
Astfel, cu ajutorul programului  Samba putem integra sisteme Windows într-o reţea UNIX (sau sisteme UNIX într-o reţea Windows NT), putem partaja fişiere şi job-uri de tipărire şi putem gestiona staţiile de lucru din reţea fie de pe staţiile Windows, fie de pe cele UNIX. De asemenea, putem folosi netatalk (pentru protocolul de reţea AppleTalk) pentru a putea face să comunice staţiile UNIX cu cele Macintosh. 
Vom aborda în continuare două mari programe cu ajutorul cărora putem lucra într-o reţea eterogenă, bazată pe staţii de lucru UNIX şi nu numai. La început vom prezenta NFS (Network File System) ce acţionează ca o punte de legătură între diverse variante de UNIX, permiţând montarea şi partajarea sistemelor de fişiere la distanţă. Vom prezenta în continuare
Samba pentru a vedea cum pot interacţiona în aceeaşi reţea atât clienţi UNIX cât şi clienţi Windows. 

4.2.1 Integrarea diverselor variante UNIX cu ajutorul NFS
Deoarece totul în UNIX este reprezentat sub formă de fişier, înseamnă  că pentru a putea face să comunice două calculatoare pe care rulează UNIX în aceeaşi reţea, acestea trebuie să fie capabile să partajeze fişiere.
Partajarea fişierelor este o modalitate utilă de a distribui informaţii unui număr de utilizatori, indiferent de modul de conectare al acestora la reţea. 
În cazul în care există staţii de lucru sau servere specializate în îndeplinirea anumitor funcţionalităţi (un server de baze de date, spre exemplu), este deosebit de util ca alte staţii de lucru să poată accesa fişiere
în reţea de pe aceste maşini fără a fi nevoite să copieze fişierele direct pe propriul hard disc.
Partajarea fişierelor într-o reţea UNIX se poate face prin montarea directoarelor în reţea astfel încât ele apar ca directoare locale pe staţia de lucru. Dacă utilizăm staţia de lucru X, se poate monta un director de pe staţia de lucru Y ca şi cum acesta ar fi local pe staţia X. În momentul în care nu mai avem nevoie de acel director, el va fi demontat. Aceste lucruri sunt posibile cu ajutorul sistemului NFS. NFS reprezintă metoda de partajare a fişierelor între mai multe calculatoare UNIX; el reprezintă un standard, însă are câteva probleme legate de securitate.

Instalarea şi configurarea NFS
Sistemul NFS face parte integrantă din majoritatea distribuţiilor de UNIX. De cele mai multe ori el este instalat odată cu instalarea sistemului de operare. Putem verifica acest  lucru uitându-ne în directorul  /etc/init.d pentru un script numit  nfs-server; prezenţa acestui script ne spune că serverul NFS este activ şi că este instalat pe sistem

.   

Odată cu instalarea  NFS este utilă şi instalarea  NIS.  Network Information System acţionează ca o bază de date centralizată ce conţine date administrative importante cum ar fi parolele şi fişierul /etc/hosts.

Pentru a putea accesa un sistem de fişiere localizat pe altă staţie de lucru, trebuie ca pe server să ruleze daemon-ul  nfsd iar pe staţia client să ruleze daemon-ul mountd. În continuare vom considera un exemplu concret. 
  Să presupunem că maşina pe care dorim să avem directorul se numeşte saturn. Această maşină este conectată în reţea la un server ce se numeşte venus. Dorim să exportăm directorul /usr/home de pe calculatorul venus pe saturn pentru a putea folosi nişte fişiere din acest director. Pentru acest lucru, trebuie mai întâi să acordăm dreptul pe venus ca acest director să poată fi montat pe saturn. 
Pentru a putea exporta directorul /usr/home sub Linux şi FreeBSD trebuie să fim logaţi ca root, să deschidem fişierul /etc/exports cu un editor de text şi să adăugăm următoarea linie: /usr/home saturn

Pentru a putea exporta directorul /usr/home sub Linux şi FreeBSD trebuie să fim logaţi ca root, să deschidem fişierul /etc/exports cu un editor de text şi să adăugăm următoarea linie:

Code:

/usr/home saturn.

Această intrare în fişier conţine deci directorul exportat şi numele calculatorului ce are permisiunea să îl acceseze. Salvăm fişierul şi utilizăm comanda  exportfs la prompter-ul shell.
Această comandă face ca toate directoarele conţinute de /etc/exports  să fie disponibile pentru a fi accesate imediat de către calculatoarele specificate


Pe maşina client, saturn, ne vom conecta tot ca root şi va trebui să montăm directorul pe care dorim să îl accesăm de pe calculatorul venus. În acest sens vom crea pe saturn un director gol denumit  venushome şi apoi vom lansa comanda

Code:

# mount -t nfs venus:/usr/home /venushome

În acest moment, clientul NFS verifică pe serverul NFS instalat pe venus dacă directorul specificat este accesibil pentru saturn. Deoarece acest director este specificat în /etc/exports, clientul NFS va monta directorul de la distanţă în noul punct de montare şi se pot folosi fişierele respective. 

Pe un sistem Solaris se utilizează fişierul /etc/dfs/dfstab în locul fişierului /etc/exports, iar intrările din fişier au forma:
share –o rw=saturn –d “venus usr home” /mn/venus/usr/home 

Montarea automată utilizând fişierul /etc/fstab
Pentru a simplifica montarea repetată a unor directoare la distanţă se poate folosi fişierul /etc/fstab pentru a monta directoare la distanţă automat în momentul iniţializării sistemului. Fişierul /etc/fstab conţine o listă cu toate directoarele ce vor fi montate în momentul iniţializării sistemului, fie ele locale, fie la distanţă. 
Un fişier /etc/fstab obişnuit arată astfel



Utilizarea lui  /etc/fstab ne ajută mult la montarea automată a sistemelor de fişiere şi a directoarelor; ca root putem modifica acest fişier adăugând directoare pe care le dorim montate automat în momentul iniţializării sistemului. Sintaxa este următoarea:

Code:

nume_dispozitiv punct_de_montare tip_director optiuni dum pass

O linie în fişierul  /etc/fstab conţine astfel: directorul dorit (nume_dispozitiv), calea unde va fi montat local (punct_de_montare), tipul de director (tip_director), opţiuni (de exemplu, pentru a putea fi doar citit şi nu modificat: read-only = ro), numere specifice pentru verificarea de către sistem (dump şi pass).

Fişierul  /etc/fstab următor conţine încă două linii în plus care determină montarea în momentul iniţializării sistemului a două partiţii Windows pe un sistem dual Linux Red Hat/Windows:



Aceste partiţii sunt asociate dispozitivelor  /dev/hda1  şi respectiv /dev/hda5 care vor fi montate în directoarele /mnt/c, respectiv /mnt/d.

Securitatea NFS
Se cunosc o serie de breşe în securitatea sistemului NFS, de aceea e bine să ţinem seamă de acestea atunci când îl utilizăm. Trebuie astfel să ne luăm o serie de precauţii atunci când configurăm serverul NFS şi montăm directoarele. 
Cel mai important lucru pe care trebuie să îl facem este acela de a evita instalarea serverului NFS pe o maşină ce are rol de gateway sau de firewall. Deoarece unul dintre punctele slabe ale NFS este autentificarea parolelor, este bine să izolăm serverul NFS de eventuale computere ce pot avea acces la acesta din exteriorul reţelei. 
De asemenea, ca în cazul oricărui program ce presupune accesul la distanţă, se impune instalarea tuturor patch-urilor de securitate existente în momentul respectiv pentru versiunea de UNIX respectivă. Alte măsuri de securitate includ:
* Niciodată nu trebuie să apară o referinţă  către un  localhost în /etc/exports;
* Este bine să exportăm fişierele ca  read-only pentru a exclude posibilitatea ca cineva din exterior să le modifice;
* Editarea fişierului  /etc/exports  se va face exportând directoare către nume de domenii existente şi nu către nume generice de maşini (de exemplu se preferă folosirea numelui saturn.ase.ro în locul lui saturn);
* După modificarea, salvarea  şi închiderea fişierului  /etc/exports trebuie rulat imediat programul exportfs. 

4.2.2 Integrarea UNIX - WINDOWS

Pentru a face posibilă comunicarea dintre două sau mai multe computere ce rulează UNIX şi Windows există o serie de produse software.
Fără aceste programe comunicarea dintre un sistem UNIX şi unul Windows nu ar fi posibilă, datorită protocoalelor diferite de transfer al datelor folosite de către cele două sisteme de operare. Protocolul utilizat de Windows se numeşte  SMB (Session Message Block), care nu este nativ pentru UNIX.
Două dintre programele ce fac posibilă comunicarea UNIX-Windows sunt NFS Maestro (Hummingbird Communications Ltd.) şi Samba.
Datorită popularităţii acestuia din urmă, vom analiza în continuare modul de lucru al programului Samba

. Samba este o colecţie de programe ce pemite unei maşini UNIX să folosească protocolul SMB şi să partajeze astfel fişiere între cele două sisteme diferite. 
Samba poate să emuleze atribute ale serverelor Windows NT astfel încât clienţii Windows pot lucra în mod eficient cu serverele. În funcţie de varianta de UNIX utilizată, Samba se instalează într-un anumit director; există, de asemenea, câteva distribuţii de Linux care instalează Samba în mod automat la instalarea sistemului. Pentru a verifica dacă Samba este instalat sau nu, este suficient să ne uităm în directorul  /etc/init.d pentru subdirectorul /etc/init.d/samba. Dacă acest director există, atunci înseamnă ca avem Samba instalat pe sistem şi trebuie doar configurat.

Instalarea şi configurarea programului Samba
Programul Samba este prezent de regulă pe CD-urile de instalare ale sistemului de operare utilizat, dar se poate descărca şi ultima versiune a produsului de la adresa, adresa de Web oficială a echipei ce se ocupă cu dezvoltarea produsului. Versiunea curentă este 3.0.6 (August 2004). După ce programul Samba este instalat, trebuie configurat; fişierul de configurare este /etc/samba/smb.conf.

Ghidul complet pentru  Samba este „Using Samba”, de Robert Eckstein, David Collier Brown şi Peter Kelly (O”Reilly&Associates, 1999).

Deschidem fişierul /etc/samba/smb.conf

cu editorul de text preferat; este uşor de lucrat cu el deoarece este modular iar secţiunile (modulele) din fişier sunt clar specificate. Vom avea nevoie de o secţiune  [global] indiferent de mărimea reţelei şi de câte o înregistrare individuală în fişier pentru fiecare director pe care dorim să îl partajăm cu calculatoare Windows în reţea. Înregistrarea globală defineşte reţeaua ca un întreg pentru calculatoarele Windows din reţea.
Sintaxa este uşor de înţeles, fişierul de configurare Samba utilizând expresii în engleză în locul acronimelor  şi abrevierilor. Un fişier minimal de configurare Samba poate arăta astfel:

Code:

[global] 
workgroup = NETWORK 
server string = saturn 
encrypt passwords = Yes 
update encrypted = Yes 
log file = /var/log/samba/log 
max log size = 100 
socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDUP=8192 
dns proxy = No

Fişierul de configurare anterior va seta numele reţelei ca NETWORK atunci când vom deschide directorul Network Neighbourhood de pe o staţie Windows (putem folosi orice nume în acest scop). Valoarea server string este asociată cu numele ce va apărea în directorul ce se va deschide.  Samba stochează datele de iniţializare în fişierul /var/log/samba/log (implicit)  şi va conţine maxim 100 de linii (cele mai recente). Opţiunea  socket  defineşte modalitatea de control a datelor transferate în reţea iar dns proxy specifică dacă  serverul  va  acţiona precum un proxy server DNS local sau nu.
Odată specificate setările globale, trebuie adăugată o înregistrare pentru fiecare director pe care vrem să-l partajăm cu staţiile Windows în reţea. Acest lucru este necesar deoarece nu dorim să partajăm întregul sistem de fişiere UNIX cu toate calculatoarele Windows din reţea. 

Fişierul /etc/samba/smb.conf conţine comentarii specificate într-un mod diferit faţă de alte fişiere asemănătoare UNIX. Toate liniile ce încep cu caracterul “;” sunt considerate comentarii, spre deosebire de caracterul “#” utilizat în mod curent. 
Pentru a partaja un anumit director, putem adăuga o înregistrare în fişierul /etc/init.d/samba/conf cu următoarea structură:

Code:

[public] 
comment = spatiu public 
path = /usr/public 
guest ok = yes 
writable = yes 
printable = no 
public = yes

Sintaxa de bază include numele directorului partajat  şi câţiva parametri prin care se specifică modul în care acest director este disponibil utilizatorilor din reţea. Numele cuprinse între paranteze drepte vor apărea în directorul  Network Neighbourhood din Windows. Linia ce conţine specificarea căii de acces defineşte calea din sistemul de fişiere UNIX în timp ce linia guest ok specifică dacă un utilizator are acces la director fără a introduce un  username/parolă. Liniile  writable şi  printable setează modalitatea de acces a directorului iar valoarea  public specifică dacă directorul va fi accesibil utilizatorilor.

Utilizarea programului Samba
După ce s-a terminat configurarea fişierului  /etc/init.d/samba/conf putem porni Samba pentru a verifica legăturile din reţea. Repornirea serverului Samba se face cu comanda:

Code:

# /etc/init.d/samba restart

În acest moment serverul Samba este repornit cu configuraţia din fişierul /etc/init.d/samba/conf şi putem „vedea” staţiile Windows din reţea.
Pe staţiile Windows trebuie să deschidem Control Panel, selectăm NetworkProperties. Verificăm înscrierea corectă a adreselor IP în câmpurile gateway şi DNS; ele trebuie să corespundă cu cele utilizate de serverul UNIX.
Apăsăm butonul Apply pentru a salva modificările, ieşim din configuraţia reţelei şi repornim sistemul. Reţeaua definită trebuie să apară în Network Neighbourhood după repornirea sistemului.
Se poate specifica accesul la directoarele partajate pe sistemul UNIX astfel încât unele staţii să poată accesa directoarele iar altele nu. Acest lucru se poate realiza prin includerea în fişierul de configurare a unei linii  host allow ce are sintaxa:

Code:

# host allow statie

unde  statie reprezintă fie numele staţiei de lucru, fie adresa IP a acesteia. Se pot specifica mai multe staţii de lucru ale căror nume pot fi separate de spaţiu sau virgulă. De asemenea, se poate interzice accesul anumitor staţii prin host deny:

Code:

# host deny statie

Pentru a obţine informaţii despre multiplele configurări posibile ale programului Samba, este bine să se consulte pagina de manual cu comanda:

Code:

$ man smb.conf

Partajarea directoarelor pentru acces personalizat
În afară de faptul că se poate asigura accesul public la directoarele partajate, uneori este necesar ca aceste directoare să fie accesibile unui număr limitat de utilizatori. Să considerăm cazul în care dorim să partajăm directorul /users/personal cu numele personal iar acesta să fie accesibil doar pentru utilizatorii stud1, stud2 şi stud3. În acest sens, fişierul de configurare
Samba trebuie să conţină următoarele linii:

Code:

[personal] 
path = /users/personal 
valid users = stud1 stud2 stud3 
writable = yes 
printable = no 
public = no 
create mask = 0765

Servicii de printare folosind Samba
Unul dintre avantajele reale ale utilizării Samba în reţea este posibilitatea partajării unei imprimante în reţea, indiferent dacă job-urile de tipărire provin de la o staţie UNIX sau de la una Windows. În acest sens este mai bine să se conecteze imprimanta la serverul UNIX deoarece configurarea imprimantei pentru reţea se face mai uşor aici. Pentru a partaja o imprimantă ataşată unei maşini UNIX cu staţii Windows din reţea, trebuie să edităm din nou fişierul de configurare Samba. La sfârşitul înregistrării
[global] din fişierul  /etc/init.d/samba/conf  trebuie adăugate următoarele linii:

Code:

printing = bsd 
printcap name = /etc/printcap 
load printers = yes 
log file = /var/log/samba/log 
lock directory = /var/lock/samba

Aceste linii specifică tipul de printare (BSD sau System V), locaţia fişierului  /etc/printcap utilizat de modul de tipărire Berkeley  şi locaţiile fişierelor log şi lock. Cea de-a treia linie specifică dacă imprimantele sunt încărcate în reţea de fiecare dată când este repornit serverul Samba. După ce am modificat secţiunea [global], trebuie să creăm o nouă secţiune denumită
[printers], ce ajută la configurarea opţiunilor generale de imprimare. Vom considera în continuare următorul exemplu:

Code:

[printers] 
comment = all printers 
security = server 
path = /var/spool/lpd/lp 
browseable = no 
printable = yes 
public = yes 
writable = no 
create mode = 0700

Aceste setări cuprind: locaţia job-urilor de tipărire, permisiunea pentru  print spool şi imprimantele cărora li se aplică aceste setări. Odată stabilite setările generale ale  imprimantelor din reţea, se poate configura separat fiecare imprimantă existentă în reţea pentru a avea setări individualizate. Aceste setări individualizate pentru fiecare imprimantă în parte conţin numele şi calea imprimantei precum şi informaţii importante caracteristice fiecărui tip de imprimantă în parte.
Un exemplu de setare individualizată este următorul:

Code:

[ijet] 
security = server 
path = /var/spool/lpd/lp 
printer name = inkjet 
public = yes 
writable = no 
printable = yes 
print command = lpr –r –h –P %p %s

Această configurare individuală este specifică fiecărui tip de imprimantă; pentru a vedea ce tip de comandă trebuie folosită pentru o imprimantă specifică trebuie consultată pagina de manual pentru comanda
lpd prin comanda man lpd.
După ce am terminat de făcut această configurare, se salvează fişierul, se iese din editarea sa  şi se reporneşte serverul Samba prin comanda:

Code:

# /etc/init.d/samba restart

În continuare, pe staţia Windows deshidem directorul  Printers (Start-Settings-Printers), localizăm noua imprimantă şi facem dublu-click pe  icon-ul acesteia. În ecranul de configurare apărut o selectăm ca imprimantă de reţea şi avem de ales dacă dorim să fie setată ca imprimantă impicită sau nu.
Apăsăm butonul Ok pentru a salva modificările făcute şi în acest moment putem selecta imprimanta de reţea din meniul  Print al programelor Windows.   

4.2.3 Integrarea Linux – Novell
Posibilităţile inter-operabilităţii Linux-Novell sunt mult mai restrânse decât acelea ale cooperării UNIX/Linux-Windows. O soluţie de integrare pentru aceste sisteme de operare o constituie programele ncpfs şi mars_nwe. Pachetul de instalare pentru  ncpfs este disponibil la adresa:
iar pachetul  mars_nwe la adresa: 
Prezentarea acestor programe nu face obiectul cărţii de faţă, însă cei interesaţi pot studia instrucţiunile pentru utilizarea programelor la adresa web


_______________________________________
Citeşte regulamentul forumului aici.

pus acum 14 ani
   
Gamer
Administrator

Din: Transilvania
Inregistrat: acum 14 ani
Postari: 202
rezervat 5

_______________________________________
Citeşte regulamentul forumului aici.

pus acum 14 ani
   
Gamer
Administrator

Din: Transilvania
Inregistrat: acum 14 ani
Postari: 202
rezervat 6

_______________________________________
Citeşte regulamentul forumului aici.

pus acum 14 ani
   
Gamer
Administrator

Din: Transilvania
Inregistrat: acum 14 ani
Postari: 202
rezervat 7

_______________________________________
Citeşte regulamentul forumului aici.

pus acum 14 ani
   
Gamer
Administrator

Din: Transilvania
Inregistrat: acum 14 ani
Postari: 202
rezervat 8

_______________________________________
Citeşte regulamentul forumului aici.

pus acum 14 ani
   
Pagini: 1  

Mergi la