Lucrarea 1

 Introducere in sistemult de operare LINUX

1.1Ce este Linux ?

          Linux este un sistem de operare compatibil UNIX (de fapt este o clonă a acestui sistem), a cărui realizare a început ca un hobby al unui student finlandez, Linus Torvalds. Acesta a încercat să dezvolte un sistem de operare inspirat de sistemul Minix, creat de Andrew Tanenbaum. Linux este un sistem de operare gratuit, de a cărui dezvoltare se ocupă programatori entuziaşti din toată lumea, care îşi pun la dispoziţie programele şi comunică cu ajutorul Internetului.

          Sistemul de operare, împreună cu unele aplicaţii pot fi găsite sub formă de "distribuţii", care sunt o modalitate de a integra pachetele software existente pentru Linux.

          Acest sistem, la fel ca majoritatea sistemelor UNIX, este scris aproape în întregime în limbajul C. Pentru Linux, licenţa sub care este distribuit (chiar dacă este gratuit, are totuşi o licenţă) specifică faptul că codul sursă al nucleului sistemului şi a celorlalte componente poate fi obţinut în mod gratuit de pe Internet.  Acest lucru permite oricui să inspecteze şi să modifice acest cod, pentru a-l îmbunătăţi sau a-l adapta nevoiilor proprii.

1.2. Caracteristicile sistemului de operare Linux

          Linux este un sistem de operare orientat pe comenzii , multitasking, multiuser care poate rula pe mai multe platforme: Intel, DEC Alpha, PowerPC şi respectă următoarele standarde la nivel de cod sursă: IEEE POSIX.1, UNIX System V, Berkely System Distribution UNIX.

          Alte facilităţi: suport pentru mai multe sisteme de fişiere: ext2 (specific Linux), vfat (MS DOS / MS Windows), Xenix, UNIX System V, ISO 9660 CD-ROM, ntfs (read-only), hpfs, minix. Linux foloseşte paginarea pentru alocarea memoriei virtuale. Până la 1Gb de spaţiu de "swap" poate fi creat.

          De asemenea, Linux vine cu o implementare completă a softului de reţea pentru TCP/IP: drivere pentru multe plăci de reţea, protocoalele SLIP (Serial Line IP), PPP (Point to Point Protocol), PLIP (Parallel Line IP), NFS (Network File System - dezvoltat de SUN Microsystems - protocol care permite utilizarea unităţilor de stocare aflate în reţea ca şi cum acestea s-ar afla pe calculatorul local). De asemenea, este prezentă întreaga suită de aplicaţii TCP/IP: telnet, FTP, NNTP, SMTP .

Un sistem Unix are o structura ierarhizata pe mai multe nivele; mai precis exista urmatoarele 3 nivele:

 

1) Nivelul hard: este nivelul format din componentele hardware: CPU + Memory + HDD +Network

2) Nivelul sistem: este reprezentat de kernelul (nucleul) sistemului Unix, si are rolul de a oferi o interfata intre aplicatii si partea de hardware, astfel incit aplicatiile sa fie portabile (independente de masina hardware pe care sunt rulate).

          Nucleul sistemului foloseşte modul protejat al procesoarelor familiei i386, folosind facilităţile multitasking ale acestor procesoare.

Nucleul Unix contine trei componente principale: sistemul de gestionare a fisierelor (File-System Manager), sistemul de gestionare a proceselor (Process Manager) si componenta de comunicatie in retea (ce se face pe baza protocoalelor de comunicatie IP + TCP/UDP). Nucleul este scris in cea mai mare parte (cca. 90%) in limbajul C. Ca urmare functiile sistem respecta conventiile din limbajul C. Ele pot fi apelate din programele utilizator, fie direct din limbaj de asamblare, fie prin intermediul bibliotecilor din limbajul C. Aceste functii sistem, oferite de kernel,

sunt numite in termeni Unix "apeluri sistem" (system calls). Prin ele, functiile kernelului sunt puse la dispozitia utilizatorilor, la fel cum se face in RSX-11M prin directive sistem, in MS-DOS prin intreruperile software, etc.

