Uploaded by krystyan82

Linux Lab Intro

advertisement
INIŢIERE ÎN SISTEMUL DE OPERARE LINUX
COMPETENŢE GENERALE SI SPECIFICE
1. Aplicarea unor comenzi şi utilitare Linux.
▫ Recunoaşterea şi utilizarea corectă a comenzilor DOS echivalente Linux.
▫ Identificarea structurii de fişiere şi directoare a sistemului de operare.
2. Proiectarea aplicaţiilor pentru rezolvarea unor probleme utilizând programarea C/C+
+ sub Linux.
▫ Cunoaşterea şi înţelegerea programarii „open souce”.
▫ Identificare noţiunilor de bază ale programării structurate.
▫ Utilizarea instrumentelor de programare Linux.
3. Analiza rezolvării unei probleme prin compilarea, depanarea şi execuţia programului
C/C++.
▫ Aplicarea unor opţiuni de compilare şi link – editare.
▫ Depanarea pas cu pas a programelor executabile.
▫ Utilizarea utilitarului make.
Generalităţi S.O Linux
Linux este un sistem de operare bazat pe Unix, ceea ce înseamnă că moşteneşte din caracteristicile
acestuia: multitasking (adică poate rula mai multe programe în acelaşi timp), multiuser (adică mai mulţi
utilizatori pot folosi calculatorul în acelaşi timp sau la momente diferite, în sesiuni de lucru diferite),
securitate (fiecare user are drepturi şi restricţii la folosirea tuturor resurselor puse la dispoziţie de sistemul
de operare), programe specializate (unul din principiile de bază spune că programele care alcătuiesc SO-ul
trebuie să execute un singur “job”, dar acela foarte bine; problemele mai complexe vor fi realizate din
înlănţuirea mai multor programe (procese de execuţie) ceea ce conduce la următoarea caracteristică:
interoperabilitate (programele trebuie să comunice între ele, astfel încât să poată fi folosite împreună. O
altă caracteristică se referă la respectarea standardelor (Linux este construit pe standarde, POSIX fiind
unul din standardele de bază) şi portabilitate (astăzi Linux rulează pe procesoare x86, Alpha, Sun
SPARC şi UltraSPARC, Motorola 68000, PowerPC, PowerPC64, ARM, Hitachi SuperH, IBM S/390,
MIPS, HP PA-RISC, Intel IA-64 şi AMD x86-64).
Alte caracteristici sunt scalabilitate (Linux se găseşte în aparate electronice cu utilitate casnică,
PDA-uri, workstation-uri, sisteme desktop şi sisteme server), customizabil (oferă o mulţime de opţiuni
pentru programele rulate, interfeţele folosite, şi posibilităţile de configurare).
O caracteristică foarte importantă este modul de dezvoltare distribuit, caracteristic oricărui
software liber. Practic, versiunile noi apar cu mare rapiditate, bug-urile se repară foarte repede (ceea ce
Computer Science and Electrical Engineering Department
Adrian FLOREA
1
este enorm de important când apar “carenţe” în securitatea unui sistem). În general oricine este binevenit
să contribuie şi să îmbunătăţească Linux-ul.
Iniţial aplicaţiile pentru Linux aveau un caracter ştiinţific, aplicaţii cu baze de date, aplicaţii pentru
reţele şi uneltele specifice programatorilor (compilatoare, link-editoare, debugger-e). Utilizatorii obişnuiţi
se plângeau că interfeţele acestor aplicaţii nu sunt destul de prietenoase. În ultimii ani însă aplicaţiile pe
SO Linux s-au schimbat şi s-au făcut progrese majore spre sistemul desktop “user friendly”. Înfăţişarea
Linux-ului s-a schimbat şi îmbunătăţirile continuă să apară şi să fie vizibile “de la o zi la alta”. Există
aplicaţii pentru office (AbiWord, OpenOffice, etc), aplicaţii pentru comunicare în reţea (suita Mozilla,
clientul de mail şi organizator Evolution, messenger-ul Pidgin, etc), aplicaţii pentru entertainment (pentru
video şi DVD există Mplayer sau Xine, pentru muzică XMMS, foarte multe jocuri de calitate ca Doom,
Unreal Turnament, Civilization, etc).
Principalele avantaje Linux
Pretul initial este nul sau sub 50$. Comoditatea utilizarii Linux-ului se refera:
• la pretul total al acestuia, care este foarte mic neavand nevoie de licenta sau in caz contrar
aceasta este foarte ieftina;
• la abilitatea de a modifica orice cod din acesta fiind open-source;
• la capabilitatea de a folosi componente hardware ieftine la fel ca si solutiile software.
Linux ofera si o foarte mare siguranta, neavand nevoie de softuri antivirus, in caz contrar, acesti
antivirusi se folosesc pentru a detecta virusii care infecteaza sistemele Windows.
Modalitatea de acces direct la codul sursa, permite modificarea oricarei component a acestuia (SO),
alaturi de alte aplicatii care vin cu acesta. Diferit de alte produse comerciale, softurile open-source sunt
construite pe bucati care interactioneaza una cu cealalta, astfel incat utilizatorul este liber sa mixeze si sa
potriveasca componentele dupa propriul scop.
Un alt avantaj al Linux-ului consta in posibilitatea gasirii solutiilor (ajutor) pe Internet. Este foarte
probabil ca cineva dintr-un newsgroup sau mailing list sa doreasca sa te ajute in rezolvarea problemei.
Fiindca codul sursa este accesibil, in cazul in care ai nevoie sa repair ceva la system, poti construi un
patch chiar tu, ajutand astfel si pe ceilalti utilizatori ai Linux-ului. Utilizatorii OS-urilor non open source
sunt obligati intre timp sa astepte un release official pana la rezolvarea unei probleme, putandu-se ajunge
si la o asteptare de cateva luni.
Geneza Fedora xx i686
Proiectul Fedora a fost creat în toamna anului 2003 cand a încetat dezvoltarea de către Red Hat
Linux, continuarea proiectului fiind realizată în cadrul unei comunitati “open-source”. Red Hat Enterprise
Linux (RHEL) a ramas singura distributie suportata comercial de catre Red Hat. Versiunile RHEL sunt
bazate pe Fedora, cu o selectie a pachetelor instalate, perioadă de testare mai îndelungata şi suport
comercial. Numele Fedora deriva de la un proiect voluntar, Fedora Linux, care furniza un numar de
aplicatii suplimentare pentru Red Hat Linux si de la termenul Fedora (”a hat made of felt with a creased
crown”), care este un element distinctiv al siglei "Shadowman" folosita de catre Red Hat. Fedora Linux si
Red Hat Linux au format împreuna Fedora Core iar in 2007 prin unirea cu Fedora Extras a rezultat
Fedora.
Comenzi şi utilitare Linux [selecţie]
Pentru a testa următoarele comenzi se accesează meniul ApplicationsSystem ToolsTerminal.
1. Pentru a determina câte / şi care partitii sunt instalate pe sistemul de calcul se foloseste comanda
fdisk cum urmeaza:
$ fdisk –l
2. Pentru a determina care kernel il folosesti in momentul de fata se tasteaza comanda:
Computer Science and Electrical Engineering Department
Adrian FLOREA
2
$ uname –r
3. Pentru a determina structura de fisiere si directoare de pe sistemul de calcul se tasteaza comanda
(dir) existenta si in DOS. Ambele returneaza aceleasi date, diferand detaliile.
$ dir
4. Pentru afişarea conţinutului directoarelor se poate folosi şi comanda (ls).
$ ls
Diferența dintre ls și dir constă în faptul că ls se bazează pe un “evidențiator” de sintaxă
(SyntaxHighlighter).
5. Pentru a curata fereastra terminalului se tasteaza comanda (clear) existentă in Linux si de
asemenea in limbajul de programare C/C++ accesata ca functie (clear();). Comanda echivalenta
DOS este cls.
$ clear
6. Pentru a schimba directorul current se foloseşte comanda (cd) existenta in Linux si DOS.
$ cd
7. Pentru a afişa informaţii despre utilizatorii înregistraţi se foloseşte:
$ who
8. Afişarea sau schimbarea hostname-ul sistemului se realizează cu comanda:
$ hostname
9. Pentru ştergerea unui director gol se foloseşte (rmdir) specifică atât Linux cât şi DOS:
$ rmdir
10. Pentru ştergerea unui fişier sau director se foloseşte (rm). Opţiunea “-r” asigură ştergerea recursivă
(imbricată).
$ rm -r
11. Pentru a oferi informaţii privitoare la un fişier (permisiuni, dimensiune, proprietar, data accesării,
etc) se foloseşte:
$ stat
12. Crearea de noi directoare se realizează folosind comanda (mkdir) specifică atât Linux cât şi DOS:
$ mkdir
13. Copierea unui fişier la o altă locaţie sau sub un alt nume se face folosind (cp). Echivalentul de
DOS este comanda xcopy.
$ cp
14. Copierea de fişiere aflate la distanţă, în regim securizat (accesul pe staţie s-a făcut cu ssh) se
realizează cu utilitarul (scp).
$ scp [[user@]from-host:]source-file [[user@]to-host:][destination-file]
$ scp aflorea@172.16.21.22:/home/aflorea/Hands-on-30.zip Hands-on-30.zip
Computer Science and Electrical Engineering Department
Adrian FLOREA
3
Ultima comanda presupune că se cunoaşte faptul că userul aflorea există pe staţia
172.16.21.22 (se verifică cu ifconfig iar apoi cu who). Se copiază de la respectiva adresă
(172.16.21.22:/home/aflorea/) din contul userului aflorea în directorul curent.
Dacă scp este însoțită de opțiunea –r atunci are loc copierea recursivă cu toate subdirectoarele.
15. Mutare sau redenumirea unui fişier (dintr-o sursă într-o destinaţie) sub un alt nume se face folosind
(mv).
$ mv
16. Afișarea spațiului folosit și a celui rămas disponibil penrtru utilizator
$ quota
17. Facilitarea operării cu fișiere utilizând utilitarul midnight commander (manager de fișiere în mod
text – foarte asemănător cu versiunea de Windows a vechii aplicații – Norton Commander sau a
mai recentei aplicații – Total Commander)
$ mc
18. Afişarea unei liste cu comenzi posibile se face folosind (help).
$ help
19. Afişarea la ieşirea standard (terminal) a unui şir de caractere se face folosind (echo). Se utilizează
de multe ori în fişiere de tip shell având un caracter explicative.
$ echo
20. Căutarea de fişiere se poate realiza după numele sau tipul fișierului respectiv după numele
proprietarului sau grupul din care face parte proprietarul fișierului.
$ find [cale] [expresie] [acțiune]
Parametri opționali specifică unde se face căutarea, ce fișiere (sunt căutate) și ce acțiune trebuie
întreprinsă după găsirea fișierelor.
$ find /tmp -name ‘*.cpp’ -print // Afișarea fișierelor de tip .cpp din directorul tmp.
$ find /
-user aflorea -print // Afișarea fișierelor utilizatorului aflorea
$ find ./powertop-1.8/ -name '*.h' -exec rm "{}" ";" // Ștergerea fișierelor de tip header din
folderul specificat
21. Căutarea în cadrul fişierelor (la nivel de linie) a diverselor şiruri de caractere se face folosind
(grep).
$ grep "return_values" -r ./ *.c
22. Lansarea editoarelor de text emacs, gedit
$ emacs sim-outorder.cpp &
$ gedit sim-outorder.cpp &
Simbolul & permite continuarea execuției în sistemul de operare fără a închide editorul (nu rămâne
agățat ecranul).
Computer Science and Electrical Engineering Department
Adrian FLOREA
4
23. Vizualizarea în mod text a fișierelor.
vi fișier
Pentru salvarea datelor și ieșirea din editor :wq
Pentru ieșirea din editor fără a salva datele :q
24. Concatenarea conţinutului mai multor fişiere de tip text şi afişarea la consolă a fişierului rezultat se
se face folosind (cat).
$ cat
25. Dezarhivarea unui fişier (.gz) compresat anterior cu gzip se face folosind (gunzip).
$ gunzip simplesim-3.0b.tar => generează fişierul .tar
26. Crearea unui arhive (fişier .gz) se face folosind (gzip).
$ gzip simplesim-3.0b.tar => generează fişierul simplesim-3.0b.tar.gz
27. Arhivarea / dezarhivarea unui grup de fişier, păstrând informaţiile legate de permisiuni, proprietar,
data creării, se face folosind (tar).
$ tar –cf copie.tar *.pdf (=> are loc arhivarea și se generează fişierul .tar)
$ tar –xvf simplesim-3.0b.tar (=> extrage directorul simplesim-3.0 din arhiva.tar)
28. Arhivarea / dezarhivarea unui fişier se poate face folosind (bzip2).
$ bzip2 fișier (=> se generează fişierul fișier.bz2)
$ bunzip2 fișier.bz2 (=> extrage fişierul din arhiva.bz2)
29. Afişarea căii curente (path) se realizează cu utilitarul (pwd).
$ pwd
30. Raportarea informaţiilor privitoare la procesele din sistem: identificatori, stare, proprietar, etc se
face folosind utilitarul (ps). Id-ul procesului dorit (<pid>) se poate “omorî” – vezi comanda kill.
<pid> reprezintă prima coloană din afişaj.
$ ps –aux
$ ps –ef
31. Trimiterea unui semnal (implicit de terminare) tuturor proceselor existente în sistem se face
folosind utilitarul (kill). Id-ul procesului dorit a fi terminat este (<pid>).
$ kill –n 9 <pid>
$ kill <pid>
$ killall -u aflorea => opreşte (omoară) toate procesele utilizatorului aflorea
32. Accesarea la distanţă a unui server (HPC) / staţii de lucru folosind un client securizat cu rol de
interpretor de comenzi se face cu utilitarul (ssh).
$ ssh –l aflorea@Zamolxe.hpc.ulbsibiu.ro => obligă utilizatorul aflorea să îşi introducă parola
proprie
$ hostname => Zamolxe.hpc.ulbsibiu.ro
Pentru conectarea pe CELL trebuie anterior conectat pe Zamolxe (HPC) – XEON.
$ ssh computecell-000
$ hostname => ComputeCell-000.hpc.ulbsibiu.ro
Computer Science and Electrical Engineering Department
Adrian FLOREA
5
33. Oprirea sistemului de operare se realizează folosind comanda (halt).
$ halt
34. Restartarea sistemului de calcul se realizează folosind comanda (reboot).
$ reboot
35. Oprirea sistemului de calcul (eventual restartarea acestuia) se realizează cu utilitarul (shutdown).
$ shutdown
$ shutdown –h now
36. Configurarea interfetelor de retea se face folosind comanda (ifconfig). Comanda echivalenta DOS
este ipconfig.
$ ifconfig
37. Modificarea permisiunilor de acces la fişiere / directoare se face folosind comanda (chmod).
Comanda echivalenta DOS este attrib. “+” setează un flag iar “-” şterge (resetează) un flag.
$ chmod +r script.cgi
$ chmod 755 hello_ppu (transformă fişierul hello_ppu într-un executabil)
Dacă la rularea unui fișier de tip shell (trebuie să includă pe prima linie secvența de caractere
“#!/bin/sh”), fie acesta ./run_applu.sh apare mesajul de eroare “Permission denied” atunci verificăm dacă
fișierul are caracter executabil (dacă este setat atributul x). Pentru aceasta se execută:
$ ls -l
Dacă fișierul nu este executabil atunci îi setez flagul / atributul x prin comanda:
$ chmod +x run_applu.sh
Oprirea simulării se poate face în orice moment și cu comanda Ctrl + Z.
38. Modificarea proprietarului fişierelor / a grupului din care face parte proprietarul se realizează cu
comanda (chown).
$ chown
39. Substituirea unui utilizator cu root (administrator) în vederea obţineri de drepturi suplimentare se
face folosind comanda (su). Evident trebuie apoi introdusă parola de root.
$ su
40. Substituirea unui utilizator cu root (administrator) pentru a gestiona drepturile de acces asupra
unor fişiere / directoare se face folosind comanda (sudo nautilus). Nautilus reprezintă managerul
de fişiere oferit de GNOME (the Free Software Desktop Project).
$ sudo nautilus
Comenzile urmatoare sunt caracteristice job-urilor de pe supercomputer (HPC)
41. Lansarea unui job in executie se face folosind comanda (bsub).
$ bsub
42. Terminarea executiei unui job se face folosind comanda (bkill).
$ bkill
Computer Science and Electrical Engineering Department
Adrian FLOREA
6
43. Suspendarea temporara a executiei unui job se face folosind comanda (bstop).
$ bstop
44. Vizualizarea unui job (sau a tuturor celor aflate) in executie se face folosind comanda (bjobs).
$ bjobs –a (all)
$ bjobs –L <jid> (details on job jid)
45. .gcc – apelează compilatorul care există implicit instalat.
Cu opțiunea –v se afișează versiunea compilatorului
Cu opțiunea –V <nr_version> se apelează dacă există instalată versiunea < nr_version > a
compilatorului nu a celui care există implicit
Folosirea terminalelor virtuale pentru lansarea de simulări pe noduri multiple ale sistemului HPC
Din Putty se execută succesiunea de comenzi:
1. Pentru crearea unui terminal virtual (VT) tastați: screen
2. Pentru a trece din VT în terminal real se apasă Ctrl + A + D. Atenție, nu Ctrl + D întrucât
această comandă omoară terminalul.
3. Pentru reatașarea terminalului se tastează screen -R
4. Dacă există mai multe terminale se tastează screen -R <pid>
5. Omorârea unui terminal virtual sau ieșirea din acesta se face cu comanda exit sau Ctrl + D
Dintre aplicaţiile existente pe SO Windows care permit conexiunea pe supercomputerul HPC se amintesc:
putty, winscp, SshClient, etc.
Computer Science and Electrical Engineering Department
Adrian FLOREA
7
Analiza rezolvării unei probleme prin compilarea, depanarea şi execuţia programului
C/C++
Pentru instalarea Cygwin (emulator de Linux pe SO Windows), sau pentru lucrul cu comenzi Linux în
special cele legate de compilare, link-editare şi depanare se recomandă folosirea cărţii “Predicţia dinamică
a valorilor in microprocesoarele generaţiei următoare”, autor Adrian Florea (Universitatea “Lucian Blaga”
Sibiu),
editura
MatrixRom,
Bucureşti,
2005,
paginile
96-144
(http://webspace.ulbsibiu.ro/adrian.florea/html/docs/FINAL_Matrix05.pdf ). În referinţa sugerată se
găseşte o sinteză foarte bună aferentă instalării şi metodologiei de simulare / dezvoltare folosind mediul
SimpleScalar.
Cerinţe:
1. Se vor testa în terminal toate comenzile prezentate anterior.
2. Să se scrie un program simplu în C (minimul / maximul dintr-un şir) care se compilează (se
generează codul .asm şi .exe) şi se execută.
Modificări de operat pentru compilarea / depanarea / rularea şi extinderea
simulatoarelor mediului Simplescalar pe SO Linux
•
•
•
•
•
•
•
Se dezarhivează fişierul arhivă în format tar.gz "simplesim-3.0b.tar.gz".
o $ gunzip simplesim-3.0b.tar
o $ tar –xvf simplesim-3.0b.tar
În acest fel rezultă directorul SIMPLESIM-3.0/*.* cu fisierele componente, dintre care si
directorul target-pisa. Fisierele acestui director (care descriu functionarea unei arhitecturi PISA)
sunt copiate în directorul parinte (SIMPLESIM-3.0).
Revenind în prompter de Linux se tasteaza comanda $cd SIMPLESIM-3.0 si se ajunge în
directorul tocmai copiat. Se tasteaza în continuare succesiunea de comenzi:
o $ make config-pisa
şi
o $ make
Execuţia comenzii make poate genera o eroare la compilare deoarece tipul returnat de functia
myrand() din fisierul misc.c care apeleaza la rândul ei functia random() difera de cel returnat de
functia standard definita în stdlib.h (din /usr/include). Eroarea se corecteaza modificând tipul
functiei random() în misc.c (din long în int).
În fisierul eval.c se comenteaza liniile 79 şi 81 şi rămâne “DE BAZĂ” #include <errno.h>.
Se comentează linia 886 “extern int errno;”.
În fisierul range.c se comenteaza liniile 77 şi 79 şi rămâne #include <errno.h>.
Se comentează linia 96 “extern int errno;”.
Se recompilează: make.
Executia din nou a comenzii make se va încheia cu mesajul "My work is done here… " ceea ce
demonstreaza compilarea / asamblarea / link-editarea cu succes a simulatoarelor setului
SimpleScalar 3.0.
Computer Science and Electrical Engineering Department
Adrian FLOREA
8
Modificări de operat pentru compilarea / depanarea / rularea şi extinderea
simulatorului M-SIM pe SO Linux
1. Se dezarhivează fişierul arhivă în format tar.gz " m-sim_v2.0.tar.gz".
• $ gunzip m-sim_v2.0.tar
• $ tar –xvf m-sim_v2.0.tar
În acest fel rezultă directorul m-sim_v2.0/*.* cu fisierele componente, dintre care si directorul
target-alpha. Fişierele acestui director (care descriu functionarea unei arhitecturi ALPHA 21264) sunt
copiate în directorul parinte (m-sim_v2.0).
2. Revenind în prompter de Linux se tasteaza comanda $cd m-sim_v2.0 si se ajunge în directorul
tocmai copiat. Se tasteaza în continuare comanda:
• $ make config-alpha
3. În fisierul machine.h se comenteaza linia 224 (extern enum md_opcode md_mask2op[];).
4. Se copiază variabila “md_mask2op[]” şi se pune la linia 237 (între } şi ;) practic după definiţia
enumerării md_opcode1.
5. Se compilează: make.
Executia comenzii make se va încheia cu mesajul "My work is done here… " ceea ce demonstreaza
compilarea / asamblarea / link-editarea cu succes a simulatorului M-SIM 2.0.
6. Se copiaza din dir Sv_Trivial_LVP_80nm_nthread urmatoarele:
• CACTI\def.h
• power [c;h]
• sim-outorder.c
7. Se compilează: make.
=> sim-outorder (imbogatit cu mecanism de reutilizare dinamica a instructiunilor + a celor triviale si
predictia valorilor instructiunilor load critice
Optiuni noi de simulare:{
–rb:size 1024
–lvpt:size 2048
}
8. In m-sim_v2.0 cream directorul results
9. Copiem din multithread/spec2000binaries/*.arg
10. Se lanseaza comanda
./sim-outorder -redir:sim ./results/applu.res -fastfwd 1000000 -max:inst 10000000 -lvpt:size 16 applu.arg
./sim-outorder -redir:sim ./results/applu_equake.res -fastfwd 1000000 -max:inst 10000000 applu.arg
equake.arg
./results/galgel_lucas.res
./results/mesa_mgrid.res.res
1
galgel.arg lucas.arg
mesa.arg mgrid.arg
Obs: La versiunea m-sim_v3.0 modificarea există deja.
Computer Science and Electrical Engineering Department
Adrian FLOREA
9
Alte comenzi şi utilitare Linux
Pentru instalarea utilitarului cssh și instalarea remote a simulatorului de procesor IBM CELL se execută
următoarele comenzi:
1. Se schimba utilizatorul in root
[aflorea@localhost ~]$ su Password:
2. [root@localhost ~]# yum install clusterssh
3. Se editeaza fisierul de host-uri
[root@localhost ~]# gedit /etc/hosts
Se adaugă stațiile și numele acestora:
172.16.21.14
student_8
student_8
172.16.21.35
student_2
student_2
[root@localhost ~]# cssh -l root student_8 student_2
4. Din root@statie02 se tasteaza:
yum -y install tcl xterm blt tk
scp aflorea@172.16.21.25:/home/aflorea/Arhitecturi_Avansate/Cell_Bucuresti/cell-install-3.1.0-0.0.noarch.rpm
cell-install-3.1.0-0.0.noarch.rpm
rpm -ivh cell-install-3.1.0-0.0.noarch.rpm
scp aflorea@172.16.21.25:/home/aflorea/Arhitecturi_Avansate/Cell_Bucuresti/CellSDK-Devel-Fedora_3.1.0.0.0.iso
CellSDK-Devel-Fedora_3.1.0.0.0.iso
./cellsdk -o -a --iso ./ install
Computer Science and Electrical Engineering Department
Adrian FLOREA
10
Download