Differences

This shows you the differences between two versions of the page.

Link to this comparison view

uso:cursuri:curs-04 [2021/10/29 17:04]
ebru.resul
uso:cursuri:curs-04 [2022/10/25 01:18] (current)
sergiu.weisz
Line 1: Line 1:
-====== Curs 04 - Dezvoltarea programelor =======+====== Curs 04 - Rețelistică și Internet ​======
  
-  * [[https://drive.google.com/​file/d/1BmuPPAptcKqqHbRtw7oYPNMOtHnuXZoi/view?​usp=sharing | Slide-uri curs]] +  * [[https://docs.google.com/​presentation/d/1QHsMSnvUSJ_9oFodgKCiwqDBxIpHhmxq/edit?​usp=sharing&​ouid=108131427433094834232&​rtpof=true&​sd=true| Slide-uri curs]]
-  * [[https://​drive.google.com/​file/​d/​1i6mDB0NqS9toWXe1Mfml_GJGLM-ms7eG/​view?​usp=sharing | Handout 3on1 and notes space]] +
-  * [[https://​drive.google.com/​file/​d/​1-PMESQDyFS9-3F1sC1gRXHbFLo1lVNtt/​view?​usp=sharing | Handout 6on1]] +
-  * **Cuvinte cheie**: cod sursă, cod mașină, editor, IDE, pachet Software, fișier executabil, fișier obiect, compilare, linking, interpretoare,​ limbajul C, gcc, modularizare,​ sisteme de build, make, Makefile, git+
   * **Suport de curs**   * **Suport de curs**
-      ​* [[http://elf.cs.pub.ro/uso/res/carte/uso_cap-06-appdev.pdf ​Capitolul 6 - Dezvoltarea aplicațiilor]]+    ​* [[https://github.com/​systems-cs-pub-ro/carte-uso/​releases ​Utilizarea sistemelor de operare]] 
 +        * Secțiunea 11 - Rețelistică și Internet
  
 +<​HTML>​
 +  <​center>​
 +    <iframe src="​https://​docs.google.com/​presentation/​d/​e/​2PACX-1vQjetisYkWQ5Sp39D7AOgXc6lZVWwlhepwDSkY1fJ-m9DzUq2C_7UAYUpiwCzSGsg/​embed?​start=false&​loop=false&​delayms=3000"​ frameborder="​0"​ width="​480"​ height="​389"​ allowfullscreen="​true"​ mozallowfullscreen="​true"​ webkitallowfullscreen="​true"></​iframe>​
 +  </​center>​
 +</​HTML>​
  
-====== Demo =======+/*
  
-==== Comanda dpkg ==== +====== Curs 03 - Dezvoltarea programelor =======
-  * Utilitarul dpkg este un manager de pachete pentru sisteme bazate pe Debian (ex. Ubuntu), care poate realiza mai multe acțiuni. +
-  * Pentru simpla instalare a unui pachet, folosim opțiunea -i, alături de numele fișierului „.deb”, descărcat anterior (sau calea către acest fișier, dacă ne aflăm într-un folder diferit):+
  
-<​code>​ +  * [[http://elf.cs.pub.ro/​uso/​res/​cursuri/​curs-03/curs-03-handout.pdf | Slide-uri curs]] 
-student@uso:~$ sudo dpkg -i google-chrome-stable_current_amd64.deb  +  * [[http://​elf.cs.pub.ro/uso/res/cursuri/​curs-03/curs-03-handout-4on1-notes.pdf | Handout 4on1 and notes space]] 
-Selecting previously unselected package google-chrome-stable. +  * [[http://elf.cs.pub.ro/uso/res/cursuri/curs-03/curs-03-handout-8on1.pdf | Handout 8on1]] 
-(Reading database ​... 196951 files and directories currently installed.) +  * **Cuvinte cheie**cod sursă (//source code//), cod mașină (//machine code//), //coding style//, editor, IDE, pachet software, fișier executabil, fișier obiect, compilare, linking, limbajul C, ''​gcc'',​ modularizare,​ sistem de build, ''​make'',​ ''​Makefile''​ 
-Preparing to unpack google-chrome-stable_current_amd64.deb ... +  * **Suport de curs** 
-Unpacking google-chrome-stable (86.0.4240.111-1) ... +    * [[http://​books.google.com/​books?​id=_JFGzyRxQGcC | Introducere în sisteme de operare]] 
-Setting up google-chrome-stable (86.0.4240.111-1) ... +      * [[http://​books.google.com/​books?​id=_JFGzyRxQGcC&​pg=PA319 | Capitolul 11]] 
-update-alternatives:​ using /usr/bin/google-chrome-stable to provide ​/usr/bin/x-www-browser (x-www-browser) in auto mode +      * [[http://​books.google.com/books?​id=_JFGzyRxQGcC&​pg=PA469 | Capitolul 14]]
-update-alternativesusing /usr/bin/google-chrome-stable to provide ​/usr/bin/gnome-www-browser (gnome-www-browser) in auto mode +
-update-alternativesusing /usr/bin/google-chrome-stable to provide ​/usr/​bin/​google-chrome (google-chrome) in auto mode +
-Processing triggers for gnome-menus ​(3.13.3-11ubuntu1.1... +
-Processing triggers for desktop-file-utils (0.23-1ubuntu3.18.04.1) ... +
-Processing triggers for mime-support (3.60ubuntu1) ... +
-Processing triggers for man-db (2.8.3-2) ... +
-</code>+
  
-<note>  ​În cazul în care pe sistemul nostru este deja instalată o versiune mai veche a pachetului, dpkg creează un back up al vechilor fișiere, astfel încât să poată păstra versiunea inițială dacă apar probleme la noua instalare. </note>+<HTML> 
 +  <​center>​ 
 +    <iframe src="​https://​docs.google.com/​viewer?​url=http://​elf.cs.pub.ro/​uso/​res/​cursuri/​curs-03/​curs-03-handout.pdf&​embedded=true"​ width="​600"​ height="​480"​ style="​border:​ none;">​ 
 +    </​iframe>​ 
 +  </​center>​ 
 +</HTML>
  
-  * Pentru a șterge un pachet instalat, folosim opțiunea -r: 
  
-<​code>​  +====== Demo =======
-sudo dpkg -r google-chrome-stable  +
-(Reading database ... 197063 files and directories currently installed.) +
-Removing google-chrome-stable (86.0.4240.111-1) ... +
-</​code>​+
  
-În cazul ștergerii, trebuie ​să folosim ca parametru ​al comenzii numele pachetului instalatnu numele ​fișierului „.deb” folosit pentru instalare.+Cuvantul utilizator defineste in primul rand persoana fizica care dorește să acceseze resursele și funcționalitățile unui sistem de calcul. Din punct de vedere ​al sistemului de operare însăutilizatorul presupune existența unui cont de utilizator prin intermediul căruia sunt accesate resursele puse acestuia la dispozitie în sistem (de exemplu ​fișierele) si care poate crea procese
  
-  ​Anumite fișiere ​de configurare ar putea rămâne în sistem ​după simpla ștergere cu -r, deoarece au fost create separat ​de scripturi ​de configurare. Dacă vrem să fim siguri că și acestea sunt șterse, putem folosi opțiunea dpkg -P (purge)+Clasificare:​ 
 +  ​*Utilizatori ​de sistem ​– permit crearea ​de procese si detin resurse precum fisiere 
 +  *Utilizatori de aplicatii – permit accesul la resursele gestionate de aplicatii si nu de sistemul ​de operare
  
 +Un prompt BASH default arată utilizatorul care s-a logat pe sesiunea shell curentă. În acest caz, utilizatorul este student.
 <​code>​ <​code>​
-student@uso:​~$ ​sudo dpkg -P google-chrome-stable  +student@uso:​~$
-(Reading database ... 197063 files and directories currently installed.) +
-Removing google-chrome-stable (86.0.4240.111-1) ... +
-... +
-Purging configuration files for google-chrome-stable (86.0.4240.111-1) ...+
 </​code>​ </​code>​
  
-  * Tot dpkg ne oferă posibilitatea de a lista toate pachetele din sistem, alături de versiune, tipul arhitecturii și o scurtă descriere, cu opțiunea -l:+Informațiile despre utilizatori sunt stocate in fișierul ''/​etc/​passwd''​ 
 +<​code>​ 
 +student@uso:​~$ cat /​etc/​passwd 
 +root:​x:​0:​0:​root:/​root:/​bin/​bash 
 +mihai:​x:​1001:​1001:/​home/​mihai:/​bin/​bash 
 +maria:​x:​1002:​1002:/​home/​maria:/bin/bash 
 +</​code>​
  
 +Fiecare utilizator este identificat în mod unic în funcție de UID (User Identifier). De asemenea, un utilizator ​ are atribuit si un director ''​home''​. Pentru a accesa directorul home, folosim caracterul ''​~'',​ acesta substituind calea către directorul home al utilizatorului curent:
 <​code>​ <​code>​
-student@uso:​~$ ​dpkg -l +student@uso:​~$ ​cd ~ 
-Name                                       ​Version ​                                        ​Architecture Description +student@uso:~$ pwd 
-+++-==========================================-===============================================-============-=============================================================================== +/​home/​student
-ii  accountsservice ​                           0.6.45-1ubuntu1 ​                                ​amd64 ​       query and manipulate user account information +
-ii  acl                                        2.2.52-3build1 ​                                 amd64        Access control list utilities +
-ii  acpi-support ​                              ​0.142 ​                                          ​amd64 ​       scripts for handling many ACPI events +
-ii  acpid                                      1:2.0.28-1ubuntu1 ​                              ​amd64 ​       Advanced Configuration and Power Interface event daemon +
-ii  adduser ​                                   3.116ubuntu1 ​                                   all          add and remove users and groups +
-...........+
 </​code>​ </​code>​
 + 
 +Observăm că directorul home al utilizatorului student este ''/​home/​student''​. Utilizatorul ''​root''​ (utilizatorul privilegiat in Unix) are UID-ul 0 si home-ul in ''/​root''​.
 + 
 +Pentru ușurința în realizarea unor configurații in sistem, utilizatorii pot fi organizați în grupuri. Un grup poate contine mai multi utilizatori,​ iar un utilizator poate face parte din mai multe grupuri. Fiecare grup folosește un identificator unic numit GID (Group Identifier). GID-ul 0 este rezervat grupului utilizatorului root.
 + 
 +Fisierul ''/​etc/​group''​ conține informatii despre toate grupurile din sistem.
  
 +Mai jos este un demo unde vor fi prezentate comenzile menționate în curs, alături de exemple de folosire a acestora.
  
-* Dacă ne interesează să verificăm dacă un anumit pachet este deja instalat, putem folosi opțiunea -s, care ne va afișa statusul pachetului (installed / uninstalled) și o serie mai largă de informații legate de acesta:+==== Comanda su ====
  
-<​code>​ +Comanda su (substitute user) este folosita pentru a schimba utilizatorul current. 
-student@uso:​~$ ​dpkg -s zsh +<​code>​student@uso:​~$ ​su mihai 
-Packagezsh +Password
-Statusinstall ok installed +mihai@uso:/​home/​student$
-Priority: optional +
-Section: shells +
-Installed-Size:​ 2070 +
-Maintainer: Ubuntu Developers ubuntu-devel-discuss@lists.ubuntu.com +
-.......+
 </​code>​ </​code>​
  
 +De cele mai multe ori, comanda su este folosita alaturi de sudo (substitute usor do) pentru a accesa un shell cu drepturi privilegiate. Daca dupa utilitarul su nu se da un nume de utilizator atunci se va considera ca se doreste accesarea utilizatorului root.
 +<​code>​student@uso:​~$ sudo su
 +[sudo] password for student:
 +root@uso:/​home/​student#​
 +</​code>​
  
-==== gcc (compilarea programelor) ====+Se mai poate folosi si comanda ''​sudo bash''​ pentru a obtine un astfel de shell. 
 +Aceasta comanda va schimba directorul current în home-ul root-ului. ​         
 +<​code>​student@uso:​~$ sudo bash 
 +[sudo] password for student: 
 +root@uso:​~#​ 
 +</​code>​ 
 +  
 +<​note>​Utilizatorul care executa comanda cu sudo trebuie sa aiba drept de sudo. Altfel se va obtine urmatorul rezultat.</​note>​ 
 +<​code>​mihai@uso:​~$ sudo su 
 +[sudo] password for mihai: 
 +mihai is not in the sudoers file.  This incident will be reported. 
 +mihai@uso:​~$ 
 +</​code>​
  
-  * GNU Compiler Collection este un compilator pentru C/C++, adică un program ce traduce codul nostru sursă în cod mașină, păstrat într-un fișier executabil ​și care va putea fi rulat pe procesor. +==== Comenzile id și finger ====
-  * Pentru a compila un fișier de tip cod sursă, putem folosi comanda gcc însoțită de numele sursei:+
  
-<​code>​ +Comenzile id si finger se folosesc pentru a afla informatii despre un anumit utilizator. 
-student@uso:​~/demosgcc hello_world.c ​ +<​code>​student@uso:​~$ ​id mihai 
-student@uso:​~/demosls +uid=1001(mihai) gid=1001(mihai) groups=1001(mihai) 
-a.out  hello_world.c +student@uso:​~$ ​finger mihai 
-student@uso:~/demos$ file a.out +Loginmihai      Name: Mihai Popescu 
-a.outELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter ​/lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=ddbe5634d0b0da5b4eab5d27d6b77236d7a90f7b,​ not stripped+Directory: /home/mihai Shell: ​/bin/bash 
 +Office: 101 
 +Never logged in. 
 +No mail. 
 +No Plan.
 </​code>​ </​code>​
  
-Observăm că după rularea comenzii este creat fișierul a.out de tip „ELF 64-bit shared object”adică un fișier executabil ce va putea fi rulat. +==== Comenzile wwho și pinky ====
- +
-  * Dacă dorim ca executabilul rezultat în urma compilării să aibă un anumit nume, folosim opțiunea -o:+
  
 +Aceste comenzi ofera informatii despre userii logati in sistem.
 +<​code>​student@uso:​~/​Documents$ w
 + ​12:​18:​08 up 2 days, 18:​27, ​ 3 users, ​ load average: 0,26, 0,19, 0,08
 +USER TTY      FROM         ​ LOGIN@ ​  ​IDLE ​  ​JCPU ​  PCPU WHAT
 +student ​ :0       :​0 ​          ​ 11:​57 ​  ?​xdm? ​  ​7:​05 ​  0.01s /​usr/​lib/​gdm3/​gdm-x-session --run-script
 +maria tty2 ​    ​- ​           12:​18 8.00s ​ 0.05s  0.05s -bash
 +mihai :​1 ​      :​1 ​          ​ 12:​15 ​  ?​xdm? ​  ​7:​05 ​  0.01s /​usr/​lib/​gdm3/​gdm-x-session --run-script
 +student@uso:​~/​Documents$ who
 +student ​ :0           ​2020-10-13 11:57 (:0)
 +maria tty2 ​        ​2020-10-13 12:18
 +mihai :​1 ​          ​2020-10-13 12:15 (:1)
 +</​code>​
 +Comanda pinky poate produce si un output asemanator cu finger.
 <​code>​ <​code>​
-student@uso:​~/demosgcc hello_world.c ​-o hello +student@uso:​~$ ​pinky -l student 
-student@uso:~/demos$ ls +Login name: student ​                In real life ​Student User 
-hello  hello_world.c+Directory: /​home/​student         Shell: ​ /bin/bash
 </​code>​ </​code>​
  
-  * Prin utilizarea a diferitelor opțiuni, putem opri procesul de compilare după fiecare pas descris în curs și obținem astfel fișierul obținut la fiecare etapă a compilării. +==== Comanda whoami ====
-Cu opțiunea -E, rezultatul este codul rezultat după etapa de preprocesare. Acest cod este afișat la ieșirea standard, însă poate fi redirectat într-un fișier cu extensia „.i” (această extensie indică faptul că fișierul nu mai trebuie să treacă prin preprocesare).+
  
-<​code>​  +Comanda whoami afiseaza username-ul utilizatorului current. 
-student@uso:​~/demosgcc -E hello_world.c > hello_world.i +<​code>​ 
-student@uso:​~/demosfile hello_world.i +student@uso:​~$ ​whoami 
-hello_world.i:​ C source, ASCII text+student 
 +student@uso:​~$
 </​code>​ </​code>​
  
-Pentru a obține fișierul în limbaj de asamblare rezultat în urma compilării,​ folosim opțiunea -S (în aces caz, codul în limbaj de asamblare este salvat direct într-un fișier cu extensia „.s”):+==== Comenzile users și groups ====
  
 +Comanda users afiseaza userii logati in system.
 +<​code>​
 +mihai@uso:/​home/​student$ users
 +student
 +mihai@uso:/​home/​student$
 +</​code>​
 +Comanda groups afiseaza grupurile din care face parte un utilizator dat ca parametru comenzii. Daca nu se da niciun utilizator, atunci se va lua utilizatorul current.
 <​code>​ <​code>​
-student@uso:​~/demosgcc -S hello_world.c +student@uso:​~$ ​groups 
-student@uso:​~/demosfile hello_world.s ​ +student adm cdrom sudo dip plugdev lpadmin sambashare 
-hello_world.sassembler source, ASCII text+student@uso:​~$ groups root 
 +root : root 
 +student@uso:​~$ groups student 
 +student : student adm cdrom sudo dip plugdev lpadmin sambashare 
 +student@uso:​~$ ​groups mihai 
 +mihai mihai
 </​code>​ </​code>​
  
-După ce codul a fost tradus din limbaj de asamblare în cod mașină, putem opri procesul înaintea etapei de link-editare,​ folosind opțiunea „-c”. Rezultatul va fi un fișier cu extensia „.o” ce conține cod mașină, fără a fi linkat încă cu bibliotecile necesare.+==== Comanda passwd ====
  
 +Comanda passwd este folosita pentru a schimba parola unui utilizator.
 +Un utilizator neprivilegiat trebuie sa foloseasca sudo pentru a  schimba parola altui utilizator.
 <​code>​ <​code>​
-student@uso:​~/demosgcc -c hello_world.c +student@uso:​~$ ​sudo passwd mihai 
-student@uso:~/demosfile hello_world.o +Enter new UNIX password: 
-hello_world.o: ELF 64-bit LSB relocatable,​ x86-64, version 1 (SYSV), not stripped+Retype new UNIX password: 
 +passwd: password updated successfully 
 +mihai@uso:/home/​studentpasswd mihai 
 +Changing password for mihai. 
 +(currentUNIX password: 
 +Enter new UNIX password: 
 +Retype new UNIX password: 
 +passwd: password updated successfully
 </​code>​ </​code>​
  
-  * În general, programele pe care le dezvoltăm sunt prea complexe pentru a fi scrise într-un singur fișier, motiv pentru care ne dorim să realizăm compilarea din mai multe surse. Pentru a ilustra modul de lucru, vom crea un program care să realizeze operațiile de adunare și scădere a 2 numere întregi. Vom folosi fișierul sursă „operations.c” pentru a implementa cele 2 funcții și fișierul „main.c” pentru a apela aceste funcții. 
  
 +==== Comenzile useradd și adduser ====
  
 +Ambele comenzi sunt folosite pentru a adauga un user in sistem. Comanda adduser se foloseste de useradd, dar este mai user friendly.
 <​code>​ <​code>​
-operations.c +student@uso:​~$ sudo useradd marcela 
-int addition(int a, int b{ +student@uso:​~$ id marcela 
-       return a + b; +uid=1003(marcela) gid=1003(marcela) groups=1003(marcela
-} +student@uso:​~$ sudo adduser marcela 
-int substraction(int a, int b{ +Adding user `marcela'​ ... 
-      ​return a - b; +Adding new group `marcela' ​(1003... 
-}+Adding new user `marcela'​ (1003) with group `marcela'​ ... 
 +Creating home directory `/​home/​marcela'​ ... 
 +Copying files from `/​etc/​skel'​ ... 
 +Enter new UNIX password: 
 +Retype new UNIX password: 
 +passwd: password updated successfully 
 +Changing the user information for marcela 
 +Enter the new value, or press ENTER for the default 
 +    Full Name []: 
 +    Room Number []: 
 +    Work Phone []: 
 +    Home Phone []: 
 +    Other []: 
 +Is the information correct? [Y/n] 
 +student@uso:​~$
 </​code>​ </​code>​
  
-Pentru a putea apela funcțiile din „operations.c” în „main.c”,​ va trebui să creăm un fișier de tip header, în acest caz „operations.h”,​ pe care să-l includem la începutul fișierului main și care să conțină doar antetele funcțiilor respective.+==== Comenzile userdel si deluser ====
  
 +Ambele comenzi sunt folosite pentru a sterge un utilizator. Comanda deluser este considerate mai interactive.
 <​code>​ <​code>​
-Operations.h +student@uso:​~$ sudo deluser marcela 
-int addition(int a, int b); +Removing user `marcela'​ ..
-int substraction(int a, int b); +Warning: group `marcela'​ has no more members
-Main.c +Done
-#include <stdio.h> +student@uso:​~$ finger marcela 
-#include "​operations.h" +finger: marcela: no such user. 
-int main() { +student@uso:~$ sudo userdel marcela 
-     int a = 3, b = 2; +student@uso:~$ finger marcela 
-     printf("​Suma este%d\n", addition(a, b)); +finger: marcela: no such user.
-     printf("​Diferenta este%d\n", substraction(a,​ b)); +
-     return 0; +
-}+
 </​code>​ </​code>​
  
-<​note>​Dacă am include „operations.c” ar apărea o eroare la compilaredin cauza faptului că ar apărea câte 2 definiții ale funcțiiloratât în „operations.c”,​ cât și în „main.c”. Folosind un header, în „main.c” vom include doar antetele, compilatorul știind astfel că aceste funcții există, urmând să găsească definițiile lor în alt fișier. +==== Comenzile groupaddaddgroupgroupdel si delgroup ====
-</​note>​+
  
-<​note>​ La includerea antetelor definite de noi, numele antetului se pune între „”, nu între <>, ca în cazul „stdio.h”. gcc ne va permite să compilăm ambele surse și să obținem un singur executabil final.</​note>​+Groupadd si addgroup se folosesc pentru a adauga ​noi grupuri in system. Nu este o mare diferenta intre aceste comenziaddgroup fiind doar mai user friendly.
 <​code>​ <​code>​
-student@uso:​~/demosgcc -o operations operations.c main.c +student@uso:​~$ ​sudo groupadd colegi1 
-student@uso:​~/​demos$ ./​operations ​ +student@uso:​~$ sudo addgroup colegi2 
-Suma este5 +Adding group `colegi2'​ (GID 1004) ... 
-Diferenta este1+Done. 
 +student@uso:​~$ cat /etc/group | grep colegi 
 +colegi1:​x:​1003:​ 
 +colegi2:​x:​1004:​ 
 +student@uso:​~sudo delgroup colegi1 
 +Removing group `colegi1'​ ..
 +Done. 
 +student@uso:~$ sudo groupdel colegi2 
 +student@uso:~$
 </​code>​ </​code>​
 +Groupdel si delgroup se folosesc pentru a sterge grupuri din sistem. La fel ca la comenzile anterioare, rezultatul lor nu difera foarte mult, delgroup fiind mai interactive si acceptand mai multe optiuni.
  
-==== Make ==== 
  
-  * Atunci când lucrăm la aplicații complexe, care implică un număr mare de fișiere sursă, headere etc., procesul de build devine greoi dacă este făcut „manual” (de ex. prin comanda gcc la fiecare re-compilare a codului sursă, când apar modificări). Pentru a automatiza acest proces, putem folosi utilitarul make. +==== Comenzile usermod si groupmod ====
-  * Comanda make caută în directorul curent fișiere numite Makefile. Un fișier Makefile conține una sau mai multe reguli, adică nume atribuite unor comenzi. Comanda make fără argumente execută prima regulă din Makefile, iar dacă dorim să rulăm o anumită regulă, folosim „make <nume regulă>​”. +
-  * Pentru programul cu operațiile aritmetice, putem scrie următorul Makefile, conținând regula build care se va ocupa de compilare:+
  
 +Comanda usermod este folosita pentru a modifica un cont de utilizator. In functie de optiunile date acestei comenzi, putem schimba mai multe lucruri la un cont de utilizator.
 +Spre exemplu, putem schimba home directory-ul unui user.
 <​code>​ <​code>​
-Makefile +student@uso:​~$ finger marcela 
-build +Login: marcela ​                               Name
- gcc -o operations operations.c main.c+Directory: /​home/​marcela ​         Shell: /bin/bash 
 +Never logged in. 
 +No mail. 
 +No Plan. 
 +student@uso:​~$ sudo usermod ​-d /​home/​marcela_dir marcela 
 +student@uso:​~$ finger marcela 
 +Login: marcela ​                               Name: 
 +Directory: /​home/​marcela_dir ​      ​ Shell:​ /bin/bash 
 +Never logged in. 
 +No mail. 
 +No Plan. 
 +student@uso:​~$
 </​code>​ </​code>​
 +Pentru a adauga un user la un grup se procedeaza in felul urmator:
 <​code>​ <​code>​
-student@uso:​~/demosmake +student@uso:​~$ ​groups marcela 
-gcc -o operations operations.c main.c +marcela : marcela 
-student@uso:​~/demos./​operations ​ +student@uso:​~$ sudo addgroup studenti 
-Suma este5 +Adding group `studenti'​ (GID 1004) ... 
-Diferenta este1+Done. 
 +student@uso:​~$ ​sudo usermod -a -G studenti marcela 
 +student@uso:~$ groups marcela 
 +marcela ​marcela studenti 
 +student@uso:​~$
 </​code>​ </​code>​
- +Comanda groupmod este folosita pentru a modifica un grup din system. 
-  * Tot în Makefile putem defini mai multe reguliîntre care putem stabili anumite dependențe. Pe scurt, rularea unei reguli va depinde de existența unuia sau mai multor fișiere. Dacă fișierele respective există în directorul curent, regula este rulată, dacă nu, se caută în Makefile o altă regulă cu numele ​respectivului fișier și se rulează mai întâi aceasta (sau se continuă lanțul dependețelor). +De exemplu, putem modifica ​numele ​unui grup:
 <​code>​ <​code>​
-Makefile +student@uso:~$ sudo groupmod ​-n absolventi studenti 
-build operations.o +student@uso:~$ cat /etc/group | grep absolventi 
- gcc -o operations operations.o main.c +absolventi:​x:​1004:​marcela 
-operations.o+student@uso:~$
- gcc -c operations.c +
-clean: +
- rm operations+
 </​code>​ </​code>​
  
 +==== Comanda chsh ====
 +
 +Comanda chsh este folosita pentru a schimba shell-ul de login al utilizatorului.
 <​code>​ <​code>​
-student@uso:​~/demosmake +student@uso:​~$ ​finger marcela | grep Shell 
-gcc -c operations.c +Directory: /home/marcela ​         Shell/bin/bash 
-gcc -o operations operations.o main.c +student@uso:​~$ ​sudo chsh marcela 
-student@uso:~/demos$ ./operations  +Changing the login shell for marcela 
-Suma este+Enter the new value, or press ENTER for the default 
-Diferenta este: 1 +    Login Shell [/​bin/​bash]:​ /bin/sh 
-student@uso:​~/demosmake clean +student@uso:​~$ ​finger marcela | grep Shell 
-rm operations +Directory: /​home/​marcela ​         Shell: /bin/sh
-student@uso:​~/demosls +
-Makefile ​ main.c ​ operations.c ​ operations.h ​ operations.o+
 </​code>​ </​code>​
  
-Mai sus, regula build depinde de un fișier de tip obiect numit „operations.o”. Deoarece acesta nu există încă în director, se rulează regula cu numele lui, care generează fișierul prin compilarea sursei „operations.c”,​ iar apoi se revine la regula build. De asemenea, am adăugat regula clean, folosită pentru a șterge executabilul când am încheiat o sesiune de testare.  +==== Comanda chfn ====
- +
- +
-==== Git ==== +
- +
-  * Aproape toate aplicațiile complexe sunt dezvoltate în echipe, fapt care poate face organizarea și structurarea proiectului destul de complicată. Ne vom dori adesea ca anumite feature-uri să fie dezvoltate și testate separat și doar apoi integrate în proiectul final. De asemenea, apar situații când ne dorim să ne putem întoarce la un stadiu anterior al proiectului. Git este un sistem de versionare a codului ce rezolvă astfel de probleme, iar în continuare vom prezenta câteva comenzi de bază. +
-  * Un proiect este păstrat într-un repository (repo), în cazul lucrului în echipă fiind vorba despre un repository remote. Pentru a crea o clonă locală a unui repo, folosim comanda git clone, însoțită de numele repository-ului. Această comandă creează pe sistemul local un folder cu numele repository-ului,​ care va conține atât fișierele propriu zise, cât și fișierele utilizate de git în realizarea versionării.+
  
 +Comanda chfn ofera posibilitatea de a schimba informatii legate de contul de utilizator.
 <​code>​ <​code>​
-student@uso:​~/demosgit clone https://​github.com/​systems-cs-pub-ro/​uso +student@uso:​~$ ​sudo chfn marcela 
-Cloning into '​uso'​... +Changing the user information for marcela 
-remote: Enumerating objects: 150done. +Enter the new valueor press ENTER for the default 
-remoteCounting objects: 100% (150/150), done. +     Full Name []Marcela Popescu 
-remoteCompressing objects: 100% (115/115), done. +     Room Number []120 
-remoteTotal 2198 (delta 31), reused 138 (delta 19), pack-reused 2048 +     Work Phone []074234324 
-Receiving objects100% (2198/​2198),​ 118.28 MiB | 5.20 MiB/s, done. +     Home Phone []025543455 
-Resolving deltas100% (1016/​1016),​ done. +    ​ Other []info 
-student@uso:​~/demoscd uso +student@uso:​~$ ​finger marcela 
-student@uso:~/demos/uso$ ls -a +Login: marcela ​                     Name: Marcela Popescu 
- ​. ​   .git       '​TW Warhammer' ​  ​lab03 ​  ​lab05 ​  ​lab10 ​  ​tema1 ​  tema3 +Directory: /home/​marcela ​         Shell: ​/bin/bash 
- ..   ​README.md ​  ​lab02 ​          ​lab04 ​  ​lab09 ​  ​lab12 ​  ​tema2 ​  tema4+Office: 120, 074234324 ​                   Home Phone: 025543455 
 +Never logged in. 
 +No mail
 +No Plan. 
 +student@uso:​~$
 </​code>​ </​code>​
  
-  * La creare, un repository are doar branch-ul master, care conține în general versiunea stabilă a proiectului. Atunci când vrem să ne aducem contribuția,​ ne creăm un branch distinct pornind de la master sau de la un alt branch deja existent. Astfel, putem să facem orice modificare, fără a afecta branch-ul de la care am pornit. ​Comanda ​git checkout -b <nume branch> va crea un branch nou și ne va muta automat pe acesta (git status afișează numele branch-ului curent și situația modificărilor aduse). Imediat după creare, stadiul proiectului din noul branch va fi identic cu cel înregistrat în branch-ul de la care am pornit.+==== Comanda ​chpasswd ====
  
-<​code>​ +Comanda chpasswd este folosita pentru a schimba parolele mai multor useri in cadrul unei singure comenzi. Odata ce este rulata comanda, pe urmatoarele linii trebuie sa completam informatiile sub forma user:​parola. Pentru a salva parolele se tasteaza combinatia CTRL+D. 
-student@uso:​~/demos/usogit checkout -b cool_feature +<​code>​  
-Switched to a new branch '​cool_feature'​ +student@uso:​~$ ​sudo chpasswd 
-student@uso:​~/demos/usogit status +marcela:​1234 
-On branch cool_feature +mihai:​4321 
-nothing to commit, working tree clean+maria:mihai 
 +student@uso:​~$
 </​code>​ </​code>​
  
-  * Conceptul de salvare al unui anumit stadiu al proiectului poate fi asociat cu crearea unui commit. +==== Comanda chown ====
- +
-După simpla adăugare a unui nou fișier (sau după modificarea unui fișier existent), git ne va semnala că statusul acestuia este untracked. Folosind comanda git add, adăugăm fișierul respectiv pe lista fișierelor ce conțin update-uri pe care vrem să le includem în următorul commit.+
  
 +Comanda chown este folosita pentru a schimba utilizatorul care este owner pentru un fisier.
 <​code>​ <​code>​
-student@uso:​~/demos/usoecho "​cool_feature"​ > cool_feature.txt +student@uso:/​home/dodels -l | grep terminus 
-student@uso:~/​demos/​uso$ git status +-rw-rw-r-- 1 dode dode 0 oct 14 13:17 terminus 
-On branch cool_feature +student@uso:/​home/dodesudo chown student terminus 
-Untracked files: +student@uso:/​home/dodels -l | grep terminus 
-  (use "git add <​file>​..."​ to include in what will be committed) +-rw-rw-r-- 1 student dode 0 oct 14 13:17 terminus
- cool_feature.txt +
-nothing added to commit but untracked files present (use "git add" to track) +
-student@uso:​~/demos/usogit add cool_feature.txt ​ +
-student@uso:​~/demos/usogit status +
-On branch cool_feature +
-Changes to be committed:​ +
-  (use "git reset HEAD <​file>​..."​ to unstage) +
- new file  cool_feature.txt+
 </​code>​ </​code>​
 +Se poate observa mai sus ca am schimbat utilizatorul care este owner din dode in student.
  
-După ce am adăugat toate fișierele pe care dorim să le folosim, comanda git commit -m va salva un snapshot al fazei curente a proiectului nostru, alături de un mesaj sugestiv transmis ca argument. Commit-ul va fi înregistrat alături de metadatele sale (data și ora, branch-ul, mesajul) în istoricul repo-ului. Pentru a vizualiza ulterior acest istoric, putem folosi comanda git log.+==== Comanda chgrp ====
  
 +Comanda chgrp se foloseste pentru a schimba grupul unui fisier.
 <​code>​ <​code>​
-student@uso:​~/demos/usogit commit ​-m "​Create cool feature"​ +student@uso:/​home/dodels -l | grep terminus 
-[cool_feature 0bfd61e] Add cool feature +-rw-rw-r-- ​dode dode 0 oct 14 13:17 terminus 
- ​1 ​file changed, 1 insertion(+) +student@uso:/​home/dodesudo chgrp student terminus 
- ​create mode 100644 cool_feature.txt +student@uso:/home/dode$ ls -l | grep terminus 
-student@uso:​~/demos/usogit log +-rw-rw-r-- 1 dode student 0 oct 14 13:17 terminus
-commit 0bfd61efa5778e62d090da43a1def9f96f5e1930 (HEAD -> cool_feature) +
-Author: Student USO VM User <student@stud.acs.upb.ro>​ +
-Date:   Sun Oct 25 15:46:53 2020 +0200 +
-    Add cool feature +
-......+
 </​code>​ </​code>​
 +Mai sus am schimbat grupul care este owner din dode in student.
  
-<​note>​Unul dintre motivele pentru care folosim mai întâi git add și apoi git commit este că uneori vom avea mai multe fișiere modificate și vom dori să le grupăm în commit-uri într-un mod relevant (1 commit – o funcționalitate adăugată/​un bug rezolvat), astfel încât să păstrăm un istoric relevant al proiectului.</​note>​ +==== Comanda chmod ====
- +
-  * Atunci când considerăm că modificările pot fi integrate în versiunea finală a proiectului,​ realizăm operația de merge, prin care integrăm modificările aflate momentan doar pe branch-ul nostru în branch-ul master.+
  
 +Comanda chmod este folosita pentru a schimba permisiunile pe care le detine un user sau un grup pentru un fisier.
 +In urmatorul exemplu se executa o serie de operatii folosind comanda chmod, rezultatul lor putand fi observat cu comanda ls -l folosita impreuna cu grep.
 <​code>​ <​code>​
-student@uso:​~/demos/usogit checkout master ​ +student@uso:/​home/dodels -l | grep terminus 
-Switched to branch '​master'​ +-rw-rw-r-x 1 dode student 0 oct 14 13:17 terminus 
-Your branch is up to date with '​origin/master'​. +student@uso:​/home/dode$ sudo chmod o-x terminus 
-student@uso:​~/demos/uso$ ls +student@uso:/​home/dode$ ls -l | grep terminus 
- README.md ​      ​lab02 ​  ​lab04 ​  ​lab09 ​  ​lab12 ​  ​tema2 ​  ​tema4 +-rw-rw-r-- 1 dode student 0 oct 14 13:17 terminus 
-'TW Warhammer' ​  ​lab03 ​  ​lab05 ​  ​lab10 ​  ​tema1 ​  tema3 +student@uso:/​home/dode$ sudo chmod u+x terminus 
-student@uso:​~/demos/uso$ git merge master cool_feature ​ +student@uso:/home/dodels -l | grep terminus 
-Updating 0b8c9aa..0bfd61e +-rwxrw-r-- 1 dode student 0 oct 14 13:17 terminus 
-Fast-forward +student@uso:/​home/​dode$ sudo chmod g+x terminus 
- cool_feature.txt ​| 1 + +student@uso:/​home/​dode$ ls -l grep terminus 
- ​1 ​file changed, 1 insertion(+) +-rwxrwxr-- ​dode student 0 oct 14 13:17 terminus 
- create mode 100644 cool_feature.txt +student@uso:/​home/​dode$ sudo chmod o+x terminus 
-student@uso:​~/demos/uso$ ls +student@uso:/​home/​dode$ ls -l | grep terminus 
- README.md ​      ​cool_feature.txt ​  ​lab03 ​  ​lab05 ​  ​lab10 ​  ​tema1 ​  tema3 +-rwxrwxr-x ​dode student 0 oct 14 13:17 terminus 
-'TW Warhammer' ​  ​lab02 ​             lab04   ​lab09 ​  ​lab12 ​  ​tema2 ​  tema4+student@uso:/​home/​dode$ sudo chmod o+w terminus 
 +student@uso:/​home/​dode$ ls -l | grep terminus 
 +-rwxrwxrwx 1 dode student 0 oct 14 13:17 terminus 
 +student@uso:/​home/dode$ sudo chmod g-w terminus 
 +student@uso:/home/dode$ ls -l | grep terminus 
 +-rwxr-xrwx 1 dode student 0 oct 14 13:17 terminus 
 +student@uso:/​home/​dode$ sudo chmod a-w terminus 
 +student@uso:/​home/​dode$ ls -l | grep terminus 
 +-r-xr-xr-x 1 dode student 0 oct 14 13:17 terminus
 </​code>​ </​code>​
- +*/
-  ​În cazul în care lucrăm cu un repository remote, comanda git pull rulată dintr-un branch al repository-ului local va crea în repository-ul „părinte” o copie a acestui branch, care va conține istoricul commit-urilor de pe branch-ul local. În acest caz, procesul de merge cu branch-ul master va fi probabil gestionat prin platforma online care găzduiește proiectul (ex. Github). +
- +
-Pentru a înțelege mai bine modul de lucru cu git, puteți parcurge următorul tutorial: https://​gitimmersion.com/​ +
- +
- +
- +
- +
- +
- +
- +
uso/cursuri/curs-04.1635516250.txt.gz · Last modified: 2021/10/29 17:04 by ebru.resul
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0