3) Nivelul user: contine limbajele de comanda (Shell-urile) si diversele programe utilitare si aplicatii utilizator. Fiecare nivel se bazeaza pe serviciile/resursele oferite de nivelul imediat inferior. Pe figura

serviciile/resursele folosite de fiecare componenta sunt cele oferite de componenta sau componentele aflate imediat sub aceasta !

Astfel componenta de gestiune a proceselor utilizeaza, ca resurse oferite de nivelul hard, CPU si memoria, plus o parte din HDD, sub forma discului de swap, pentru mecanismul de memorie virtuala (VM - virtual memory), mecanism ce utilizeaza memoria interna fizica si discul de

swap pentru a crea o memorie interna virtuala. Sistemul de fisiere utilizeaza restul HDD-ului, plus o parte din componenta de retea, prin

intermediul NFS-ului ( Network File System ).IP si TCP/UDP sunt protocoalele de baza pentru realizarea comunicatiei in retea, pe baza

carora sunt construite toate celelalte protocoale: posta electronica, transfer fisiere (FTP), World Wide Web (HTTP) etc. Interpretoarele de comenzi (shell-urile) utilizeaza serviciile puse la dispozitie de Process

Manager si File-System Manager, iar restul aplicatiilor utilizeaza serviciile oferite de intreg nivelul system.

           Programele executabile folosesc biblioteci de subrutine comune, editarea de legături cu programul care se execută se face în mod dinamic (asemănător cu DLL-urile din MS Windows)

 

2. Desfăşurarea lucrării

2.1. Intrarea în sistem

          Cum am spus mai înainte, Linux este un sistem de operare multiuser. Fiecare user este identificat de sistem printr-un nume de "login" şi o parolă (analog cu Novell NetWare). Aplicaţia cu care ne vom conecta la server-ul Linux este telnet. Această aplicaţie (care foloseşte protocolul cu acelaşi nume) face din calculatorul pe care este rulată un terminal pentru server-ul Linux. Cu alte cuvinte, calculatorul pe care lucraţi reprezintă doar o consolă (tastatură + ecran) pentru server-ul Linux, toate aplicaţiile fiind executate de acesta. În cazul nostru, există o diferenţă semnificativă faţă de Novell NetWare, unde server-ul este folosit doar pentru stocare de date, aplicaţiile executându-se pe calculatorul pe care lucraţi.

          Lansând aplicaţia telnet, veţi obţine un prompt "login:" la care veţi introduce numele de identificare al utilizatorului (login name), şi anume "linux1" pana la "linux20". Urmează apoi prompt-ul "Password: " unde veţi introduce parola "linux_1" respectiv "linux_20"  - fără ecou pe ecran (fără "", în ambele cazuri). Dacă totul a fost introdus corect, pe ecran va apare prompt-ul interpretorului de comenzi (shell):

 

          linux1>[linux1]$

 

          În Linux există mai multe shell-uri (interpretoare de comenzi) disponibile: bash (Bourne Again Shell), tcsh (C Shell), zsh, ksh (Korn Shell). Shell-ul folosit de noi este bash, care este şi cel mai utilizat.

          În continuare vom prezenta mai multe comenzi şi utilitare importante. În descrierea sintaxei lor  ceea ce este scris între [...] este opţional, iar ceea ce este scris între <...> este obligatoriu.

Comenzi ale aplicatiei telnet:

 

ALT+H - help despre comenzile telnet

ALT+P - setare diverse caracteristici ale terminalului (printre care si culorile de text, de background si de highlighted text, precum si permisiunea de a deschide conexiuni FTP)

ALT+A - deschiderea unei noi sesiuni de lucru telnet

ALT+X - inchiderea unei sesiuni de lucru telnet

ALT+N - comutarea intre diversele sesiuni de lucru deschise, in ordinea in care au fost deschise

ALT+B - comutarea intre diversele sesiuni de lucru deschise, in ordine inversa celei in care au fost

deschise

ALT+E - ruleaza un shell DOS (poti executa comenzi DOS), din care se iese cu comanda exit

ALT+F - deschiderea unei conexiuni FTP

 

