Laborator 02 - Instalarea și utilizarea aplicațiilor

Pornirea și oprirea aplicațiilor

Pe un sistem se găsesc mai multe aplicații. Utilizatorul pornește aplicația potrivită pentru o nevoie pe care o are. De exemplu, pornește un browser web pentru a accesa Wikipedia sau pornește aplicația Spotify pentru a asculta muzică.

Utilizatorul poate porni aplicațiile folosind interfața grafică (Graphical User Interface, GUI) sau interfața în linia de comandă (Command Line Interface, CLI). În cazul interfeței grafice pornirea se face folosind elementele grafice (mouse, meniuri, iconuri de desktop). În cazul interfeței în linia de comandă pornirea se face introducând și rulând comenzi.

Pornirea și oprirea aplicațiilor grafice

Reminder: Pornirea aplicațiilor din interfața grafică

Am prezentat informații despre pornirea și oprirea aplicațiilor grafice în basic_start_stop_apps. Am văzut că o aplicație grafică poate fi pornită în 3 moduri:

  1. Folosind iconuri în interfața grafică. Iconurile se găsesc direct pe desktop sau în barele de desktop sau în meniurile și ferestrele mediului grafic. Plasarea iconurilor depinde de distribuția folosită.
  2. Folosind un prompt de tip application launcher. Acest prompt este lansat, în Linux, de combinația de taste Alt+F2. În Windows se folosește combinația de taste Windows+r. În macOS se folosește combinația de taste Command+Space. La acest prompt se introduce șirul (comanda) care identifică aplicația.
Exerciții
  1. Porniți o aplicație browser de fișiere (file browser) folosind Alt+F2. În Ubuntu 18.04 GNOME browserul de sistem de fișiere este Nautilus, identificat de șirul (comanda) nautilus.
  2. Porniți aplicația ls (de listare a conținutului unui director în linia de comandă (CLI)) folosind Alt+F2. Observați că nu este afișat nimic. Acest lucru se întâmplă pentru că aplicația ls nu are interfața grafică; are sens să fie rulată doar din linia de comandă.

Pornirea unei aplicații grafice folosind linia de comandă

Pe lângă cele două moduri de mai sus, pornirea unei aplicații grafice poate fi realizată din linia de comandă (CLI), folosind șirul care identifică aplicația, la fel ca în cazul folosirii Alt+F2. Pentru a porni o aplicație grafică din linia de comandă, avem nevoie de un terminal. Terminalul este un dispozitiv în care rulează o aplicație numită shell, care este interpretorul comenzilor introduse. Pe parcursul acestui capitol și a întregii cărți vom folosi interschimbabil shell și terminal.

Pornim o aplicație de terminal folosind fie iconul corespunzător, fie Alt+F2 urmat de șirul (comanda) gnome-terminal. În aplicația de terminal, pornim aplicația Firefox scriind șirul (comanda) firefox, urmat de apăsarea tastei Enter, ca în imaginea de mai jos. Aplicația Firefox va porni.

Ponirea Firefox din linia de comandă

În acest moment, în aplicația de terminal nu mai putem introduce noi comenzi pentru a porni alte aplicații. Va trebui să oprim aplicația Firefox. Oprim aplicația Firefox din mediul grafic (click pe butonul de închidere a ferestrei sau folosirea combinației de taste Alt+F4) sau din terminal, folosind combinația de taste Ctrl+c.

Exerciții
  1. La fel ca mai sus, porniți aplicația LibreOffice folosind linia de comandă.

Menținerea accesului la terminal

Atunci când pornim o aplicație grafică din linia de comandă, aplicația “acaparează” terminalul; nu mai putem introduce noi comenzi pentru a porni alte aplicații. Putem rezolva acest lucru prin trecerea aplicației grafice în backgroundul shellului. Adică urmăm pașii:

  • Pornim, în terminal, aplicația grafică (Firefox) folosind comanda firefox. Spunem că aplicația rulează în foreground și controlează terminalul; adică nu permite rularea unei alte comenzi.
  • În terminal, folosim combinația de taste Ctrl+z pentru a trece aplicația în background. În acest moment, avem din nou promptul terminalului, ca mai jos:
student@uso:~$ firefox
^Z
[1]+  Stopped                 firefox
  • Dar aplicația este acum “înghețată”, nu mai răspunde. Spunem că este suspendată.
  • Folosim, în terminal, comanda bg, ca mai jos:
student@uso:~$ bg
[1]+ firefox &
  • Astfel am “dezghețat” aplicația, care acum este interactivă.

În acest mod, avem aplicația Firefox în rulare și avem acces la terminal să introducem noi comenzi.

Exercițiu: Folosiți pașii de mai sus pentru a porni și aplicația LibreOffice din linie de comandă și să mențineți accesul la terminal.

Vom afla mai multe despre background și suspendarea proceselor în app_install_run_signal.

Pornirea aplicațiilor în linia de comandă

