distracție cu subsistemul Windows Pentru Linux

la Build 2016, Microsoft a introdus în lume subsistemul Windows Pentru Linux (Beta) , care permite dezvoltatorilor să ruleze binare console native Ubuntu în modul utilizator prin shell-ul Bash în Windows 10. Dacă vă aflați în programul Windows Insider, ați avut ocazia să încercați această caracteristică utilizând cele mai recente versiuni Windows Anniversary Update Insider.dezvoltatorii Web sunt obișnuiți să facă alegeri dificile cu privire la instrumentele și bibliotecile pe care le pot utiliza pe baza sistemului de operare la care lucrează activ. WSL a fost proiectat și construit de echipa Windows Kernel și livrat în parteneriat cu Canonical, pentru a ajuta dezvoltatorii Windows 10 să utilizeze ecosistemul și instrumentele bogate de dezvoltatori Linux alături de instrumentele excelente pe care le folosesc deja în Windows, fără a fi nevoie să pornească într-un alt sistem de operare sau VM. Aceasta este cu siguranță o caracteristică Windows 10 „de către dezvoltatori, pentru dezvoltatori”, special concepută pentru a elimina un pic de frecare din fluxul de lucru zilnic al dezvoltatorilor.

în această postare, vă voi arăta câteva dintre caracteristicile WSL pe care personal le găsesc foarte interesante, precum și vă voi indica câteva resurse pentru a vă ajuta să aflați mai multe. În primul rând, voi arăta integrarea comenzilor discontinue precum ssh pentru lucrul cu servere și dispozitive Linux. În al doilea rând, voi demonstra capacitatea de a utiliza Bash scripting pentru a automatiza sarcinile într-un mod foarte natural. În al treilea rând, mă voi distra puțin cu marile compilatoare de linie de comandă, alte instrumente și compatibilitatea *Nix oferită și voi juca puțin NetHack. În cele din urmă, vă voi arăta posibilitatea de a utiliza Python existent și alte scripturi disponibile pe web.

Windows este sistemul meu de operare principal și mediul de dezvoltare și a fost de la Windows 3.0 pe primul meu 286. Cu toate acestea, am avut întotdeauna servere Linux sau dispozitive lovind în jurul valorii de locul meu. De la dispozitive IoT, cum ar fi Raspberry Pi și dispozitive dedicate router/gateway la serverele Minecraft, acestea tind să se colecteze pe rafturile și colțurile din biroul meu. Un lucru pe care trebuie să-l fac întotdeauna este să gestionez și să configurez cu ușurință aceste computere Linux de la stația mea de lucru principală.

gestionarea serverelor și Dispozitivelor

în prezent rulez un server Ubuntu Minecraft fără cap din casa mea. A fost cadoul meu de Crăciun pentru fiul meu de 10 ani anul trecut, dar s-a dovedit a fi jucăria mea la fel de mult ca a lui (ok, mai mult jucăria mea). Obișnuiam să folosesc câteva aplicații client pentru a-l gestiona de pe computerul meu principal Windows 10, dar acum folosesc doar ssh din linia de comandă din Bash pe Windows 10. Utilizarea aplicațiilor precum PuTTY și Tera Term este în regulă, desigur, la fel ca și utilizarea instrumentelor excelente care vin cu Cygwin, dar am vrut o experiență cu adevărat nativă și naturală, care tocmai curgea bine. Cygwin mi s-a părut întotdeauna un pic ca să comand prăjituri la o pizzerie. A fost bine, dar execuția nu a fost potrivită pentru mediu.

am perechile de chei publice / private configurate folosind ssh-keygen și ssh-copy-id din WSL, deci la ssh, pur și simplu tastez:

$ ssh<username><server>

am creat un alias care face asta mai rapid. Aceasta este o caracteristică standard Linux/Bash:

$ alias mc=’ssh <utilizator><server>’

acum, pentru a ajunge la serverul Minecraft, pur și simplu tastez „mc” la promptul bash din Windows 10.

aceeași abordare funcționează, desigur, cu orice servere Web sau baze de date bazate pe Linux sau chiar Raspberry Pi și dispozitive IoT similare pe care le puteți utiliza ca parte a soluției dvs.

