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.
Am prezentat informații despre pornirea și oprirea aplicațiilor grafice în Laboratorul 1: Acomodarea în Linux
. Am văzut că o aplicație grafică poate fi pornită în 2 moduri:
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.Alt+F2
. În Ubuntu 22.04 GNOME browserul de sistem de fișiere este Nautilus, identificat de șirul (comanda) nautilus
.gnome-control-center
, folosind Alt+F2
.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ă.
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 că î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.
Î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
.
nautilus
.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:
firefox
. Spunem că aplicația rulează în foreground și controlează terminalul; adică nu permite rularea unei alte comenzi.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
bg
, ca mai jos:student@uso:~$ bg [1]+ firefox &
Î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 Settings din linie de comandă și să mențineți accesul la terminal.
Rularea aplicațiilor
.
Porniți aplicațiile grafice:
gedit
), editorgnome-calculator
), calculator basicnautilus trash://
), coș de gunoiPorniți fiecare aplicație în două moduri:
Alt+F2
.
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
ls
(de listare a conținutului unui director în linia de comandă (CLI)) folosind linia de comandă.df
(de afișare a spațiului ocupat pe disc) folosind 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
Utilitarele ls
și ps
, pe care le-am folosit mai sus, pornesc, rulează, afișează informații utilizatorului în terminal și apoi se opresc. Alte utilitare în linia de comandă sunt interactive. Adică folosesc date introduse de utilizator și își încheie execuția doar după introducerea acestor date sau la comanda utilizatorului.
De exemplu, utilitarul less
, folosit pentru afișarea paginată a conținutului unui fișier, este interactiv. Îl folosim ca mai jos:
student@uso:~$ less /etc/services
O dată pornit utilitarul, putem controla afișarea sa folosind tastele săgeți sau alte combinații de taste precum Ctrl+b
(pagină sus) sau Ctrl+f
(pagină jos). Pentru a opri utilitarul folosim tasta q
(quit) și obținem controlul terminalului pentru a introduce noi comenzi.
Exercițiu: Porniți în linia de comandă aplicația interactivă vim
pentru a edita fișierul ~/.bashrc
. Opriți aplicația folosind combinația de taste <Esc>:q!
urmată de Enter
.
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ătoarele comenzi care pornesc aplicații care durează mult și opriți-le forțat:
ls -R /usr
: pentru a afișa recursiv conținutul directorului /usr
watch ps
: pentru a monitoriza procesele din terminalul curentPornirea 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).
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 nano (editor de text) are asociat fișierul executabil /usr/bin/nano
. 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 nano /usr/bin/nano
Exercițiu: Identificați fișierul executabil al aplicațiilor / utilitarelor shutter
, gedit
, ls
, df
.
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.
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:
bash
) în care rulăm comenzi care creează noi procese;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 [...]
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
. systemd
4) este implementarea de init
prezentă în cea mai mare parte a distribuțiilor Linux curente5).
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 procesuluiTTY
: 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)
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
.
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 procesulPPID
: identificatorul procesului părinteC
: procentul de procesor ocupatSTIME
: 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).
Utilitarul htop
este un utilitar de monitorizare a proceselor în lumea Linux. Este echivalent Task Manager din Windows.
Monitorizarea proceselor este o activitate foarte importantă în administrarea unui sistem de calcul. Un proces care, intenționat sau nu, consumă abuziv resursele sistemului va duce la o proastă funcționare sau chiar la blocarea sistemului. De aceea, utilitarele de monitorizare a sistemului (și a proceselor) sunt diverse. Amintim:
iotop
: utilitar pentru monitorizarea consumului de I/O al proceselorsysstat
: o suită de utilitare pentru monitorizarea sistemului (procese, memorie, I/O, rețea)
Utilitarul htop
rulează în linia de comandă prin introducerea comenzii htop
și pornește, în terminal, o fereastră interactivă, ca în imaginea de mai jos:
htop
este, de asemenea, un utilitar interactiv, un sumar al comenzilor ce pot fi folosite fiind prezentat în bara de jos a ferestrei sale. De exemplu, așa cum vedem și în imaginea de mai sus, cu ajutorul tastei F6
putem alege un atribut după care să sortăm procesele.
Odată pornit, un proces rulează și consumă resursele sistemului. După ce execută codul din executabilul corespunzător, procesul își încheie execuția și eliberează resursele consumate. Dar anumite programe (de exemplu serverele) nu au un punct de oprire, ci rulează într-o buclă, teoretic la infinit. La fel, anumite programe (de exemplu un browser web) sunt interactive și își încheie execuția doar la acțiunea explicită a utilizatorului.
Deosebim astfel între următoarele tipuri de oprire a unui proces:
q
pentru a încheia un proces top
sau folosirea butonului x
dintr-o aplicație grafică pentru a încheia execuția acesteia.Ultimul punct din pasul de mai sus, numit și terminarea unui proces (sau, informal, omorârea unui proces) este realizat, în Linux, prin folosirea semnalelor.
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. Se folosesc mai multe terminale in paralel. 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
Î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
.
sleep
. Omorâți-le pe toate cu o singură comandă. PID-ul shellului curent poate fi aflat folosind comanda:student@uso:~$ echo $$ 9477
vim
. Porniți o aplicație htop
. Porniți o aplicație firefox
. Omorâți aceste procese folosind utilitarul kill
intr-o singura comanda.
Creați un fișier cpu_hog
cu următorul conținut:
#!/bin/bash ( nohup dd if=/dev/zero of=/dev/null bs=8M > /dev/null 2>&1 & )
Folosiți scriptul cpu_hog
pentru a porni un proces care consumă mult procesor. Îl porniți folosind o comandă de forma:
$ chmod +x cpu_hog $ ./cpu_hog
Scriptul cpu_hog
pornește un proces care execută o buclă infinită.
Observați, cu ajutorul comenzii htop
, că procesorul este încărcat. Identificați procesul cel mai consumator de resurse și omorâți-l (uitati-va dupa comanda care a declansat procesul). Observați, tot cu ajutorul comenzii htop
, că acum procesorul nu mai este încărcat.
chmod +x cpu_hog
pentru a putea executa scriptul cpu_hog
. NU trebuie să o dăm de fiecare dată când rulăm scriptul, o dată este suficient.
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.
apt
și dpkg
.
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.
Î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 Pornirea și oprirea aplicațiilor grafice
.
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 Pornirea și oprirea aplicațiilor grafice
.
sudo apt update
pentru că sistemul este deja actualizat de la instalarea pachetului inkscape
.
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
.
Instalați și porniți următoarele pachete:
gimp
: pachet care instalează aplicația Gimp (cu interfață grafică), un editor de imaginineofetch
: pachet care instalează utilitarul neofetch
(în linia de comandă), care afișează un sumar informativ despre sistemaudacity
: pachet care instalează aplicația Audacity (cu interfață grafică), un editor audioPuteți realiza instalarea din interfața grafică a managerului de pachete sau din interfața în linia de comandă.
În exemplele și exercițiile de mai sus am știut ce aplicație dorim să folosim și am instalat pachetul corespunzător. Numele pachetului este cel mai adesea același cu numele aplicației.
În anumite situații, însă, vom ști doar ce nevoie avem dar nu și ce aplicație să instalăm. Adică vom avea nevoi precum:
Pentru aceste nevoi vrem să căutăm o aplicație potrivită, să o instalăm și să o folosim.
Căutarea unei aplicații cu managerul de pachete este utilă atât pentru a căuta un pachet potrivit unei nevoi, cât și pentru a identifica ce pachet corespunde unei aplicații de care știm. De exemplu o aplicație descoperită prin Internet.
Față de căutarea în Internet, căutarea în managerul de pachete este avantajoasă pentru că va căuta doar în pachetele disponibile și instalabile în sistem cu ajutorul managerului de pachete. Este dezavantajoasă pentru că șirul de căutare nu este la fel de flexibil: în general se căută fix acel șir sau acea expresie (keyword). Există astfel un risc să nu localizăm cea mai potrivită aplicație pentru nevoia noastră, dacă folosim un șir nepotrivit.
În linia de comandă putem folosi șirul de căutare ca argument pentru comanda apt search
:
student@uso:~$ apt search e-book Sorting... Done Full Text Search... Done calibre/bionic,bionic 3.21.0+dfsg-1build1 all powerful and easy to use e-book manager [...] fbreader/bionic 0.12.10dfsg2-2 amd64 e-book reader [...]
În rezultatul comenzii de mai sus7) apar aplicațiile care au legătură cu șirul e-book
, printre care și Calibre, aplicație pe care am descoperit-o și folosind căutarea în Internet și interfața grafică.
Putem folosi șirul de căutare e-book manager
pentru a simplifica rezultatele obținute:
student@uso:~$ apt search e-book manager Sorting... Done Full Text Search... Done calibre/bionic,bionic 3.21.0+dfsg-1build1 all powerful and easy to use e-book manager calibre-bin/bionic 3.21.0+dfsg-1build1 amd64 powerful and easy to use e-book manager
Căutați aplicațiile potrivite pentru următoarele nevoi:
Folosiți atât căutarea în Internet, cât și căutarea folosind managerul de pachete (interfața grafică și/sau în linia de comandă).
Instalați, porniți și folosiți aplicațiile găsite.
Gândiți-vă la nevoi pe care le aveți și căutați aplicații corespunzătoare pentru acele nevoi. Instalați, porniți și folosiți aplicațiile găsite.
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 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.
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.
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ă.
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.
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
.
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.
-y
trebuie folosită cu grijă și evitată în momentul în care efectuăm operații critice.
Note de subsol
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:
apt
)De avut în vedere că dificultatea instalării este sporită pentru instalarea manuală a unei aplicații, de pe site-ul furnizorului aplicației.
Instalați OBS (Open Broadcaster Software). OBS este o soluție pentru înregistrări video și streaming. Porniți OBS după instalare.
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.
Instalați clientul Dropbox.
Instalați Ghidra. Porniți Ghidra după instalare.
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.
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 Oprirea proceselor. Semnale
.
init
va exista în permanență în vârful ierarhiei de procese, indiferent de faptul că se va numi systemd
, init
, upstart
sau altfel.
apt search
nu este privilegiată (nu modifică informații critice în sistem) și nu trebuie prefixată de comanda sudo
.
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
[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
.