diff --git a/docs/gemstones/git/00-gh_cli_installation.fr.md b/docs/gemstones/git/00-gh_cli_installation.fr.md index e5eea5ab27..ce7cfff9ef 100644 --- a/docs/gemstones/git/00-gh_cli_installation.fr.md +++ b/docs/gemstones/git/00-gh_cli_installation.fr.md @@ -27,7 +27,7 @@ Les utilisateurs ont besoin d’un moyen pratique pour interagir avec GitHub san ## Procédure 1. **Installer le référentiel CLI GitHub à l'aide de curl** : - utilisez la commande curl pour télécharger le fichier du référentiel officiel pour `gh`. Le fichier téléchargé sera enregistré dans le répertoire `/etc/yum.repos.d/`. Après le téléchargement, utilisez la commande `dnf` pour installer `gh` à partir du référentiel. Entrer la commande suivante : + utilisez la commande curl pour télécharger le fichier du référentiel officiel pour `gh`. Le fichier téléchargé sera enregistré dans le répertoire `/etc/yum.repos.d/`. Après le téléchargement, utilisez la commande `dnf` pour installer `gh` à partir du référentiel. Tapez la commande suivante : ```bash curl -fsSL https://cli.github.com/packages/rpm/gh-cli.repo | sudo tee /etc/yum.repos.d/github-cli.repo @@ -35,14 +35,14 @@ Les utilisateurs ont besoin d’un moyen pratique pour interagir avec GitHub san ``` 2. **Vérifier l'installation** : - Assurez-vous que `gh` est correctement installé. Entrer la commande suivante : + Assurez-vous que `gh` est correctement installé. Tapez la commande suivante : ```bash gh --version ``` 3. **Authentification avec GitHub** : - Connectez-vous à votre compte GitHub. Entrer la commande suivante : + Connectez-vous à votre compte GitHub. Tapez la commande suivante : ```bash gh auth login diff --git a/docs/gemstones/git/01-gh_cli_1st_pr.fr.md b/docs/gemstones/git/01-gh_cli_1st_pr.fr.md index 5958ab0a16..da4b58108c 100644 --- a/docs/gemstones/git/01-gh_cli_1st_pr.fr.md +++ b/docs/gemstones/git/01-gh_cli_1st_pr.fr.md @@ -47,7 +47,7 @@ Les contributeurs peuvent préférer ou avoir besoin d'effectuer toutes les acti ``` 4. **Création d'une branche** : - Créez une nouvelle branche pour votre contribution. Entrer la commande suivante : + Créez une nouvelle branche pour votre contribution. Tapez la commande suivante : ```bash git checkout -b new-gemstone @@ -58,7 +58,7 @@ Les contributeurs peuvent préférer ou avoir besoin d'effectuer toutes les acti Pour cet exemple, nous allons créer `gemstome_new_pr.md` et enregistrer ce fichier sous le répertoire `docs/gemstones/`. 6. **Commit des modifications** : - Préparez et validez votre nouveau fichier. Entrer la commande suivante : + Préparez et validez votre nouveau fichier. Tapez la commande suivante : ```bash git add docs/gemstones/gemstome_new_pr.md @@ -66,7 +66,7 @@ Les contributeurs peuvent préférer ou avoir besoin d'effectuer toutes les acti ``` 7. **Push vers le fork** : - Envoyez les modifications vers votre fork/copie du dépôt de documentation Rocky Linux. Entrer la commande suivante : + Envoyez les modifications vers votre fork/copie du dépôt de documentation Rocky Linux. Tapez la commande suivante : ```bash git push origin new-gemstone diff --git a/docs/gemstones/git/02_github_web_edit_pr_title.fr.md b/docs/gemstones/git/02_github_web_edit_pr_title.fr.md index b9718a969e..dbb52a01a0 100644 --- a/docs/gemstones/git/02_github_web_edit_pr_title.fr.md +++ b/docs/gemstones/git/02_github_web_edit_pr_title.fr.md @@ -19,7 +19,7 @@ Parfois, il peut être nécessaire de modifier le titre d'une requête PR après ## Prérequis - Une pull request GitHub en cours de traitement. -- Accès à l'interface Web GitHub ou CLI avec les autorisations nécessaires. +- Accès à l'interface Web de GitHub ou CLI avec les autorisations nécessaires. ## Procédure diff --git a/docs/gemstones/htop.fr.md b/docs/gemstones/htop.fr.md index bb1adbe0e1..698afc4c3b 100644 --- a/docs/gemstones/htop.fr.md +++ b/docs/gemstones/htop.fr.md @@ -1,5 +1,5 @@ --- -title: htop - Gestion des Processus +title: htop – Gestion des Processus author: tianci li contributors: Steven Spencer date: 2021-10-16 diff --git a/docs/gemstones/network/RL9_network_manager.fr.md b/docs/gemstones/network/RL9_network_manager.fr.md index e5d3813b33..f2dc3dafe9 100644 --- a/docs/gemstones/network/RL9_network_manager.fr.md +++ b/docs/gemstones/network/RL9_network_manager.fr.md @@ -22,7 +22,7 @@ shell > dnf -y install NetworkManager NetworkManager-tui shell > nmtui ``` -| NetworkManager TUI (nmtui) | | +| NetworkManager TUI | | | -------------------------------- | -- | | Modifier une connexion | | | Activer une connexion | | @@ -121,7 +121,7 @@ Shell > nmcli connection edit CONNECTION_NAME nmcli > help ``` -Vous pouvez également modifier une ou plusieurs propriétés de la connexion directement à partir de la ligne de commande avec le mot-clé `modify`. Par exemple : +Vous pouvez également modifier une ou plusieurs propriétés de la connexion directement à partir de la ligne de commande avec le mot-clé `modify`. Par exemple : ```bash Shell > nmcli connection modify CONNECTION_NAME autoconnect yes ipv6.method dhcp @@ -151,7 +151,7 @@ Shell > nmcli connection add type bond-slave ifname NIC_DEVICE_NAME2 mas Vous pouvez afficher des informations plus détaillées via `man 5 NetworkManager.conf` et `man 5 nm-settings-nmcli`. -Le contenu du fichier de configuration de la carte réseau NetworkManager est un fichier clé de style init. Par exemple : +Le contenu du fichier de configuration de la carte réseau NetworkManager est un fichier clé de style init. Par exemple : ```bash Shell > cat /etc/NetworkManager/system-connections/ens160.nmconnection @@ -183,7 +183,7 @@ method=disabled Les titres comme nom de **connection** peuvent contenir ces paires de clé-valeur commune : -| nom de la clé | description | +| nom de la clé | Description | | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | id | L'alias de `con-name`, dont la valeur est une chaîne. | | uuid | Identifiant universel unique, dont la valeur est une chaîne de caractères. | @@ -194,7 +194,7 @@ Les titres comme nom de **connection** peuvent contenir ces paires de clé-valeu **les noms de titres** éthernet peuvent contenir ces paires de clés communes : -| nom de la clé | description | +| nom de la clé | Description | | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | mac-address | Adresse MAC physique. | | mtu | Unité de Transmission Maximale. | @@ -204,7 +204,7 @@ Les titres comme nom de **connection** peuvent contenir ces paires de clé-valeu Les titres des noms **ipv4** peuvent contenir ces paires de valeurs clés communes: -| Mot-clé | description | +| Mot-clé | Description | | --------- | --------------------------------------------------------------------------------------------------------------------------------------------------- | | addresses | Adresses IP assignées | | gateway | Passerelle (accès réseau) pour l'interface | diff --git a/docs/gemstones/network/iftop.de.md b/docs/gemstones/network/iftop.de.md new file mode 100644 index 0000000000..c5583bfcc8 --- /dev/null +++ b/docs/gemstones/network/iftop.de.md @@ -0,0 +1,103 @@ +--- +title: iftop - Echtzeit-Bandbreitenstatistik pro Verbindung +author: Neel Chauhan +contributors: Ganna Zhyrnova, Steven Spencer +date: 2024-02-24 +--- + +# `iftop` - Einleitung + +`iftop` ist ein textbasierter Netzwerk-Monitor. Zeigen Sie die Traffic- und Bandbreiten-Statistiken Ihres Servers für jede Verbindung an. + +## `iftop`-Verwendung + +```bash +dnf -y install epel-release +dnf -y install iftop +``` + +Es folgen die Optionen des Befehls `iftop`. + +| Options | Beschreibung | +| -------------- | ---------------------------------------------------------------------------------------------- | +| -n | Vermeidet Hostnamen-Lookups | +| -N | Vermeidet die Auflösung von Port-Nummern in Dienstnamen | +| -p | Es läuft im Promiscuous-Modus, sodass der gesamte Verkehr gezählt wird | +| -P | Zeigt die Portnummern für Verbindungen an | +| -l | Zeigt und zählt den Traffic zu oder von lokalen IPv6-Adressen | +| -b | Zeigt keine Balkendiagramme für den Traffic an | +| -m LIMIT | Legt eine Obergrenze für das Bandbreitendiagramm fest, angegeben als Zahl und Einheiten-Suffix | +| -u UNIT | Zeigt die Traffic-Geschwindigkeiten für die angegebene Maßeinheit an | +| -B UNIT | Synonym für `-u` | +| -i INTERFACE | Gemessene Schnittstelle | +| -f FILTER CODE | Verwendet den folgenden Filtercode | +| -F NET/MASK | Misst nur den Traffic zum angegebenen IPv4-Netzwerk | +| -G NET/MASK | Misst den Traffic nur zum angegebenen IPv6-Netzwerk | +| -c config | Verwendet die angegebene Konfigurationsdatei | +| -t | `non-ncurses`-Modus verwenden | + +Die Einheiten für das Flag **-M** sind folgende: + +| Einheit | Bedeutung | +| ------- | --------- | +| K | Kilo | +| M | Mega | +| G | Giga | + +Die Einheiten für das Flag **-u** sind folgende: + +| Einheit | Bedeutung | +| ------- | ------------------ | +| bit | bits per second | +| bytes | bytes per second | +| packets | packets per second | + +Ein Beispiel für die Ausgabe vom Heimserver des Autors, auf dem ein [Tor](https://www.torproject.org/) [Relay](https://community.torproject.org/relay/types-of-relays/)-Programm ausgeführt wird: + +```bash + Listening on bridge b 25.0Kb 37.5Kb 50.0Kb 62.5Kb +└───────────────┴───────────────┴───────────────┴───────────────┴─────────────── +tt.neelc.org => X.X.X.X 13.5Mb 13.5Mb 13.5Mb + <= 749Kb 749Kb 749Kb +tt.neelc.org => X.X.X.X 6.21Mb 6.21Mb 6.21Mb + <= 317Kb 317Kb 317Kb +tt.neelc.org => X.X.X.X 3.61Mb 3.61Mb 3.61Mb + <= 194Kb 194Kb 194Kb +tt.neelc.org => X.X.X.X 181Kb 181Kb 181Kb + <= 3.36Mb 3.36Mb 3.36Mb +tt.neelc.org => X.X.X.X 151Kb 151Kb 151Kb + <= 3.24Mb 3.24Mb 3.24Mb +tt.neelc.org => X.X.X.X 2.97Mb 2.97Mb 2.97Mb + <= 205Kb 205Kb 205Kb +tt.neelc.org => X.X.X.X 156Kb 156Kb 156Kb + <= 2.97Mb 2.97Mb 2.97Mb +tt.neelc.org => X.X.X.X 2.80Mb 2.80Mb 2.80Mb + <= 145Kb 145Kb 145Kb +tt.neelc.org => X.X.X.X 136Kb 136Kb 136Kb + <= 2.45Mb 2.45Mb 2.45Mb +──────────────────────────────────────────────────────────────────────────────── +TX: cum: 30.1MB peak: 121Mb rates: 121Mb 121Mb 121Mb +RX: 30.4MB 122Mb 122Mb 122Mb 122Mb +TOTAL: 60.5MB 242Mb 242Mb 242Mb 242Mb +``` + +Aufschlüsselung der Zeilen im unteren Bereich: + +- TX – Datennutzung beim Senden/Hochladen +- RX - Datennutzung empfangen/herunterladen +- TOTAL – Kombinierte Upload-/Download-Nutzung + +## Tastaturkürzel + +- \++s++ - aggregiert den gesamten Datenverkehr für jede Quelle +- \++d++ - aggregiert den gesamten Datenverkehr für jedes Ziel +- \++shift+s++ - schaltet die Anzeige des Quellports um +- \++shift+d++ - schaltet die Anzeige des Zielports um +- \++t++ - schaltet zwischen den Anzeigemodi um: Standardmäßige zweizeilige Anzeige mit Sende- und Empfangsverkehr und dreizeilige Anzeige von Sende-, Empfangs- und Gesamt-Traffic +- \++1++, ++2++, ++3++ – Sortieren nach 1., 2. oder 3. Spalte +- \++l++ - geben Sie einen POSIX-regulären Ausdruck ein, um Hostnamen zu filtern +- \++shift+p++ - Pausiert die aktuelle Anzeige +- \++o++ - friert die Gesamtbandbreiten-Auswertung ein +- \++j++ - nach unten scrollen +- \++k++ - nach oben scrollen +- \++f++ – bearbeitet den Filtercode diff --git a/docs/gemstones/network/mtr.fr.md b/docs/gemstones/network/mtr.fr.md index dd7bf72312..f9204aa537 100644 --- a/docs/gemstones/network/mtr.fr.md +++ b/docs/gemstones/network/mtr.fr.md @@ -23,7 +23,7 @@ Les options les plus courantes de la commande `mtr` sont les suivantes. En temps | -4 | # IPv4 seulement | | -6 | # IPv6 seulement | | -c COUNT | # Nombre de pings | -| -n | # pas de résolution du nom de l'hôte | +| -n | # pas de résolution du nom d'hôte | | -z | # Affichage du nombre AS | | -b | # Affichage de l'adresse IP et du nom de l'hôte | | -w | # Output a wide range of reports | diff --git a/docs/gemstones/network/nload.fr.md b/docs/gemstones/network/nload.fr.md index f61119478a..1630b24360 100644 --- a/docs/gemstones/network/nload.fr.md +++ b/docs/gemstones/network/nload.fr.md @@ -18,7 +18,7 @@ dnf -y install nload Voici les options courantes de la commande `nload` qui, dans des circonstances normales, ne nécessitent rien de plus. Les options précèdent l'interface à surveiller : -| Options | Observation | +| Option | Description | | ----------- | --------------------------------------------------------------------------------------------------------------- | | -a PERIOD | Durée de la fenêtre de calcul en secondes (par défaut : 300) | | -m | Affiche plusieurs périphériques et ne présente pas de graphique de trafic | diff --git a/docs/gemstones/scripts/bash_stub.fr.md b/docs/gemstones/scripts/bash_stub.fr.md index eeca0fbc38..a8a4ed9f75 100644 --- a/docs/gemstones/scripts/bash_stub.fr.md +++ b/docs/gemstones/scripts/bash_stub.fr.md @@ -102,4 +102,4 @@ rm -f $LOCKF ## Conclusion -Scripting is a System Administrator's friend. Être capable de faire rapidement certaines tâches dans un script rationalise la réalisation du processus. Bien qu'il ne s'agisse pas d'un ensemble exhaustif de routines de scripts, ce conteneur offre quelques exemples d'utilisation courante. +Scripting is a System Administrator's friend. Être capable de faire rapidement certaines tâches dans un script rationalise la réalisation du processus. Bien qu'il ne s'agisse pas d'un ensemble exhaustif de routines de scripts, ce `stub` offre quelques exemples d'utilisation courante. diff --git a/docs/gemstones/string_color.fr.md b/docs/gemstones/string_color.fr.md index ef65c10580..fa4ecf4bf7 100644 --- a/docs/gemstones/string_color.fr.md +++ b/docs/gemstones/string_color.fr.md @@ -30,7 +30,7 @@ Lorsque nous téléchargeons des scripts bash qui ont été écrits par d'autres | **Code couleur d'arrière-plan** | **description** | |:-------------------------------:|:---------------:| | 40 | noir | -| 41 | crimson | +| 41 | cramoisi | | 42 | vert | | 43 | jaune | | 44 | bleu | diff --git a/docs/gemstones/torsocks.fr.md b/docs/gemstones/torsocks.fr.md index 5c633ae614..1aa938f751 100644 --- a/docs/gemstones/torsocks.fr.md +++ b/docs/gemstones/torsocks.fr.md @@ -17,9 +17,9 @@ dnf -y install tor torsocks systemctl enable --now tor ``` -Les options courantes de la commande `torsocks` suivent et, dans des circonstances normales, ne nécessitent rien de plus. Les options apparaissent avant que l'application ne soit lancée (par exemple, `curl`) : +Les options courantes de la commande `torsocks` suivent et, dans des circonstances normales, ne nécessitent rien de plus. Les options précèdent l'application à exécuter (par exemple, `curl`) : -| Options | Observation | +| Option | Description | | ---------- | ------------------------------------------------------------ | | --shell | Crée un nouveau shell avec LD\_PRELOAD | | -u USER | Indique l'utilisateur de SOCKS5 | diff --git a/docs/labs/systems_administration_I/lab7-software_management.it.md b/docs/labs/systems_administration_I/lab7-software_management.it.md index 7424fdc48b..fb3a078047 100644 --- a/docs/labs/systems_administration_I/lab7-software_management.it.md +++ b/docs/labs/systems_administration_I/lab7-software_management.it.md @@ -1,8 +1,11 @@ -- - - -author: Wale Soyinka contributors: Steven Spencer, tianci li tested on: 8.8 tags: +--- +author: Wale Soyinka +contributors: Steven Spencer, tianci li, Ganna Zhyrnova +tested on: 8.8 +tags: - lab exercise - software management -- - - +--- # Laboratorio 7: Gestione e installazione del software @@ -11,456 +14,474 @@ author: Wale Soyinka contributors: Steven Spencer, tianci li tested on: 8.8 tags Dopo aver completato questo laboratorio, sarete in grado di - Interrogare i pacchetti per ottenere informazioni -- Installare software da pacchetti binari +- Installare il software dai pacchetti binari - Risolvere alcuni problemi di dipendenza di base -- Compilare e installare il software dai sorgenti +- Compilare e installare il software dal codice sorgente Tempo stimato per completare questo laboratorio: 90 minuti ## File binari e file sorgente -Le applicazioni attualmente installate sul sistema dipendono da alcuni fattori. Il fattore principale dipende dai gruppi di pacchetti software selezionati durante l'installazione del sistema operativo. L'altro fattore dipende da ciò che è stato fatto al sistema dal suo utilizzo. +Le applicazioni installate sul sistema dipendono da alcuni fattori. Il fattore principale dipende dai gruppi di pacchetti software selezionati durante l'installazione del sistema operativo. L'altro fattore dipende da cosa è stato fatto al sistema dopo il suo utilizzo. -Uno dei compiti di routine di un amministratore di sistema è la gestione del software. Questo spesso comporta: +Scoprirai che una delle tue attività di routine come amministratore di sistema è la gestione del software. Questo spesso comporta: - installazione di un nuovo software - disinstallazione del software - aggiornamento del software già installato -Il software può essere installato su sistemi basati su Linux utilizzando diversi metodi. È possibile installare dai sorgenti o dai binari precompilati. Quest'ultimo metodo è il più semplice, ma anche il meno personalizzabile. Quando si installa da binari precompilati, la maggior parte del lavoro è già stato fatto per voi, ma anche in questo caso è necessario conoscere il nome e la posizione del software desiderato. +L'installazione di software su sistemi basati su Linux utilizza diversi metodi. È possibile eseguire l'installazione dal codice sorgente o dai binari precompilati. Quest'ultimo metodo è il più semplice, ma è anche il meno personalizzabile. Quando si esegue l'installazione da binari precompilati, la maggior parte del lavoro è già stata fatta per voi. Tuttavia, è necessario conoscere il nome e sapere dove trovare il software specifico che si desidera. -Quasi tutti i software vengono originariamente forniti come file sorgente del linguaggio di programmazione C o C++. I programmi sorgente sono solitamente distribuiti come archivi di file sorgente. Di solito file tar o gzip o bzip2. Ciò significa che sono disponibili compressi o in un unico pacchetto. +Quasi tutti i software sono originariamente disponibili come file sorgente in linguaggio di programmazione C o "C++". I programmi sorgente vengono solitamente distribuiti sotto forma di archivi di file sorgente. Di solito file compressi con tar, gzip o bzip2. Ciò significa che sono compressi o disponibili in un unico pacchetto. -La maggior parte degli sviluppatori ha reso il proprio codice sorgente conforme agli standard GNU, rendendolo più facile da condividere. Significa anche che i pacchetti verranno compilati su qualsiasi sistema UNIX o UNIX-like (ad esempio, Linux). +La maggior parte degli sviluppatori ha reso il proprio codice sorgente conforme agli standard GNU, facilitando la condivisione. Ciò significa anche che i pacchetti potranno essere compilati su qualsiasi sistema UNIX o UNIX-like (ad esempio Linux). -RPM è lo strumento di base per la gestione delle applicazioni (pacchetti) sulle distribuzioni basate su Red Hat come Rocky Linux, Fedora, Red Hat Enterprise Linux (RHEL), openSuSE, Mandrake e così via. +RPM è lo strumento di base per la gestione delle applicazioni (pacchetti) sulle distribuzioni basate su Red Hat, quali Rocky Linux, Fedora, Red Hat Enterprise Linux (RHEL), openSuSE, Mandrake e così via. -Le applicazioni utilizzate per la gestione del software sulle distribuzioni Linux sono chiamate gestori di pacchetti. Esempi sono: +Le applicazioni utilizzate per la gestione del software nelle distribuzioni Linux sono chiamate gestori di pacchetti. Esempi: - Il gestore di pacchetti Red Hat (`rpm`). I pacchetti hanno il suffisso " .rpm" - Il sistema di gestione dei pacchetti Debian (`dpkg`). I pacchetti hanno il suffisso " .deb" -Di seguito sono elencate alcune opzioni della riga di comando e la sintassi del comando RPM: +Di seguito sono elencate alcune opzioni della riga di comando e sintassi popolari per il comando RPM: -**rpm** +### `rpm` Uso: rpm [OPZIONE...] -**INTERROGARE I PACCHETTI** - -``` -Opzioni di interrogazione (con -q o --query): - -c, --configfiles elenca tutti i file di configurazione - -d, --docfiles elenca tutti i file di documentazione - -L, --licensefiles elenca tutti i file di licenza - -A, --artifactfiles elenca tutti i file degli artefatti - --dump elenca le informazioni di base sui file - -l, --list elenca i file del pacchetto - --queryformat=QUERYFORMAT utilizza il seguente formato di query - -s, --state visualizza gli stati dei file elencati +**INTERROGAZIONE DEI PACCHETTI** + +```bash +Query options (with -q or --query): + -c, --configfiles elenca tutti i file di configurazione + -d, --docfiles elenca tutti i file di documentazione + -L, --licensefiles elenca tutti i file di licenza + -A, --artifactfiles elenca tutti i file degli artefatti + --dump scaricare le informazioni di base del file + -l, --list elenca i file nel pacchetto + --queryformat=QUERYFORMAT utilizzare il seguente formato di query + -s, --state visualizza lo stato dei file elencati ``` **VERIFICA DEI PACCHETTI** -``` -Opzioni di verifica (con -V o --verify): - --nofiledigest non verifica il digest dei file - --nofiles non verifica i file del pacchetto - --nodeps non verifica le dipendenze del pacchetto - --noscript non esegue gli script di verifica +```bash +Verify options (with -V or --verify): + --nofiledigest non verificare il digest dei file + --nofiles non verificare i file nel pacchetto + --nodeps non verificare le dipendenze dei pacchetti + --noscript non eseguire gli script di verifica ``` -**INSTALLARE, AGGIORNARE E RIMUOVERE I PACCHETTI** - -``` -Opzioni di installazione/aggiornamento/cancellazione: - --allfiles installa tutti i file, anche le configurazioni che altrimenti potrebbero essere saltate - -e, --erase=+ cancella (disinstalla) il pacchetto - --excludedocs non installa la documentazione - --excludepath= salta i file con il componente principale - --forza abbreviazione di --replacepkgs --replacefiles - -F, --freshen=+ aggiorna i pacchetti se già installati - -h, --hash stampa i segni di hash durante l'installazione dei pacchetti (ottimo con -v) - --noverify abbreviazione di --ignorepayload --ignoresignature - -i, --install installa i pacchetti - --nodeps non verifica le dipendenze dei pacchetti - --noscripts non esegue gli scriptlet dei pacchetti - --percent stampa le percentuali durante l'installazione del pacchetto - --prefix= ricolloca il pacchetto in , se ricollocabile - --relocate== ricollocare i file dal percorso a - --replacefiles ignora i conflitti di file tra i pacchetti - --replacepkgs reinstalla se il pacchetto è già presente - --test non installa, ma dice se funzionerebbe o meno - -U, --upgrade=+ aggiorna i pacchetti - --reinstall=+ reinstallare il/i pacchetto/i +**INSTALLAZIONE, AGGIORNAMENTO E RIMOZIONE DEI PACCHETTI** + +```bash +Opzioni di installazione/aggiornamento/rimozione: + --allfiles installa tutti i file, anche le configurazioni che altrimenti potrebbero essere omesse + -e, --erase=+ elimina (disinstalla) il pacchetto + --excludedocs non installare la documentazione. + --excludepath= salta i file con componente iniziale + --force abbreviazione per --replacepkgs --replacefiles + -F, --freshen=+ aggiornare i pacchetti se già installati + -h, --hash stampa gli hash durante l'installazione dei pacchetti (ottimo con -v) + --noverify abbreviazione per --ignorepayload --ignoresignature + -i, --install installare pacchetto/i + --nodeps non verificare le dipendenze dei pacchetti + --noscripts non eseguire gli scriptlet del pacchetto + --percent stampa le percentuali durante l'installazione del pacchetto + --prefix= spostare il pacchetto in , se spostabile + --relocate== sposta i file dal percorso a + --replacefiles ignora i conflitti tra i file dei pacchetti + --replacepkgs reinstallare se il pacchetto è già presente. + --test non installare, ma provare se funziona + -U, --upgrade=+ aggiornare i pacchetti + --reinstall=+ reinstallare i pacchetti ``` ## Esercizio 1 ### Installazione, interrogazione e disinstallazione dei pacchetti -In questo laboratorio imparerete a usare il sistema RPM e installerete un'applicazione di esempio sul vostro sistema. +In questo laboratorio si imparerà come utilizzare il sistema RPM e installare un'applicazione di esempio. !!! tip "Suggerimento" - Avete molte opzioni per ottenere i pacchetti Rocky Linux. È possibile scaricarli manualmente da repository affidabili [o non affidabili]. È possibile ottenerli dalla ISO di distribuzione. È possibile ottenerli da una posizione condivisa a livello centrale utilizzando protocolli come nfs, git, https, ftp, smb, cifs e così via. Se siete curiosi, potete consultare il seguente sito web ufficiale e sfogliare il repository applicabile per i pacchetti desiderati: - - https://download.rockylinux.org/pub/rocky/8.8/ - -#### Per interrogare i pacchetti per ottenere informazioni. +``` +Sono disponibili numerose opzioni per ottenere i pacchetti Rocky Linux. È possibile scaricarli manualmente da repository affidabili [o non affidabili]. È possibile ottenerli dall'ISO della distribuzione. È possibile ottenerli da una posizione condivisa centralmente utilizzando protocolli quali nfs, git, https, ftp, smb, cifs e così via. Se siete curiosi, potete visitare il sito web ufficiale seguente e consultare il repository appropriato per i pacchetti desiderati: -1. Per visualizzare un elenco di tutti i pacchetti attualmente installati sul sistema locale, digitate: +https://download.rockylinux.org/pub/rocky/8.8/ +``` - ``` - $ rpm -qa - python3-gobject-base-* - NetworkManager-* - rocky-repos-* - ...... - ``` +#### Per richiedere informazioni sui pacchetti - Dovrebbe apparire un lungo elenco. +1. Per visualizzare un elenco di tutti i pacchetti attualmente installati sul sistema locale, digitare: -2. Approfondiamo un po' la questione e scopriamo di più su uno dei pacchetti installati nel sistema. Esamineremo NetworkManager. Utilizzeremo le opzioni --query (-q) e --info (-i) con il comando `rpm`. Digitate: + ```bash + $ rpm -qa + python3-gobject-base-* + NetworkManager-* + rocky-repos-* + ...... + ``` - ``` - $ rpm -qi NetworkManager - Name : NetworkManager - Epoch : 1 - ...... - ``` + Dovresti vedere un lungo elenco. - Si tratta di una grande quantità di informazioni (metadati)! +2. Approfondiamo un po' e scopriamo qualcosa in più su uno dei pacchetti installati sul sistema. Esamineremo NetworkManager. Utilizzeremo le opzioni --query (-q) e --info (-i) con il comando `rpm`. Digitare: -3. Supponiamo di essere interessati solo al campo Riepilogo del comando precedente. Si può usare l'opzione --queryformat di rpm per filtrare le informazioni ottenute dall'opzione query. + ```bash + $ rpm -qi NetworkManager + Name : NetworkManager + Epoch : 1 + ...... + ``` - Ad esempio, per visualizzare solo il campo Riepilogo, digitare: + Si tratta di una grande quantità di informazioni (metadati)! - ``` - $ rpm -q --queryformat '%{summary}\n' NetworkManager - ``` +3. Supponiamo di essere interessati solo al campo Summary del comando precedente. Possiamo utilizzare l'opzione --queryformat di rpm per filtrare le informazioni che otteniamo dall'opzione query. - Il nome del campo è insensibile alle maiuscole e alle minuscole. + Ad esempio, per visualizzare solo il campo Summary, digitare: -4. Per visualizzare i campi Versione e Riepilogo del tipo di pacchetto NetworkManager installato: + ```bash + rpm -q --queryformat '%{summary}\n' NetworkManager + ``` - ``` - $ rpm -q --queryformat '%{version} %{summary}\n' NetworkManager - ``` + Il nome del campo non fa distinzione tra maiuscole e minuscole. -5. Digitare il comando per visualizzare le informazioni sul pacchetto bash installato nel sistema. +4. Per visualizzare sia il campo Version che il campo Summary del pacchetto NetworkManager installato, digitare: - ``` - $ rpm -qi bash - ``` + ```bash + rpm -q --queryformat '%{version} %{summary}\n' NetworkManager + ``` - !!! note "Nota" +5. Digitare il comando per visualizzare le informazioni relative al pacchetto bash installato sul sistema. - Gli esercizi precedenti consistevano nell'interrogare e lavorare con i pacchetti già installati nel sistema. Nei prossimi esercizi inizieremo a lavorare con i pacchetti non ancora installati. Utilizzeremo l'applicazione DNF per scaricare i pacchetti che utilizzeremo nei passi successivi. + ```bash + rpm -qi bash + ``` -6. Innanzitutto assicuratevi che l'applicazione `wget` non sia già installata sul sistema. Digita: + !!! note "Nota" - ``` - $ rpm -q wget - package wget is not installed - ``` + ``` + Gli esercizi precedenti riguardavano la ricerca e l'utilizzo di pacchetti già installati sul sistema. Nei seguenti esercizi inizieremo a lavorare con pacchetti che non sono ancora stati installati. Utilizzeremo l'applicazione DNF per scaricare i pacchetti che useremo nei passaggi successivi. + ``` - Sembra che `wget` non sia installato sul nostro sistema demo. +6. Innanzitutto, assicurarsi che l'applicazione `wget` non sia già installata sul sistema. Digitare: -7. A partire da Rocky Linux 8.x, il comando `dnf download` consente di ottenere l'ultimo pacchetto `rpm` per `wget`. Digita: + ```bash + rpm -q wget + package wget is not installed + ``` - ``` - dnf download wget - ``` + Sembra che `wget` non sia installato sul nostro sistema demo. -8. Usate il comando `ls` per assicurarvi che il pacchetto sia stato scaricato nella vostra directory corrente. Digita: +7. A partire da Rocky Linux 8.x, il comando `dnf download` ti consentirà di ottenere l'ultimo pacchetto `rpm` per `wget`. Digitare: - ``` - $ ls -lh wg* - ``` + ```bash + dnf download wget + ``` -9. Usare il comando `rpm` per cercare informazioni sul file wget-*.rpm scaricato. Digita: +8. Utilizzare il comando `ls` per assicurarsi che il pacchetto sia stato scaricato nella directory corrente. Digitare: - ``` - $ rpm -qip wget-*.rpm - Name : wget - Architecture: x86_64 - Install Date: (not installed) - Group : Applications/Internet - ...... - ``` + ```bash + ls -lh wg* + ``` -10. Dal risultato del passo precedente, qual'è esattamente il pacchetto `wget`? Suggerimento: è possibile utilizzare l'opzione di formato della query rpm per visualizzare il campo della descrizione del pacchetto scaricato. +9. Utilizzare il comando `rpm` per richiedere informazioni sul file wget-\*.rpm scaricato. Digitare: -11. Se siete interessati al pacchetto `wget files-.rpm`, potete elencare tutti i file inclusi nel pacchetto digitando: + ```bash + rpm -qip wget-*.rpm + Name : wget + Architecture: x86_64 + Install Date: (not installed) + Group : Applications/Internet + ...... + ``` - ``` - $ rpm -qlp wget-*.rpm | head - /etc/wgetrc - /usr/bin/wget - ...... - /usr/share/doc/wget/AUTHORS - /usr/share/doc/wget/COPYING - /usr/share/doc/wget/MAILING-LIST - /usr/share/doc/wget/NEWS - ``` + !!! question "Domanda" -12. Vediamo il contenuto del file `/usr/share/doc/wget/AUTHORS` che è elencato come parte del pacchetto `wget`. Utilizzeremo il comando `cat`. Digita: + ``` + Dal risultato ottenuto nel passaggio precedente, che cos'è esattamente il pacchetto `wget`? Suggerimento: è possibile utilizzare l'opzione di formato query `rpm` per visualizzare il campo di descrizione del pacchetto scaricato. + ``` - ``` - $ cat /usr/share/doc/wget/AUTHORS - cat: /usr/share/doc/wget/AUTHORS: No such file or directory - ``` +10. Se siete interessati al pacchetto `wget files-.rpm`, è possibile elencare tutti i file inclusi nel pacchetto digitando: - `wget` non è [ancora] installato sul nostro sistema demo! E quindi non è possibile visualizzare il file AUTHORS che viene fornito con esso! + ```bash + rpm -qlp wget-*.rpm | head + /etc/wgetrc + /usr/bin/wget + ...... + /usr/share/doc/wget/AUTHORS + /usr/share/doc/wget/COPYING + /usr/share/doc/wget/MAILING-LIST + /usr/share/doc/wget/NEWS + ``` -13. Visualizza l'elenco dei file forniti con un altro pacchetto (curl) *già* installato nel sistema. Digita: +11. Visualizziamo il contenuto del file `/usr/share/doc/wget/AUTHORS` elencato come parte del pacchetto `wget`. Useremo il comando `cat`. Digitare: - ``` - $ rpm -ql curl - /usr/bin/curl - /usr/lib/.build-id - /usr/lib/.build-id/fc - ...<>... - ``` + ```bash + cat /usr/share/doc/wget/AUTHORS + cat: /usr/share/doc/wget/AUTHORS: No such file or directory + ``` - !!! note "Nota" + `wget` non è stato [ancora] installato sul nostro sistema demo! E quindi, non possiamo visualizzare il file AUTHORS che è incluso nel pacchetto! - Si noterà che nel comando precedente non è stato necessario fare riferimento al nome completo del pacchetto `curl`. Questo perché `curl` è già installato. +12. Visualizzare l'elenco dei file inclusi in un altro pacchetto (curl) che è _già_ installato sul sistema. Digitare: -#### Conoscenza estesa sul nome del pacchetto + ```bash + $ rpm -ql curl + /usr/bin/curl + /usr/lib/.build-id + /usr/lib/.build-id/fc + ...<>... + ``` -* **Nome completo del pacchetto**: quando si scarica un pacchetto da una fonte affidabile (ad esempio, il sito web del fornitore, il repository dello sviluppatore), il nome del file scaricato è il nome completo del pacchetto, ad esempio -- htop-3.2.1-1.el8.x86_64.rpm. Quando si usa il comando `rpm` per installare/aggiornare questo pacchetto, l'oggetto gestito dal comando deve essere il nome completo (o l'equivalente del carattere jolly) del pacchetto, come ad esempio: + !!! note "Nota" - ``` - $ rpm -ivh htop-3.2.1-1.el8.x86_64.rpm - ``` + ``` + Si noterà che nel comando precedente non è stato necessario fare riferimento al nome completo del pacchetto `curl`. Questo perché `curl` è già installato. + ``` - ``` - $ rpm -Uvh htop-3.2.1-1.*.rpm - ``` +#### Maggiori informazioni sul nome del pacchetto - ``` - $ rpm -qip htop-3.*.rpm - ``` +- **Nome completo del pacchetto**: quando si scarica un pacchetto da una fonte attendibile (ad esempio, il sito web del fornitore o il repository dello sviluppatore), il nome del file scaricato è il nome completo del pacchetto, ad esempio -- htop-3.2.1-1.el8.x86_64.rpm. Quando si utilizza il comando `rpm` per installare/aggiornare questo pacchetto, l'oggetto gestito dal comando deve essere il nome completo (o un carattere jolly equivalente) del pacchetto, ad esempio: - ``` - $ rpm -qlp wget-1.19.5-11.el8.x86_64.rpm - ``` + ```bash + rpm -ivh htop-3.2.1-1.el8.x86_64.rpm + ``` + ```bash + rpm -Uvh htop-3.2.1-1.*.rpm + ``` - Il nome completo del pacchetto segue una convenzione di denominazione simile a questa —— `[Package_Name]-[Version]-[Release].[OS].[Arch].rpm` or `[Package_Name]-[Version]-[Release].[OS].[Arch].src.rpm` + ```bash + rpm -qip htop-3.*.rpm + ``` -* **Nome del pacchetto**: Poiché RPM utilizza un database per gestire il software, una volta completata l'installazione del pacchetto, il database avrà i record corrispondenti. A questo punto, l'oggetto operativo del comando `rpm` deve solo digitare il nome del pacchetto. come ad esempio: + ```bash + rpm -qlp wget-1.19.5-11.el8.x86_64.rpm + ``` - ``` - $ rpm -qi bash - ``` + Il nome completo del pacchetto segue una convenzione di denominazione simile a questa —— `[Package_Name]-[Version]-[Release].[OS].[Arch].rpm` o `[Package_Name]-[Version]-[Release].[OS].[Arch].src.rpm` - ``` - $ rpm -q systemd - ``` +- **Nome del pacchetto**: poiché RPM utilizza un database per gestire il software, una volta completata l'installazione del pacchetto, il database conterrà i record corrispondenti. In questo momento, per usare il comando `rpm` basta solo scrivere il nome del pacchetto. come ad esempio: - ``` - $ rpm -ql chrony - ``` + ```bash + rpm -qi bash + ``` + ```bash + rpm -q systemd + ``` + ```bash + rpm -ql chrony + ``` ## Esercizio 2 ### Integrità del pacchetto -1. È possibile scaricare o ritrovarsi con un file corrotto o contaminato. Verificare l'integrità del pacchetto `wget` scaricato. Digita: +1. È possibile scaricare o ritrovarsi con un file danneggiato o contaminato. Per verificare l'integrità del pacchetto `wget` che avete scaricato. Digitare: - ``` - $ rpm -K wget-*.rpm - wget-1.19.5-10.el8.x86_64.rpm: digests signatures OK - ``` + ```bash + rpm -K wget-*.rpm + wget-1.19.5-10.el8.x86_64.rpm: digests signatures OK + ``` - Il messaggio "digests signatures OK" nell'output mostra che il pacchetto è a posto. + Il messaggio "digests signatures OK" nell'output indica che il pacchetto è corretto. -2. Facciamo finta di essere malintenzionati e alteriamo deliberatamente il pacchetto scaricato. Questo può essere fatto aggiungendo o togliendo qualcosa al pacchetto originale. Qualsiasi cosa che modifichi il pacchetto in un modo che non era nelle intenzioni di chi lo ha confezionato originariamente, corromperà il pacchetto stesso. Modificheremo il file utilizzando il comando echo per aggiungere la stringa "haha" al pacchetto. Digita: +2. Siamo maliziosi e modifichiamo deliberatamente il pacchetto scaricato. Questo può essere fatto aggiungendo o rimuovendo qualcosa dal pacchetto originale. Qualsiasi modifica al pacchetto che non sia stata prevista dai creatori originali danneggerà il pacchetto. Modificheremo il file utilizzando il comando `echo` per aggiungere la stringa "haha" al pacchetto. Digitare: - ``` - $ echo haha >> wget-1.19.5-10.el8.x86_64.rpm - ``` + ```bash + echo haha >> wget-1.19.5-10.el8.x86_64.rpm + ``` -3. Ora provate a verificare nuovamente l'integrità del pacchetto usando l'opzione -K di rpm. +3. Provate ora a verificare nuovamente l'integrità del pacchetto utilizzando l'opzione -K di rpm. - ``` - $ rpm -K wget-*.rpm - wget-1.19.5-10.el8.x86_64.rpm: DIGESTS SIGNATURES NOT OK - ``` + ```bash + $ rpm -K wget-*.rpm + wget-1.19.5-10.el8.x86_64.rpm: DIGESTS SIGNATURES NOT OK + ``` - Ora il messaggio è molto diverso. L'output "DIGESTS SIGNATURES NOT OK" avverte chiaramente che non si deve provare a usare o installare il pacchetto. Non ci si deve più fidare. + Ora il messaggio è molto diverso. Il messaggio "DIGESTS SIGNATURES NOT OK" avverte chiaramente che non si dovrebbe provare a utilizzare o installare il pacchetto. Non ci si dovrebbe più fidare. -4. Usare il comando `rm` per eliminare il file danneggiato del pacchetto `wget` e scaricarne una nuova copia usando `dnf`. Digitare: +4. Utilizzare il comando `rm` per eliminare il file del pacchetto `wget` danneggiato e scaricare una nuova copia utilizzando `dnf`. Digitare: - ``` - $ rm wget-*.rpm && dnf download wget - ``` + ```bash + rm wget-*.rpm && dnf download wget + ``` - Verificare ancora una volta che il pacchetto appena scaricato superi i controlli di integrità di RPM. + Verificare nuovamente che il pacchetto appena scaricato superi i controlli di integrità RPM. ## Esercizio 3 -### Installazione dei Pacchetti - -Mentre si cerca di installare un software sul sistema, può capitare di imbattersi in problemi di "dipendenze fallite". Questo è particolarmente comune quando si usa l'utilità di basso livello RPM per gestire manualmente le applicazioni su un sistema. +### Installazione dei pacchetti -Ad esempio, se si tenta di installare il pacchetto "abc.rpm", il programma di installazione RPM potrebbe lamentarsi di alcune dipendenze non riuscite. Potrebbe dirvi che il pacchetto "abc.rpm" richiede l'installazione di un altro pacchetto "xyz.rpm". Il problema delle dipendenze si pone perché le applicazioni software dipendono quasi sempre da un altro software o da un'altra libreria. Se un programma richiesto o una libreria condivisa non è già presente sul sistema, tale prerequisito deve essere soddisfatto prima di installare l'applicazione di destinazione. +Durante l'installazione del software sul sistema, ci si potrebbe imbattere in problemi di “dipendenze non soddisfatte”. Questo è particolarmente comune quando si utilizza l'utilità RPM di basso livello per gestire manualmente le applicazioni su un sistema. -L'utilità RPM di basso livello spesso conosce le interdipendenze tra le applicazioni. Ma di solito non sa come o dove ottenere l'applicazione o la libreria necessaria per risolvere il problema. In altre parole, l'RPM conosce il *cosa* e il *come*, ma non ha la capacità di rispondere alla domanda sul *dove*. È qui che si distinguono strumenti come `dnf`, `yum` e così via. +Ad esempio, se si prova ad installare il pacchetto "abc.rpm", il programma di installazione RPM potrebbe segnalare alcune dipendenze non soddisfatte. Potrebbe indicarvi che il pacchetto “abc.rpm” richiede l'installazione preliminare di un altro pacchetto, “xyz.rpm”. Il problema delle dipendenze sorge perché le applicazioni software dipendono quasi sempre da un altro software o da una libreria. Se un programma o una libreria condivisa richiesti non sono già presenti nel sistema, tale prerequisito deve essere soddisfatto prima di installare l'applicazione di destinazione. -#### Per installare i pacchetti +L'utilità RPM di basso livello spesso conosce le interdipendenze tra le applicazioni. Ma di solito non sa come o dove ottenere l'applicazione o la libreria necessaria per risolvere il problema. In altre parole, RPM conosce il _cosa_ e il _come_, ma non ha la capacità intrinseca di rispondere alla domanda _dove_. È qui che strumenti come `dnf`, `yum` e così via danno il meglio di sé. -In questo esercizio si cercherà di installare il pacchetto `wget` (wget-*.rpm). +#### Installazione dei pacchetti -1. Provare a installare l'applicazione `wget`. Utilizzare le opzioni della riga di comando -ivh di RPM. Digitare: +In questo esercizio si proverà ad installare il pacchetto `wget` (wget-\*.rpm). - ``` - $ rpm -ivh wget-*.rpm - error: Failed dependencies: - libmetalink.so.3()(64bit) is needed by wget-* - ``` +1. Provare ad installare l'applicazione `wget`. Utilizzare le opzioni della riga di comando -ivh di RPM. Digitare: - Subito - un problema di dipendenza! L'output di esempio mostra che `wget` ha bisogno di un qualche file di libreria chiamato "libmetalink.so.3" + ```bash + rpm -ivh wget-*.rpm + error: Failed dependencies: + libmetalink.so.3()(64bit) is needed by wget-* + ``` - !!! note "Nota" + Subito - un problema di dipendenza! L'output di esempio mostra che `wget` necessita di un file di libreria denominato "libmetalink.so.3" - Secondo l'esito del test precedente, il pacchetto wget-*.rpm richiede l'installazione del pacchetto libmetalink-*.rpm. In altre parole, libmetalink è un prerequisito per installare wget-*.rpm. È possibile installare forzatamente il pacchetto wget-*.rpm utilizzando l'opzione "nodeps" se si sa assolutamente cosa si sta facendo, ma questa è generalmente una CATTIVA pratica. + !!! note "Nota" -2. RPM ci ha dato un suggerimento su ciò che manca. Si ricorderà che gli rpm conoscono il cosa e il come, ma non necessariamente il dove. Utilizziamo l'utilità `dnf` per cercare di capire il nome del pacchetto che fornisce la libreria mancante. Digitare: + ``` + In base al risultato del test sopra riportato, il pacchetto wget-*.rpm richiede l'installazione del pacchetto libmetalink-*.rpm. In altre parole, libmetalink è un prerequisito per l'installazione di wget-*.rpm. È possibile installare forzatamente il pacchetto wget-*.rpm utilizzando l'opzione "nodeps" se si è assolutamente certi di ciò che si sta facendo, ma in genere questa è una pratica SCONSIGLIATA. + ``` - ``` - $ dnf whatprovides libmetalink.so.3 - ...... - libmetalink-* : Metalink library written in C - Repo : baseos - Matched from: - Provide : libmetalink.so.3 - ``` +2. RPM ci ha gentilmente fornito un indizio su ciò che manca. Ricorderete che `rpm` conosce il cosa e il come, ma non necessariamente il dove. Utilizziamo l'utilità `dnf` per cercare di capire il nome del pacchetto che fornisce la libreria mancante. Digitare: -3. Dall'output, dobbiamo scaricare il pacchetto `libmetalink` che fornisce la libreria mancante. In particolare, vogliamo la versione a 64 bit della libreria. Utilizziamo un'utilità separata (`dnf`) per trovare e scaricare il pacchetto per la nostra architettura demo a 64 bit (x86_64). Digitate: + ```bash + $ dnf whatprovides libmetalink.so.3 + ...... + libmetalink-* : Metalink library written in C + Repo : baseos + Matched from: + Provide : libmetalink.so.3 + ``` - ``` - dnf download --arch x86_64 libmetalink - ``` +3. Dal risultato ottenuto, è necessario scaricare il pacchetto `libmetalink` che fornisce la libreria mancante. In particolare, desideriamo la versione a 64 bit della libreria. Richiediamo l'aiuto di un'utilità separata (`dnf`) per trovare e scaricare il pacchetto per la nostra architettura demo a 64 bit (x86_64). Digitare: -4. A questo punto si dovrebbero avere almeno 2 pacchetti rpm nella directory di lavoro. Per confermarlo, utilizzare il comando `ls`. + ```bash + dnf download --arch x86_64 libmetalink + ``` -5. Installare la dipendenza mancante di `libmetalink`. Digitare: +4. Ora si dovrebbero avere almeno 2 pacchetti rpm nella directory di lavoro. Utilizzare il comando `ls` per verificarlo. - ``` - $ sudo rpm -ivh libmetalink-*.rpm - ``` +5. Installare la dipendenza mancante `libmetalink`. Digitare: -6. Con la dipendenza ora installata, possiamo tornare al nostro obiettivo iniziale di installare il pacchetto `wget`. Digitare: + ```bash + sudo rpm -ivh libmetalink-*.rpm + ``` - ``` - $ sudo rpm -ivh wget-*.rpm - ``` +6. Ora che la dipendenza è stata installata, possiamo tornare al nostro obiettivo iniziale, ovvero installare il pacchetto `wget`. Digitare: - !!! note "Nota" + ```bash + sudo rpm -ivh wget-*.rpm + ``` - RPM supporta le transazioni. Negli esercizi precedenti, avremmo potuto eseguire una singola transazione rpm che includeva il pacchetto originale che volevamo installare e tutti i pacchetti e le librerie da cui dipendeva. Sarebbe stato sufficiente un singolo comando come quello riportato di seguito: + !!! note "Nota" - ``` - $ rpm -Uvh wget-*.rpm libmetalink-*.rpm - ``` + ```` + RPM supporta le transazioni. Negli esercizi precedenti, avremmo potuto eseguire una singola transazione rpm che includesse il pacchetto originale che volevamo installare e tutti i pacchetti e le librerie da cui dipendeva. Sarebbe stato sufficiente un singolo comando come quello riportato di seguito: -7. È il momento della verità. Provare a eseguire il programma `wget` senza alcuna opzione per verificare se è installato. Digitare: + ```bash + rpm -Uvh wget-*.rpm libmetalink-*.rpm + ``` + ```` - ``` - $ wget - ``` +7. È arrivato il momento della verità. Provare ad eseguire il programma `wget` senza alcuna opzione per verificare se è installato. Digitare: -8. Vediamo `wget` in azione. Usate `wget` per scaricare un file da Internet dalla riga di comando. Digitare: + ```bash + wget + ``` - ``` - wget https://kernel.org - ``` +8. Vediamo `wget` in azione. Utilizzare `wget` per scaricare un file da Internet dalla riga di comando. Digitare: - Questo scaricherà l'index.html predefinito dal sito web kernel.org! + ```bash + wget https://kernel.org + ``` -9. Utilizzare `rpm` per visualizzare un elenco di tutti i file forniti con l'applicazione `wget`. + Questo scaricherà il file index.html predefinito dal sito web kernel.org! -10. Utilizzate `rpm` per visualizzare la documentazione fornita con `wget`. +9. Utilizzare `rpm` per visualizzare un elenco di tutti i file inclusi nell'applicazione `wget`. -11. Utilizzate `rpm` per visualizzare l'elenco di tutti i binari installati con il pacchetto `wget`. +10. Utilizzare `rpm` per visualizzare la documentazione inclusa nel pacchetto `wget`. -12. È stato necessario installare il pacchetto `libmetalink` per poter installare `wget`. Provate a eseguire `libmetalink` dalla riga di comando. Digitare: +11. Utilizzare `rpm` per visualizzare l'elenco di tutti i file binari installati con il pacchetto `wget`. - ``` - $ libmetalink - -bash: libmetalink: command not found - ``` +12. È necessario installare il pacchetto `libmetalink` per installare `wget`. Prova a eseguire o lanciare `libmetalink` dalla riga di comando. Digitare: - !!! attention "Attenzione" + ```bash + libmetalink + -bash: libmetalink: command not found + ``` - Cosa succede? Perché non è possibile eseguire `libmetalink`? + !!! attention "Attenzione" + ``` + Che succede? Perché non si riescs ad eseguire `libmetalink`? + ``` -#### Per importare una chiave pubblica tramite rpm +#### Importazione di una chiave pubblica tramite `rpm` -!!! tip "Suggerimento" +!!! tip "Suggerimento" - Le chiavi GPG utilizzate per firmare i pacchetti del progetto Rocky Linux possono essere ottenute da varie fonti, come il sito web del progetto, il sito ftp, i supporti di distribuzione, le fonti locali e così via. Nel caso in cui la chiave corretta non sia presente nel portachiavi del vostro sistema RL, potete usare l'opzione `--import` di `rpm` per importare la chiave pubblica di Rocky Linux dal vostro sistema RL locale, eseguendo: `sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial` +``` +Le chiavi GPG utilizzate per firmare i pacchetti utilizzati nel progetto Rocky Linux possono essere ottenute da varie fonti, quali il sito web del progetto, il sito ftp, i supporti di distribuzione, la fonte locale e così via. Nel caso in cui la chiave corretta non fosse presente nel portachiavi del sistema RL, è possibile utilizzare l'opzione `--import` di `rpm` per importare la chiave pubblica di Rocky Linux dal sistema RL locale eseguendo: `sudo rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial` +``` !!! question "Domanda" - Quando si installano i pacchetti, qual è la differenza tra `rpm -Uvh` e `rpm -ivh`. - Consultare la pagina man di `rpm`. +``` +Quando si installano i pacchetti, qual è la differenza tra `rpm -Uvh` e `rpm -ivh`? Consultare la pagina man di `rpm`. +``` ## Esercizio 4 ### Disinstallazione dei pacchetti -Disinstallare i pacchetti è altrettanto facile che installarli, grazie al gestore di pacchetti di Red Hat (RPM). +La disinstallazione dei pacchetti è facile come l'installazione con il gestore di pacchetti Red Hat (RPM). - In questo esercizio si cercherà di usare `rpm` per disinstallare alcuni pacchetti dal sistema. +In questo esercizio si proverà ad utilizzare `rpm` per disinstallare alcuni pacchetti dal sistema. #### Per disinstallare i pacchetti 1. Disinstallare il pacchetto `libmetalink` dal sistema. Digitare: - ``` - $ sudo rpm -e libmetalink - ``` + ```bash + sudo rpm -e libmetalink + ``` - !!! question "Domanda" + !!! question "Domanda" - Spiegare perché non è stato possibile rimuovere il pacchetto? + ``` + Spiegate perché non è stato possibile rimuovere il pacchetto? + ``` +2. Il modo corretto e pulito per rimuovere i pacchetti utilizzando RPM è quello di rimuovere i pacchetti insieme alle loro dipendenze. Per rimuovere il pacchetto `libmetalink` dovremo rimuovere anche il pacchetto `wget` che dipende da esso. Digitare: -2. Il modo pulito e corretto di rimuovere i pacchetti utilizzando RPM è quello di rimuovere i pacchetti insieme alle loro dipendenze. Per rimuovere il pacchetto `libmetalink` dobbiamo rimuovere anche il pacchetto `wget` che dipende da esso. Digitare: + ```bash + sudo rpm -e libmetalink wget + ``` - ``` - $ sudo rpm -e libmetalink wget - ``` + !!! note "Nota" - !!! note "Nota" + ``` + Se si desidera disinstallare il pacchetto che dipende da libmetalink e rimuovere *forzatamente* il pacchetto dal sistema, è possibile utilizzare l'opzione `--nodeps` di rpm come segue: `$ sudo rpm -e --nodeps libmetalink`. - Se si vuole interrompere il pacchetto che si basa su libmetalink e rimuovere *forzatamente* il pacchetto dal sistema, si può usare l'opzione `--nodeps` di rpm in questo modo: `$ sudo rpm -e --nodeps libmetalink`. - - L'opzione "nodeps" significa Nessuna dipendenza. Cioè, ignorare tutte le dipendenze. - **ii.** Quanto sopra serve solo a mostrare come rimuovere un pacchetto dal sistema in modo forzato. A volte è necessario farlo, ma in genere *non è una buona pratica*. - **iii.** La rimozione forzata di un pacchetto "xyz" su cui si basa un altro pacchetto installato "abc" rende di fatto il pacchetto "abc" inutilizzabile o in qualche modo danneggiato. + **i.** L'opzione "nodeps" significa Nessuna dipendenza. Ovvero, ignora tutte le dipendenze. + **ii.** Quanto sopra illustra come rimuovere forzatamente un pacchetto dal sistema. A volte è necessario farlo, ma in genere *non è una buona pratica*. + **iii.** La rimozione forzata di un pacchetto "xyz" da cui dipende un altro pacchetto installato "abc" rende di fatto il pacchetto "abc" inutilizzabile o in qualche modo danneggiato. + ``` ## Esercizio 5 -### DNF - Gestore di pacchetti +### DNF - gestore di pacchetti -DNF è un gestore di pacchetti per distribuzioni Linux basate su RPM. È il successore della popolare utility YUM. DNF mantiene la compatibilità con YUM ed entrambe le utility condividono opzioni e sintassi della riga di comando molto simili. +DNF è un gestore di pacchetti per distribuzioni Linux basate su RPM. È il successore della popolare utility YUM. DNF mantiene la compatibilità con YUM ed entrambe le utility condividono opzioni e sintassi della riga di comando molto simili. Entrambe le utility condividono opzioni e sintassi simili nella riga di comando. -DNF è uno dei tanti strumenti per la gestione del software basato su RPM, come Rocky Linux. Rispetto a `rpm`, questi strumenti di livello superiore aiutano a semplificare l'installazione, la disinstallazione e l'interrogazione dei pacchetti. È importante notare che questi strumenti utilizzano la struttura sottostante fornita dal sistema RPM. Per questo motivo è utile capire come utilizzare RPM. +DNF è uno dei tanti strumenti per la gestione di software basati su RPM come Rocky Linux. Rispetto a `rpm`, questi strumenti di livello superiore aiutano a semplificare l'installazione, la disinstallazione e la ricerca dei pacchetti. È importante notare che questi strumenti utilizzano il framework sottostante fornito dal sistema RPM. Ecco perché è utile capire come utilizzare RPM. -DNF (e altri strumenti simili) agisce come una sorta di involucro attorno a RPM e fornisce funzionalità aggiuntive non offerte da RPM. DNF sa come gestire le dipendenze di pacchetti e librerie e sa anche come utilizzare i repository configurati per risolvere automaticamente la maggior parte dei problemi. +DNF (e altri strumenti simili) opera come una sorta di involucro attorno a RPM e fornisce funzionalità aggiuntive non offerte da RPM. DNF sa come gestire le dipendenze dei pacchetti e delle librerie e sa anche come utilizzare i repository configurati per risolvere automaticamente la maggior parte dei problemi. -Le opzioni più comuni utilizzate con l'utilità `dnf` sono: +Le opzioni comunemente utilizzate con l'utilità `dnf` sono: -``` +```bash uso: dnf [opzioni] COMANDO Elenco dei comandi principali: @@ -497,305 +518,369 @@ Le opzioni più comuni utilizzate con l'utilità `dnf` sono: ``` -#### Per utilizzare `dnf` per l'installazione dei pacchetti +#### Uso di `dnf` per l'installazione dei pacchetti -Supponendo che abbiate già disinstallato l'utilità `wget` da un esercizio, nei passi seguenti useremo DNF per installare il pacchetto. Il processo in 2-3 fasi richiesto in precedenza per l'installazione di `wget` tramite `rpm` dovrebbe essere ridotto a un unico processo utilizzando `dnf`. `dnf` risolverà tranquillamente qualsiasi dipendenza. +Assumendo che sia già stata disinstallata l'utilità `wget` da un esercizio, utilizzeremo DNF per installare il pacchetto nei seguenti passaggi. Il processo in 2-3 passaggi necessario in precedenza quando abbiamo installato `wget` tramite `rpm` è diventato ora un processo in un unico passaggio utilizzando `dnf`. `dnf` risolverà silenziosamente qualsiasi dipendenza. -1. Per prima cosa, assicuriamoci che `wget` e `libmetalink` siano disinstallati dal sistema. Digitare: +1. Per prima cosa, assicurarsi che `wget` e `libmetalink` siano stati disinstallati dal sistema. Digitare: - ``` - $ sudo rpm -e wget libmetalink - ``` + ```bash + sudo rpm -e wget libmetalink + ``` - Dopo la rimozione, se si prova a eseguire `wget` dalla CLI, viene visualizzato un messaggio come *wget: command not found* + Dopo la rimozione, se si prova a eseguire `wget` dalla CLI, viene visualizzato un messaggio simile a _wget: command not found_ -2. Ora usate dnf per installare `wget`. Digitare: +2. Ora usare `dnf` per installare `wget`. Digitare: - ``` - $ sudo dnf -y install wget - Dependencies resolved. - ...... - Installed: - libmetalink-* wget-* - Complete! - ``` + ```bash + sudo dnf -y install wget + Dependencies resolved. + ...... + Installed: + libmetalink-* wget-* + Complete! + ``` - !!! tip "Suggerimento" + !!! tip "Suggerimento" - L'opzione "-y" usata nel comando precedente sopprime il prompt "[y/N]" per confermare l'azione che `dnf` sta per eseguire. Ciò significa che tutte le azioni di conferma (o le risposte interattive) saranno "sì" (y). + ``` + L'opzione "-y" utilizzata nel comando precedente sopprime il prompt "[y/N]" che richiede di confermare l'azione che `dnf` sta per eseguire. Ciò significa che tutte le azioni di conferma (o risposte interattive) saranno "sì" (y). + ``` +3. DNF offre un'opzione "Environment Group" che semplifica l'aggiunta di un nuovo set di funzionalità a un sistema. Per aggiungere la funzionalità, in genere è necessario installare alcuni pacchetti singolarmente, ma utilizzando `dnf`, è sufficiente conoscere il nome o la descrizione della funzionalità desiderata. Utilizzare `dnf` per visualizzare un elenco dei gruppi disponibili. Digitare: -3. DNF offre un'opzione " Environment Group" che semplifica l'aggiunta di un nuovo set di funzioni a un sistema. Per aggiungere la funzionalità, in genere si dovrebbero installare alcuni pacchetti singolarmente, ma usando `dnf`, tutto ciò che occorre sapere è il nome o la descrizione della funzionalità desiderata. Usare `dnf` per visualizzare un elenco di tutti i gruppi disponibili. Digitare: + ```bash + dnf group list + ``` - ``` - $ dnf group list - ``` +4. Il nostro interesse è rivolto al gruppo/funzionalità “ Development Tools”. Cerchiamo di ottenere maggiori informazioni su quel gruppo. Digitare: -4. Siamo interessati al gruppo/caratteristica "Development Tools". Cerchiamo di ottenere maggiori informazioni su questo gruppo. Digitare: + ```bash + dnf group info "Development Tools" + ``` - ``` - $ dnf group info "Development Tools" - ``` +5. Successivamente, avremo bisogno di alcuni programmi del gruppo "Development Tools". Installare il gruppo “Development Tools” utilizzando `dnf` eseguendo: -5. In seguito, avremo bisogno di alcuni programmi del gruppo " Development Tools". Installare il gruppo "Development Tools" utilizzando `dnf`: + ```bash + sudo dnf -y group install "Development Tools" + ``` - ``` - $ sudo dnf -y group install "Development Tools" - ``` +#### Uso di `dnf` per disinstallare i pacchetti -#### Per usare `dnf` per disinstallare i pacchetti +1. Per utilizzare `dnf` per disinstallare il pacchetto `wget`, digitare: + ```bash + sudo dnf -y remove wget + ``` -1. Per usare `dnf` per disinstallare il pacchetto `wget`, digitare: +2. Utilizzare `dnf` per assicurarsi che il pacchetto sia stato effettivamente rimosso dal sistema. Digitare: - ``` - $ sudo dnf -y remove wget - ``` + ```bash + sudo dnf -y remove wget + ``` -2. Usate `dnf` per assicurarsi che il pacchetto sia stato effettivamente rimosso dal sistema. Digitare: +3. Provare ad utilizzare/eseguire `wget`. Digitare: - ``` - $ sudo dnf -y remove wget - ``` + ```bash + wget + ``` -3. Provare a utilizzare/eseguire `wget`. Digitare: +#### Uso di `dnf` per l'aggiornamento dei pacchetti - ``` - $ wget - ``` +DNF può verificare e installare l'ultima versione dei singoli pacchetti disponibili nei repository. Può anche essere utilizzato per installare versioni specifiche dei pacchetti. -#### Per utilizzare `dnf` per l'aggiornamento dei pacchetti +1. Utilizzare l'opzione list con `dnf` per visualizzare le versioni disponibili del programma `wget` sul sistema. Digitare: -DNF può verificare e installare l'ultima versione dei singoli pacchetti disponibili nei repository. Può anche essere usato per installare versioni specifiche di pacchetti. + ```bash + dnf list wget + ``` -1. Usate l'opzione list con `dnf` per visualizzare tutte le versioni del programma `wget` disponibili per il vostro sistema. Digita +2. Se si vuole solo verificare se siano disponibili versioni aggiornate per un pacchetto, utilizzare l'opzione check-update con `dnf`. Ad esempio, per il pacchetto `wget`, digitare: - ``` - $ dnf list wget - ``` + ```bash + dnf check-update wget + ``` -2. Se si vuole solo vedere se sono disponibili versioni aggiornate di un pacchetto, si può usare l'opzione check-update di `dnf`. Ad esempio, per il tipo di pacchetto `wget`: +3. Ora, elencare tutte le versioni disponibili per il pacchetto kernel del sistema. Digitare: - ``` - $ dnf check-update wget - ``` + ```bash + sudo dnf list kernel + ``` -3. Ora elenca tutte le versioni disponibili del pacchetto kernel per il vostro sistema. Digitare: +4. Successivamente, verificare se sono disponibili pacchetti aggiornati per il pacchetto kernel installato. Digitare: - ``` - $ sudo dnf list kernel - ``` + ```bash + dnf check-update kernel + ``` -4. Ora controllate se sono disponibili pacchetti aggiornati per il pacchetto kernel installato. Digitare: +5. Gli aggiornamenti dei pacchetti possono essere dovuti a correzioni di bug, nuove funzionalità o patch di sicurezza. Per verificare se sono disponibili aggiornamenti relativi alla sicurezza per il pacchetto kernel, digitare: - ``` - $ dnf check-update kernel - ``` + ```bash + dnf --security check-update kernel + ``` -5. Gli aggiornamenti dei pacchetti possono essere dovuti a correzioni di bug, nuove funzionalità o patch di sicurezza. Per vedere se ci sono aggiornamenti relativi alla sicurezza per il pacchetto kernel, digitate: +#### Uso di `dnf` per gli aggiornamenti del sistema - ``` - $ dnf --security check-update kernel - ``` +DNF può essere utilizzato per verificare e installare le versioni più recenti di tutti i pacchetti installati su un sistema. Il controllo periodico della disponibilità di aggiornamenti è un aspetto importante dell'amministrazione di sistema. -#### Per utilizzare `dnf` per gli aggiornamenti del sistema +1. Per verificare se sono disponibili aggiornamenti per i pacchetti attualmente installati sul sistema, digitare: -DNF può essere usato per verificare e installare le ultime versioni di tutti i pacchetti installati su un sistema. Il controllo periodico dell'installazione degli aggiornamenti è un aspetto importante dell'amministrazione del sistema. + ```bash + dnf check-update + ``` -1. Per verificare la presenza di aggiornamenti per i pacchetti attualmente installati sul sistema, digitate: +2. Per verificare se sono disponibili aggiornamenti relativi alla sicurezza per tutti i pacchetti installati sul sistema, digitare: - ``` - $ dnf check-update - ``` + ```bash + dnf --security check-update + ``` -2. Per verificare la presenza di aggiornamenti di sicurezza per tutti i pacchetti installati sul sistema, digitate: +3. Per aggiornare tutti i pacchetti installati sul sistema alle versioni più recenti disponibili per la tua distribuzione, eseguire: - ``` - $ dnf --security check-update - ``` + ```bash + dnf -y check-update + ``` -3. Per aggiornare tutti i pacchetti installati sul sistema alle versioni più aggiornate disponibili per la vostra distribuzione, eseguite: +## Esercizio 6 - ``` - $ dnf -y check-update - ``` +### Costruzione del software dai sorgenti -## Esercizio 6 +Tutti i software/applicazioni/pacchetti provengono da semplici file di testo leggibili dall'uomo. I file sono denominati nel loro insieme codice sorgente. I pacchetti RPM che vengono installati sulle distribuzioni Linux nascono dal codice sorgente. -### Costruire il software dai sorgenti +In questo esercizio si scaricherà, compilerà e installerà un programma di esempio dai relativi file sorgente. Per comodità, i file sorgente vengono solitamente distribuiti come un unico file compresso chiamato tar-ball (pronunciato tar-dot-gee-zee). -Tutti i software/applicazioni/pacchetti provengono da semplici file di testo leggibili dall'uomo. I file sono conosciuti collettivamente come codice sorgente. I pacchetti RPM che vengono installati sulle distribuzioni Linux nascono dal codice sorgente. +I seguenti esercizi saranno basati sul venerabile codice sorgente del progetto Hello. `hello` è una semplice applicazione a riga di comando scritta in C++, che non fa altro che stampare "hello" sul terminale. Per ulteriori informazioni sul progetto, consultare [il sito qui](http://www.gnu.org/software/hello/hello.html) -In questo esercizio scaricherete, compilerete e installerete un programma di esempio dai suoi file sorgente originali. Per comodità, i file sorgenti sono solitamente distribuiti come un singolo file compresso chiamato tar-ball (pronuncia tar-dot-gee-zee). +#### Download del file sorgente -I seguenti esercizi si basano sul codice sorgente del venerabile progetto Hello. `hello` è una semplice applicazione a riga di comando scritta in C++, che non fa altro che stampare "hello" sul terminale. Per saperne di più sul [progetto, cliccate qui](http://www.gnu.org/software/hello/hello.html) +1. Utilizzare `curl` per scaricare il codice sorgente più recente dell'applicazione `hello`. Scaricare e salvare il file nella cartella Download. -#### Per scaricare il file sorgente + https://ftp.gnu.org/gnu/hello/hello-2.12.tar.gz -1. Usare `curl` per scaricare l'ultimo codice sorgente dell'applicazione `hello`. Scarichiamo e salviamo il file nella cartella Download. +#### Decomprimere il file - https://ftp.gnu.org/gnu/hello/hello-2.12.tar.gz +1. Passare alla directory sul computer locale dove è stato scaricato il codice sorgente hello. -#### Per decomprimere il file +2. Decomprimere (un-tar) il tarball utilizzando il programma `tar`. Digitare: -1. Passare alla cartella del computer locale in cui è stato scaricato il codice sorgente di hello. + ```bash + tar -xvzf hello-2.12.tar.gz + ``` -2. Decomprimere (un-tar) il tarball usando il programma `tar`. Digitare: + OUTPUT: - ``` - $ tar -xvzf hello-2.12.tar.gz - hello-2.12/ - hello-2.12/NEWS - hello-2.12/AUTHORS - hello-2.12/hello.1 - hello-2.12/THANKS - ...... - ``` + ```bash + $ tar -xvzf hello-2.12.tar.gz + hello-2.12/ + hello-2.12/NEWS + hello-2.12/AUTHORS + hello-2.12/hello.1 + hello-2.12/THANKS + ...... + ``` -3. Usate il comando `ls` per visualizzare il contenuto della vostra pwd. +3. Utilizzare il comando `ls` per visualizzare il contenuto della directory corrente. - Una nuova cartella denominata hello-2.12 dovrebbe essere stata creata durante la decompressione. + Durante la decompressione dovrebbe essere stata creata una nuova directory denominata hello-2.12. -4. Passate a quella directory ed elencatene il contenuto. Digitare: +4. Passare a quella directory ed elencarne il suo contenuto. Digitare: - ``` - $ cd hello-2.12 ; ls - ``` + ```bash + cd hello-2.12 ; ls + ``` -5. È sempre buona norma esaminare tutte le istruzioni di installazione speciali che possono essere fornite con il codice sorgente. Questi file hanno solitamente nomi come: INSTALL, README e così via. +5. È sempre buona norma consultare eventuali istruzioni di installazione speciali fornite insieme al codice sorgente. Questi file hanno solitamente nomi come: INSTALL, README e così via. - Utilizzare un pager per aprire il file INSTALL e leggerlo. Digitare: + Utilizzare un pager per aprire il file INSTALL e leggerlo. Digitare: - ``` - $ less INSTALL - ``` + ```bash + less INSTALL + ``` - Uscire dal pager quando si è finito di esaminare il file. + Uscire dal pager quando si è finito di esaminare il file. -#### Per configurare il pacchetto +#### Configurazione del pacchetto -La maggior parte delle applicazioni ha funzioni che possono essere attivate o disattivate dall'utente. Questo è uno dei vantaggi dell'accesso al codice sorgente e dell'installazione dallo stesso. L'utente ha il controllo sulle caratteristiche configurabili dell'applicazione; questo è in contrasto con l'accettazione di tutto ciò che un gestore di pacchetti installa da binari precompilati. +La maggior parte delle applicazioni dispone di funzioni che possono essere attivate o disattivate dall'utente. Questo è uno dei vantaggi di avere accesso al codice sorgente e di installarlo da lì. Avete il controllo sulle funzionalità configurabili dell'applicazione. Questo è in contrasto con l'accettazione di tutto ciò che un gestore di pacchetti installa dai binari precompilati. -Lo script che di solito permette di configurare il software si chiama "configure" +Lo script che solitamente consente di configurare il software è denominato, in modo appropriato, "configure" + +!!! tip "Suggerimento" + +```` +Assicurarsi di aver installato il pacchetto "Development Tools" prima di provare a completare i seguenti esercizi. + +```bash +sudo dnf -y group install "Development Tools" +``` +```` -1. Usate di nuovo il comando `ls` per assicurarvi di avere un file chiamato *configure* nella vostra pwd. +1. Utilizzare nuovamente il comando `ls` per assicurarti che nella directory corrente sia effettivamente presente un file denominato _configure_. -2. Per visualizzare tutte le opzioni, è possibile attivare o disattivare il tipo di programma `hello`: +2. Per visualizzare tutte le opzioni che si possono attivare o disattivare nel programma `hello`, digitare: - ``` - $ ./configure --help - ``` + ```bash + ./configure --help + ``` - !!! question "Domanda" + !!! question "Domanda" - Dall'output del comando, cosa fa l'opzione "--prefix"? + ``` + Dall'output del comando, cosa fa l'opzione "--prefix"? + ``` 3. Se si è soddisfatti delle opzioni predefinite offerte dallo script di configurazione. Digitare: - ``` - $ ./configure - ``` + ```bash + ./configure + ``` - !!! note "Nota" + !!! note "Nota" - Si spera che la fase di configurazione sia andata bene e che si possa passare alla fase di compilazione. + ``` + Si spera che la fase di configurazione sia andata liscia e che si possa passare alla fase di compilazione. - Se si sono verificati degli errori durante la fase di configurazione, è necessario esaminare attentamente la coda dell'output per individuare la fonte dell'errore. Gli errori sono *talvolta* autoesplicativi e facili da risolvere. Ad esempio, potrebbe essere visualizzato un errore del tipo: + Se durante la fase di configurazione vengono visualizzati degli errori, è necessario esaminare attentamente la parte finale dell'output per individuare la causa dell'errore. Gli errori sono *talvolta* intuitivi e facili da correggere. Ad esempio, potrebbe essere visualizzato un errore simile al seguente: - configure: error: no acceptable C compiler found in $PATH + configure: error: no acceptable C compiler found in $PATH - L'errore di cui sopra significa semplicemente che non avete un compilatore C (ad esempio, gcc) installato sul sistema o che il compilatore è installato da qualche parte che non è nella vostra variabile PATH. + L'errore sopra riportato significa semplicemente che non hai un compilatore C (ad esempio, `gcc`) installato sul sistema o che il compilatore è installato in una posizione che non è inclusa nella variabile PATH. + ``` -#### Per compilare il pacchetto +#### Compilazione del pacchetto -L'applicazione hello verrà realizzata nei seguenti passaggi. A questo punto sono utili alcuni dei programmi del gruppo Development Tools installati in precedenza con DNF. +Nei passaggi seguenti si costruirà l'applicazione hello. È qui che tornano utili alcuni dei programmi inclusi nel gruppo Development Tools installati in precedenza utilizzando DNF. -1. Usate il comando make per compilare il pacchetto dopo aver eseguito lo script "configure". Digitate: +1. Utilizzare il comando make per compilare il pacchetto dopo aver eseguito lo script "configure". Digitare: - ``` - $ make - ...... - gcc -g -O2 -o hello src/hello.o ./lib/libhello.a - make[2]: Leaving directory '/home/rocky/hello-2.12' - make[1]: Leaving directory '/home/rocky/hello-2.12' - ``` + ```bash + make + ``` - Se tutto va bene, questo importante passo di `creazione` è quello che aiuterà a generare il binario finale dell'applicazione `hello`. + OUTPUT: -2. Elencare nuovamente i file nella directory di lavoro corrente. Dovreste vedere alcuni file appena creati, tra cui il programma `hello`. + ```bash + $ make + ...... + gcc -g -O2 -o hello src/hello.o ./lib/libhello.a + make[2]: Leaving directory '/home/rocky/hello-2.12' + make[1]: Leaving directory '/home/rocky/hello-2.12' + ``` -#### Per installare l'applicazione + Se tutto è andato bene, questo importante passaggio “make” è il passo che contribuirà a generare il binario finale dell’applicazione “hello”. -Tra le altre operazioni di pulizia, la fase finale dell'installazione prevede anche la copia dei file binari e delle librerie delle applicazioni nelle cartelle corrette. +2. Elencare nuovamente i file nella directory di lavoro corrente. Si dovrebbero visualizzare alcuni file appena creati, incluso il programma `hello`. + +#### Installazione dell'applicazione + +Oltre ad altre attività di manutenzione, la fase finale dell'installazione prevede anche la copia di tutti i file binari e le librerie dell'applicazione nelle cartelle appropriate. 1. Per installare l'applicazione hello, eseguire il comando make install. Digitare: - ``` - $ sudo make install - ``` + ```bash + sudo make install + ``` + + Questo installerà il pacchetto nella posizione specificata dall'argomento predefinito prefisso (--prefix) che è stato utilizzato in precedenza con lo script “configure”. Se non è stato impostato alcun --prefix, verrà utilizzato il prefisso predefinito `/usr/local/`. + +#### Esecuzione del programma hello + +1. Utilizzare il comando `whereis` per vedere dove si trova il programma `hello` nel sistema. Digitare: + + ```bash + whereis hello + ``` - Questo installerà il pacchetto nel percorso specificato dall'argomento predefinito del prefisso (--prefix), eventualmente usato con lo script "configure" precedente. Se non è stato impostato alcun --prefisso, verrà usato il prefisso predefinito di `/usr/local/`. +2. Provare a eseguire l'applicazione `hello` per verificarne il funzionamento. Digitare: -#### Per eseguire il programma hello + ```bash + hello + ``` -1. Usate il comando `whereis` per vedere dove si trova il programma `hello` sul vostro sistema. Digitare: +3. Eseguire nuovamente `hello` con l'opzione `--help` per vedere le altre funzioni disponibili. - ``` - $ whereis hello - ``` +4. Ora, utilizzando `sudo`, eseguire nuovamente `hello` come superutente. Digitare: -2. Provate a eseguire l'applicazione `hello` per vedere cosa fa. Digitare: + ```bash + sudo hello + ``` - ``` - $ hello - ``` + OUTPUT: -3. Eseguite di nuovo `hello` con l'opzione `--help` per vedere le altre cose che può fare. + ```bash + sudo: hello: comando non trovato + ``` -4. Utilizzando `sudo`, eseguire nuovamente `hello` come superutente. Digitare: + !!! question "Domanda" - ``` - $ sudo hello - ``` + ``` + Individua la causa dell'errore che si verifica quando provi a eseguire `hello` con `sudo`. Risolvi il problema e assicurati che il programma `hello` possa essere utilizzato con `sudo`. + ``` - !!! tip "Suggerimento" + !!! tip "Suggerimento" - È buona norma testare un programma come utente ordinario per assicurarsi che gli utenti ordinari possano effettivamente utilizzare il programma. È possibile che i permessi sul binario siano impostati in modo errato, in modo che solo il superutente possa utilizzare i programmi. Questo ovviamente presuppone che si voglia effettivamente che gli utenti ordinari possano utilizzare il programma. + ``` + È buona norma testare un programma come utente normale per assicurarsi che gli utenti normali possano effettivamente utilizzarlo. È possibile che i permessi sul file binario siano impostati in modo errato, consentendo solo al superutente di utilizzare i programmi. Questo ovviamente presuppone che si desideri effettivamente che gli utenti normali possano utilizzare il programma. + ``` -5. Questo è quanto. Questo laboratorio è completo! +5. Ecco fatto. Questo esercizio è terminato! ## Esercizio 7 ### Verifica dell'integrità dei file dopo l'installazione del pacchetto -Dopo l'installazione di pacchetti rilevanti, in alcuni casi è necessario determinare se i file associati sono stati modificati per evitare modifiche dannose da parte di altri. +Dopo aver installato i pacchetti pertinenti, in alcuni casi è necessario verificare se i file associati sono stati modificati per impedire modifiche dannose da parte di altri. -#### Verifica del file +#### Verifica dei file Utilizzando l'opzione "-V" del comando `rpm`. -Prendiamo come esempio il programma di sincronizzazione temporale chrony per illustrare il significato del suo output. Si presume che sia stato installato chrony e che sia stato modificato il file di configurazione (/etc/chrony.conf) +Prendiamo come esempio il programma di sincronizzazione dell'ora `chrony` per illustrare il significato dei suoi output. -``` -$ rpm -V chrony -S.5....T. c /etc/chrony.conf -``` +1. Per dimostrare come funziona la verifica del pacchetto `rpm`, apportare una modifica al file di configurazione di chrony - `/etc/chrony.conf`. (It is assumed that you have installed chrony). Aggiungiamo 2 innocui simboli di commento `##` alla fine del file. Digitare: + + ```bash + echo -e "##" | sudo tee -a /etc/chrony.conf + ``` + +2. Ora eseguire il comando `rpm` con l'opzione `--verify`. Digitare: + + ```bash + rpm -V chrony + ``` + + OUTPUT: + + ```bash + S.5....T. c /etc/chrony.conf + ``` + + Il risultato è suddiviso in 3 colonne separate. + + - **Prima colonna (S.5.... T.)** + + L'output di esempio - `S.5....T.` indica i 9 campi utilizzati per indicare informazioni utili sulla validità dei file in un pacchetto RPM. Qualsiasi campo o caratteristica che ha superato un determinato controllo/test è indicato da un “.”. + + Di seguito sono descritti questi 9 differenti campi o controlli: + + - S: Se è stata modificata la dimensione del file. + - M: Se il tipo di file o i permessi del file (rwx) sono stati modificati. + - 5: Se il checksum MD5 del file è stato modificato. + - D: Se il numero del dispositivo è stato modificato. + - L: Se il percorso del file è stato modificato. + - U: Se il proprietario del file è stato modificato. + - G: Se il gruppo a cui appartiene il file è stato modificato. + - T: Se l'ora di modifica (mTime) del file è stata modificata. + - P: Se la funzione del programma è stata modificata. + + - **Seconda Colonna (c)** + + - **c**: Indica le modifiche apportate al file di configurazione. Può anche assumere i seguenti valori: + - d: file di documentazione. + - g: file ghost. Se ne vedono pochissimi. + - l: file di licenza. + - r: file readme. + + - **Terza colonna (/etc/chrony.conf)** -* **S.5....T.**: Indica 9 informazioni utili nel contenuto del file di validazione e quelle non modificate sono rappresentate da ".". Le 9 informazioni utili sono: - * S: Se è stata modificata la dimensione del file. - * M: Se il tipo di file o i permessi del file (rwx) sono stati modificati. - * 5: Se la somma di controllo MD5 del file è stata modificata. - * D: Se il numero del dispositivo è stato modificato. - * L: Se il percorso del file è stato modificato. - * U: Se il proprietario del file è stato modificato. - * G: Se il gruppo a cui appartiene il file è stato modificato. - * T: Se il tempo mTime (tempo di modifica) del file è stato modificato. - * P: Se la funzione del programma è stata modificata. - -* **c**: Indica le modifiche apportate al file di configurazione. Può anche essere il seguente valore: - * d: file di documentazione. - * g: file fantasma. Se ne vedono pochissimi. - * l: file di licenza. - * r: file readme. - -* **/etc/chrony.conf**: Rappresenta il percorso del file modificato. + - **/etc/chrony.conf**: Rappresenta il percorso del file modificato. diff --git a/docs/labs/systems_administration_I/lab8-system_and_process_monitoring-I.it.md b/docs/labs/systems_administration_I/lab8-system_and_process_monitoring-I.it.md new file mode 100644 index 0000000000..af476e4f1c --- /dev/null +++ b/docs/labs/systems_administration_I/lab8-system_and_process_monitoring-I.it.md @@ -0,0 +1,1035 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tested on: All Versions +tags: + - system monitoring + - process monitoring + - ps + - pgrep + - pidof + - cgroups + - pstree + - top + - kill + - lsof + - pkill + - exec +--- + +# Lab 8: Monitoraggio di Sistema e dei processi + +## Obiettivi + +Dopo aver completato questo laboratorio, sarete in grado di: + +- visualizzare e gestire i processi +- terminare i processi anomali +- modificare la priorità di processo + +Tempo stimato per completare questo laboratorio: 60 minuti + +## Introduzione + +Questi esercizi trattano vari argomenti relativi al monitoraggio e alla gestione dei processi su sistemi Linux. Gli argomenti trattati includono l'identificazione e il controllo dei processi, la gestione delle priorità dei processi, la gestione dei segnali, il monitoraggio delle risorse e la gestione dei “cgroup”. + +## Esercizio 1 + +### Esplorazione con `ps` e `/proc` + +#### Esplorare e identificare il primo processo di sistema + +1. Accedere al sistema come un utente qualsiasi. + +2. Trovare il nome del processo con ID 1 utilizzando /proc. + + ```bash + cat /proc/1/comm + ``` + + !!! question "Domanda" + + ``` + Qual è il nome del processo con PID 1? + ``` + +3. Visualizzare il nome e il percorso dell'eseguibile che si trova dietro al processo con PID 1. + + ```bash + ls -l /proc/1/exe + ``` + + !!! question "Domanda" + + ``` + Qual è il percorso dell'eseguibile dietro il PID 1? + ``` + +4. Utilizzare il comando `ps` per scoprire il nome del processo o del programma associato al PID 1. + + ```bash + ps -p 1 -o comm= + ``` + + !!! question "Domanda" + + ``` + Il comando `ps` conferma il nome del processo? + ``` + +5. Utilizzare il comando `ps` per visualizzare il percorso completo e gli eventuali argomenti della riga di comando del processo o del programma associato al PID 1. + + ```bash + ps -p 1 -o args= + ``` + + !!! question "Domanda" + + ``` + Qual è il percorso completo e gli argomenti della riga di comando per il processo con PID 1? + ``` + + !!! question "Domanda" + + ``` + Perché il processo con PID 1 è importante su un sistema Linux? + ``` + +#### Visualizzazione delle informazioni dettagliate sul processo utilizzando `ps` + +I seguenti passaggi mostrano come utilizzare `ps` per visualizzare le informazioni di base sui processi. + +1. Utilizzare il comando `ps` per visualizzare un elenco di tutti i processi in una struttura ad albero. + + ```bash + ps auxf + ``` + + !!! question "Domanda" + + ``` + Qual è la struttura dell'elenco dei processi e quali informazioni vengono visualizzate? + ``` + +2. Filtrare l'elenco in modo da visualizzare solo i processi associati a un utente specifico, ad esempio l'utente “root”. + + ```bash + ps -U root + ``` + + Verificare che vengano visualizzati solo i processi relativi all'utente “root”. + +3. Mostrare i processi in un formato dettagliato, inclusi l'albero dei processi e i thread. Digitare: + + ```bash + ps -eH + ``` + + !!! question "Domanda" + + ``` + Quali ulteriori dettagli vengono mostrati in questo formato? + ``` + +4. Visualizzare i processi ordinati in base all'utilizzo della CPU in ordine decrescente. + + ```bash + ps aux --sort=-%cpu + ``` + + !!! question "Domanda" + + ``` + Quale processo sta consumando più CPU? + ``` + +## Esercizio 2 + +### Gestione dei processi con `kill` + +#### Per terminare un processo utilizzando `kill` + +1. Avviare un processo di sospensione a lungo termine in background e visualizzare il PID sul terminale. Digitare: + + ```bash + (sleep 3600 & MYPROC1=$! && echo PID is: $MYPROC1) 2>/dev/null + ``` + + OUTPUT: + + ```bash + PID is: 1331933 + ``` + + Prendere nota del PID del nuovo processo sul sistema. Il PID viene salvato anche nella variabile $MYPROC1. + +2. Inviare un segnale di chiusura (SIGTERM) al processo `sleep`. + + ```bash + kill $MYPROC1 + ``` + + Sostituire $MYPROC1 con il PID effettivo ottenuto al punto 1. + +3. Verificare se il processo è terminato utilizzando `ps` e `ps aux`. + + ```bash + ps aux | grep -v grep | grep sleep + ``` + +#### Per terminare i processi utilizzando i segnali `kill` + +1. Avviare un nuovo processo in sospeso e prendere nota del suo PID. Digitare: + + ```bash + (sleep 3600 & MYPROC2=$! && echo PID is: $MYPROC2) 2>/dev/null + ``` + + OUTPUT: + + ```bash + PID is: 1333258 + ``` + +2. Inviare un segnale diverso (ad esempio, SIGHUP) al nuovo processo in sospeso. Digitare: + + ```bash + kill -1 $MYPROC2 + ``` + + Verificare che $MYPROC2 non sia più presente nella tabella dei processi. + +3. Avviare un nuovo processo ping e prendere nota del suo PID. Digitare: + + ```bash + { ping localhost > /dev/null 2>&1 & MYPROC3=$!; } \ + 2>/dev/null; echo "PID is: $MYPROC3" + ``` + +4. Utilizzare il comando `kill` per inviare un segnale `SIGTERM` al processo ping. Digitare: + + ```bash + kill -15 $MYPROC3 + ``` + + Sostituire MYPROC3 con il PID effettivo del processo sul vostro sistema. + +5. Avviare un processo di lunga durata utilizzando il comando `cat`. Digitare: + + ```bash + { cat /dev/random > /dev/null 2>&1 & MYPROC4=$!; } \ + 2>/dev/null; echo PID is: $MYPROC4 + ``` + + Prendere nota del PID del processo sul vostro sistema. + +6. Utilizzare `kill` per terminare forzatamente il processo inviando un segnale SIGKILL. + + ```bash + kill -9 $MYPROC4 + ``` + + Verificare che il processo sia terminato. + + !!! question "Domanda" + + ``` + Spiegare lo scopo dell'invio di segnali ai processi utilizzando il comando `kill` e il significato dei diversi tipi di segnale. + ``` + +## Esercizio 3 + +### Monitoraggio delle risorse di sistema con `top` + +#### Monitorare l'utilizzo delle risorse di sistema con `top` + +1. Eseguire il comando top per visualizzare le statistiche di sistema in tempo reale. + + ```bash + top + ``` + + !!! question "Domanda" + + ``` + Quali informazioni vengono visualizzate nell'interfaccia superiore? + ``` + +2. Osservare l'utilizzo della CPU e della memoria dei processi nell'interfaccia superiore. + + !!! question "Domanda" + + ``` + Quali processi consumano più CPU e memoria? + ``` + +3. Ordinare i processi in `top` in base all'utilizzo della CPU (premere P) e all'utilizzo della memoria (premere M). + + !!! question "Domanda" + + ``` + Quali sono i processi che consumano più CPU e memoria dopo l'ordinamento? + ``` + +#### Monitorare l'utilizzo della CPU e della memoria per processi specifici utilizzando `top` + +1. Creare un file di dimensioni arbitrarie pari a 512 Mb contenente dati casuali. + + ```bash + sudo fallocate -l 512M ~/large-file.data + ``` + +2. Avviare un processo che richieda molte risorse, come la compressione di file di grandi dimensioni. + + ```bash + tar -czf archive.tar.gz /path/to/large/directory + ``` + +3. Aprire il comando `top` per monitorare l'utilizzo della CPU e della memoria. + + ```bash + top + ``` + +4. Individuare e selezionare il processo che richiede molte risorse nell'interfaccia superiore. + + !!! question "Domanda" + + ``` + Qual è l'ID del processo e l'utilizzo delle risorse del processo intensivo? + ``` + +5. Modificare l'ordine di ordinamento in `top` per visualizzare i processi che utilizzano più CPU o memoria (premere P o M). + + !!! question "Domanda" + + ``` + Qual è il processo che si trova in cima alla lista dopo l'ordinamento? + ``` + +6. Uscire da `top` premendo `q`. + +#### Monitorare i processi e l'utilizzo delle risorse utilizzando `top` + +1. Avviare il comando `top` in modalità interattiva. + + ```bash + top + ``` + + !!! question "Domanda" + + ``` + Quali informazioni vengono visualizzate nella schermata superiore? + ``` + +2. Utilizzare il tasto 1 per visualizzare un riepilogo dell'utilizzo dei singoli core della CPU. + + !!! question "Domanda" + + ``` + Qual è la ripartizione dell'utilizzo del core della CPU per ciascun core? + ``` + +3. Premere u per visualizzare i processi di un utente specifico. Inserire il vostro nome utente. + + !!! question "Domanda" + + ``` + Quali processi sono attualmente in esecuzione per il vostro utente? + ``` + +4. Ordinare i processi in base all'utilizzo della memoria (premere M) e osservare i processi che consumano più memoria. + + !!! question "Domanda" + + ``` + Quali processi stanno utilizzando più memoria? + ``` + +5. Uscire da top premendo ++"q"++. + + !!! question "Domanda" + + ``` + Spiegare l'importanza del monitoraggio delle risorse di sistema mediante il comando `top` e come questo possa aiutare a risolvere i problemi relativi alle prestazioni. + ``` + +## Esercizio 4 + +### Modifica della priorità di un processo con `nice` e `renice` + +#### Regolare la priorità del processo utilizzando `nice` + +1. Avviare un processo che richieda un uso intensivo della CPU con priorità predefinita/normale. Digitare: + + ```bash + bash -c 'while true; do echo "Default priority: The PID is $$"; done' + ``` + + OUTPUT: + + ```bash + Default priority: The PID is 2185209 + Default priority: The PID is 2185209 + Default priority: The PID is 2185209 + ....... + ``` + + Dall'output, il valore del PID sul nostro sistema di esempio è `2185209`. + + Il valore del PID sarà diverso sul vostro sistema. + + Si noti il valore del PID visualizzato continuamente sullo schermo del vostro sistema. + +2. In un altro terminale, utilizzando il valore PID, controllare la priorità predefinita del processo utilizzando `ps`. Digitare: + + ```bash + ps -p -o ni + ``` + + !!! question "Domanda" + + ``` + Qual è la priorità predefinita del processo in esecuzione (valore `nice`)? + ``` + +3. Utilizzando il PID del processo stampato, terminare il processo utilizzando il comando `kill`. + +4. Utilizzando il comando `nice`, riavviare un processo simile con un valore di niceness inferiore (ovvero più favorevole al processo O con priorità più alta). Utilizzare un valore `nice` pari a `-20`. Digitare: + + ```bash + nice -n -20 bash -c 'while true; do echo "High priority: The PID is $$"; done' + ``` + +5. Utilizzando il valore del PID, controllare la priorità del processo utilizzando `ps`. Digitare: + + ```bash + ps -p -o ni + ``` + + !!! question "Domanda" + + ``` + La priorità del processo è stata impostata correttamente? + ``` + +6. Premendo contemporaneamente i tasti ++ctrl+c++ sulla tastiera `terminare` il nuovo processo ad alta priorità. + +7. Utilizzando nuovamente il comando `nice`, riavviare un altro processo, ma questa volta con un valore di niceness più alto (cioè meno favorevole al processo O con priorità inferiore). Utilizzare un valore `nice` pari a `19` Digitare: + + ```bash + nice -n 19 bash -c 'while true; do echo "Low priority: The PID is $$"; done' + ``` + + OUTPUT: + + ```bash + Low priority: The PID is 2180254 + Low priority: The PID is 2180254 + ...... + ``` + +8. Controllare la priorità personalizzata del processo utilizzando `ps`. Digitare: + + ```bash + ps -p -o ni + ``` + +9. Premere contemporaneamente i tasti ++ctrl+c++ sulla tastiera per terminare il nuovo processo a bassa priorità. + +10. Provare a modificare la priorità dei diversi processi assegnando valori più alti o più bassi e osservare l'impatto sull'utilizzo delle risorse del processo. + +#### Per regolare la priorità di un processo in esecuzione utilizzando `renice` + +1. Avviare un processo che richieda un uso intensivo della CPU, come un calcolo matematico complesso con l'utilità md5sum. Digitare: + + ```bash + find / -path '/proc/*' -prune -o -type f -exec md5sum {} \; > /dev/null + ``` + +2. Utilizzare il comando `ps` per individuare il PID del processo `find/md5sum` precedente. Digitare: + + ```bash + ps -C find -o pid= + ``` + + OUTPUT: + + ```bash + 2577072 + ``` + + Dall'output, il valore del PID sul sistema di esempio è `2577072`. + + Il valore del PID sarà diverso sul vostro sistema. + + Prendere nota del valore del PID sul sistema. + +3. Utilizzare il comando `renice` per impostare la priorità del processo `find/md5sum` in esecuzione su un valore di niceness inferiore (ad esempio, -10, priorità più alta). Digitare: + + ```bash + renice -n -10 -p $(ps -C find -o pid=) + ``` + + OUTPUT: + + ```bash + (process ID) old priority 0, new priority -10 + ``` + + Sostituire `` (sopra) con il PID effettivo del processo in esecuzione. + +4. Monitorare l'utilizzo delle risorse per il processo `find/md5sum`, utilizzando `top` (o `htop`). Digitare: + + ```bash + top -cp $(ps -C find -o pid=) + ``` + + !!! question "Domanda" + + ``` + Il processo ora riceve una quota maggiore di risorse della CPU? + ``` + +5. Modificare la priorità del processo `find/md5sum` impostando un valore `nice` più alto (ad esempio 10, priorità più bassa). Digitare: + + ```bash + renice -n 10 -p + ``` + + OUTPUT: + + ```bash + 2338530 (process ID) old priority -10, new priority 10 + ``` + + Sostituire `` (sopra) con il PID effettivo del processo in esecuzione. + + !!! question "Domanda" + + ``` + Spiegare come viene utilizzato il comando `nice` per regolare le priorità dei processi e come influisce sull'allocazione delle risorse di sistema. + ``` + +6. Premere contemporaneamente i tasti ++ctrl+c++ sulla tastiera per interrompere il processo `find/md5sum` . È anche possibile utilizzare il comando `kill` per ottenere lo stesso risultato. + +## Esercizio 5 + +### Identificazione dei processi con `pgrep` + +#### Trovare i processi in base al nome utilizzando `pgrep` + +1. Utilizzare il comando `pgrep` per identificare tutti i processi associati a un programma o servizio specifico, come ad esempio `sshd`. + + ```bash + pgrep sshd + ``` + + !!! question "Domanda" + + ``` + Quali sono gli ID dei processi `sshd`? + ``` + +2. Verificare l'esistenza dei processi identificati utilizzando il comando `ps`. + + ```bash + ps -p + ``` + + Sostituire “” con gli ID di processo ottenuti al punto 1. + +3. Utilizzare il comando `pgrep` per identificare i processi con un nome specifico, ad esempio “cron”. + + ```bash + pgrep cron + ``` + + !!! question "Domanda" + + ``` + Esistono processi con il nome “cron”? + ``` + + !!! question "Domanda" + + ``` + Spiegare la differenza tra l'uso di `ps` e `pgrep` per identificare e gestire i processi. + ``` + +## Esercizio 6 + +### Processi in foreground e in background + +Questo esercizio riguarda la gestione dei processi con `fg` e `bg`. + +#### Gestire i processi in background e in primo piano utilizzando `bg` e `fg` + +1. Avviare un processo long-running in foreground. Ad esempio, si può usare un comando semplice come `sleep`. Digitare: + + ```bash + sleep 300 + ``` + +2. Sospendere il processo in foreground premendo ++ctrl+z++ sulla tastiera. Questo dovrebbe riportarvi al prompt della shell. + +3. Elencare i processi sospesi utilizzando il comando `jobs`. Digitare: + + ```bash + jobs + ``` + + !!! question "Domanda" + + ``` + Qual è lo stato del lavoro sospeso? + ``` + +4. Riportare il processo sospeso in foreground utilizzando il comando `fg`. + + ```bash + fg + ``` + + !!! question "Domanda" + + ``` + Cosa succede quando si riporta il lavoro in foreground? + ``` + +5. Sospendere nuovamente il processo utilizzando ++ctrl+z++, quindi spostarlo in background utilizzando il comando `bg`. + + ```bash + bg + ``` + + !!! question "Domanda" + + ``` + Qual è lo stato attuale del lavoro? + ``` + + !!! question "Domanda" + + ``` + Spiegare lo scopo dei processi in primo piano e in background e come vengono gestiti utilizzando i comandi `fg` e `bg`. + ``` + +#### Avviare un processo in background + +1. Il simbolo `&` può avviare un processo che viene immediatamente eseguito in background. Ad esempio, per avviare il comando `sleep` in background, digitare: + + ```bash + sleep 300 & + ``` + + Sospendere il processo in esecuzione utilizzando ++ctrl+z++. + +2. Elencare lo stato di tutti i jobs attivi. Digitare: + + ```bash + jobs -l + ``` + + !!! question "Domanda" + + ``` + Qual è lo stato del processo “sleep 300”? + ``` + +3. Riportare il processo in background in primo piano utilizzando il comando `fg`. + + ```bash + fg + ``` + +4. Terminare anticipatamente il processo `sleep` inviandogli il segnale SIGSTOP premendo ++ctrl+c++. + +#### Per gestire i processi interattivi utilizzando `bg` e `fg` + +1. Avviare un processo interattivo come l'editor di testo `vi` per creare e modificare un file di testo di esempio denominato “foobar.txt”. Digitare: + + ```bash + vi foobar1.txt + ``` + + Sospendere il processo in esecuzione utilizzando `Ctrl` + `Z`. + + Utilizzare il comando `bg` per spostare il processo sospeso in background. + + ```bash + bg + ``` + + !!! question "Domanda" + + ``` + Il processo è ora in esecuzione in background? + ``` + +2. Inserire “Hello” all'interno del file `foobar1.txt` nel vostro editor `vi`. + +3. Sospendere la sessione di modifica del testo `vi` in esecuzione premendo ++ctrl+z++. + +4. Avviare un'altra sessione separata dell'editor `vi` per creare un altro file di testo denominato “foobar2.txt”. Digitare: + + ```bash + vi foobar2.txt + ``` + +5. Inserire il testo di esempio “Hi inside foobar2.txt” nella seconda sessione di vi. + +6. Sospendere la seconda sessione vi utilizzando ++ctrl+z++. + +7. Elencare lo stato di tutti i `job` sul terminale corrente. Digitare: + + ```bash + jobs -l + ``` + + OUTPUT: + + ```bash + [1]- 2977364 Stopped vi foobar1.txt + [2]+ 2977612 Stopped vi foobar2.txt + ``` + + Si dovrebbero avere almeno 2 job elencati nell'output. Il numero nella prima colonna dell'output mostra i numeri dei job: [1] e [2]. + +8. Riprendere ==e portare in primo piano== la prima sessione `vi` digitando: + + ```bash + fg %1 + ``` + +9. Sospendere nuovamente la prima sessione `vi` utilizzando ++ctrl+z++. + +10. Riprendere ==e portare in foreground== la seconda sessione `vi` digitando: + + ```bash + fg %2 + ``` + +11. Terminare in modo non corretto entrambe le sessioni di modifica `vi` inviando il segnale KILL a entrambi i processi. Eseguire il comando `kill` seguito dal comando jobs. Digitare: + + ```bash + kill -SIGKILL %1 %2 && jobs + ``` + + OUTPUT: + + ```bash + [1]- Killed vi foobar1.txt + [2]+ Killed vi foobar2.txt + ``` + +## Esercizio 7 + +### Identificazione dei processi con `pidof` + +#### Trovare l'ID di processo di un comando in esecuzione utilizzando `pidof` + +1. Selezioniamo un processo in esecuzione standard/comune di cui vogliamo trovare l'ID. Useremo `systemd` come esempio. + +2. Utilizzare il comando `pidof` per trovare l'ID del processo di `systemd`. Digitare: + + ```bash + pidof systemd + ``` + + Prendere nota del ID di processo di `systemd`. + +3. Verificare l'esistenza del processo identificato utilizzando il comando `ps`. + + ```bash + ps -p + ``` + + Sostituire `` con l'ID del processo ottenuto al punto 2. + + !!! question "Domanda" + + ``` + Spiegare la differenza tra `pgrep` e `pidof` per trovare l'ID di processo di un comando in esecuzione. + ``` + +## Esercizio 8 + +### Esplorazione del filesystem /sys + +#### Esplorare il filesystem /sys + +1. Elencare il contenuto della directory /sys. Digitare: + + ```bash + ls /sys + ``` + + !!! question "Domanda" + + ``` + Che tipo di informazioni sono memorizzate nella directory /sys? + ``` + +2. Passare a una voce specifica di /sys, ad esempio le informazioni sulla CPU. + + ```bash + cd /sys/devices/system/cpu + ``` + +3. Elencare il contenuto della directory corrente per esplorare le informazioni relative alla CPU. + + ```bash + ls + ``` + + !!! question "Domanda" + + ``` + Quali informazioni relative alla CPU sono disponibili nel filesystem /sys? + ``` + + !!! question "Domanda" + + ``` + Spiegare lo scopo del filesystem /sys in Linux e il suo ruolo nella gestione dell'hardware e della configurazione del sistema. + ``` + +## Esercizio 9 + +### Arresto dei processi in base al nome con `pkill` + +#### Terminare i processi in base al nome utilizzando `pkill` + +1. Identificare i processi con un nome specifico, come “firefox”. + + ```bash + pkill firefox + ``` + + !!! question "Domanda" + + ``` + Sono stati terminati tutti i processi con il nome “firefox”? + ``` + +2. Controllare che lo stato dei processi sia terminato utilizzando `ps`. + + ```bash + ps aux | grep firefox + ``` + + !!! question "Domanda" + + ``` + Ci sono processi rimanenti con il nome “firefox”? + ``` + + Utilizza `pkill` per terminare forzatamente tutti i processi con un nome specifico. + + ```bash + pkill -9 firefox + ``` + + Verificare che tutti i processi con il nome “firefox” siano stati terminati. + + !!! question "Domanda" + + ``` + Qual è la differenza tra l'uso di `kill` e `pkill` per terminare i processi in base al nome? + ``` + +## Esercizio 10 + +Questo esercizio riguarda l'uso del potente comando `exec`. + +### Controllo dei processi con `exec` + +#### Rimpiazzare la shell corrente con un altro comando utilizzando `exec` + +1. Avviare una nuova sessione shell. Digitare: + + ```bash + bash + ``` + +2. Lanciare un comando che non esce dalla nuova shell, come un semplice ciclo while. + + ```bash + while true; do echo "Running..."; done + ``` + +3. Nella shell corrente, sostituire il comando in esecuzione con uno diverso utilizzando `exec`. + + ```bash + exec echo "This replaces the previous command." + ``` + + Da notare che il comando precedente è stato chiuso e quello nuovo è in esecuzione. + +4. Verificare che il vecchio comando non sia più in esecuzione utilizzando `ps`. + + ```bash + ps aux | grep "while true" + ``` + + !!! question "Domanda" + + ``` + Il comando precedente è ancora in esecuzione? + ``` + + !!! question "Domanda" + + ``` + Spiega come il comando `exec` può sostituire il processo della shell corrente con un comando diverso. + ``` + +## Esercizio 11 + +### Gestione dei processi con `killall` + +Come `kill`, `killall` è un comando che consente di terminare i processi in base al nome anziché al PID. Si possono osservare alcune somiglianze tra l'uso di `killall` , `kill` e `pkill` nella chiusura dei processi. + +#### Terminare i processi in base al nome utilizzando `killall` + +1. Identificare i processi con un nome specifico, come “chrome”. + + ```bash + killall chrome + ``` + + !!! question "Domanda" + + ``` + Sono stati terminati tutti i processi con il nome “chrome”? + ``` + +2. Controllare che lo stato dei processi sia terminato utilizzando `ps`. + + ```bash + ps aux | grep chrome + ``` + + !!! question "Domanda" + + ``` + Ci sono processi rimanenti con il nome “chrome”? + ``` + +3. Utilizzare `killall` per terminare forzatamente tutti i processi con un nome specifico. + + ```bash + killall -9 chrome + ``` + + Verificare che tutti i processi con il nome “chrome” siano stati chiusi. + + !!! question "Domanda" + + ``` + In che modo `killall` differisce da `pkill` e `kill` quando si terminano i processi in base al nome? + ``` + +## Esercizio 12 + +### Gestione di `cgroups` + +#### Gestire i processi utilizzando `cgroups` + +1. Elencare i `cgroups` esistenti sul vostro sistema. + + ```bash + cat /proc/cgroups + ``` + + !!! question "Domanda" + + ``` + Quali sono i controller `cgroup` disponibili sul vostro sistema? + ``` + +2. Creare un nuovo cgroup utilizzando il controller della CPU. Nominarlo “mygroup”. + + ```bash + sudo mkdir -p /sys/fs/cgroup/cpu/mygroup + ``` + +3. Spostare un processo specifico (ad esempio, un comando sleep in esecuzione) nel `cgroup` “mygroup”. + + ```bash + echo | sudo tee /sys/fs/cgroup/cpu/mygroup/cgroup.procs + ``` + + Sostituire `` con il PID effettivo del processo. + +4. Verificare se il processo è stato spostato nel `cgroup` “mygroup”. + + ```bash + cat /sys/fs/cgroup/cpu/mygroup/cgroup.procs + ``` + + !!! question "Domanda" + + ``` + Il processo è elencato nel cgroup “mygroup”? + ``` + + !!! question "Domanda" + + ``` + Spiegare il concetto di “cgroups” in Linux e come questi possono gestire e controllare l'allocazione delle risorse per i processi. + ``` + +## Esercizio 13 + +### Gestione dei processi con `renice` + +#### Regolare la priorità di un processo in esecuzione utilizzando `renice` + +1. Identificare un processo in esecuzione con un PID e una priorità specifici utilizzando `ps`. + + ```bash + ps -p -o ni + ``` + + !!! question "Domanda" + + ``` + Qual è l'attuale priorità (valore nice) del processo? + ``` + +2. Utilizzare il comando `renice` per modificare la priorità (valore nice) del processo in esecuzione. + + ```bash + renice -p + ``` + + Sostituire `` con il nuovo valore di priorità che si desidera impostare e `` con il PID effettivo del processo. + +3. Verificare che la priorità del processo sia cambiata utilizzando `ps`. + + ```bash + ps -p -o ni + ``` + + !!! question "Domanda" + + ``` + La priorità ora è diversa? + ``` + +4. Provare a modificare la priorità impostando un valore più alto o più basso e osservare l'impatto sull'utilizzo delle risorse del processo. + + !!! question "Domanda" + + ``` + Cosa succede al consumo di risorse del processo con valori nice diversi? + ``` + + !!! question "Domanda" + + ``` + Spiegare come viene utilizzato il comando renice per regolare la priorità dei processi in esecuzione e i suoi effetti sull'utilizzo delle risorse di processo. + ```