posibilitatea de a asigura curat shell de la un prompt de consolă este doar o comoditate și o preferință. Cu toate acestea, odată ce te obișnuiești să lucrezi direct în shell, într-un mediu complet care include capse precum apt, node, Ruby, Python și altele, deschizi tot felul de posibilități de automatizare.

Remote Scripting

Să presupunem că aveți o grămadă de dispozitive Linux sau servere, și doriți să executați o comandă de la distanță pe ele. Presupunând că ați configurat deja perechile de chei publice / private, puteți executa pur și simplu comenzi ssh la distanță de la Bash.

de exemplu, pentru a vedea când a fost ultima dată de repornire pe un server la distanță, tastați acest:

$ ssh <user><server> ‘Last-x|grep reboot’

care securizează shell-urile la server și execută comanda Last-X și caută liniile care conțin cuvântul „reboot.”Când îl rulez pe serverul meu Ubuntu Minecraft, obțin acest rezultat:

reboot system boot 4.4.0-28-generic Thu Jul 7 08: 14 încă rulează

acesta este un singur server. Dacă aveți o listă de servere, puteți automatiza și acea parte. Am creat un fișier numit servere.txt în directorul meu de acasă pe WSL. Acesta conține o grămadă de nume de server/dispozitiv Linux-unul pe linie. Apoi am citit acel fișier dintr-un script pe care l-am creat în directorul meu de acasă pe WSL.

după ani de lucru cu dispozitive precum Raspberry Pi, sunt un tip nano (pe VMS am fost o persoană LSEdit), deci așa arată scriptul în editorul meu preferat de consolă:

puteți, desigur, să utilizați vim sau Emacs sau orice alt editor care funcționează într-o sesiune de consolă Ubuntu.

limbajul folosit este bash script (numit și bash shell script). Pentru a executa scriptul, pur și simplu tastez:

$ ./foreachserver.sh ‘last-x / grep reboot’

și va itera peste fiecare server / dispozitiv din fișier și va executa acea comandă de la distanță prin ssh. Acesta este un exemplu foarte simplu, desigur, dar vă puteți extinde pentru a redirecționa în scripturi locale sau alte comenzi utile. Limbajul Bash scripting este suficient de bogat, astfel încât să puteți realiza cele mai multe sarcini de administrare la distanță folosind-o. De asemenea, îl puteți extinde cu alte aplicații pe care le descărcați pe WSL sau pe computerele la distanță.

Ce se întâmplă dacă doriți să utilizați fișiere și resurse Windows locale cu fluxul de lucru cu alte computere Linux? Sau, ce se întâmplă dacă nu utilizați Linux deloc? Este Bash capabil să lucreze cu fișiere și resurse Windows locale sau este un mediu complet izolat?

lucrul cu fișierele Windows

WSL are acces la sistemul de fișiere al PC-ului prin/mnt/<litera unității> / directoare (sau puncte de montare). De exemplu, directoarele C: și D: root din Windows ar fi disponibile prin /mnt/c/ și /MNT/D/ respectiv în WSL. Acest lucru poate fi util atunci când doriți să încorporați fișierele de proiect Windows, descărcările sau alte fișiere într-un flux de lucru bazat pe Linux/Bash.

aceste hărți la unitatea SSD și mecanică pe care o am pe PC:

acestea sunt montări logice, deci nu apar în prezent când utilizați comenzi precum mount în shell. Dar ele funcționează așa cum v-ați aștepta. De exemplu, din Windows, am plasat un fișier text numit test.txt în rădăcina unității mele C. Îl pot accesa din WSL astfel:

în timpul turneului de construire, am vrut să ne asigurăm că demo-urile au funcționat fără acces la internet (nu știți niciodată cum va fi rețeaua de locații). Deci, pentru a vă asigura că demo-ul Bash / WSL ar funcționa pentru porțiunea Git și pentru a demonstra accesarea fișierelor Windows pe PC-ul local, am configurat un repo local la C:gitNetHack pe PC-ul Windows. Pentru a clona asta în WSL, am executat următoarele:

$ git –clone file:///mnt/c/Git/NetHack

acea linie de comandă i-a spus lui git să folosească fișierul:// protocol și să cloneze repo localizat în /mnt/c/Git/NetHack. Puteți accesa toate fișierele Windows într-un mod similar.