Pornirea de aplicații CLI folosind linia de comandă

Aplicațiile CLI, numite și utilitare, sunt proiectate pentru a fi pornite și folosite în linia de comandă. Cel mai adesea numim aplicațiile în linie de comandă utilitare sau, pur și simplu, comenzi. Scriem numele utilitarului / comenzii într-un terminal și utilitarul va fi pornit1). De exemplu, dacă dorim să afișăm utilizatorii prezenți în sistem, pornim o aplicație de terminal și folosim utilitarul who:

student@uso:~$ who
student  :0           2020-09-04 17:42 (:0)
student  pts/0        2020-09-19 15:57 (192.168.56.1)

Sau, dacă dorim să vedem câtă memorie avem (disponibilă) în sistem, folosim utilitarul free:

student@uso:~$ free
              total        used        free      shared  buff/cache   available
Mem:        2040972     1025716       83824       32916      931432      794692
Swap:        777300       37056      740244
Exerciții
  1. Porniți utilitarul ls (de listare a conținutului unui director în linia de comandă (CLI)) folosind linia de comandă.
  2. Porniți utilitarul df (de afișare a spațiului ocupat pe disc) folosind linia de comandă.

Argumente în linia de comandă

Pentru a porni aplicații / utilitare în linia de comandă, folosim comenzi care conțin numele utilitarului urmate, eventual, de argumente. Astfel, pentru a porni utilitarele ls sau ps, folosim comenzi precum cele de mai jos, simple sau cu argumente:

student@uso:~$ ls
Desktop  Documents  Downloads  examples.desktop  Music  Pictures  Public  snap  Templates  uso.git  Videos  vm-actions-log.txt
student@uso:~$ ls -l
total 60
drwxr-xr-x  2 student student 4096 Aug  6  2018 Desktop
drwxr-xr-x  3 student student 4096 Aug 20  2018 Documents
drwxr-xr-x  2 student student 4096 Aug  6  2018 Downloads
-rw-r--r--  1 student student 8980 Aug  6  2018 examples.desktop
drwxr-xr-x  2 student student 4096 Aug  6  2018 Music
drwxr-xr-x  2 student student 4096 Aug  8 11:52 Pictures
drwxr-xr-x  2 student student 4096 Aug  6  2018 Public
drwxr-xr-x  3 student student 4096 Aug  8 09:02 snap
drwxr-xr-x  2 student student 4096 Aug  6  2018 Templates
drwxr-xr-x 14 student student 4096 Aug 20  2018 uso.git
drwxr-xr-x  2 student student 4096 Aug  6  2018 Videos
-rw-r--r--  1 student student 4827 Aug 21  2018 vm-actions-log.txt
student@uso:~$ ps
  PID TTY          TIME CMD
 3370 pts/4    00:00:00 bash
 7979 pts/4    00:00:00 ps
student@uso:~$ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
student   3370  3369  0 08:55 pts/4    00:00:00 -bash
student   7982  3370  0 13:17 pts/4    00:00:00 ps -f

Oprirea forțată a aplicațiilor în linia de comandă

Se poate întâmpla ca o aplicație în linia de comandă să ruleze pentru prea mult timp sau să se blocheze. Caz în care dorim să o oprim. Soluția de avarie este să închidem fereastra de terminal, lucru care, de obicei, închide și aplicația. Soluția mai bună este să închidem doar aplicația. Acest lucru îl facem folosind combinația de taste Ctrl+c care oprește aplicația care rulează în terminal2). Acest lucru poate fi realizat și pentru aplicații grafice, așa cum am văzut mai sus.

De exemplu, dacă folosim comanda sleep 100 care se va bloca pentru 100 de secunde, o vom opri folosind Ctrl+c ca mai jos:

student@uso:~$ sleep 100
^C
student@uso:~$

Exercițiu: Folosiți următoarea comandă care pornește o aplicație care durează mult și opriți-o forțat:

  • watch ps: pentru a monitoriza procesele din terminalul curent

Note de subsol

Rularea aplicațiilor

Pornirea unei aplicații înseamnă că se alocă resursele sistemului (procesor, memorie, dispozitive de intrare/ieșire) pentru a rula aplicația. O aplicație care rulează, adică folosește resursele sistemului pentru a executa cod și a prelucra date, se numește proces. Atunci când pornim o aplicație, se creează un proces; atunci când oprim aplicația, sau când își încheie execuția, ne referim la încheierea execuției procesului.

Procesul este pornit dintr-un fișier executabil care conține codul (instrucțiunile) și datele aplicației. Fișierul executabil mai este numit și imaginea procesului. Fișierul executabil este un program. Spunem că procesul este un program aflat în execuție3).

Identificarea fișierului executabil al unei aplicații

Fișierul executabil al unei aplicații este încărcat în memoria sistemului și codul este executat; din acest moment spunem că aplicația rulează.