2.1.1 Despre terminale

          Un sistem UNIX este format din calculatorul central şi mai multe terminale. Terminalele pot fi reale sau virtuale. De exemplu, pe calculatorul pe care este instalat sistemul Linux, există 6 terminale virtuale (selectabile cu tastele Alt+F1..F6). Orice alt calculator conectat fizic la sistemul Linux poate deveni terminal pentru acesta folosind un program adecvat care foloseşte protocolul telnet. Întrucât există multe tipuri de terminale (prin tipuri înţelegem semnificaţii diferite ale caracterelor de control şi chiar a caracterelor obişnuite - de exemplu, unele teminale pot sa nu folosească caracterele cu codul ASCII mai mare de 127), este necesar ca programele să ştie parametrii fiecărui tip de terminal. Acest lucru se realizează printr-un fişier corespunzător fiecărui terminal, cu date despre acesta, conţinut într-o bază de date a terminalelor, terminfo. Identificarea terminalului se face prin variabila de sistem TERM (Exemple de terminale: vt100, vt 102, Linux, x-term). Setarea variabilei TERM cu altă valoare decât cea a tipului de terminal (sau a emulării de terminal) utilizat poate duce la o comportare imprevizibilă a terminalului. De asemenea, unele terminale au mai multe posibilităţi decât altele (De exemplu, nu toate terminalele au tastele F1-F12, sau altele au doar F1-F10 etc. Aceste taste sunt câteodată asignate altor taste - de ex. pe numpad)     

          !Atenţie! Tipul terminalului, în cazul celor aflate la distanţă, nu este dat de calculatorul pe care se lucrează, ci de soft-ul care face emularea de terminal.

 

2.2 Comenzi

La fel ca in DOS, exista doua categorii de comenzi: interne (care se gasesc in fisierul executabil al shell-ului respectiv) si externe (care se gasesc separat fiecare intr-un fisier executabil, avind acelasi nume cu comanda respectiva).

Forma generala a unei comenzi Unix este:

<nume_comanda> [<optiuni>] [<argumente>]

unde optiunile si argumentele pot lipsi, dupa caz. Prin conventie, ptiunile sunt precedate de caracterul "-" (in DOS este folosit "/"). Argumentele sunt cel mai adesea nume de fisiere.

 

          ls [<cale>] [opţiuni] - afişarea conţinutului unui director

 

          Să inspectăm conţinutul directorului curent:

 

          linux1>[linux1]$ ls

 

care va afişa:

 

          Desktop

          GNUstep

          Xrootenv.0

          linux-lab1.txt

          new.xinitrc

          nsmail

 

          Să încercăm acum o listare completă a conţinutului directorului curent:

          linux1>[linux1]$ ls -al

total 43

drwx------  17 linux1 users        1024 Sep  9 12:28 .

drwxr-xr-x   6 root     root         1024 Sep  9 10:59 ..

-rw-r--r--   1 linux1 users         963 Sep  9 11:32 .FVWM2-errors

-rw-------   1 linux1 users           0 Sep  9 11:26 .ICEauthority

-rw-r--r--   1 linux1 users           0 Sep  9 12:26 .WindowMaker-errors

-rw-------   1 linux1 users         115 Sep  9 12:26 .Xauthority

-rwxr-xr-x   1 linux1 users         188 Sep  9 11:26 .Xclients

-rwxr-xr-x   1 linux1 users        1046 Sep  9 11:26 .Xclients-default

-rw-r--r--   1 linux1 users        1422 Sep  9 10:59 .Xdefaults

-rw-------   1 linux1 users         104 Sep  9 12:25 .bash_history

-rw-r--r--   1 linux1 users          24 Sep  9 10:59 .bash_logout

-rw-r--r--   1 linux1 users         230 Sep  9 10:59 .bash_profile

-rw-r--r--   1 linux1 users         124 Sep  9 10:59 .bashrc

drwx------   3 linux1 users        2048 Sep  9 11:26 .enlightenment

drwx------   6 linux1 users        1024 Sep  9 11:26 .gnome

drwxr-xr-x   2 linux1 users        1024 Sep  9 11:24 .gnome-desktop

drwxr-xr-x   2 linux1 users        1024 Sep  9 11:25 .gnome-help-browser