avertisment: ca și în cazul oricărei console, puteți modifica/șterge fișierele din Sistemul de fișiere Windows din Bash dacă nu sunteți atent. De exemplu, puteți face ceva de genul de mai jos și puteți ajunge să ștergeți o parte bună din instalarea Windows, presupunând că contul Windows sub care rulați are drepturi de a face acest lucru:

$ rm-rf /mnt/c/ <strong></strong>

aduc asta pentru că comenzile Linux sunt noi pentru mulți dintre noi, în timp ce comenzile consolei Windows nu sunt.

magia care face ca această integrare a sistemului de fișiere să se întâmple se numește DrvFs. Dacă doriți să aflați mai multe despre sistemul de fișiere și cum funcționează în WSL, echipa WSL a creat o postare excelentă pe blog cu toate detaliile.

desigur, accesul la sistemul de fișiere este doar o parte din poveste. Multe sarcini de dezvoltare implică accesarea resurselor la distanță prin HTTP sau alte protocoale de rețea.

efectuarea de cereri HTTP

este adesea util să efectuați un apel REST sau alt apel HTTP (sau FTP) dintr-un script sau o linie de comandă, mai degrabă decât dintr-un program sau o pagină web compilată. La fel ca majoritatea distribuțiilor Linux, WSL include utilități standard precum curl și wget pentru efectuarea HTTP și a altor apeluri de rețea. De exemplu, iată restul apel la GitHub pentru a obține informațiile mele de profil, folosind curl:

puteți combina acest lucru cu Bash scripting pentru a crea clienți de testare rapidă pentru API-uri REST, sau utilitare pentru ping pagini web pe servere și să raporteze starea. De asemenea, este minunat doar să descărcați un fișier de pe web; puteți redirecționa pur și simplu ieșirea către un fișier, mai degrabă decât să o vizualizați pe ecran:

$ curl-i https://api.github.com/users/Psychlist1972> pete.json

sunt, de asemenea, un utilizator PowerShell și chiar am creat câteva extensii interesante pentru a utiliza Windows 10 MIDI în PowerShell și, de asemenea, pentru a remedia unele corupție de fișiere care se întâmpla utilizatorilor anumitor hardware de înregistrare a sunetului. Ca dezvoltator și fan. net de mult timp, voi continua să folosesc și să extind PowerShell, deoarece are sens pentru proiectele mele. Dar PowerShell nu este mediul potrivit pentru a rula toate acele utilități și exemple open source bazate pe Bash și Linux pe web astăzi. Vreau să folosesc cel mai simplu și fără frecare mod de a îndeplini orice sarcină și, uneori, asta înseamnă să o fac în Bash.

abia am zgâriat suprafața aici pe Bash, Bash scripting și sarcinile pe care le puteți realiza din shell. Până acum, am vorbit despre munca de utilitate care este utilă, dar auxiliară dezvoltării. Ce zici de a face dezvoltarea reală și compilarea din cadrul WSL? Am demonstrat că, ca parte a turneului construi.

Bash la Build Tour – NetHack

la începutul acestei veri, vorbitorii de la Microsoft au făcut înconjurul lumii demonstrând unele dintre noile caracteristici interesante pentru dezvoltatori din Windows și Microsoft Cloud. Ca parte a acestui fapt, am vrut să demonstrăm WSL într-un mod distractiv, dar și într-un mod cu care dezvoltatorii s-ar raporta.

am vrut personal să arăt folosind Git și câteva instrumente tradiționale de dezvoltare a consolei. Când am scris demo-ul Bash, am inclus elementele de bază („Hello World” în Python și Ruby), Dar am vrut să arăt ceva mai mult pe calea bătută.

m-am gândit înapoi la timpul meu în colegiu, când am revenit înainte și înapoi între UNIX (DEC Ultrix și SunOS) și Vax / VMS. La acea vreme, Unix era aproape exclusiv un prim mediu de linie de comandă. La școala mea, majoritatea utilizatorilor X de la mână de stații de lucru grafice tocmai au deschis mai multe sesiuni terminale în diferite ferestre, dar cu tapet super-cool moon phase în fundal. Majoritatea studenților au folosit terminalele VT-220 pentru sesiunile lor (școala nu era departe de Boston, așa că aveam o mulțime de echipamente DEC).

