Buna Seara si bine ati venit la Serile Deschise Ubuntu Romania Decembrie 2008 numele meu este Dan si pentru urmatoarea perioada de timp o sa va vorbesc despre "Folosirea terminalului și a editoarelor de text în Ubuntu" salut dan salutare johane O sa incep printr-o scurta trecere in revista a catorva aspecte care merita mentionate referitoare la Graphical User Interface (sau GUI pe scurt) si Command Line Interface (CLI). In primul rand, ce este o interfata grafica? In linii mari aceasta reprezinta un tip de interfata cu utilizatorul care permite celui din urma interactiunea cu dispozitive electronice prin intermediul unor elemente grafice gen icoane, ferestre, meniuri. Crearea de astfel de elemente grafice care sa permita utilizarea de dispozitive electronice (calculatoare, PDA-uri, console de jocuri, etc.) poarta numele de programare orientata obiect. O prezentare mai ampla a subiectului o gasiti la urmatorul link: http://en.wikipedia.org/wiki/Graphical_user_interface Acum ca mentionat ce este o interfata grafica, urmeaza intrebarea: Ce este un terminal? In link-ul prezentat anterior se discuta despre terminal, despre istoria acestuia si cum a aparut. Ceea ce este important de retinut este ca unul din primele moduri in care se realiza comunicarea intre om si masina a fost prin intermediul terminalului. Acesta insa presupunea din partea utilizatorilor un nivel ridicat de cunostinte pentru a il putea folosi eficient datorita numarului mare de comenzi ce trebuiau retinute, impreuna cu scopul pentru care acestea erau destinate. Intr-o incercare de a simplifica modul de folosire (in principal) al calculatoarelor s-a dezvoltat un concept de a trimite acelasi comenzi catre calculator, insa intr-un mod care sa ii fie simplu de folosit utilizatorului, termenul mai des folosit fiind "transparenta fata de utilizator". Care dintre aceste doua moduri de interactiune este cel mai eficient? Terminalul Asta este discutabil si de obicei tine de preferintele utilizatorului. Eu consider ca in general pe partea de servere unde securitatea este foarte importanta, lipsa unei interfete grafice creste nivelul de securitate pe acel server, fiind mai putine resurse ce trebuie protejate de atacatori si, in acelasi timp, reduce din consumul de resurse pe server. Cand vine vorba de utilizatorul casnic, eu consider ca ambele tipuri de interfete sunt necesare si utile. corect asta e un infobot? da il cheama dan :) heh :)) continua danny Dar daca tot vorbim de utilizatorul casnic, atunci sa discutam si despre cum se acceseaza un terminal din interfata grafica. si il tii la tine pe pc? sau pe un ftp cum am vazut pesite=ul lui ? da, are 2 maini si tasteaza de nu mai poate :) Pentru a va fi mai usor o sa va rog sa accesati urmatorul link: https://help.ubuntu.com/community/CommandlineHowto tavi----: inceteaza bre am inteles intreb unde il tii In link sunt prezentate mai multe aspecte legate atat de terminal si de istoria acestuia Cat si comenzi si modalitati de accesare a terminalului O sa ne axam momentan pe accesarea terminalului Accesarea unui terminal din Gnome se face prin Applications menu -> Accessories -> Terminal Pentru Xfce: Applications menu -> System -> Terminal Iar in KDE: KMenu -> System -> Terminal Program (Konsole) M-f2? Deschideti un terminal ca sa putem analiza cateva elemente ale acestuia xterm Da, sau ALT+F2 si apoi se tasteaza numele emulatorului de terminal Modelul de securitate implementat de Ubuntu (si de alte distributii de Linux) restrictioneaza accesul utilizatorilor la anumite facilitati cu scopul de a scadea riscul modificarii/stergerii accidentale (sau intentionate) a unor fisiere sensibile care ar periclita buna functionarea a sistemului. Din acest motiv anumite setari nu se pot accesa din mediul grafic sau prin terminal ca utilizator obisnuit si necesita drepturi de root, acestea se pot obtine prin comanda sudo dar le poti modifica prin root :)) Mai multe informatii gasiti aici: https://help.ubuntu.com/community/RootSudo Cand este nevoie de terminal? Aceasta este o intrebare cu multe posibile raspunsuri, o sa incerc sa acopar cat mai multe dupa relevanta. De terminal este nevoie cand se doreste diagnosticarea anumitor probleme/neclaritati referitoare la functionarea sistemului. Mai este necesar, dar nu ca si terminal de sine statator ci ca si mod de interactiune cu calculatorul cand apare o problema tehnica/de configurare care nu mai permite incarcarea interfetei grafice. De asemenea, este foarte util pentru administratorii de sistem care necesita conectarea la distanta pe sisteme care nu permit instalarea/rularea unei interfete grafice (ex. servere). Un alt motiv pentru folosirea terminalului este curiozitatea utilizatorului, care dornic sa invete ajunge sa lucreze cu acesta. Un alt motiv poate fi imposibilitatea de a rezolva o anumita problema folosind "uneltele" disponibile in modul grafic, fie datorita inexistentei de astfel de "unelte" care sa realizeze ceea ce iti doresti fie timpul limitat in care vrei sa rezolvi o problema si esti nevoit sa apelezi la terminal/CLI. tavi----, care-i baiu? am inteles ca te-am suparat? Daca tot am vorbit de terminal, e timpul sa il si punem la lucru. Din link-ul mentionat mai sus o sa incercam cateva din comenzile de acolo sa vedem cum reactioneaza sistemul la acestea. O sa mai dau link-ul inca o data. https://help.ubuntu.com/community/CommandlineHowto Un terminal a.k.a. shell este un interpretor de comenzi. Acesta primeste comenzi de la utilizator sau de la alt program si le parseaza conform instructiunilor date. a.k.a? also known as k Dintre cele mai folosite interpretoare de comenzi se numara si bash (Bourne Again SHell). Exista mai multe tipuri de interpretoare de comenzi, sh, bash, dash, ksh, zsh, etc. Diferentele intre acestea constau in principal in comenzile disponibile pentru fiecare interpretor in parte si alte optiuni care ajuta la usurinta utilizarii acestuia. Printre optiuni se pot numara posibilitatea pastrarii unei istorii a comenzilor executate, de refolosire rapida si editare a acestora, posibilitatea folosirii de modalitati de autocompletare a comenzilor executate si altele. Pe Ubuntu gasim ca interpretor de comenzi setat in mod implicit bash. Calea implicita a acestuia este /bin/bash. Sintaxa folosita pentru comenzile executate in bash este: Comanda { } Unele comenzi se pot executa fara optiuni sau argumente: Puteti sa executati comenzile in timp ce le prezint pentru a vedea cum se manifesta in sistem ls Aceasta realizeaza o listarea a fisierelor din directorul curent. Insa suporta si optiuni ex: ls -a si suporta si argumente: ex: ls -a /etc/ Ordinea recomandata de folosire a comenzilor in bash este: comanda optiune argument unde comanda reprezinta utilitarul folosit In cazul acesta ls Optiunea este de obicei reprezentata prin litere prefixate de semnul - (minus) Iar argumentul este cel care vine pe pozitia a treia dupa comanda si optiune In exemplul prezentat mai sus ls -a /etc ls reprezinta comanda, -a optiunea si /etc argumentul Intr-un terminal lansat dintr-o interfata grafica sau accesat direct din mod text exista multe facilitati pentru procesarea de informatii in mod rapid. Un mare avantaj in lucrul cu un terminal il reprezinta posibilitatea preluarii unui text, fisier, comenzi si trecerea rezultatului acesteia/acestuia intr-o alta comanda. Acest lucru este posibil datorita pipe-urilor, redirect-urilor si a "file descriptors". O definitie mai buna pentru File Descriptor o gasiti aici: http://en.wikipedia.org/wiki/File_descriptor Pe scurt un shell suporta input sau introducere de informatii fie de la utilizator fie din alta sursa. Cand tastati o comanda intr-un shell, aceea este vazuta ca input, adica introduceti date in sistem, acesta le parseaza si apoi primiti date de iesire corespunzatoare comenzii efectuate numite output. Cateodata insa primiti erori la introducerea comenzii, acelea sunt error. Ca sa fac un sumar, orice comanda dintr-un shell are 3 file descriptors, stdin, stdout si stderr. Acestea sunt numele corecte pentru ceea ce am prezentat anterior. Sa dam un exemplu, dati comanda ls Rezultatul primit este listarea fisierelor din directorul curent Shell-ul (in cazul nostru bash) a preluat input (stdin) de la tastatura si anume comanda ls urmata de tasta enter si a dat un rezultat de iesire la ecran (stdout) Sa experimentam un pic, ce se intampla daca ii dam o comanda gresita: ls asdasdasd Atunci shell-ul returneaza un cod de eroare pentru comanda introdusa (stderr). bash: la: command not found ls S tot una intre R si T >)) ls ygioyug]] ls: nu se poate accesa ygioyug]]: No such file or directory tot e gresita :) bun inovatie :) :)) Spuneam mai devreme ca un shell suporta si redirectari, sa dam cateva exemple. ls -l > rezultatul_obtinut.txt Acela este L mic, -l Aceasta comanda preia output-ul din comanda ls -l si il trimite catre un fisier pe care il creeaza cu numele rezultatul_obtinut.txt si in care pune continutul comenzii ls -l. copy&paste si unde-l pune? un fel de copy + paste In loc sa urmeze actiunea implicita de a prezenta la ecran output-ul comenzii, am redirectionat acesta intr-un fisier. Ca sa verificam, dam cat rezultatul_obtinut.txt Si apoi ls -l Si verificam daca cele 2 se potrivesc. (cat vine de la concatenate si este mai des folosita pentru listarea la ecran a fisierelor de configurare). Un mod de a folosi acest tip de redirectare pentru diagnosticarea calculatorului este: dmesg > rezultat_dmesg si apoi cat rezultat_dmesg Astfel exista si o inregistrare statica a rezultatului unei comenzi SI poate fi foarte utila pe forum aceasta functionalitate Sau ma rog, pastebin.ubuntu.com Mai exista un tip de redirectare numit append in care se se adauga output-ul unei comenzi la sfarsitul unui fisier deja existent ls -l >> rezultat_dmesg danny_b85: care sunt cele mai importante comenzi pe care un începător trebuie să le știe pentru a își putea diagnostica sistemul? @doru: ajungem si acolo Folosirea de >> in loc de > inseamna append, iar cand se foloseste doar > se suprascrie continutul fisierului cu rezultatul comenzii. Urmatorul aspect prezentat este pipe-ul. Intr-un mod simplu spus, un pipe preia output-ul unei comenzi si il trimite ca input pentru urmatoarea. exemplu: ps -aux | grep pts ps -aux face o listare a proceselor iar rezultatul este trimis catre comanda grep, aceasta cauta in output-ul primit secventa text "pts" si listeaza ulterior la ecran doar rezultatul acesteia. Intrebari pana acum? da multe nu sunt lamurit :)) care sunt cele mai importante comenzi pe care un începător trebuie să le știe pentru a își putea diagnostica sistemul? legate de ceea ce s-a discutat OK, acum sa trecem prin cateva comenzi utile pentru diagnosticare. :) Există un mod ușor de a împărți pe categorii comenzile importante? Ce este aceea o cale? Ok, una cate una ok, mai am Cele mai importante comenzi pentru un incepator Diagnosticarea trebuie sa fie facuta dupa o analiza a problemei in prealabil Este o problema hardware, este o problema software? Dupa ce s-a raspuns la prima intrebare se trece la verificarea punctuala a posibilelor probleme O sa dau un exemplu pentru ca a fost destul de des intalnit de mine dmesg | grep tuner In mod logic, multi au avut probleme cu tuner-ul, acesta este un mod de a vedea daca este recunoscut de sistemul de operare la initializarea acestuia. lsmod | grep tuner Aceasta comanda cauta in lista de module incarcate pentru textul "tuner" si arata doar ceea ce gaseste. Util daca se cauta un anumit tip de modul. Pentru verificarea retelei Sunt multe comenzi posibile Diagnosticarea trebuie sa inceapa intotdeauna de la nivelul fizic ESTE CABLUL CONECTAT danny imi spui te rog o comanda pentru a detecta webcam? Stiu ca poate parea inutil, dar te scapa de multe probleme Punctual pentru a "detecta" un webcam nu se poate folosi o singura comanda In mod normal un webcam este conectat pe portul USB da asa e si al meu Deci se realizeaza o listare a dispozitivelor USB cu comanda lspci si pentru a se afla hardware ID-ul webcam-ului se foloseste lspci -nn ok Acel hardware ID apoi se poate folosi ca termen de cautare pe forum.ubuntu.ro, ubuntuforums.org, google,com si din rezultate se incearca diversele alternative In general suport pentru webcam-uri exista sub 2 forme gspca si V4L deci care ar fi să zicemcomenzile mai importante pentru hardware și care pentru software (în general și foarte pe scurt) Eram la retea netstat -tupan cele care nu trebuie să lipseasca din „arsenal”? Listeaza toate conexiunile de retea de pe calculator. Foarte utila pentru aflarea serviciilor care functioneaza pe calculator si pe ce porturi, poate fi folosita pentru descoperirea de atacuri asupra calculatorului, pentru gasirea porturilor "deschise", etc. netstat ca si multe alte comenzi suporta pipe-uri multiple si regex-uri de genul netstat -anp | grep 'tcp\|udp' | sed -n -e '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/p' | awk '{print $5}' | sed 's/::ffff://' | cut -d: -f1 | sort | uniq -c | sort -n ce un regex? :) ce e un regex? rectific Un regex a.k.a. regular expression reprezinta un mod de a cauta informatia intr-un output al unei comenzi sau intr-un text Punctual la exemplul dat grep 'tcp\|udp' este un regex Mai exact 'tcp\|udp' Aceasta sintaxa spune in felul urmator: "cauta doar ceea ce contine fie tcp fie udp in textul cautat si listeaza doar rezultatele care se potrivesc" multumesc Un alt exemplu '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/p' Acest regex are ca scop gasirea de IP-uri Si cauta doar sintaxa de xxx.xxx.xxx.xxx si permutatiile posibile Ca in rezultat sa filtreze si sa redea doar IP-urile Comanda de mai sus face o cautare prin conexiunile active si le listeaza dupa IP sub forma: 1140.211.166.3 1421.21.22.21 în '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/p' care este expresia? Sincer, toata, in afara de acel /p din capat are vreo importanță slashul și backslashul? da Aceasta este o sintaxa a comenzii sed care vine de la stream editor primul slash arata inceputul unui regex apoi urmeaza sintaxa cautata [0-9] danny , dar mie nu imi merge uite http://pastebin.ubuntu.com/88703/ asta reprezinta o cautare pentru toate numerele intre 0 si 9 da ok, yo1991 ce ai executat tu este doar o parte din comanda {1,3} este ce anume? si care este toata? la care faceam prezentarea regexului folosit netstat -anp | grep 'tcp\|udp' | sed -n -e '/[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}/p' | awk '{print $5}' | sed 's/::ffff://' | cut -d: -f1 | sort | uniq -c | sort -n asta este toata comanda {1,3} este de fapt da , acuma merge :) \{1,3\} lungimea cuvântului, da Si aici intra in imagine backslash dupa ce se cauta toate numerele intre 0 si 9 sudo su [0-9] scuze se mai specifica o conditie sa fie intre minim 1 si maxim 3 caractere adica x xx xxx \{1,3\}  lungimea cuvântului, da backslash-ul aici neaga un metacaracter lămurit, mulțumesc si anume { si } acestea daca nu ar fi negate executia comenzii nu ar functiona un alt regex din comanda de mai sus este awk '{print $5}' acesta are o alta semnificatie din output-ul primit el printeaza doar argumentul al cincilea $5 Pe partea de hard disk-uri Cele mai importante comenzi df -Th realizeaza o listare a partitiilor montate si a spatiului liber pe acestea se poate realiza un script care sa verifice spatiul liber pe disk si sa trimita un email de avertizare cand spatiul liber este mai mic de o anumita valoare Există asemanări și deosebiri între awk și grep ? da, cu awk poti sa faci tot ceea ce face grep dar grep nu stie sa faca tot ceea ce face awk awk este mult mai complex că au fost menționate anterior și par să facă același lucru permite (dupa cum spuneau dezvoltatorii) executii chirurgicale asupra unui text adica? grep in general este folosit pentru a cauta un text in output-ul unei comenzi sau intr-un fisier aha, awk se duce până la caracter și grep doar până la cuvânt @doru: da, oarecum, se poate spune si asa da, în „mare”, mulțumesc @heinrich: adica poti sa ai un fisier cu text si sa faci modificari foarte granulate mult mai avansate decat un simplu search and replace am inteles, multumesc Dacă apelez un program din GUI și acesta nu funcționează, cum pot afla care este cauza? Mă poate ajuta terminalul în vreun fel? O metoda simpla este rularea aceluiasi program din terminal In mod obisnuit un program rulat din GUI nu arata erorile la ecran Decat daca sunt grave nai trebuie mentiuonat faptul ca dupa Ctrl+C (Copy) in gui, paste in terminal se face cu Ctrl+Ins Insa daca se porneste acelasi program dintr-un terminal se poate vizualiza ce erori da parca si cu ctrl+shift+C Shift+ins pardon Shift+ins scuze cu v exemplu programul tvtime parca asa am citit in terminal azi Shift+ins care mie nu imi pornea din interfata grafica deci salutare,din menu.lst cum adaug optiunea de windows? eu am partitia cu windows dar nush dc nu imi apare/. please?: ) insa din terminal am vazut ca nu pornea datorita faptului ca nu avea suport pentru xvideo maryusake: mai tarziu :) ok:) e in desfasurare SDUR danny_b85: bun, asta în cazul în care styiu numele programului da dar dacă nu știu numele programului cum îl apelez în terminal? pot sa intreb ce e SDUR ? serile deschise ... :D serile deschise ubuntu romania uite ca la asta nu m-am gandit uita-ti ca am intrebat scuze in general stiu numele programului executat :D iar daca te referi la log-urile de sistem nu la loguri atunci se poate folosi in anumite cazuri dmesg am un program Movie pLayer asa scrie în GUI :) dacă îl scriu în terminasl nu merge cum aflu cum se numește de fapt pentru a afla numele unui program trebuie intai sa fie functional cat de cat da sa zicem ca e pentru a se putea rula o comanda in terminal pentru a afla cum ii zice sunt mai multe metode in general se poate folosit *folosi ps -aux | grep "text" unde "text" poate fi exact acel "movie player" și ps? ps vine de la process list aha atunci trebuie să am programul pornit dacă nu-l am cum aflu numele comenzii listeaza toate procesele curente, cu optiunea aux le listeaza pe cele ale utilizatorului curent si cu optiunea -U se poate afla pentru utilizatorul specificat de exemplu in GUI am Terminal, dar lansatorul e xterm, am aflat curand (folosesc terminator, si in gui si in consola are acelasi nume) si nu stiam sa pornesc terminalul din Alt+F2/ rusine mie. acum m-am luminat dar mai trebuie sa am programul în cauză pornit? in general sunt 2 posibilitati sau aux listează și procesele care au rulat? fie sa cauti dupa un program care ruleaza in momentul acela cu ps fie sunt mai multe la acest fie da, asta am înteles folosesti comanda find insa find realizeaza o cautare extinsa asupra intregului sistem de fisiere se mai poate folosi comanda apropos gen apropo open * apropos open e cu s la sfarsit si asta o sa caute toate programele care "suna" similar da, dar tot trebuie să știu numele programului nu cu apropos poti sa cauti si dupa descriere mai eficient pe ubuntu este apt-cache search "nume program" și la descriere pot deci să scriu „Movie Player” al meu aici cauta in numele si descrierile programelor (instalate sau nu) exact ok, mulțumesc si o sa gaseasca toate programele care au acel text in descriere pentru a gasi un program instalat locatia lui se foloseste dar dacă vreau să scriu calea spre un executabil whereis program :D și este lungă rău cum fac? pai spui doar numele programului nu calea whereis program nu este în PATH cauta programul si iti arata calea locate program slocate program sau in ultimul caz aha, încă una rezolvată mulțumesc find -type f / -iname program slocate si locate sunt diferite aceasta ce face de fapt? in sensul ca folosesc o baza de date pe care o updateaza periodic vad ca slaocate nu e instalat in ubuntu dar informatia nu este cea mai recenta implicit slocate este secure locate si face diferentierea intre fisiere la care ai drept de acces si fisiere la care nu ai drept de acces The program 'slocate' is currently not installed. You can install it by typing: sudo apt-get install slocate locate nu stie de asta avantaje slocate si locate realizeaza cautari intr-o baza de date rezultatele nu sunt cele mai recente depinde cand a fost updatata baza de date insa raspunsurile vin rapid find pe de alta parte danny_b85: OK, Mulțumim, să luăm o pauză mică să-ți tragi sufletul face o cautare punctuala in sistemul de fisiere 2 minute