drwx------   2 linux1 users        1024 Sep  9 11:24 .gnome_private

drwxr-xr-x   2 linux1 users        1024 Sep  9 12:26 .gnp

drwxr-xr-x   3 linux1 users        1024 Sep  9 10:59 .kde

-rw-r--r--   1 linux1 users         966 Sep  9 10:59 .kderc

drwxr-xr-x   2 linux1 users        1024 Sep  9 12:22 .mc

drwx------   5 linux1 users        1024 Sep  9 12:26 .netscape

-rw-r--r--   1 linux1 users          12 Sep  9 12:26 .wm_style

drwxr-xr-x   2 linux1 users        1024 Sep  9 11:40 .wmakerconf

drwxr-xr-x   2 linux1 users        1024 Sep  9 12:26 .x11amp

drwx------   3 linux1 users        1024 Sep  9 12:09 .xauth

drwxr-xr-x   5 linux1 users        1024 Sep  9 10:59 Desktop

drwxr-xr-x   5 linux1 users        1024 Sep  9 11:32 GNUstep

-rw-r--r--   1 linux1 users         410 Sep  9 12:26 Xrootenv.0

-rw-r--r--   1 linux1 users           5 Sep  9 11:29 new.xinitrc

drwx------   2 linux1 users        1024 Sep  9 12:19 nsmail

 

          Pentru a afla informaţii despre sintaxa şi semantica comenzii ls, ca de altfel a majorităţii comenzilor, tastaţi "man <comandă>", în cazul nostru "man ls". Această comandă va afişa paginile de manual pentru comandă respectivă.

         

 

          Să analizăm în detaliu una din liniile ieşirii comenzii "ls -l":

 

drwxr-xr-x   5 linux1 users        1024 Sep  9 10:59 Desktop

 

          drwxr-xr-x: primul caracter reprezintă tipul fişierului (în cazul nostru d=fişier director; dacă era -, însemnă fişier obişnuit). Mai sunt şi alte tipuri, pe care le vom discuta mai târziu ; wxr: drepturile celui care deţine fişierul (are drept de scriere, de citire şi de execuţie), următoarele trei caractere: -xr reprezintă drepturile grupului din care face parte cel care deţine fişierul (în cazul nostru, drept de execuţie şi de citire, nu are drept de scriere), ultimele trei caractere reprezentând drepturile celorlaltor utilizatori (la fel ca ale grupului).

 

          În Linux, fişierele executabile nu sunt recunoscute de sistem după extensie, ci după flag-ul "x" - executabil. La crearea unui fişier de comenzi (analog cu fişierele .BAT din MS-DOS), pentru a-l putea executa, trebuie să-i setaţi flag-ul "x" (cu comandă "chmod"), cel puţin pentru una din cele trei categorii de utilizatori menţionate mai sus.

 

          5: numărul de blocuri alocate pentru fişier ;

          linux1: deţinătorul fişierului (numele de login) ;

          users: grupul care deţine fişierul.

          1024: dimensiunea fişierului (pentru un director, aceasta depinde de numărul intrărilor în acesta) ;

          Sep 9 10:59: data şi ora creării fişierului ;

          Desktop: numele fişierului ;

 

          În respectarea acestor drepturi se întâlnesc două excepţii: utilizatorul "root" - administratorul de sistem - are drepturi depline asupra oricărui fişier, indiferent de drepturile setate. La fel se întâmplă cu deţinătorul unui fişier, care are drepturi depline asupra acestuia.

Pentru a filtra ieşirea comenzii ls, precum şi în multe operaţii cu fişiere, este posibilă folosirea aşa numitelor "wild cards", caractere care pot înlocui unul sau mai multe caractere. Acestea sunt:

          "*" - înlocuieşte un grup de caractere. Exemplu: "ls ap*" listează fişierele ale căror nume încep cu caracterele "ap"

          "?" - înlocuieşte un singur caracter.

          "[...]" - Exemplu: "ls ap[a-f]m": va lista toate fişierele care au primele două caractere ale numelui "ap", următorul caracter poate fi orice între "a" şi "f", inclusiv, şi ultimul caracter "m".

          cd [<cale>]

          Această comandă este echivalentă cu cea din MS-DOS (change directory) - schimbă directorul curent. Spre deosebire de MS-DOS, căile în UNIX se construiesc folosind ca separator între directoare caracterul "/". De exemplu, dacă doriţi să intraţi în directorul Desktop, daţi comandă cd Desktop. Dacă doriţi, de exemplu, să vedeţi ce fişiere există în directorul "usr/doc" din rădăcină, daţi comandă "cd /usr/doc". Calea curentă, în care vă aflaţi, poate fi aflată cu comandă "pwd".

 