De exemplu aplicația Firefox (browser web) are asociat fișierul executabil /usr/bin/firefox; aplicația Vim (editor) are asociat fișierul executabil /usr/bin/vim; aplicația LibreOffice (suită office) are asociat fișierul executabil /usr/bin/libreoffice. Putem identifica fișierul executabil al unei aplicații folosind comanda which, urmată de comanda pentru pornirea aplicației ca mai jos:

student@uso:~$ which firefox
/usr/bin/firefox
student@uso:~$ which vim
/usr/bin/vim
student@uso:~$ which libreoffice
/usr/bin/libreoffice

Exercițiu: Identificați fișierul executabil al aplicațiilor / utilitarelor Shutter, Gedit, ls, df.

Investigarea proceselor

Un sistem de operare are de obicei mai multe aplicații care rulează, deci mai multe procese. Prea multe procese pot duce la o încărcare prea mare a sistemului, încetinind sau împiedicând funcționarea acestuia. Anumite procese pot consuma excesiv resurse afectând celelalte procese. De aceea, este util să investigăm procesele unui sistem și consumul de resurse al acestora.

Listarea proceselor

La nivel mai degrabă didactic, putem vizualiza lista de procese a unui sistem. Utilitarul ps afișează procesele curente în sistem (un snapshot al proceselor sistemului). La o rulare simplă, utilitarul ps afișează procesele din terminalul curent:

student@uso:~$ ps
  PID TTY          TIME CMD
14897 pts/4    00:00:00 bash
14910 pts/4    00:00:00 ps

În terminalul curent (indicat de coloana TTY din afișare, adică terminalul pts/4) sunt două procese:

  1. procesul shell (bash) în care rulăm comenzi care creează noi procese;
  2. procesul de listare (ps) pe care tocmai l-am lansat prin comanda ps; practic se afișează pe sine

Pentru a afișa toate procesele sistemului folosim opțiunea -e (pentru everything) a utilitarului ps ca în comanda de mai jos:

student@uso:~$ ps -e
  PID TTY          TIME CMD
    1 ?        00:00:19 systemd
    2 ?        00:00:00 kthreadd
    4 ?        00:00:00 kworker/0:0H
    6 ?        00:00:00 mm_percpu_wq
    7 ?        00:00:09 ksoftirqd/0
    8 ?        00:00:06 rcu_sched
    9 ?        00:00:00 rcu_bh
   10 ?        00:00:00 migration/0
   11 ?        00:00:00 watchdog/0
[...]

Ierarhia proceselor

Un proces este creat de un alt proces. De exemplu, mai sus, procesul ps a fost creat dintr-un proces shell (bash). Procesul shell a fost, la rândul său, creat de un alt proces. Un proces are un proces părinte; un proces poate avea mai multe procese copil. Procesele sunt, așadar, parte dintr-o ierarhie.

Pentru a vizualiza ierarhia de procese, folosim utilitarul pstree:

student@uso:~$ pstree
systemd-+-ModemManager---2*[{ModemManager}]
        |-NetworkManager-+-2*[dhclient]
        |                `-2*[{NetworkManager}]
        [...]
        |-acpid
        |-avahi-daemon---avahi-daemon
        |-boltd---2*[{boltd}]
        |-colord---2*[{colord}]
        |-cron
        [...]
        |-systemd-+-(sd-pam)
        |         |-gnome-terminal--+-bash
        |         |                 `-3*[{gnome-terminal-}]
        [...]

În vârful ierarhiei de procese este procesul numit clasic init. În listarea de mai sus vedem că procesul din vârful ierarhiei este systemd. systemd4) este implementarea de init prezentă în cea mai mare parte a distribuțiilor Linux curente5).

Atributele proceselor

Utilitarul ps are o afișare tabelară a proceselor, fiecare coloană corespunzând unui atribut al proceselor. La o rulare simplă, așa cum am văzut mai sus sunt afișate patru coloane:

  • PID: reprezentând identificatorul procesului
  • TTY: terminalul în care rulează procesul (apare ? pentru un proces care nu are terminal - în general procesele de tip serviciu, numite și procese daemon nu au terminal)
  • TIME: timpul de rulare pe procesor (în ore, minute, secunde)
  • CMD: numele imaginii de proces (adică numele executabilului / programului din care a fost creat procesul)
Identificarea unui proces

PID (Process Id) este atributul esențial al procesului, un index care identifică procesul la nivelul sistemului. Un proces este identificat după PID, nu după numele executabilului (CMD). Putem avea mai multe procese create din același executabil, fiecare proces având PID-ul său6).

Pentru a verifica existența mai multor procese, o să creăm mai multe procese shell. Pentru început, deschidem mai multe sesiuni de terminal, folosind, de exemplu, Alt+F2 în mediul grafic și introducând comanda gnome-terminal în promptul creat. Apoi vizualizăm doar procesele create din executabilul bash rulând comanda:

student@uso:~$ ps -e | grep bash
 2181 pts/1    00:00:00 bash
 2194 pts/2    00:00:00 bash
 2205 pts/3    00:00:00 bash
14750 pts/0    00:00:00 bash
14897 pts/4    00:00:00 bash

Obținem un rezultat precum cel de mai sus. Sunt cinci procese, toate create din executabilul bash, cu cinci PID-uri diferite: 2181, 2194, 2205, 14705, 14879.

Afișarea atributelor unui proces

Un proces are mai mult decât cele patru atribute afișate la o rulare simplă a utilitarului ps. Pentru a afișa mai multe atribute, folosim opțiunea -f (de la full format) sau opțiunea -F (de la extra full format), ca mai jos:

student@uso:~$ ps -f
UID        PID  PPID  C STIME TTY          TIME CMD
student  14897 14896  0 17:12 pts/4    00:00:00 -bash
student  15026 14897  0 17:46 pts/4    00:00:00 ps -f
 
student@uso:~$ ps -F
UID        PID  PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
student  14897 14896  0  6056  5136   0 17:12 pts/4    00:00:00 -bash
student  15027 14897  0  9728  3340   0 17:46 pts/4    00:00:00 ps -F

Desigur, putem să combinăm aceste opțiuni cu opțiunea -e de afișare a tuturor proceselor:

student@uso:~$ ps -ef
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 Aug18 ?        00:00:19 /lib/systemd/systemd --system --deserialize 39
root         2     0  0 Aug18 ?        00:00:00 [kthreadd]
root         4     2  0 Aug18 ?        00:00:00 [kworker/0:0H]
root         6     2  0 Aug18 ?        00:00:00 [mm_percpu_wq]
root         7     2  0 Aug18 ?        00:00:09 [ksoftirqd/0]
root         8     2  0 Aug18 ?        00:00:06 [rcu_sched]
root         9     2  0 Aug18 ?        00:00:00 [rcu_bh]
root        10     2  0 Aug18 ?        00:00:00 [migration/0]
root        11     2  0 Aug18 ?        00:00:00 [watchdog/0]
[...]

Opțiunile -f și -F afișează și alte atribute ale procesului, precum:

  • UID: numele utilizatorului care deține procesul
  • PPID: identificatorul procesului părinte
  • C: procentul de procesor ocupat
  • STIME: timpul de pornire (start time)
  • RSS: memoria RAM ocupată (resident set size)

Astfel de atribute sunt utile pentru a vedea care sunt procesele cele mai consumatoare de resurse (de exemplu procesor sau memorie).

Monitorizarea proceselor

Utilitarul ps afișează procesele și atributele acestora la un moment dat, un snapshot al proceselor sistemului. De multe ori ne interesează și evoluția în timp a proceselor: schimbarea în consumul de resurse, apariția de noi procese. Adică să monitorizăm procesele. Monitorizarea proceselor înseamnă obținerea periodică de informații despre procese.

Evident, un mod simplu de monitorizare este să rulăm utilitarul ps periodic. Există, însă, utilitare dedicate pentru monitorizare.

Monitorizarea folosind top

Utilitarul top este utilitarul de bază de monitorizare a proceselor în lumea Linux. Este echivalent Task Manager din Windows. Rularea top duce la afișarea, în terminal, a proceselor sistemului și reîmprospătarea informației periodic (implicit 2 secunde). Imaginea de mai jos este o fereastră de terminal cu rularea top:

Utilitarul top

top afișează informații periodice despre procese și despre starea sistemului: consum de procesor, de memorie. La fiecare perioadă (implicit 2 secunde) informația afișată este reîmprospătată.

Ieșirea din utilitarul top se realizează folosind tasta q7).

Oprirea proceselor. Semnale

Folosirea semnalelor pentru omorârea proceselor

Ca să terminăm forțat (omorâm) un proces folosim semnale. Un semnal este o notificare trimisă de utilizator sau de sistemul de operare către un proces. Nu este obligatoriu ca un semnal să omoare procesul care îl primește, dar este cel mai des întâlnit comportament, și principala utilizare a semnalelor.

Ca să trimitem un semnal unui proces trebuie să știm PID-ul acestuia și folosim utilitarul kill urmat de PID-ul procesului. Adică, dacă pornim într-un terminal un proces sleep folosind comanda de mai jos:

student@uso:~$ sleep 60

în alt terminal vom afla PID-ul său (folosind pidof):

student@uso:~$ pidof sleep
9486

și apoi îl vom omorî (folosind kill):

student@uso:~$ kill 9486

Comanda kill primește ca argument PID-ul procesului de omorât, adică 9486.

Verificăm din nou dacă există un proces sleep folosind pidof:

student@uso:~$ pidof sleep
student@uso:~$

Vedem din output că nu mai există procesul sleep, deci a fost omorât.

În terminalul inițial, în care am rulat comanda sleep, apare un mesaj care indică omorârea procesului:

student@uso:~$ sleep 60
Terminated
Folosirea semnalului SIGKILL

În anumite situații, folosirea utilitarului kill nu duce la omorârea procesului țintă. În această situație, vom transmite procesului țintă semnalul SIGKILL care este garantat că va omorî procesul. Adică, amuzant spus, SIGKILL este o bombă nucleară, un glonț care trece prin vesta anti-glonț, cianură de potasiu. Astfel, dacă pornim pe un terminal un proces sleep la fel ca mai sus, în alt terminal vom omorî procesul folosind semnalul SIGKILL ca mai jos:

student@uso:~$ pidof sleep
9834
student@uso:~$ kill -KILL 9834
student@uso:~$ pidof sleep
student@uso:~$

Secvența de comenzi este similară secvenței anterioare cu excepția folosirii opțiunii -KILL la comanda kill care înseamnă trimiterea semnalului SIGKILL.

Efectul este similar dar, pe terminalul în care am rulat comanda sleep, apare un mesaj de forma:

student@uso:~$ sleep 60
Killed

Mesajul Killed este afișat atunci când un proces primește semnalul SIGKILL.

Exerciții: Oprirea proceselor

  • Porniți în trei terminale diferite trei procese sleep. Omorâți-le pe toate cu o singură comandă. PID-ul shellului curent poate fi aflat folosind comanda:
student@uso:~$ echo $$
9477
  • Omorâți shellul curent.
  • Porniți o aplicație shutter. Porniți o aplicație libreoffice. Omorâți aceste procese folosind utilitarul kill.

Note de subsol

Instalarea și dezinstalarea aplicațiilor

Instalarea unui sistem de operare duce la instalarea unui set de bază de aplicații pe acel sistem. Acest set este minimal; dacă dorim funcționalități peste acest set, instalăm noi aplicații. Instalarea unei aplicații duce la adăugarea în sistem a unui fișier executabil (sau mai multe) pentru rularea aplicației și eventuale fișiere de configurare, de documentare și de stocare a datelor aplicației. Instalarea unei aplicații presupune obținerea unui fișier specializat numit pachet software și apoi despachetarea acestuia în fișierele specifice aplicației. Un pachet este efectiv o arhivă cu fișierele specifice aplicației. După instalarea aplicației / pachetului, aceasta poate fi pornită și rulată de utilizator pentru nevoile sale.

Instalarea unei aplicații dintr-un pachet software este prezentată schematic mai jos:

De partea cealaltă, dezinstalarea unei aplicații / unui pachet înseamnă ștergerea din sistem a fișierelor specifice. După dezinstalarea aplicației, aceasta nu mai poate fi pornită, nemaiexistând fișierul executabil corespunzător sau celelalte fișiere specifice.

Acțiunile de instalare, dezinstalare și configurare a pachetelor într-un sistem sunt numite colectiv gestiunea pachetelor (software) ((software) package management).

În Linux, aplicațiile sunt, în general, instalate prin intermediul unei aplicații dedicate numite manager de pachete (software) ((software) package manager sau (software) package management system). În distribuțiile Linux bazate pe Debian / Ubuntu, managerul de pachete oferă utilitarele apt și dpkg (și altele) și aplicații precum Synaptic. În distribuțiile Linux bazate pe RedHat / Fedora, managerul de pachete oferă utilitarele yum sau dnf sau rpm (și altele) precum PackageKit.

Mașina virtuală de suport folosește o distribuție Ubuntu. De aceea ne vom concentra doar pe distribuțiile bazate pe Debian / Ubuntu și deci, pe utilitarele apt și dpkg.

Gestiunea pachetelor din interfața grafică

Pe lângă utilitarele implicite în linia de comandă, un manager de pachete oferă adesea o interfață grafică. Pe o instalare implicită de Ubuntu, aplicația Ubuntu Software (GNOME Software) permite interacțiunea cu managerul de pachete.

Această aplicație poate fi pornită din meniurile grafice sau cu ajutorul comenzii ubuntu-software sau gnome-software (folosind, de exemplu, combinația de taste Alt+F2).

Dacă pornim aplicația Ubuntu Software, vom obține o fereastră precum cea din imaginea de mai jos:

Ubuntu Software

Această fereastră are butoane care permit gestiunea pachetelor software:

  • All: acces la lista completă de pachete disponibile pentru a fi instalate
  • Installed: lista de pachete deja instalate
  • Updates: lista de pachete care pot fi actualizate
  • un buton de căutare (în dreapta): căutarea pachetelor dorite

În continuare vom prezenta acțiunile de instalare și dezinstalare a unui pachet, atât folosind interfața grafică a managerului de pachete, cât și interfața în linia de comandă.

Instalarea unei aplicații cunoscute

Cel mai adesea, dorim rapid să avem o aplicație care să ne rezolve o nevoie. Să presupunem că avem nevoia să lucrăm cu fișiere în format SVG (Scalable Vector Graphics). Pentru aceasta vom instala aplicația Inkscape.

