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.