!Atenţie: Linux este un sistem de operare "case-sensitive", adică face diferenţa între minuscule şi majuscule. De pildă, desktop este diferit de Desktop.

 

          Fiecare utilizator are un director de bază, în care îşi ţine fişierele personale, precum şi alte fişiere de configuraţie personalizate (home directory). Există câteva nume de directoare predefinite:

          "~" reprezintă home-directory-ul utilizatorului curent. Comandă "cd ~" sau "cd" ne duce în directorul "/home/linux1". Putem verifica acest lucru cu comandă "pwd" (ne afişează calea curentă). De exemplu, calea "~/Desktop" este interpretată, în cazul nostru, ca "/home/linux1/Desktop".

          ".." reprezintă directorul părinte. "cd .." (atenţie, se lasă spaţiu între "cd" şi "..") ne duce cu un nivel mai sus în ierarhia de directoare.

          "." reprezintă directorul curent "cd ." ne lasă în acelaşi loc, însă "." are o utilizare specială: când este dată o comandă, shell-ul o caută doar în directoarele specificate de variabila sistem PATH. Dacă doriţi să executaţi o comandă care se află în directorul curent (care nu este inclus în PATH), tastaţi ./<comandă>.

2.2.1 Comenzi de gestiunea fişierelor

          cp [opţiuni] <fişier_sursă> <destinaţie> - copiază fişiere şi directoare

 

          mv [opţiuni] <fişier_sursă> <destinaţie> - redenumeşte <destinaţie>, dându-i numele <fişier_sursă>

          mv [opţiuni] <fişiere_sursă> <director> - mută <fişiere_sursă> în <director>

 

          ln [opţiuni] <fişier_tinta> [<nume_legatura>] - creaza o legatura cu numele

nume_legatura, dacă este furnizat (dacă nu, legatura are acelasi nume ca si fişierul tinta)

          ln [opţiuni] <fişiere_tinta> <director> - creeaza in <director> legături la <fişiere_tinta>, cu aceleaşi nume. "ln" crează legături hard (in mod implicit). Pentru crearea de legături simbolice, se foloseşte opţiunea "-s"

         

          rm <fişier> [opţiuni] - şterge fişiere. Se pot folosi "wild cards":"*", "?", "[..]". Una din cele mai importante opţiuni ale comenzii "rm" este "-i", care generaza o întrebare de confirmare pentru fiecare fişier sters. Alte opţiuni pot fi aflate cu comandă "man rm".

 

!Atenţie: multe din comenzile Linux, comenzi care pot produce modificări importante şi iremediabile in sistem se executa in mod silentios, fără a genera vreun mesaj şi fără a cere o confirmare a actiunii.

 

          rmdir [opţiuni] <director> - şterge un director, dacă acesta este gol.

 

          cat [opţiuni] [<fişier>] - afişează conţinutul unui fişier. De fapt, aceasta comandă, fără nici un argument, copiaza ceea ce primeşte de la intrarea standard (in mod normal, consola) la ieşirea standard (in mod normal, tot consola). Dacă primeşte ca argument un fişier, "cat" va considera acest fişier ca intrare, ieşirea fiind cea standard.

 

2.2.2 Aflarea unor informaţii diverse despre sistem.

 

          date - afişează data şi ora curentă

          who - informaţii despre ceilalţi utilizatori conectaţi la sistem

          who am i - informaţii despre utilizatorul de la terminalul curent

          df - informaţii despre diversele sisteme de fişiere ale sistemului

 