la acea vreme, existau două jocuri mari pe care le jucau toate specializările în informatică: MUDs (lpMUD și Noul brand la acea vreme DikuMUD, în primul rând) și NetHack. NetHack și alte Roguelikes au fost considerate a fi unele dintre cele mai influente jocuri din istorie, fiind precursorii numeroaselor jocuri de crawl și jocuri de rol de care ne bucurăm astăzi.

NetHack are o istorie lungă și astăzi conține mai mult de o sută de mii de linii de zeci de ani de ani *Cod nix, precum și completări moderne. Jocul în sine folosește blesteme (sau înlocuirile sale) pentru interacțiunea terminală, necesită Lex și yacc (sau flex și bison) și cc (sau gcc) și o mulțime de alte instrumente de dezvoltare pentru a construi.

este scris în C și include un număr de utilități de configurare puternic scriptate scrise pentru shell-ul Bourne. M-am gândit că ar fi un test bun și distractiv pentru a exercita capacitățile dezvoltatorului WSL și Bash pe Windows 10. Datorită utilizării blestemelor (libncurses pe Linux și WSL), ar ajuta, de asemenea, să demonstreze capacitățile Emulației terminalului încorporate în fereastra consolei Windows 10.

pe vremuri, construirea NetHack de la sursă a durat pentru totdeauna pe serverul nostru Ultrix tăiat în timp. Acum este nevoie de un minut pe PC-ul meu și totul este făcut. Îmi place progresul. Există modalități ușoare și modalități grele de configurare și compilare NetHack pe Linux sau WSL. Pentru a vă salva ceva timp, vă voi conduce prin abordarea ușoară.

cerințe preliminare

Mai întâi, actualizați mediul WSL pentru a vă asigura că indicați spre cel mai recent catalog de software și, de asemenea, instalați baza la zi. În general, este o idee bună să faceți acest lucru înainte de a instala pachete noi.

$ sudo apt update
$ sudo apt upgrade

apoi, instalați instrumentele esențiale pentru dezvoltatori. Cel mai simplu mod de a face acest lucru este să utilizați pachetul build-essential. Aceasta include aproape fiecare program de consolă de care un dezvoltator Linux ar trebui să construiască aplicații în C/C++.

$ sudo apt install build-essential

Acest lucru va dura câteva minute. Dacă doriți să fiți mai chirurgicali, puteți instala separat gcc, gdb, make, flex, bison și celelalte instrumente solicitate în documentele NetHack. Dar dacă sunteți dezvoltator, probabil că veți dori celelalte instrumente la un moment dat. Pachetul build-essential scoate presupunerile din instalarea setului de instrumente.

apoi, instalați git. După cum vă puteți imagina, este la fel de ușor ca:

$ sudo apt install git

la fel ca în cazul Linux, puteți adăuga un PPA git pentru a obține o versiune mai recentă, dar aceasta va face pentru ceea ce facem aici.

și în cele din urmă, vrem să avem blesteme (ncurses, de fapt) instalate pentru interacțiunea ecranului consolei:

$ sudo apt install libncurses-dev

odată ce ați finalizat acești pași, sunteți gata să construiți NetHack.

clădire NetHack

repo Oficial NetHack este pe GitHub. În primul rând, vom apuca că și pune-l într-un subfolder de pe directorul nostru acasă.

$ cd ~
$ git clona http://github.com/NetHack/NetHack

deoarece NetHack suportă atât de multe sisteme de operare diferite, va trebui să faceți o configurație de bază pentru a-i spune că folosim Linux pe linia de comandă și înlocuim instrumentele gratuite și open source pentru clasicele UNIX, cum ar fi GCC pentru cc.

după cum am menționat, există o serie de moduri de a face acest lucru. Cineva a fost suficient de atent pentru a încapsula o mare parte din configurație într-un fișier de sugestii. Crede-mă aici, folosind fișierul sugestii vă va salva de ore de dureri de cap în configurație față de pașii descriși pe repo GitHub. Nu este imediat evident cum să utilizați indicii dacă te uiți la fișierele README sau alte documente, așa că aici te duci:

$ cd NetHack / sys/Unix
$. /setup.sh sugestii/linux

care va configura makefile pentru a utiliza instrumentele, bibliotecile și căile potrivite pentru Linux. Scripturile de configurare sunt scripturi shell non-triviale care fac o mulțime de configurații; sunt fericit să raportez că funcționează perfect în WSL. Dacă sunteți curios despre shell scripting, asigurați-vă că le deschideți în editorul dvs. preferat.