Instalarea din interfața grafică

În interfața grafică, folosim butonul de căutare și introducem șirul inkscape și obținem o imagine precum cea de mai jos:

Instalarea Inkscape

În imaginea de mai sus observăm că pachetul este deja instalat. Dacă nu ar fi fost instalat, am fi accesat intrarea din imagine și apoi am fi folosit butonul Install.

Instalarea din linia de comandă

În linia de comandă, folosim utilitarul apt pentru a instala pachetul inkscape:

student@uso:~$ sudo apt update
[sudo] password for student:
Hit:1 http://ro.archive.ubuntu.com/ubuntu bionic InRelease
[...]
 
student@uso:~$ sudo apt install inkscape
[...]

Comanda sudo apt update actualizează informațiile despre pachete; vom clarifica mai jos rolul său, inclusiv de ce este recomandată rularea sa (fără a fi obligatorie). Comanda sudo apt install inkscape instalează efectiv pachetul numit inkscape, care va instala aplicația Inkscape. Instalarea pachetelor în sistem este o acțiune privilegiată, care necesită permisiuni administrative. Din acest motiv cele două comenzi de mai sus sunt prefixate de comanda sudo.

În acest moment, aplicația Inkscape este instalată și poate fi pornită.

Exercițiu: Porniți aplicația Inkscape în toate modurile descrise în secțiunea app_install_start_stop_gui.

Instalarea de noi aplicații

Instalarea VLC

Avem nevoie de un player video și știm că VLC este unul dintre cele mai folosite playere. Pentru a îl folosi pe sistem, instalăm pachetul vlc:

student@uso:~$ sudo apt install vlc
[sudo] password for student:
[...]
Do you want to continue? [Y/n] Y
[...]

Acum aplicația VLC este disponibilă în sistem.

Exercițiu: Porniți aplicația VLC în modurile descrise în app_install_start_stop_gui.

Mai sus nu am mai rulat comanda sudo apt update pentru că sistemul este deja actualizat de la instalarea pachetului inkscape.

Instalarea Glances

Pentru a monitoriza sistemul și procesele sistemului putem folosi utilitarele top sau htop. Utilitarul Glances rulează tot în linia de comandă și oferă o interfață mai complexă a sistemului, utilă mai ales pentru administratorii de sisteme. Instalăm pachetul glances:

student@uso:~$ sudo apt install glances
[...]
Do you want to continue? [Y/n] Y
[...]

Exercițiu: Porniți utilitarul în linia de comandă folosind comanda glances. Ieșirea din utilitar se face, la fel ca în cazul top și htop, folosind tasta q.

Exerciții de instalare de aplicații

Instalați și porniți următoarele pachete:

  • wikit: pachet care instalează utilitarului wikit (în linia de comandă) care obține informații din Wikipedia
  • gimp: pachet care instalează aplicația Gimp (cu interfață grafică), un editor de imagini

Puteți realiza instalarea din interfața grafică a managerului de pachete sau din interfața în linia de comandă.

Dezinstalarea aplicațiilor

Dacă nu mai folosim o aplicație și dorim să eliberăm spațiul ocupat pe disc, putem opta pentru a dezinstala o aplicație. Dezinstalarea înseamnă că toate fișierele corespunzătoare aplicației vor fi șterse de pe disc.

Acțiunea de dezinstalare este mai rară. Beneficiul principal al dezinstalării este eliberarea spațiului ocupat pe disc de fișiere corespunzătoare aplicației. Dar pentru că spațiul pe disc este suficient, apelăm mai rar la această acțiune.

La fel ca în cazul instalării, o aplicație poate fi instalată sau dezinstalată din interfața grafică a managerului de pachete sau din cea în linia de comandă. Dezinstalarea poate fi făcută din interfața în linia de comandă chiar dacă aplicația a fost instalată din interfața grafică și invers.

La fel ca în cazul instalării, acțiunea de dezinstalare este privilegiată.

Dezinstalarea din interfața grafică

Dezinstalarea din interfața grafică se face din tabul Installed al ferestrei managerului de pachete, ca în imaginea de mai jos:

Afișarea pachetelor instalate

Se folosește apoi butonul Remove pentru a porni dezinstalarea aplicației.

Sau se poate căuta respectiva aplicație și apoi se poate dezinstala, ca în imaginea de mai jos:

Dezinstalarea Inkscape

Dezinstalarea din linia de comandă

Dezinstalarea din linia de comandă se face cu o comandă precum:

student@uso:~$ sudo apt remove neofetch
[sudo] password for student:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  neofetch
0 upgraded, 0 newly installed, 1 to remove and 311 not upgraded.
After this operation, 365 kB disk space will be freed.
Do you want to continue? [Y/n] Y
(Reading database ... 199030 files and directories currently installed.)
Removing neofetch (3.4.0-1) ...
Processing triggers for man-db (2.8.3-2) ...

În comanda de mai sus, am dezinstalat pachetul neofetch. Comanda de dezinstalare (apt remove) a fost prefixată de comanda sudo pentru că este vorba de o acțiune privilegiată. La dezinstalare se cere confirmarea că dorim dezinstalarea pachetului.

În urma acestei acțiuni, fișierele corespunzătoare pachetului neofetch au fost șterse, incluzând fișierul executabil corespunzător. Acum nu mai avem acces la utilitar și comanda neofetch va eșua.

Comanda apt remove șterge fișierele corespunzătoare pachetului, dar lasă anumite fișiere de configurare modificate de utilizator. Aceasta pentru a permite ca o instalare ulterioară să refolosească vechea configurare. Dacă dorim ștergerea inclusiv a fișierelor de configurare modificate, folosim comanda:

student@uso:~$ sudo apt purge neofetch
[sudo] password for student:
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following packages will be REMOVED:
  neofetch*
0 upgraded, 0 newly installed, 1 to remove and 311 not upgraded.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] Y
(Reading database ... 198873 files and directories currently installed.)
Purging configuration files for neofetch (3.4.0-1) ...

Comanda de mai sus a șters fișierele de configurare pentru pachetul neofetch. Comanda apt purge poate fi folosită pentru a dezinstala pachete instalate, sau pentru a “curăța” (purge) pachete care au fost dezinstalate dar care mai au fișiere de configurare.

Exerciții de dezinstalare

Dezinstalați două dintre pachetele pe care le-ați instalat mai sus. Dezinstalați primul pachet folosind interfața grafică a managerului de pachete. Dezinstalați al doilea pachet folosind interfața în linia de comandă a managerului de pachete.

Actualizarea aplicațiilor

O aplicație este, în general, dezvoltată în continuu. Dezvoltatorii aplicației adaugă noi funcționalități, sau rezolvă probleme de funcționare sau de securitate, sau fac aplicația mai robustă sau mai eficientă8).

La fel ca în cazul instalării și dezinstalării, actualizarea aplicațiilor duce la modificarea fișierelor din sistem, deci este o acțiune privilegiată.

Actualizarea individuală a unei aplicații

Dacă dorim actualizarea individuală a unui pachet, putem folosi interfața grafică, navigând până la zona specifică aplicației.

Altfel, putem folosi o comandă precum:

student@uso:~$ sudo apt install inkscape
[sudo] password for student:
Reading package lists... Done
Building dependency tree
Reading state information... Done
inkscape is already the newest version (0.92.3-1).
0 upgraded, 0 newly installed, 0 to remove and 311 not upgraded.

Când comanda apt install primește ca argument un pachet deja instalat, va verifica dacă există o versiune actualizată a acestuia. În cazul de mai sus, versiunea instalată a pachetului inkscape (0.92.3-1) este cea mai nouă și nu este nevoie de actualizare.

Actualizarea tuturor aplicațiilor

Cel mai adesea, un utilizator va opta pentru actualizarea tuturor aplicațiilor sistemului, sau pe scurt, pentru actualizarea sistemului. Acest lucru se întâmplă și pentru că sistemul notifică periodic utilizatorul de prezența unor versiuni noi de aplicații.

Când este cazul, utilizatorul poate folosi interfața grafică sau sau cea în linia de comandă a managerului de pachete pentru actualizarea sistemului. De obicei, utilizatorul va folosi interfața grafică în momentul primirii unei notificări.

Pentru actualizarea sistemului din interfața în linia de comandă, vom folosi o comandă precum:

student@uso:~$ sudo apt update
[...]
student@uso:~$ sudo apt upgrade
[...]
311 upgraded, 4 newly installed, 0 to remove and 0 not upgraded.
Need to get 0 B/301 MB of archives.
After this operation, 100 MB of additional disk space will be used.
Do you want to continue? [Y/n] Y
[...]

Folosind comanda apt upgrade actualizăm toate aplicațiile în sistem9). Este recomandat să actualizăm informațiile interne despre pachetele sistemului folosind comanda apt update.

Bune practici și greșeli comune

Acțiuni neinteractive

Atunci când instalăm, dezinstalăm sau actualizăm pachete în linia de comandă, utilitarul apt solicită confirmare pentru executarea acțiunii. Trebuie să introducem la tastatură Y (pentru Yes) sau doar să apăsăm Enter la un prompt precum cel de mai jos10):

Do you want to continue? [Y/n] Y

Această confirmare necesită intervenția utilizatorului. Utilizatorul poate opta să nu mai fie cerută confirmare; sau poate să considere adăugarea unei comenzi într-un script neinteractiv. Pentru aceasta, se poate folosi opțiunea -y la comandă ca mai jos:

student@uso:~$ sudo apt install -y neofetch
student@uso:~$ sudo apt remove -y neofetch
student@uso:~$ sudo apt upgrade -y

Folosirea opțiunii -y la oricare dintre comenzile de instalare, dezinstalare sau actualizare de pachete va duce la executarea acelei acțiuni în mod neinteractiv, fără nevoia de confirmare din partea utilizatorului.

Acțiunile de instalare, dezinstalare și actualizare de pachete pot duce la efecte nedorite precum dezinstalarea unei aplicații existente sau instalarea unui număr prea mare de aplicații dependente. De aceea, opțiunea -y trebuie folosită cu grijă și evitată în momentul în care efectuăm operații critice.

Note de subsol

Exerciții: Instalarea și gestiunea aplicațiilor

Exercițiile de mai jos presupun instalarea unor aplicații. Atunci când instalați aplicații, încercați să vedeți dacă sunt prezente și să le instalați în ordine:

  1. din depozitul standard al distribuției (folosind apt)
  2. folosind Snap
  3. manual, de pe site-ul furnizorului aplicației

De avut în vedere că dificultatea instalării este sporită pentru instalarea manuală a unei aplicații, de pe site-ul furnizorului aplicației.

OBS

Instalați OBS (Open Broadcaster Software). OBS este o soluție pentru înregistrări video și streaming. Porniți OBS după instalare.

Mattermost

Instalați Mattermost. Mattermost este o alternativă open source self-hosted la Slack. Porniți Mattermost după instalare. Nu veți putea folosi Mattermost în absența unui server de Mattermost.

Dropbox

Instalați clientul Dropbox.

Ghidra

Instalați Ghidra. Porniți Ghidra după instalare.

Cuprins

1) Spre deosebire de scenariul folosirii Alt+F2, când folosim aplicații CLI în linia de comandă, mesajele vor fi vizibile. Acest lucru se întâmplă pentru că linia de comandă înseamnă existența unui terminal unde putem vizualiza mesajele.
2) Pentru anumite aplicații combinația de taste Ctrl+c poate să nu funcționeze. În acest caz putem folosi combinația de taste Ctrl+\, mai puternică. Dacă nici Ctrl+\ nu funcționează, va trebui să trimitem aplicației un semnal mai puternic care să o oprească. Vom discuta despre semnale în app_install_run_signal.
3) Momentul creării unui proces dintr-un fișier executabil, prin încărcarea codului și datelor fișierului executabil în memorie, se numește load-time. Rularea procesului și folosirea resurselor sistemului se numește run-time.
5) Procesul init va exista în permanență în vârful ierarhiei de procese, indiferent de faptul că se va numi systemd, init, upstart sau altfel.
6) Este impropriu să spunem “procesul bash”; corect este “un proces creat din programul / executabilul bash” sau “procesul cu PID-ul XY”. Cu toate acestea vom folosi în general expresia “procesul bash” pentru că reiese din context despre ce proces este vorba.
7) top este un utilitar interactiv. Adică în timpul rulării sale utilizatorul poate interacționa cu procesele sau poate modifica informațiile afișate. De exemplu, folosirea tastei M într-o rulare top afișează procesele sortate după consumul de memorie. Un sumar al comenzilor interactive din top se obține folosind tasta ?.
8) Aducerea unei aplicații la o versiune mai nouă (update sau upgrade) are plusuri și minusuri. Avantajul este că noua versiune va avea cele mai noi funcționalități și va avea rezolvate probleme vechi de configurare. Dezavantajul este că noua versiune va fi mai puțin folosită și deci mai puțin stabilă, cu posible probleme noi de funcționare. În general este recomandat ca aplicațiile sistemului să fie actualizate (up-to-date) cu versiuni care au îmbunătățiri de funcționare sau securitate (security updates). Dacă se optează pentru cea mai recentă versiune a aplicației (posibil mai puțin stabilă), trebuie cântărit beneficiul adus de noile funcționalități față de posibilele probleme de funcționare. De obicei un utilizator obișnuit va opta pentru cea mai nouă versiune, fiind interesat în primul rând de cele mai noi funcționalități. Un administrator de sistem va opta pentru versiunile mai stabile care asigură o robustețe ridicată a sistemului.
9) Comanda apt upgrade face actualizare conservatoare a sistemului. Dacă un anumit pachet ar fi dezinstalat de acțiunea de actualizare a sistemului, pachetul nu va fi atins de managerul de pachete. Dacă dorim o actualizare completă a sistemului, incluzând dezinstalarea anumitor pachete (pentru că sunt incompatibile cu alte apchete), vom folosi comanda:
student@uso:~$ sudo apt full-upgrade
10) De fapt, atunci când ni se prezintă un prompt de forma [Y/n] apăsarea tastei Enter este echivalentă cu introducerea tastei marcate cu literă mare (aici Y). Dacă, de exemplu, ar fi fost un prompt de forma [y/N], apăsarea tastei Enter era echivalentă cu introducerea tastei N.
uso/laboratoare/ac/laborator-02.txt · Last modified: 2020/10/27 19:01 by ioana_maria.culic
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