2.2.3. Căutarea fişierelor

         

          find [<cale_fişier>] [<expresie>] - caută fişiere într-un arbore de directoare. La această comandă se pot folosi "wild-cards".

         

          grep [opţiuni] <fişiere...> - caută în <fişiere...> şi afişează liniile care respectă anumite condiţii.

 

          Detalii despre aceste comenzi pot fi aflate cu "man find", respectiv "man grep"

 

2.2.4. Informaţii despre procesele rulate în sistem

          ps [<opţiuni>] - fără nici un parametru - afişează procesele care sunt rulate de utilizatorul current;

          ps -a - afişează toate procesele rulate în system.

 

2.2.5  Unde găsim alte informaţii ?

          Cea mai bună sursă de informaţie despre sistemul Linux o reprezintă chiar documentaţia vastă inclusă în sistem. Aceasta se compune din:

          - paginile de manual - accesate cu comanda "man <comandă>". Aceste pagini sunt grupate pe secţiuni. Paginile de manual sunt localizate în directorul /usr/man. Mai există o comandă, "apropos <termen>", care caută în paginile de manual cuvântul <termen> şi afişează toate comenzile ale căror pagini de manual conţin acest termen.

          - utilitarul texinfo - apelat cu comanda "info <comandă>" - este un sistem care seamănă mai mult cu sistemele de help moderne. Informaţia este ierarhizată. Pentru multe comenzi există şi pagini de manual, şi fişiere pentru texinfo. În principiu, în pagina de manual corespunzătoare este menţionat faptul că documentaţia texinfo este mai completă şi mai actuală (de exemplu, tot ceea ce ţine de compilatorul de C)

          - alte documentaţii din directorul /usr/doc. Foarte utile sunt documentaţiile din directorul /usr/doc/HOWTO. Fişierele din acest director sunt de fapt nişte ghiduri pentru realizarea unor lucruri specifice (de exemplu, dacă doriţi să stiţi cum se poate realiza o intergrare între Linux şi retelele Novell, citiţi IPX-HOWTO; dacă doriţi să instalaţi o placă de sunet, citiţi Sound-HOWTO; dacă doriţi să configuraţi partea de reţea, citiţi Ethernet-HOWTO, NET-3-HOWTO; pentru configurarea modem-ului şi conectarea la un ISP (Internet Service Provider), citiţi PPP-HOWTO, Serial-HOWTO etc.)

          - manualele din cadrul LDP (Linux Documentation Project) - directorul /usr/doc/LDP:

          "Linux Installation and Getting Started Guide",

          "Linux Network Administrators Guide"

          "Linux System Administrators Guide"

          "Linux Programmer's Guide"

          Aceste manuale sunt în format html, ele putând fi citite cu lynx sau netscape. Versiuni în alte formate pot fi obţinute de pe Internet (sunsite.unc.edu/pub/ Linux/docs/LDP/)

 

2.2.6 Legarea comenzilor

 

In general o comanda simpla consta dintr-o secventa de cuvinte, primul dintre acestea reprezentand numele comenzii care urmeaza a fi executata. O serie de comenzi simple pot fi  conectate cu ajutorul caracterului |, formand o linie de comunicare. Intr-o astfel de constructie,

iesirea fiecarei comenzi aflata inaintea semnului | reprezinta intrarea comenzii specificate dupa semnul |:

ls -lR | sort +8 | more

ls -lR | sort +8 | cut -b16-24

Comenzile simple pot fi de asemenea inlantuite intr-o secventa de comenzi separate prin semnul ;. In aceasta situatie, semnul ; este utilizat pentru a preciza ordinea in care se executa aceste comenzi. Nu este necesara precizarea nici unei legaturi intre comenzile inlantuite in acest mod

ls -lR ; cd ; mkdir public_html ; touch public_html/index.html

Sunt posibile de asemenea si constructii mai complicate. Astfel, || urmeaza a preciza faptul ca doua comenzi sunt conectate doar daca prima dintre ele nu se executa cu succes (respectiv cu succes, pentru constructia &&).

Comenzile (simple, conectate sau inlantuite) pot fi precizate intre paranteze pentru a putea utiliza aceasta constructie ca o simpla  instructiune in alte constructii mai complicate:

(cd . ; pwd) | cut -f2 -d/

 

2.2.7 Comenzii de  comprimare si arhivare

Exista numeroase utilitare destinate comprimarii/decomprimarii fisierelor sub UNIX. Iata o lista a celor mai des intalnite:

 

compress, uncompress.

Comprimarea utilizeaza codificarea Lempel-Ziv adaptiva. Un astfel de fisier este identificabil prin sufixul .Z. Comanda zcat este inrudita cu uncompress, si are ca efect afisarea rezultatului la iesirea standard. Daca curs.tar.Z este o arhiva comprimata cu  ajutorul utilitarului compress, desfacerea si decomprimarea se poate realiza astfel:

zcat curs.tar.Z | tar xvf –

 

zip, unzip.

Este un utilitar de compresie si impachetare (disponibil si sub MS-DOS, Windows). Este similar cu combinarea comenzilor tar si compress. Extensia utilizata este in acest caz .z

 

gzip, gunzip.

 

Comprimarea utilizeaza in aceasta situatie codificarea Lempel-Ziv (LZ77). Extensia .gz identifica fisierele comprimate prin aceasta metoda.

 

bzip2,bunzip2,bzcat.

 

Utilitarele bzip2/bunzip2 sunt relativ recente si utilizeaza metoda de comprimare Burrows - Wheeler combinata cu codificarea Huffman. Rezultatele sunt in general superioare codificarilor traditionale  LZ77/LZ78.

 

tar.

Acesta este utilitarul traditional de arhivare (Tape ARchiver) pe banda. Iata un exemplu de comprimare/decomprimare

 

tar cvf c-files.tar *.cc

tar tvf c-files.tar

tar xvf c-files.tar

 

uuencode/uudecode

 

Informatiile comprimare/arhivate pot eventual fi codificate pentru a usura transmisia acestora prin intermediul unei cai de comunicatie. Multe dintre caile de comunicatie se descurca doar cu caractere tiparibile din setul ASCII (astfel, fisierele atasate unui mesaj de posta electronica trebuie sa se supuna acestei cerinte). Utilitarele uuencode si uudecode

transforma datele de intrare in versiuni codificate (formate numai din caractere tiparibile) respectiv decodificate.

 

2.3 Editoare de fisiere

Exista mai multe editoare de fisiere text sub Unix, printre care: vi, joe, pico, ed, sed, emacs, tex s.a.

2.3.1 Editarea unui fişier - editorul "vi"

          Editorul "vi" este unul dintre cele mai vechi, şi totuşi unul dintre cele mai folosite editoare de text sub Linux (şi UNIX în general). Chiar dacă este depăşit de alte editoare, ca Emacs sau Joe, cunoaşterea lui este necesară pentru că este de obicei singurul disponibil pe dischetele de boot cu care se repară un sistem Linux. "vi" este un editor destul de diferit de ceea ce înţelegem azi prin editor de text, fiind şi foarte complex.

          Apelare: vi [opţiuni] [<fişier>]. Apelat fără nici un argument, va edita un fişier nou. La pornire, vi se află în mod comandă. În acest mod, tot ceea ce este tipărit este interpretat drept comandă. Comenzi importante:

          :q! - părăseşte fişierul vi fără a salva documentul

          :x - salvează fişierul şi părăseşte editorul

          :w [<nume fişier>]- salvează fişierul editat, cu numele specificat. Dacă nu e specificat numele, îl salvează cu vechiul nume.

          :help [<subiect>]- invocă manualul on-line. Subiectele se pot găsi pe prima pagină (comanda ":help")

          a - apendare text la poziţia curentă

          i - inserare text la poziţia curentă. Nu veţi putea şterge în acest mod decât caracterele introduse de când aţi intrat în acest mod.

          A - apendare la sfârşit de linie

          I - inserare înainte de primul caracter non-blank din linia curentă

          rx - înlocuieşte un caracter x la poziţia curentă

          R - înlocuieşte caractere multiple, începând de la caracterul din poziţia curentă

          ESC - termină comandă curentă

          :w [<fişier>] - scrie textul în fişierul specificat. Dacă nu e specificat nici un fişier, scrierea se face în fişierul curent.

          :r <fişier> - inserează conţinutul unui fişier la poziţia curentă.

          Ştergerea altor caractere decât cele inserate în modul "insert" se face cu comanda "d[<arg>]

 

2.3.2 Editorul joe

Se apeleaza cu ajutorul comanzii joe

Comenzi ale editorului joe (sunt asemanatoare cu cele din editorul Tpascal sau WordStar ):

- Ctrl+K,H - help cu comenzile lui

- Ctrl+K,B - inceput selectie bloc de text

- Ctrl+K,K - sfirsit selectie bloc de text

- Ctrl+K,C - copie blocul de text anterior selectat

- Ctrl+K,M - muta blocul de text anterior selectat

- Ctrl+K,Y - sterge blocul de text anterior selectat

- Ctrl+K,W - scrie, in fisierul specificat, blocul de text anterior selectat

- Ctrl+K,R - adauga, pe pozitia cursorului, continutul fisierului specificat

- Ctrl+C - iesire fara a salva modificarile facute in fisierul editat

- Ctrl+K,X - iesire cu salvarea modificarilor facute in fisierul editat

 

 

3. Daca se blocheaza un program ??

Sa presupunem ca in timpul executiei unei comenzi (un program de sistem sau un program scris de utilizator), aveti impresia ca acesta s-a blocat (nu mai apare nici un mesaj pe ecran, desi ar fi trebuit, etc.). Intr-o asemenea situatie nu intrati in panica, ci, pentru a opri acest program, deci pentru a obtine din nou controlul asupra prompterului shell-ului, urmati urmatorii pasi in ordinea in care sunt prezentati, oprindu-va la pasul la care ati reusit sa deblocati programul (adica sa apara prompterul):

 

1) Mai intii, asteptati un timp rezonabil, poate totusi programul nu este blocat, ci doar ocupat cu calcule laborioase; Daca totusi nu apare prompterul, atunci:

2) Apasati tastele ^C (CTRL+C). (Aceasta determina trimiterea semnalului de intrerupere SIGINT programului respectiv.)Daca totusi nu apare prompterul, atunci:

3) Apasati tastele ^\ (CTRL+\). (Aceasta determina trimiterea semnalului de intrerupere SIGQUIT programului respectiv.)Daca totusi nu apare prompterul, atunci:

4) Apasati tastele ^Z (CTRL+Z). Ca urmare, programul este trimis in background si apare prompterul. Mai departe, dati comanda: ps pentru a afla pid-ul acelui program. Apoi dati comanda:

kill -9 <pid>

unde <pid> este pid-ul aflat anterior. Ca urmare a acestei comenzi procesul (programul blocat) este distrus.

In acest moment sigur ati scapat de acel program ce se blocase si aveti controlul asupra prompterului shell-ului.

 

4. Întrebări şi aplicaţii

4.1.  Afişaţi conţinutul arborelui de directoare (toate fişierele şi toate directoarele). Creaţi un fişier care conţine aceste nume. Modificaţi drepturile acestui fişier astfel încât să nu poată fi accesat (citit) de toţi utilizatorii, ci doar de utilizatorul curent şi de cei care fac parte din grupul users. De asemenea, daţi drept de scriere pentru membrii grupului users.

 

4.2.  Creaţi un fişier executabil care să furnizeze conţinutul directorului curent, procesele care sunt rulate în sistem precum şi informaţii despre utilizatorii conectaţi. Cu ajutorul acestui fişier, creaţi alt fişier care să conţină toate aceste informaţii.

 

4.3Creaţi un director, cu numele linkxx, unde înlocuiţi xx prin 2 cifre arbitrare, asftel încât numele directorului să fie unic şi creaţi în el două legături simbolice la cele două fişiere create la punctele 3.1. şi 3.3.

 

4.4 Consultati paginile de manual pentru comenzile sort, cut, tail, uniq. Creati un fisier text continand linii formate din mai multe campuri. Afisati apoi lista sortata a cuvintelor dintr-un anumit camp. In cazul in care exista mai multe copii ale unor informatii, incercati sa obtineti

afisarea unei singure aparitii.