apoi, construi finală:

$ cd ~/NetHack
$ face toate

după construi, veți dori să creați instala. Acest lucru este într-adevăr doar despre copierea executabil într-o locație cunoscută:

$ make install

care vă va lăsa apoi cu un folder numit ~/nh. Nethack este situat în directorul ~ / nh/install / games și se numește pur și simplu nethack. Pentru a-l rula, navigați la acel director (sau tastați calea completă) și tastați:

$ cd ~/nh/install/games
$ nethack

odată ce faceți acest lucru, ecranul se va șterge și vi se va solicita să începeți să jucați NetHack. Rețineți că tot ceea ce se face aici este la fel cum s-ar face pe o instalare Ubuntu Linux Vanilla; nu era nevoie de nimic specific Windows.

redarea NetHack

având în vedere limitările unui joc de consolă și complexitatea NetHack, poate dura un pic pentru a intra în ea. A spune că este puțin criptic la început ar fi o subevaluare, dar nu am întâlnit niciodată un dezvoltator care să se ferească de o provocare bună.

tastele de navigare sunt aceleași cu cele utilizate în VI(M), deci HJKL pentru stânga, jos, sus și respectiv dreapta. Pentru a ieși, puteți găsi scări până la nivelul superior și să le utilizeze, sau a lovit de Control-C pentru a forța ieși din joc.

în NetHack, sunteți simbolul@. Fiecare nivel este alcătuit din camere, coridoare, uși și ambele scări în sus și în jos. Monștrii, comoara și obiectele sunt reprezentate ca diverse personaje ASCII cu care vă veți familiariza pe măsură ce jucați. Așa cum este norma cu Roguelikes, nu există nici o salvare și veți obține doar o singură viață. Dacă mori și să se joace din nou, temnita este aleatoriu re-generate și elementele devin amestecate.

punctul de NetHack este de a supraviețui temnite, colecta de aur și obiecte și ucide cât mai mulți monștri ca tine poate. Există obiective dincolo de asta, dar va trebui să jucați o vreme (sau să citiți) pentru a le descoperi. Reguli urmați vag Dungeons & Dragons reguli pentru arme, abilități, etc.

Iată o captură de ecran a NetHack cu trei camere și două coridoare vizibile. Scările sus sunt în camera din stânga sus, și eu sunt în prezent în camera din dreapta sus, împreună cu unele comori și alte elemente.

dacă nu aveți culoare în versiunea dvs., creați un fișier numit~/.nethackrc și pune următoarele în ea:

Opțiuni=culoare:adevărat,dark_room: adevărat, menucolors: adevărat

deoparte: Dacă grafica personajelor ASCII nu este chestia ta, dar îți place conceptul, caută „roguelike” în Microsoft Store și bucură-te de jocurile mai vizuale din acest gen popular.

sigur, NetHack este o bază de cod vechi, cel mai drag pentru cei dintre noi de o anumită vârstă. Cu toate acestea, construirea acestuia exercită un număr semnificativ de instrumente importante pentru dezvoltatori și caracteristici ale sistemelor de operare *nix, precum și emularea terminalului. Este minunat să vedem că toate acestea, de la gcc, gdb, make, bison și flex la git mai modern, funcționează astăzi pe WSL.

Dacă doriți să vedeți demo-ul de mai sus, așa cum s-a făcut la Build Tour, urmăriți această notă principală din Build Tour Canada. Demo-ul WSL începe în jurul valorii de 6:20 în. (Și da, este subsistemul Windows Pentru Linux, în ciuda a ceea ce am spus în acel videoclip.)

https://channel9.msdn.com/Events/Build/Build-Tour-2016-Toronto/Keynote

sper să vă bucurați de excursia dvs. în temnițele NetHack!

C și C++ sunt grozave, la fel ca toate aceste instrumente clasice pentru dezvoltatori. Puteți face chiar și o mulțime cu Bash scripting simplu. Dar multe sarcini de dezvoltator implică limbaje de script, cum ar fi Python.

Python

