Lucrarea 1 Introducere in sistemult de operare LINUX 1.1Ce este Linux ? Linux este un sistem de operare compatibil UNIX (de fapt este o clona a acestui sistem), a carui realizare a început ca un hobby al unui student finlandez, Linus Torvalds. Acesta a încercat sa dezvolte un sistem de operare inspirat de sistemul Minix, creat de Andrew Tanenbaum. Linux este un sistem de operare gratuit, de a carui dezvoltare se ocupa programatori entuziasti din toata lumea, care îsi pun la dispozitie programele si comunica cu ajutorul Internetului. Sistemul de operare, împreuna cu unele aplicatii pot fi gasite sub forma de "distributii", 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, licenta sub care este distribuit (chiar daca este gratuit, are totusi o licenta) specifica faptul ca codul sursa al nucleului sistemului si a celorlalte componente poate fi obtinut în mod gratuit de pe Internet. Acest lucru permite oricui sa inspecteze si sa modifice acest cod, pentru a-l îmbunatati 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 si respecta urmatoarele standarde la nivel de cod sursa: IEEE POSIX.1, UNIX System V, Berkely System Distribution UNIX. Alte facilitati: suport pentru mai multe sisteme de fisiere: ext2 (specific Linux), vfat (MS DOS / MS Windows), Xenix, UNIX System V, ISO 9660 CD-ROM, ntfs (read-only), hpfs, minix. Linux foloseste paginarea pentru alocarea memoriei virtuale. Pâna la 1Gb de spatiu de "swap" poate fi creat. De asemenea, Linux vine cu o implementare completa a softului de retea pentru TCP/IP: drivere pentru multe placi de retea, 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 unitatilor de stocare aflate în retea ca si cum acestea s-ar afla pe calculatorul local). De asemenea, este prezenta întreaga suita de aplicatii 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 foloseste modul protejat al procesoarelor familiei i386, folosind facilitatile 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 legaturi cu programul care se executa se face în mod dinamic (asemanator cu DLL-urile din MS Windows) 2. Desfasurarea lucrarii 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" si o parola (analog cu Novell NetWare). Aplicatia cu care ne vom conecta la server-ul Linux este telnet. Aceasta aplicatie (care foloseste protocolul cu acelasi nume) face din calculatorul pe care este rulata un terminal pentru server-ul Linux. Cu alte cuvinte, calculatorul pe care lucrati reprezinta doar o consola (tastatura + ecran) pentru server-ul Linux, toate aplicatiile fiind executate de acesta. În cazul nostru, exista o diferenta semnificativa fata de Novell NetWare, unde server-ul este folosit doar pentru stocare de date, aplicatiile executându-se pe calculatorul pe care lucrati. Lansând aplicatia telnet, veti obtine un prompt "login:" la care veti introduce numele de identificare al utilizatorului (login name), si anume "linux1" pana la "linux20". Urmeaza apoi prompt-ul "Password: " unde veti introduce parola "linux_1" respectiv "linux_20" - fara ecou pe ecran (fara "", în ambele cazuri). Daca totul a fost introdus corect, pe ecran va apare prompt-ul interpretorului de comenzi (shell): linux1>[linux1]$ În Linux exista 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 si cel mai utilizat. În continuare vom prezenta mai multe comenzi si utilitare importante. În descrierea sintaxei lor ceea ce este scris între [...] este optional, 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 si mai multe terminale. Terminalele pot fi reale sau virtuale. De exemplu, pe calculatorul pe care este instalat sistemul Linux, exista 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 foloseste protocolul telnet. Întrucât exista multe tipuri de terminale (prin tipuri întelegem semnificatii diferite ale caracterelor de control si chiar a caracterelor obisnuite - de exemplu, unele teminale pot sa nu foloseasca caracterele cu codul ASCII mai mare de 127), este necesar ca programele sa stie parametrii fiecarui tip de terminal. Acest lucru se realizeaza printr-un fisier corespunzator fiecarui terminal, cu date despre acesta, continut într-o baza 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 alta valoare decât cea a tipului de terminal (sau a emularii de terminal) utilizat poate duce la o comportare imprevizibila a terminalului. De asemenea, unele terminale au mai multe posibilitati decât altele (De exemplu, nu toate terminalele au tastele F1-F12, sau altele au doar F1-F10 etc. Aceste taste sunt câteodata asignate altor taste - de ex. pe numpad) !Atentie! Tipul terminalului, în cazul celor aflate la distanta, nu este dat de calculatorul pe care se lucreaza, 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: [] [] 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 [] [optiuni] - afisarea continutului unui director Sa inspectam continutul directorului curent: linux1>[linux1]$ ls care va afisa: Desktop GNUstep Xrootenv.0 linux-lab1.txt new.xinitrc nsmail Sa încercam acum o listare completa a continutului 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 informatii despre sintaxa si semantica comenzii ls, ca de altfel a majoritatii comenzilor, tastati "man ", în cazul nostru "man ls". Aceasta comanda va afisa paginile de manual pentru comanda respectiva. Sa analizam în detaliu una din liniile iesirii comenzii "ls -l": drwxr-xr-x 5 linux1 users 1024 Sep 9 10:59 Desktop drwxr-xr-x: primul caracter reprezinta tipul fisierului (în cazul nostru d=fisier director; daca era -, însemna fisier obisnuit). Mai sunt si alte tipuri, pe care le vom discuta mai târziu ; wxr: drepturile celui care detine fisierul (are drept de scriere, de citire si de executie), urmatoarele trei caractere: -xr reprezinta drepturile grupului din care face parte cel care detine fisierul (în cazul nostru, drept de executie si de citire, nu are drept de scriere), ultimele trei caractere reprezentând drepturile celorlaltor utilizatori (la fel ca ale grupului). În Linux, fisierele executabile nu sunt recunoscute de sistem dupa extensie, ci dupa flag-ul "x" - executabil. La crearea unui fisier de comenzi (analog cu fisierele .BAT din MS-DOS), pentru a-l putea executa, trebuie sa-i setati flag-ul "x" (cu comanda "chmod"), cel putin pentru una din cele trei categorii de utilizatori mentionate mai sus. 5: numarul de blocuri alocate pentru fisier ; linux1: detinatorul fisierului (numele de login) ; users: grupul care detine fisierul. 1024: dimensiunea fisierului (pentru un director, aceasta depinde de numarul intrarilor în acesta) ; Sep 9 10:59: data si ora crearii fisierului ; Desktop: numele fisierului ; În respectarea acestor drepturi se întâlnesc doua exceptii: utilizatorul "root" - administratorul de sistem - are drepturi depline asupra oricarui fisier, indiferent de drepturile setate. La fel se întâmpla cu detinatorul unui fisier, care are drepturi depline asupra acestuia. Pentru a filtra iesirea comenzii ls, precum si în multe operatii cu fisiere, este posibila folosirea asa numitelor "wild cards", caractere care pot înlocui unul sau mai multe caractere. Acestea sunt: "*" - înlocuieste un grup de caractere. Exemplu: "ls ap*" listeaza fisierele ale caror nume încep cu caracterele "ap" "?" - înlocuieste un singur caracter. "[...]" - Exemplu: "ls ap[a-f]m": va lista toate fisierele care au primele doua caractere ale numelui "ap", urmatorul caracter poate fi orice între "a" si "f", inclusiv, si ultimul caracter "m". cd [] Aceasta comanda este echivalenta cu cea din MS-DOS (change directory) - schimba directorul curent. Spre deosebire de MS-DOS, caile în UNIX se construiesc folosind ca separator între directoare caracterul "/". De exemplu, daca doriti sa intrati în directorul Desktop, dati comanda cd Desktop. Daca doriti, de exemplu, sa vedeti ce fisiere exista în directorul "usr/doc" din radacina, dati comanda "cd /usr/doc". Calea curenta, în care va aflati, poate fi aflata cu comanda "pwd". !Atentie: Linux este un sistem de operare "case-sensitive", adica face diferenta între minuscule si majuscule. De pilda, desktop este diferit de Desktop. Fiecare utilizator are un director de baza, în care îsi tine fisierele personale, precum si alte fisiere de configuratie personalizate (home directory). Exista câteva nume de directoare predefinite: "~" reprezinta home-directory-ul utilizatorului curent. Comanda "cd ~" sau "cd" ne duce în directorul "/home/linux1". Putem verifica acest lucru cu comanda "pwd" (ne afiseaza calea curenta). De exemplu, calea "~/Desktop" este interpretata, în cazul nostru, ca "/home/linux1/Desktop". ".." reprezinta directorul parinte. "cd .." (atentie, se lasa spatiu între "cd" si "..") ne duce cu un nivel mai sus în ierarhia de directoare. "." reprezinta directorul curent "cd ." ne lasa în acelasi loc, însa "." are o utilizare speciala: când este data o comanda, shell-ul o cauta doar în directoarele specificate de variabila sistem PATH. Daca doriti sa executati o comanda care se afla în directorul curent (care nu este inclus în PATH), tastati ./. 2.2.1 Comenzi de gestiunea fisierelor cp [optiuni] - copiaza fisiere si directoare mv [optiuni] - redenumeste , dându-i numele mv [optiuni] - muta în ln [optiuni] [] - creaza o legatura cu numele nume_legatura, daca este furnizat (daca nu, legatura are acelasi nume ca si fisierul tinta) ln [optiuni] - creeaza in legaturi la , cu aceleasi nume. "ln" creaza legaturi hard (in mod implicit). Pentru crearea de legaturi simbolice, se foloseste optiunea "-s" rm [optiuni] - sterge fisiere. Se pot folosi "wild cards":"*", "?", "[..]". Una din cele mai importante optiuni ale comenzii "rm" este "-i", care generaza o întrebare de confirmare pentru fiecare fisier sters. Alte optiuni pot fi aflate cu comanda "man rm". !Atentie: multe din comenzile Linux, comenzi care pot produce modificari importante si iremediabile in sistem se executa in mod silentios, fara a genera vreun mesaj si fara a cere o confirmare a actiunii. rmdir [optiuni] - sterge un director, daca acesta este gol. cat [optiuni] [] - afiseaza continutul unui fisier. De fapt, aceasta comanda, fara nici un argument, copiaza ceea ce primeste de la intrarea standard (in mod normal, consola) la iesirea standard (in mod normal, tot consola). Daca primeste ca argument un fisier, "cat" va considera acest fisier ca intrare, iesirea fiind cea standard. 2.2.2 Aflarea unor informatii diverse despre sistem. date - afiseaza data si ora curenta who - informatii despre ceilalti utilizatori conectati la sistem who am i - informatii despre utilizatorul de la terminalul curent df - informatii despre diversele sisteme de fisiere ale sistemului 2.2.3. Cautarea fisierelor find [] [] - cauta fisiere într-un arbore de directoare. La aceasta comanda se pot folosi "wild-cards". grep [optiuni] - cauta în si afiseaza liniile care respecta anumite conditii. Detalii despre aceste comenzi pot fi aflate cu "man find", respectiv "man grep" 2.2.4. Informatii despre procesele rulate în sistem ps [] - fara nici un parametru - afiseaza procesele care sunt rulate de utilizatorul current; ps -a - afiseaza toate procesele rulate în system. 2.2.5 Unde gasim alte informatii ? Cea mai buna sursa de informatie despre sistemul Linux o reprezinta chiar documentatia vasta inclusa în sistem. Aceasta se compune din: - paginile de manual - accesate cu comanda "man ". Aceste pagini sunt grupate pe sectiuni. Paginile de manual sunt localizate în directorul /usr/man. Mai exista o comanda, "apropos ", care cauta în paginile de manual cuvântul si afiseaza toate comenzile ale caror pagini de manual contin acest termen. - utilitarul texinfo - apelat cu comanda "info " - este un sistem care seamana mai mult cu sistemele de help moderne. Informatia este ierarhizata. Pentru multe comenzi exista si pagini de manual, si fisiere pentru texinfo. În principiu, în pagina de manual corespunzatoare este mentionat faptul ca documentatia texinfo este mai completa si mai actuala (de exemplu, tot ceea ce tine de compilatorul de C) - alte documentatii din directorul /usr/doc. Foarte utile sunt documentatiile din directorul /usr/doc/HOWTO. Fisierele din acest director sunt de fapt niste ghiduri pentru realizarea unor lucruri specifice (de exemplu, daca doriti sa stiti cum se poate realiza o intergrare între Linux si retelele Novell, cititi IPX-HOWTO; daca doriti sa instalati o placa de sunet, cititi Sound-HOWTO; daca doriti sa configurati partea de retea, cititi Ethernet-HOWTO, NET-3-HOWTO; pentru configurarea modem-ului si conectarea la un ISP (Internet Service Provider), cititi 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 obtinute 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 fisier - editorul "vi" Editorul "vi" este unul dintre cele mai vechi, si totusi unul dintre cele mai folosite editoare de text sub Linux (si UNIX în general). Chiar daca este depasit de alte editoare, ca Emacs sau Joe, cunoasterea lui este necesara pentru ca este de obicei singurul disponibil pe dischetele de boot cu care se repara un sistem Linux. "vi" este un editor destul de diferit de ceea ce întelegem azi prin editor de text, fiind si foarte complex. Apelare: vi [optiuni] []. Apelat fara nici un argument, va edita un fisier nou. La pornire, vi se afla în mod comanda. În acest mod, tot ceea ce este tiparit este interpretat drept comanda. Comenzi importante: :q! - paraseste fisierul vi fara a salva documentul :x - salveaza fisierul si paraseste editorul :w []- salveaza fisierul editat, cu numele specificat. Daca nu e specificat numele, îl salveaza cu vechiul nume. :help []- invoca manualul on-line. Subiectele se pot gasi pe prima pagina (comanda ":help") a - apendare text la pozitia curenta i - inserare text la pozitia curenta. Nu veti putea sterge în acest mod decât caracterele introduse de când ati intrat în acest mod. A - apendare la sfârsit de linie I - inserare înainte de primul caracter non-blank din linia curenta rx - înlocuieste un caracter x la pozitia curenta R - înlocuieste caractere multiple, începând de la caracterul din pozitia curenta ESC - termina comanda curenta :w [] - scrie textul în fisierul specificat. Daca nu e specificat nici un fisier, scrierea se face în fisierul curent. :r - insereaza continutul unui fisier la pozitia curenta. Stergerea altor caractere decât cele inserate în modul "insert" se face cu comanda "d[] 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 unde 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. Întrebari si aplicatii 4.1. Afisati continutul arborelui de directoare (toate fisierele si toate directoarele). Creati un fisier care contine aceste nume. Modificati drepturile acestui fisier astfel încât sa nu poata fi accesat (citit) de toti utilizatorii, ci doar de utilizatorul curent si de cei care fac parte din grupul users. De asemenea, dati drept de scriere pentru membrii grupului users. 4.2. Creati un fisier executabil care sa furnizeze continutul directorului curent, procesele care sunt rulate în sistem precum si informatii despre utilizatorii conectati. Cu ajutorul acestui fisier, creati alt fisier care sa contina toate aceste informatii. 4.3Creati un director, cu numele linkxx, unde înlocuiti xx prin 2 cifre arbitrare, asftel încât numele directorului sa fie unic si creati în el doua legaturi simbolice la cele doua fisiere create la punctele 3.1. si 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. ?? ?? ?? ??