puteți găsi exemple de scripturi Python pe web, ceea ce implică faptul că Python este atât popular, cât și util pentru mulți dezvoltatori. Majoritatea acestor exemple, desigur, presupun că rulați Linux. În trecut, acest lucru însemna rularea lor într-o instalare Linux fie pe o altă mașină, o opțiune VM sau boot, fie efectuarea oricăror modificări necesare pentru a le rula folosind distribuțiile Windows ale Python.

acestea nu sunt probleme insurmontabile de orice întindere, dar în viața de zi cu zi a unui dezvoltator, mici bucăți de frecare ca aceasta se adaugă. Cu WSL, aveți întotdeauna la dispoziție un subsistem compatibil și un shell compatibil Python, fără a fi nevoie să ieșiți din zona dvs.

pentru a instala cea mai recentă versiune de dezvoltare a Python și programul de instalare a pachetului python „pip”, executați următoarele la promptul bash shell:

$ sudo apt install python-pip python-dev
$ sudo pip install –upgrade pip

acum că Python este instalat, am vrut să arăt cum puteți lua un exemplu tipic Linux Python de pe un site și să lucrați direct cu acesta. M-am dus pe la site-ul reteta ActiveState Python și a ales exemplul Python de top. Bine, am mințit. Cel de sus este pentru tipărirea numelor de numere întregi și asta nu părea super interesant, așa că am ales al doilea: Tetris. M-am gândit că toți vedeți destul Python practic în fiecare zi, așa că voi merge pentru un alt joc.

am deschis nano, am copiat cele 275 de linii de cod Python chiar de pe pagina din browserul meu din Windows, le-am lipit în nano în fereastra consolei mele WSL, salvate ca tetris.py și apoi pur și simplu executat:

$ python tetris.py

care a șters imediat ecranul și a adus o aplicație Tetris de bază. Ca și în cazul NetHack, utilizați aceleași taste de mișcare standard VI. (Înapoi în zilele dinaintea mouse-ului și tastele WASD pentru mișcare, mâna dreaptă a fost pe tastele hjkl tastatură.)

după cum am menționat, puteți rula desigur Python pe Windows fără WSL. Cu toate acestea, pentru utilitare și eșantioane rapide, Posibilitatea de a rula un exemplu Linux Python fără modificări pur și simplu prin lipirea unui cod dintr-o sursă cunoscută este un impuls mare de productivitate pentru dezvoltatori.

asta e ideea, într-adevăr. Nu este vorba despre înlocuirea altor instrumente native Windows, cum ar fi Python, PowerShell, C# și multe altele. Este vorba despre eliminarea fricțiunii atunci când trebuie doar să faceți lucrurile rapid și eficient într-un flux de lucru modern de dezvoltare.

între Bash, Python și toate instrumentele native de dezvoltare Linux de linie de comandă, WSL are nevoile mele de flux de lucru Linux acoperite. Nu este un server Linux sau chiar un client Linux complet. În schimb, este exact ceea ce am nevoie pentru a reduce unele fricțiuni de zi cu zi și pentru a face dezvoltarea pe Windows și mai productivă și mai plăcută.

resetarea mediului WSL

Simțiți-vă liber să experimentați. Dacă deteriorați instalarea WSL, este suficient de ușor să reinstalați. Asigurați-vă că păstrați copii ale oricărui lucru important.

C:> lxrun.exe /dezinstalare / full
C: > lxrun.exe / install

cum utilizați Bash și WSL?

sperăm că WSL și Bash în special, pe Windows 10 vă ajută să fiți puțin mai eficienți și să eliminați un pic de frecare din sarcinile de dezvoltare de zi cu zi.

cum utilizați WSL pe Windows 10? Cum ți-ar plăcea să-l folosești?

echipa face multă muncă pentru a se asigura că WSL este un instrument excelent de consolă pentru dezvoltatori. Dacă aveți feedback sau întâmpinați probleme, vă recomandăm să verificați pagina de probleme GitHub, precum și site-ul de Feedback și votare UserVoice. Ne-ar plăcea să auzim de la tine.

Referințe suplimentare și lecturi suplimentare

Linux shell scripting este un subiect imens și există o mulțime de tutoriale excelente pe web. Dacă nu sunteți deja familiarizat cu acesta și doriți să aflați mai multe, majoritatea tutorialului Bash va funcționa pentru dvs. Aici este unul pentru a începe cu.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *