From 561a11099a991911d8804b2c8c760a7a787844d9 Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Fri, 2 Feb 2024 17:12:56 -0500 Subject: [PATCH 1/3] New translations caddy.md (Italian) --- docs/guides/web/caddy.it.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/guides/web/caddy.it.md b/docs/guides/web/caddy.it.md index 61e27c1a87..a72ad89e5d 100644 --- a/docs/guides/web/caddy.it.md +++ b/docs/guides/web/caddy.it.md @@ -146,7 +146,7 @@ systemctl enable --now caddy Entro un minuto, Caddy otterrà i certificati SSL da Let's Encrypt. A questo punto, è possibile visualizzare il sito web appena impostato in un browser: -![Caddy serve il nostro sito web dimostrativo](../images/caddy_esempio.png) +![Caddy serve il nostro sito web dimostrativo](../images/caddy_example.png) Dovrebbe avere un lucchetto SSL che dovrebbe funzionare in ogni browser moderno, e non solo, anche una valutazione A+ al [Qualys SSL Server Test](https://www.ssllabs.com/ssltest/). From 13165d21c1e15c625e1feebcd91750f5ae221df4 Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Fri, 2 Feb 2024 18:31:13 -0500 Subject: [PATCH 2/3] New translations 13-softwares.md (German) --- docs/books/admin_guide/13-softwares.de.md | 1023 +++++++++++++++++++++ 1 file changed, 1023 insertions(+) create mode 100644 docs/books/admin_guide/13-softwares.de.md diff --git a/docs/books/admin_guide/13-softwares.de.md b/docs/books/admin_guide/13-softwares.de.md new file mode 100644 index 0000000000..f9efbe8d26 --- /dev/null +++ b/docs/books/admin_guide/13-softwares.de.md @@ -0,0 +1,1023 @@ +--- +title: Softwareverwaltung +author: Antoine Le Morvan +contributors: Franco Colussi, Steven Spencer, Ganna Zhyrnova +tested version: 8.5 +tags: + - Schulung + - Software + - Softwareverwaltung +--- + +# Softwareverwaltung + +## Allgemeines + +Auf einem GNU/Linux-System ist es möglich, Software auf zwei Arten zu installieren: + +* Verwendung eines Installationspakets; +* Kompilierung aus Quelldateien. + +!!! note "Anmerkung" + + Die Installation aus dem Quellcode ist hier nicht abgedeckt. In der Regel sollten Sie die Paketmanager-Methode verwenden, es sei denn, die gewünschte Software ist nicht über den Paketmanager verfügbar. Ein Grund dafür ist, dass Abhängigkeiten im Allgemeinen vom Paketsystem verwaltet werden, während Sie mit dem Quellcode die Abhängigkeiten manuell verwalten müssen. + +**Das Paket**: Es ist eine einzige Datei, die alle Daten enthält, die für die Installation eines Programms benötigt werden. Es kann direkt auf dem System aus einem Software-Repository installiert werden. + +**Die Quelldateien**: Einige Programme wird nicht in Paketen bereitgestellt, die installiert werden können, sondern über ein Archiv, das die Quelldateien enthält. Es obliegt dem Administrator, diese Dateien vorzubereiten und zu kompilieren, um die Software zu installieren. + +## RPM: RedHat Paketmanager + +**RPM** (RedHat Package Manager) ist ein Software-Verwaltung-System. Es ist möglich, die in Paketen enthaltene Software zu installieren, zu deinstallieren, zu aktualisieren oder zu überprüfen. + +**RPM** ist das Format, das von allen RedHat basierten Distributionen verwendet wird (Rocky Linux, Fedora, CentOS, SuSe, Mandriva, ...). Das Äquivalent in der Debian-Welt ist DPKG (Debian Package). + +Der Name eines RPM-Pakets folgt einer spezifischen Nomenklatur: + +![Beschreibung eines Paketnamens](images/software-001.png) + +### Da Kommando `rpm` + +Mit dem Befehl rpm können Sie ein Paket installieren. + +```bash +rpm [-i][-U] package.rpm [-e] package +``` + +Beispiel (für ein Paket Namens 'package'): + +```bash +rpm -ivh package.rpm +``` + +| Option | Beschreibung | +| ---------------- | ---------------------------------------------- | +| `-i package.rpm` | installiert das Paket. | +| `-U package.rpm` | aktualisiert ein bereits installiertes Paket. | +| `-e package.rpm` | deinstalliert das Paket. | +| `-h` | zeigt einen Fortschrittsbalken an. | +| `-v` | informiert über den Fortschritt der Operation. | +| `--test` | testet den Befehl ohne ihn auszuführen. | + +Mit dem Befehl `rpm` können Sie auch die System-Paketdatenbank abfragen, indem Sie die Option `-q` hinzufügen. + +Es ist möglich, mehrere Arten von Abfragen auszuführen, um verschiedene Informationen über die installierten Pakete zu erhalten. Die RPM-Datenbank befindet sich im Verzeichnis `/var/lib/rpm`. + +Beispiel: + +```bash +rpm -qa +``` + +Dieser Befehl fragt alle auf dem System installierten Pakete ab. + +```bash +rpm -q [-a][-i][-l] package [-f] file +``` + +Beispiel: + +```bash +rpm -qil package +rpm -qf /path/to/file +``` + +| Option | Beschreibung | +| ---------------- | ----------------------------------------------------------------------------------------------------------------------- | +| `-a` | Listet alle auf dem System installierten Pakete auf. | +| `-i __package__` | Zeigt die Paketinformation an. | +| `-l __package__` | Listet die im Paket enthaltenen Dateien auf. | +| `-f` | Zeigt den Namen des Pakets, das die angegebene Datei enthält. | +| `--last` | Die Liste der Pakete wird nach dem Installationsdatum sortiert (die letzten installierten Pakete erscheinen als Erste). | + +!!! warning "Warnung" + + Nach der `-q` Option muss der Paketname genau sein. Platzhalter (wildcards) werden nicht unterstützt. + +!!! tip "Hinweis" + + Es ist jedoch möglich, alle installierten Pakete aufzulisten und mit dem Befehl `grep` zu filtern. + +Beispiel, Liste der zuletzt installierten Pakete: + +```bash +sudo rpm -qa --last | head +NetworkManager-config-server-1.26.0-13.el8.noarch Mon 24 May 2021 02:34:00 PM CEST +iwl2030-firmware-18.168.6.1-101.el8.1.noarch Mon 24 May 2021 02:34:00 PM CEST +iwl2000-firmware-18.168.6.1-101.el8.1.noarch Mon 24 May 2021 02:34:00 PM CEST +iwl135-firmware-18.168.6.1-101.el8.1.noarch Mon 24 May 2021 02:34:00 PM CEST +iwl105-firmware-18.168.6.1-101.el8.1.noarch Mon 24 May 2021 02:34:00 PM CEST +iwl100-firmware-39.31.5.1-101.el8.1.noarch Mon 24 May 2021 02:34:00 PM CEST +iwl1000-firmware-39.31.5.1-101.el8.1.noarch Mon 24 May 2021 02:34:00 PM CEST +alsa-sof-firmware-1.5-2.el8.noarch Mon 24 May 2021 02:34:00 PM CEST +iwl7260-firmware-25.30.13.0-101.el8.1.noarch Mon 24 May 2021 02:33:59 PM CEST +iwl6050-firmware-41.28.5.1-101.el8.1.noarch Mon 24 May 2021 02:33:59 PM CEST +``` + +Beispiel, listet den Installationsverlauf des Kernels auf: + +```bash +sudo rpm -qa --last kernel +kernel-4.18.0-305.el8.x86_64 Tue 25 May 2021 06:04:56 AM CEST +kernel-4.18.0-240.22.1.el8.x86_64 Mon 24 May 2021 02:33:35 PM CEST +``` + +Beispiel, Liste aller installierten Pakete mit einem bestimmten Namen mit `grep`: + +```bash +sudo dnf list installed | grep httpd +centos-logos-httpd.noarch 80.5-2.el8 @baseos +httpd.x86_64 2.4.37-30.module_el8.3.0+561+97fdbbcc @appstream +httpd-filesystem.noarch 2.4.37-30.module_el8.3.0+561+97fdbbcc @appstream +httpd-tools.x86_64 2.4.37-30.module_el8.3.0+561+97fdbbcc @appstream +``` + +## DNF: Dandified Yum + +**DNF** (**Dandified Yum**) ist ein Software-Paketmanager, Nachfolger von **YUM** (**Y**ellow dog **U**pdater **M**odified). Es funktioniert mit **RPM**-Paketen, die in einem lokalen oder entfernten Repository gruppiert sind (ein Verzeichnis zum Speichern von Paketen). Bei den gängigsten Befehlen ist die Verwendung identisch mit der von `yum`. + +Der `dnf` Befehl ermöglicht die Verwaltung von Paketen, indem er die installierten Pakete mit denen in den auf dem Server definierten Repositories vergleicht. Er installiert auch automatisch Abhängigkeiten wenn sie auch in den Repositories vorhanden sind. + +`dnf` ist der Paketmanager, der von vielen RedHat-basierten Distributionen verwendet wird (Rocky Linux, Fedora, CentOS, ...). Das Pendant in der Debian-Welt ist **APT** (**A**dvanced **P**ackaging **T**ool). + +### `dnf` Befehl + +Mit dem `dnf` Befehl können Sie ein Paket installieren, indem Sie nur die Kurzbezeichnung angeben. + +```bash +dnf [install][remove][list all][search][info] package +``` + +Beispiel: + +```bash +dnf install tree +``` + +Es wird nur der Kurzname des Pakets benötigt. + +| Option | Beschreibung | +| ------------------------- | ------------------------------------------------------------------------------------------------- | +| `install` | installiert das Paket. | +| `remove` | Das Paket deinstallieren. | +| `list all` | Listet die Pakete auf, die bereits im Repository sind. | +| `search` | Suche nach einem Paket im Repository. | +| `provides */command_name` | Suche nach einem Befehl. | +| `info` | Zeigt die Paketinformation an. | +| `autoremove` | Entfernt alle Pakete, die als Abhängigkeiten installiert wurden, aber nicht mehr benötigt werden. | + + +Mit dem `dnf install` Befehl können Sie das gewünschte Paket installieren, ohne sich um seine Abhängigkeiten zu kümmern, die direkt durch `dnf` selbst gelöst werden. + +```bash +dnf install nginx +Last metadata expiration check: 3:13:41 ago on Wed 23 Mar 2022 07:19:24 AM CET. +Dependencies resolved. +============================================================================================================================ + Package Architecture Version Repository Size +============================================================================================================================ +Installing: + nginx aarch64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 543 k +Installing dependencies: + nginx-all-modules noarch 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 22 k + nginx-mod-http-image-filter aarch64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 33 k + nginx-mod-http-perl aarch64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 44 k + nginx-mod-http-xslt-filter aarch64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 32 k + nginx-mod-mail aarch64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 60 k + nginx-mod-stream aarch64 1:1.14.1-9.module+el8.4.0+542+81547229 appstream 82 k + +Transaction Summary +============================================================================================================================ +Install 7 Packages + +Total download size: 816 k +Installed size: 2.2 M +Is this ok [y/N]: +``` + +Falls Sie sich nicht an den genauen Namen des Pakets erinnern, können Sie ihn mit dem Befehl `dnf search name` suchen. Wie Sie sehen können, gibt es einen Abschnitt, der den genauen Namen und einen anderen, der die Paketkorrespondenz enthält. Alle werden hervorgehoben, um die Suche zu vereinfachen. + +```bash +dnf search nginx +Last metadata expiration check: 0:20:55 ago on Wed 23 Mar 2022 10:40:43 AM CET. +=============================================== Name Exactly Matched: nginx ================================================ +nginx.aarch64 : A high performance web server and reverse proxy server +============================================== Name & Summary Matched: nginx =============================================== +collectd-nginx.aarch64 : Nginx plugin for collectd +munin-nginx.noarch : NGINX support for Munin resource monitoring +nginx-all-modules.noarch : A meta package that installs all available Nginx modules +nginx-filesystem.noarch : The basic directory layout for the Nginx server +nginx-mod-http-image-filter.aarch64 : Nginx HTTP image filter module +nginx-mod-http-perl.aarch64 : Nginx HTTP perl module +nginx-mod-http-xslt-filter.aarch64 : Nginx XSLT module +nginx-mod-mail.aarch64 : Nginx mail modules +nginx-mod-stream.aarch64 : Nginx stream modules +pagure-web-nginx.noarch : Nginx configuration for Pagure +pcp-pmda-nginx.aarch64 : Performance Co-Pilot (PCP) metrics for the Nginx Webserver +python3-certbot-nginx.noarch : The nginx plugin for certbot +``` + +Eine andere Möglichkeit, nach einem Paket zu suchen, indem Sie einen zusätzlichen Suchschlüssel eingeben, ist, das Ergebnis des `dnf` Befehls über eine Pipe an den grep-Befehl mit dem gewünschten Schlüssel zu senden. + +```bash +dnf search nginx | grep mod +Last metadata expiration check: 3:44:49 ago on Wed 23 Mar 2022 06:16:47 PM CET. +nginx-all-modules.noarch : A meta package that installs all available Nginx modules +nginx-mod-http-image-filter.aarch64 : Nginx HTTP image filter module +nginx-mod-http-perl.aarch64 : Nginx HTTP perl module +nginx-mod-http-xslt-filter.aarch64 : Nginx XSLT module +nginx-mod-mail.aarch64 : Nginx mail modules +nginx-mod-stream.aarch64 : Nginx stream modules +``` + + +Der `dnf remove` Befehl entfernt ein Paket vom System und seine Abhängigkeiten. Unten ist ein Auszug des **dnf remove httpd** Befehls. + +```bash +dnf remove httpd +Dependencies resolved. +============================================================================================================================ + Package Architecture Version Repository Size +============================================================================================================================ +Removing: + httpd aarch64 2.4.37-43.module+el8.5.0+727+743c5577.1 @appstream 8.9 M +Removing dependent packages: + mod_ssl aarch64 1:2.4.37-43.module+el8.5.0+727+743c5577.1 @appstream 274 k + php aarch64 7.4.19-1.module+el8.5.0+696+61e7c9ba @appstream 4.4 M + python3-certbot-apache noarch 1.22.0-1.el8 @epel 539 k +Removing unused dependencies: + apr aarch64 1.6.3-12.el8 @appstream 299 k + apr-util aarch64 1.6.1-6.el8.1 @appstream 224 k + apr-util-bdb aarch64 1.6.1-6.el8.1 @appstream 67 k + apr-util-openssl aarch64 1.6.1-6.el8.1 @appstream 68 k + augeas-libs aarch64 1.12.0-6.el8 @baseos 1.4 M + httpd-filesystem noarch 2.4.37-43.module+el8.5.0+727+743c5577.1 @appstream 400 + httpd-tools aarch64 2.4.37-43.module+el8.5.0+727+743c5577.1 +... +``` + +Der `dnf list` Befehl listet alle Pakete auf, die auf dem System installiert sind und im Repository vorhanden sind. Es akzeptiert mehrere Parameter: + +| Parameter | Beschreibung | +| ----------- | --------------------------------------------------------------------------------------------------------- | +| `all` | Listet die installierten und die in den Repositories verfügbaren Pakete auf. | +| `available` | Listet nur die für die Installation verfügbaren Pakete auf. | +| `updates` | Listet Pakete auf, die aktualisiert werden können. | +| `obsoletes` | Listet die Pakete auf, die durch die Umstellung auf höheren verfügbaren Versionen, obsolet geworden sind. | +| `recent` | Listet die neuesten Pakete auf, die dem Repository zuletzt hinzugefügt wurden. | + +Der `dnf info` Befehl liefert detaillierte Informationen zu einem Paket: + +```bash +dnf info firewalld +Last metadata expiration check: 15:47:27 ago on Tue 22 Mar 2022 05:49:42 PM CET. +Installed Packages +Name : firewalld +Version : 0.9.3 +Release : 7.el8 +Architecture : noarch +Size : 2.0 M +Source : firewalld-0.9.3-7.el8.src.rpm +Repository : @System +From repo : baseos +Summary : A firewall daemon with D-Bus interface providing a dynamic firewall +URL : http://www.firewalld.org +License : GPLv2+ +Description : firewalld is a firewall service daemon that provides a dynamic customizable + : firewall with a D-Bus interface. + +Available Packages +Name : firewalld +Version : 0.9.3 +Release : 7.el8_5.1 +Architecture : noarch +Size : 501 k +Source : firewalld-0.9.3-7.el8_5.1.src.rpm +Repository : baseos +Summary : A firewall daemon with D-Bus interface providing a dynamic firewall +URL : http://www.firewalld.org +License : GPLv2+ +Description : firewalld is a firewall service daemon that provides a dynamic customizable + : firewall with a D-Bus interface. +``` + +Manchmal kennen Sie nur die ausführbare Datei, die Sie verwenden möchten, nicht jedoch das Paket, das sie enthält. In diesem Fall können Sie den Befehl `dnf provide Paketname` verwenden, der die Datenbank nach der gewünschten Übereinstimmung durchsucht. + +Beispiel für die Suche nach dem `semanage` Kommando: + +```bash +dnf provides */semanage +Last metadata expiration check: 1:12:29 ago on Wed 23 Mar 2022 10:40:43 AM CET. +libsemanage-devel-2.9-6.el8.aarch64 : Header files and libraries used to build policy manipulation tools +Repo : powertools +Matched from: +Filename : /usr/include/semanage + +policycoreutils-python-utils-2.9-16.el8.noarch : SELinux policy core python utilities +Repo : baseos +Matched from: +Filename : /usr/sbin/semanage +Filename : /usr/share/bash-completion/completions/semanage +``` + +Das Kommando `dnf autoremove` benötigt keine Parameter. Dnf kümmert sich um die Suche nach Paketen als Kandidaten zur Entfernung. + +```bash +dnf autoremove +Last metadata expiration check: 0:24:40 ago on Wed 23 Mar 2022 06:16:47 PM CET. +Dependencies resolved. +Nothing to do. +Complete! +``` + +### Andere nützliche `dnf` Optionen + +| Option | Beschreibung | +| ----------- | ---------------------------------------------------------- | +| `repolist` | Listet die auf dem System konfigurierten Repositories auf. | +| `grouplist` | Listet verfügbare Paket-Sammlungen auf. | +| `reinigen` | Entfernt temporäre Dateien. | + +Der `dnf repolist` Befehl listet die auf dem System konfigurierten Repositories auf. Standardmäßig listet er nur die aktivierten Repositorys auf, kann aber mit folgenden Parametern verwendet werden: + +| Parameter | Beschreibung | +| ------------ | ----------------------------------------- | +| `--all` | Listet alle Repositories auf. | +| `--enabled` | Default | +| `--disabled` | Listet nur deaktivierte Repositories auf. | + +Beispiel: + +```bash +dnf repolist +repo id repo name +appstream Rocky Linux 8 - AppStream +baseos Rocky Linux 8 - BaseOS +epel Extra Packages for Enterprise Linux 8 - aarch64 +epel-modular Extra Packages for Enterprise Linux Modular 8 - aarch64 +extras Rocky Linux 8 - Extras +powertools Rocky Linux 8 - PowerTools +rockyrpi Rocky Linux 8 - Rasperry Pi +``` + +Und ein Auszug des Befehls mit dem `--all` Flag. + +```bash +dnf repolist --all + +... +repo id repo name status +appstream Rocky Linux 8 - AppStream enabled +appstream-debug Rocky Linux 8 - AppStream - Source disabled +appstream-source Rocky Linux 8 - AppStream - Source disabled +baseos Rocky Linux 8 - BaseOS enabled +baseos-debug Rocky Linux 8 - BaseOS - Source disabled +baseos-source Rocky Linux 8 - BaseOS - Source disabled +devel Rocky Linux 8 - Devel WARNING! FOR BUILDROOT AND KOJI USE disabled +epel Extra Packages for Enterprise Linux 8 - aarch64 enabled +epel-debuginfo Extra Packages for Enterprise Linux 8 - aarch64 - Debug disabled +epel-modular Extra Packages for Enterprise Linux Modular 8 - aarch64 enabled +epel-modular-debuginfo Extra Packages for Enterprise Linux Modular 8 - aarch64 - Debug disabled +epel-modular-source Extra Packages for Enterprise Linux Modular 8 - aarch64 - Source +... +``` + +Unten ist ein Auszug aus der Liste der deaktivierten Repositorys. + +```bash +dnf repolist --disabled +repo id repo name +appstream-debug Rocky Linux 8 - AppStream - Source +appstream-source Rocky Linux 8 - AppStream - Source +baseos-debug Rocky Linux 8 - BaseOS - Source +baseos-source Rocky Linux 8 - BaseOS - Source +devel Rocky Linux 8 - Devel WARNING! FOR BUILDROOT AND KOJI USE +epel-debuginfo Extra Packages for Enterprise Linux 8 - aarch64 - Debug +epel-modular-debuginfo Extra Packages for Enterprise Linux Modular 8 - aarch64 - Debug +epel-modular-source Extra Packages for Enterprise Linux Modular 8 - aarch64 - Source +epel-source Extra Packages for Enterprise Linux 8 - aarch64 - Source +epel-testing Extra Packages for Enterprise Linux 8 - Testing - aarch64 +... +``` + +Mit der Option `-v` wird die Liste um viele zusätzliche Informationen ergänzt. Unten sehen Sie einen Teil des Ergebnisses des Befehls. + +```bash +dnf repolist -v + +... +Repo-id : powertools +Repo-name : Rocky Linux 8 - PowerTools +Repo-revision : 8.5 +Repo-distro-tags : [cpe:/o:rocky:rocky:8]: , , 8, L, R, c, i, k, n, o, u, x, y +Repo-updated : Wed 16 Mar 2022 10:07:49 PM CET +Repo-pkgs : 1,650 +Repo-available-pkgs: 1,107 +Repo-size : 6.4 G +Repo-mirrors : https://mirrors.rockylinux.org/mirrorlist?arch=aarch64&repo=PowerTools-8 +Repo-baseurl : https://example.com/pub/rocky/8.8/PowerTools/x86_64/os/ (30 more) +Repo-expire : 172,800 second(s) (last: Tue 22 Mar 2022 05:49:24 PM CET) +Repo-filename : /etc/yum.repos.d/Rocky-PowerTools.repo +... +``` + +!!! info "Gruppen verwenden" + + Gruppen sind eine Sammlung von Paketen (Sie können sich sie als virtuelle Pakete vorstellen), die eine Reihe von logisch zusammenhängende Anwendungen gruppieren, um einen bestimten Zweck zu erfüllen (eine Desktop-Umgebung, ein Server, Entwicklungswerkzeuge, etc.). + +Der `dnf grouplist` Befehl listet alle verfügbaren Gruppen auf. + +```bash +dnf grouplist +Last metadata expiration check: 1:52:00 ago on Wed 23 Mar 2022 02:11:43 PM CET. +Available Environment Groups: + Server with GUI + Server + Minimal Install + KDE Plasma Workspaces + Custom Operating System +Available Groups: + Container Management + .NET Core Development + RPM Development Tools + Development Tools + Headless Management + Legacy UNIX Compatibility + Network Servers + Scientific Support + Security Tools + Smart Card Support + System Tools + Fedora Packager + Xfce +``` + +Mit dem `dnf groupinstall` Befehl können Sie eine dieser Gruppen installieren. + +```bash +dnf groupinstall "Network Servers" +Last metadata expiration check: 2:33:26 ago on Wed 23 Mar 2022 02:11:43 PM CET. +Dependencies resolved. +================================================================================ + Package Architecture Version Repository Size +================================================================================ +Installing Groups: + Network Servers + +Transaction Summary +================================================================================ + +Is this ok [y/N]: +``` + +Beachten Sie, dass es eine gute Praxis ist, den Gruppennamen in doppelte Anführungszeichen einzufügen, da ohne sie, den Befehl nur korrekt ausgeführt wird, wenn der Gruppenname keine Leerzeichen enthält. + +Also erzeugt ein `dnf groupinstall Network Server` den folgenden Fehler: + +```bash +dnf groupinstall Network Servers +Last metadata expiration check: 3:05:45 ago on Wed 23 Mar 2022 02:11:43 PM CET. +Module or Group 'Network' is not available. +Module or Group 'Servers' is not available. +Error: Nothing to do. +``` + +Der Befehl zum Entfernen einer Gruppe ist `dnf groupremove "name group"`. + +Der `dnf clean` Befehl löscht alle Caches und temporären Dateien, die von `dnf` erstellt wurden. Er kann mit den folgenden Parametern verwendet werden. + +| Parameter | Beschreibung | +| -------------- | ---------------------------------------------------------------------------------- | +| `all` | Entfernt alle temporären Dateien, die für aktivierte Repositories erstellt wurden. | +| `dbcache` | Entfernt Cache-Dateien für die Repository-Metadaten. | +| `expire-cache` | Entfernen der lokalen Cookie-Dateien. | +| `metadata` | Entfernt alle Repositories-Metadaten. | +| `packages` | Entfernt alle zwischengespeicherten Pakete. | + + +### So funktioniert DNF + +Der DNF-Manager setzt auf eine oder mehrere Konfigurationsdateien, um die Repositories mit den RPM-Paketen anzusprechen. + +Diese Dateien befinden sich in `/etc/yum.repos.d/` und müssen mit `.repo` enden, um von DNS ausgewertet zu werden. + +Beispiel: + +```bash +/etc/yum.repos.d/Rocky-BaseOS.repo +``` + +Jede `.repo` Datei besteht aus mindestens den folgenden Informationen, einer Direktive pro Zeile. + +Beispiel: + +``` +[baseos] # Short name of the repository +name=Rocky Linux $releasever - BaseOS # Short name of the repository #Detailed name +mirrorlist=http://mirrors.rockylinux.org/mirrorlist?arch=$basearch&repo=BaseOS-$releasever # http address of a list or mirror +#baseurl=http://dl.rockylinux.org/$contentdir/$releasever/BaseOS/$basearch/os/ # http address for direct access +gpgcheck=1 # Repository requiring a signature +enabled=1 # Activated =1, or not activated =0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial # GPG public key path +``` + +Standardmäßig ist die `enabled` Direktive nicht vorhanden, was bedeutet, dass das Repository aktiviert ist. Um ein Repository zu deaktivieren, müssen Sie die `enabled=0` Direktive angeben. + +## DNF-Module + +Module wurden in Rocky Linux 8 vom Upstream-System eingeführt. Um Module nutzen zu können, muss das AppStream-Repository existieren und aktiviert sein. + +!!! hint "Package Confusion" + + Die Einführung von Modul-Streams im AppStream Repository verursachte viel Verwirrung. Da Module in einem Stream verpackt sind (siehe Beispiele unten), werden bestimmte Pakete in unseren RPMs auftauchen, aber wenn der Versuch gemacht wird, ein dieser Pakete ohne das Modul zu installieren, passiert nichts. Denken Sie daran, Module zu durchsuchen, wenn Sie versuchen, ein Paket zu installieren und es nicht gefunden wird. + +### Was sind Module? + +Module stammen aus dem AppStream Repository und enthalten sowohl Streams als auch Profile. Diese lassen sich wie folgt beschreiben: + +* **Modul-Streams:** Ein Modul-Stream kann als separates Repository innerhalb des AppStream-Repository angesehen werden, das verschiedene Anwendungsversionen enthält. Diese Modul-Repositories enthalten die Anwendungs-RPMs, Abhängigkeiten und Dokumentation für diesen bestimmten Stream. Ein Beispiel für einen Modul-Stream in Rocky Linux 8 wäre `postgresql`. Wenn Sie `postgresql` mit dem Standard Befehl `sudo dnf install postgresql`, erhalten Sie die Version 10. Mit Hilfe von Modulen können Sie stattdessen die Versionen 9.6, 12 oder 13 installieren. + +* **Modulprofile:** Was ein Modulprofil tut, ist den Anwendungsfall für den Modul-Stream bei der Installation des Pakets zu berücksichtigen. Das Anwenden eines Profils passt die Paket-RPMs, die Abhängigkeiten und dieDokumentation an die Verwendung des Moduls an. Mit dem gleichen `postgresql`-Stream in unserem Beispiel können Sie ein Profil von "Server" oder "Client" anwenden. Offensichtlich benötigen Sie nicht die gleichen Pakete, wenn Sie einfach `postgresql` als Client verwenden, um auf einen Server zuzugreifen. + +### Übersicht der Module + +Mit folgendem Befehl erhalten Sie eine Liste der verfügbaren Module: + +``` +dnf module list +``` + +Dadurch erhalten Sie eine lange Liste der Module und Profile, die Sie verwenden können. Wahrscheinlich wissen Sie schon, an welchem Paket Sie interessiert sind. Um herauszufinden, ob es Module für ein bestimmtes Paket gibt, fügen Sie bitte den Paketnamen nach "list" ein. Wir werden unser `postgresql`-Beispiel hier erneut verwenden: + +``` +dnf module list postgresql +``` + +Das Ergebnis sollte so aussehen: + +``` +Rocky Linux 8 - AppStream +Name Stream Profiles Summary +postgresql 9.6 client, server [d] PostgreSQL server and client module +postgresql 10 [d] client, server [d] PostgreSQL server and client module +postgresql 12 client, server [d] PostgreSQL server and client module +postgresql 13 client, server [d] PostgreSQL server and client module +``` + +Beachten Sie bitte das "[d]". Hiermit ist die Standardeinstellung gekennzeichnet. Es zeigt an, dass die Standardversion 10 ist und dass unabhängig davon für welche Version Sie sich entscheiden, wenn Sie kein Profil angeben, wird das Profil des Servers verwendet, da es auch die Standardeinstellung ist. + +### Module aktivieren + +Mit unserem Beispiel `postgresql` Paket wollen wir Version 12 aktivieren. Dazu verwenden Sie einfach Folgendes: + +``` +dnf module enable postgresql:12 +``` + +Hier benötigt der Aktivierungsbefehl den Modulnamen gefolgt von einem ":" und dem Streamnamen. + +Um zu überprüfen, ob das `postgresql`-Modul in der Stream-Version 12 aktiviert wurde, verwenden Sie erneut den Befehl „list“, der die folgende Ausgabe anzeigen sollte: + +``` +Rocky Linux 8 - AppStream +Name Stream Profiles Summary +postgresql 9.6 client, server [d] PostgreSQL server and client module +postgresql 10 [d] client, server [d] PostgreSQL server and client module +postgresql 12 [e] client, server [d] PostgreSQL server and client module +postgresql 13 client, server [d] PostgreSQL server and client module +``` + +Hier sehen Sie das „[e]“-Symbol für „aktiviert“ neben Stream 12. Wir wissen also, dass Version 12 aktiviert ist. + +### Installatin der Pakete aus dem Modul-Stream + +Jetzt, da unser Modul-Stream aktiviert ist, ist der nächste Schritt die Installation von `postgresql`, die Client-Anwendung für den Postgresql-Server. Dies kann erreicht werden, indem der folgende Befehl ausgeführt wird: + +``` +dnf install postgresql +``` + +Folgenges sollte dann ausgegeben werden: + +``` +======================================================================================================================================== + Package Architecture Version Repository Size +======================================================================================================================================== +Installing group/module packages: + postgresql x86_64 12.12-1.module+el8.6.0+1049+f8fc4c36 appstream 1.5 M +Installing dependencies: + libpq x86_64 13.5-1.el8 appstream 197 k + +Transaction Summary +======================================================================================================================================== +Install 2 Packages +Total download size: 1.7 M +Installed size: 6.1 M +Is this ok [y/N]: +``` + +Mit der Eingabe von "y" wird die Anwendung installiert. + +### Pakete aus Modul-Stream-Profilen installieren + +Sie können Pakete sogar direkt installieren, ohne das Modul-Streaming aktivieren zu müssen! In diesem Beispiel nehmen wir an, dass wir nur das Client-Profile aus Ihrer Installation anwenden. Um dies zu erreichen, verwenden wir folgendes Kommando: + +``` +dnf install postgresql:12/client +``` + +Die Ausgabe sollte wie folgt aussehen: + +``` +======================================================================================================================================== + Package Architecture Version Repository Size +======================================================================================================================================== +Installing group/module packages: + postgresql x86_64 12.12-1.module+el8.6.0+1049+f8fc4c36 appstream 1.5 M +Installing dependencies: + libpq x86_64 13.5-1.el8 appstream 197 k +Installing module profiles: + postgresql/client +Enabling module streams: + postgresql 12 + +Transaction Summary +======================================================================================================================================== +Install 2 Packages + +Total download size: 1.7 M +Installed size: 6.1 M +Is this ok [y/N]: +``` + +Durch die Angabe von "y" wird alles installiert, um postgresql Version 12 als Client zu verwenden. + +### Modul entfernen und zurücksetzen oder die Version umschalten + +Nach der Installation könnten Sie aus irgendeinem Grund entscheiden, dass Sie eine andere Version des Streams benötigen. Der erste Schritt ist das Entfernen der Pakete. Wenn wir unser Beispiel `postgresql` Paket erneut verwenden, würden wir dies tun mit folgendem Kommando: + +``` +dnf remove postgresql +``` + +Dies zeigt eine ähnliche Ausgabe wie die obige Installationsprozedur, es entfernt jedoch das Paket und alle seine Abhängigkeiten. Antworten Sie "y" auf die Eingabeaufforderung und drücken Sie Enter um `postgresql` zu deinstallieren. + +Sobald dieser Schritt abgeschlossen ist, können Sie den Zurücksetzen-Befehl für das Modul anwenden: + +``` +dnf module reset postgresql +``` + +Das Ergebnis sollte so aussehen: + +``` +Dependencies resolved. +======================================================================================================================================== + Package Architecture Version Repository Size +======================================================================================================================================== +Disabling module profiles: + postgresql/client +Resetting modules: + postgresql + +Transaction Summary +======================================================================================================================================== + +Is this ok [y/N]: +``` + +Das Beantworten mit "y" auf die Eingabeaufforderung wird `postgresql` zurücksetzen und den von uns aktivierten Stream (12 in unserem Beispiel) deaktivieren: + +``` +Rocky Linux 8 - AppStream +Name Stream Profiles Summary +postgresql 9.6 client, server [d] PostgreSQL server and client module +postgresql 10 [d] client, server [d] PostgreSQL server and client module +postgresql 12 client, server [d] PostgreSQL server and client module +postgresql 13 client, server [d] PostgreSQL server and client module +``` + +Jetzt können Sie die Default-Einstellung verwenden. + +Sie können auch die "switch-to"-Anweisung verwenden, um von einem aktivierten Stream auf einen anderen zu wechseln. Mit dieser Methode wechseln Sie nicht nur zum neuen Stream, sondern installieren auch die erforderlichen Pakete (sowohl für Downgrade als auch Upgrade) ohne einen separaten Schritt. Um diese Methode zu verwenden, um `postgresql` Stream Version 13 zu aktivieren und das "Client"-Profil zu verwenden, würden Sie folgendes verwenden: + +``` +dnf module switch-to postgresql:13/client +``` + +### Modul-Stream deaktivieren + +Es kann Fälle geben, in denen Sie die Möglichkeit deaktivieren möchten, Pakete von einem Modul-Stream zu installieren. Im Falle unseres `postgresql`-Beispiels könnte das daran liegen, dass Sie das Projektarchiv direkt von [PostgreSQL](https://www.postgresql.org/download/linux/redhat/) verwenden wollen, so dass Sie eine neuere Version verwenden können (zum Zeitpunkt dieses Schreibens, Versionen 14 und 15 sind in diesem Repository verfügbar). Das Deaktivieren eines Modul-Streams macht die Installation eines dieser Pakete unmöglich, ohne sie vorher wieder zu aktivieren. + +Um die Modul-Streams für `postgresql` zu deaktivieren, genügt es wie folgt vorzugehen: + +``` +dnf module disable postgresql +``` + +Und wenn Sie die `postgresql` Module erneut auflisten, sehen Sie folgendes, wobei alle `postgresql` Modul-Versionen deaktiviert sind: + +``` +Rocky Linux 8 - AppStream +Name Stream Profiles Summary +postgresql 9.6 [x] client, server [d] PostgreSQL server and client module +postgresql 10 [d][x] client, server [d] PostgreSQL server and client module +postgresql 12 [x] client, server [d] PostgreSQL server and client module +postgresql 13 [x] client, server [d] PostgreSQL server and client module +``` + +## Das EPEL-Repository + +### Was ist EPEL und wie wird das verwendet? + +**EPEL** (**E**xtra **P**Pakete für **E**nterprise **L**inux) ist ein Open-Source und kostenloses Community-basiertes Repository, das von der [EPEL Fedora Special Interest Group](https://docs.fedoraproject.org/en-US/epel/) betreut wird, das eine Reihe zusätzlicher Pakete für RHEL (sowie CentOS, Rocky Linux und andere) aus den Fedora-Quellen anbietet. + +Es enthält Pakete, die nicht in den offiziellen RHEL-Repositories enthalten sind. Diese werden nicht einbezogen, weil sie in einem Unternehmensumfeld nicht als notwendig erachtet werden oder nur außerhalb des RHEL-Bereichs als notwendig erachtet werden. Wir dürfen nicht vergessen, dass RHEL eine Unternehmens-Distribution ist und Desktop-Utilities oder andere spezialisierte Software können ggf. keine Priorität für ein Unternehmensprojekt sein. + +### Installation + +Die Installation der notwendigen Dateien kann leicht mit dem Paket durchgeführt werden, das standardmäßig von Rocky Linux zur Verfügung gestellt wird. + +Wenn Sie hinter einem Internet-Proxy stehen: + +```bash +export http_proxy=http://172.16.1.10:8080 +``` + +Dann: + +```bash +dnf install epel-release +``` + +Nach der Installation, können Sie mit dem Befehl `dnf info` überprüfen, ob das Paket korrekt installiert wurde. + +```bash +dnf info epel-release +Last metadata expiration check: 1:30:29 ago on Thu 24 Mar 2022 09:36:42 AM CET. +Installed Packages +Name : epel-release +Version : 8 +Release : 14.el8 +Architecture : noarch +Size : 32 k +Source : epel-release-8-14.el8.src.rpm +Repository : @System +From repo : epel +Summary : Extra Packages for Enterprise Linux repository configuration +URL : http://download.fedoraproject.org/pub/epel +License : GPLv2 +Description : This package contains the Extra Packages for Enterprise Linux + : (EPEL) repository GPG key as well as configuration for yum. +``` + +Das Paket enthält keine ausführbaren Programme, Bibliotheken usw., aber nur die Konfigurationsdateien und GPG-Schlüssel zum Einrichten des Repository. + +Eine weitere Möglichkeit, die Installation zu überprüfen, ist die Abfrage der rpm-Datenbank. + +```bash +rpm -qa | grep epel +epel-release-8-14.el8.noarch +``` + +Nun müssen Sie ein Update ausführen um `dnf` das Projektarchiv erkennen zu lassen. Sie werden aufgefordert, die GPG-Schlüssel der Repositories zu akzeptieren. Natürlich müssen Sie "yes" antworten, um sie zu nutzen. + +```bash +dnf update +``` + +Sobald die Aktualisierung abgeschlossen ist, können Sie überprüfen, ob das Projektarchiv korrekt mit dem `dnf repolist` Befehl konfiguriert wurde, der nun die neuen Repositories auflisten sollte. + +```bash +dnf repolist +repo id repo name +... +epel Extra Packages for Enterprise Linux 8 - aarch64 +epel-modular Extra Packages for Enterprise Linux Modular 8 - aarch64 +... +``` + +Die Konfigurationsdateien des Projektarchivs befinden sich in `/etc/yum.repos.d/`. + +``` +ll /etc/yum.repos.d/ | grep epel +-rw-r--r--. 1 root root 1485 Jan 31 17:19 epel-modular.repo +-rw-r--r--. 1 root root 1422 Jan 31 17:19 epel.repo +-rw-r--r--. 1 root root 1584 Jan 31 17:19 epel-testing-modular.repo +-rw-r--r--. 1 root root 1521 Jan 31 17:19 epel-testing.repo +``` + +Unten können wir den Inhalt der Datei `epel.repo` sehen. + +```bash +[epel] +name=Extra Packages for Enterprise Linux $releasever - $basearch +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place its address here. +#baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch +metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-$releasever&arch=$basearch&infra=$infra&content=$contentdir +enabled=1 +gpgcheck=1 +countme=1 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 + +[epel-debuginfo] +name=Extra Packages for Enterprise Linux $releasever - $basearch - Debug +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place its address here. +#baseurl=https://download.example/pub/epel/$releasever/Everything/$basearch/debug +metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-$releasever&arch=$basearch&infra=$infra&content=$contentdir +enabled=0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 +gpgcheck=1 + +[epel-source] +name=Extra Packages for Enterprise Linux $releasever - $basearch - Source +# It is much more secure to use the metalink, but if you wish to use a local mirror +# place it's address here. +#baseurl=https://download.example/pub/epel/$releasever/Everything/source/tree/ +metalink=https://mirrors.fedoraproject.org/metalink?repo=epel-source-$releasever&arch=$basearch&infra=$infra&content=$contentdir +enabled=0 +gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-8 +gpgcheck=1 +``` + +### EPEL verwenden + +An dieser Stelle sind wir bereit, die Pakete von EPEL zu installieren. Um zu starten, können wir die im Projektarchiv verfügbaren Pakete mit folgendem Befehl auflisten: + +```bash +dnf --disablerepo="*" --enablerepo="epel" list available +``` + +Und ein Auszug des Kommandos + +```bash +dnf --disablerepo="*" --enablerepo="epel" list available | less +Last metadata expiration check: 1:58:22 ago on Fri 25 Mar 2022 09:23:29 AM CET. +Available Packages +3proxy.aarch64 0.8.13-1.el8 epel +AMF-devel.noarch 1.4.23-2.el8 epel +AMF-samples.noarch 1.4.23-2.el8 epel +AusweisApp2.aarch64 1.22.3-1.el8 epel +AusweisApp2-data.noarch 1.22.3-1.el8 epel +AusweisApp2-doc.noarch 1.22.3-1.el8 epel +BackupPC.aarch64 4.4.0-1.el8 epel +BackupPC-XS.aarch64 0.62-1.el8 epel +BibTool.aarch64 2.68-1.el8 epel +CCfits.aarch64 2.5-14.el8 epel +CCfits-devel.aarch64 2.5-14.el8 epel +... +``` + +Aus dem Befehl können wir sehen, dass wir **dnf** zwingen müssen, das angeforderte Projektarchiv mit den Optionen `--disablerepo` und `--enablerepo` abzufragen Dies liegt daran, dass sonst ein Match in anderen optionalen Repositories gefunden wird (RPM Fusion, REMI, ELRepo, etc.). neuer sein können und daher Priorität haben. Diese Optionen sind nicht erforderlich, wenn Sie EPEL nur als optionales Projektarchiv installiert haben, da die Pakete im Projektarchiv niemals im offiziellen Verzeichnis verfügbar sein werden. Zumindest in der gleichen Version! + +!!! attention "Support-Überlegung" + + Ein Aspekt, der in Bezug auf die Unterstützung berücksichtigt werden muss (Updates, Bugfixes,...) ist, dass EPEL-Pakete keine offizielle Unterstützung von RHEL haben und technisch könnte ihr Leben den Zeitraum einer Entwicklung von Fedora (sechs Monate) überdauern und dann verschwinden. Dies ist eine entfernte Möglichkeit, aber eine Möglichkeit, die man in Betracht ziehen sollte. + +Um also ein Paket aus den EPEL-Repositories zu installieren, können Sie wie folgt vorgehen: + +```bash +dnf --disablerepo="*" --enablerepo="epel" install nmon +Last metadata expiration check: 2:01:36 ago on Fri 25 Mar 2022 04:28:04 PM CET. +Dependencies resolved. +============================================================================================================================================================== + Package Architecture Version Repository Size +============================================================================================================================================================== +Installing: + nmon aarch64 16m-1.el8 epel 71 k + +Transaction Summary +============================================================================================================================================================== +Install 1 Package + +Total download size: 71 k +Installed size: 214 k +Is this ok [y/N]: +``` + +### Conclusion + +EPEL ist kein offizielles Repository für RHEL, aber es kann nützlich für Administratoren und Entwickler sein, die mit RHEL oder Derivaten arbeiten und einige Hilfsprogramme benötigen, die für RHEL aus einer vertrauenswürdigen Quelle erstellt wurden. + +## DNF-Plugins + +Das `dnf-plugins-core` Paket fügt Plugins zu `dnf` hinzu, die für die Verwaltung Ihrer Repositories nützlich sind. + +!!! note "Hinweis" + + Mehr Informationen sind hier verfügbar: + https://dnf-plugins-core.readthedocs.io/de/latest/index.html + +Das Paket auf Ihrem System installieren: + +``` +dnf install dnf-plugins-core +``` + +Nicht alle Plugins werden hier vorgestellt, aber Sie können in der Paketdokumentation eine komplette Liste der Plugins und ausführliche Informationen finden. + +### `config-manager` Plugin + +DNF-Optionen verwalten, Repos hinzufügen oder deaktivieren. + +Beispiele: + +* `.repo` Datei herunterladen und verwenden: + +``` +dnf config-manager --add-repo https://packages.centreon.com/ui/native/rpm-standard/23.04/el8/centreon-23.04.repo +``` + +* Sie können auch eine URL als Basis-URL für ein Repo festlegen: + +``` +dnf config-manager --add-repo https://repo.rocky.lan/repo +``` + +* Aktivieren oder deaktivieren eines oder mehrerer Repos: + +``` +dnf config-manager --set-enabled epel centreon +dnf config-manager --set-disabled epel centreon +``` + +* Fügen Sie einen Proxy zu Ihrer Konfigurationsdatei hinzu: + +``` +dnf config-manager --save --setopt=*.proxy=http://proxy.rocky.lan:3128/ +``` + +### Plugin `copr` + +`copr` ist eine automatische Forge, die ein Repo mit gebauten Paketen liefert. + +* Copr Repo aktivieren: + +``` +copr enable xxxx +``` + +### `Plugin` herunterladen + +rpm-Paket herunterladen, anstatt es zu installieren: + +``` +dnf download ansible +``` + +Wenn Sie nur die URL des Remote-Standorts des Pakets erhalten möchten: + +``` +dnf download --url ansible +``` + +Oder wenn Sie auch die Abhängigkeiten herunterladen möchten: + +``` +dnf download --resolv --alldeps ansible +``` + +### `needs-restarting` Plugin + +Nach dem Ausführen eines `dnf update`werden die laufenden Prozesse weiterhin laufen, aber mit den alten Binärdateien. Um die Änderungen des Codes und insbesondere die Sicherheitsaktualisierungen zu berücksichtigen, müssen sie neu gestartet werden. + +Das `needs-restarting` Plugin ermöglicht Ihnen Prozesse, die neu zu starten sind, zu erkennen. + +``` +dnf needs-restarting [-u] [-r] [-s] +``` + +| Option | Beschreibung | +| ------- | --------------------------------------------------------------------- | +| `-u` | nur die Prozesse berücksichtigen, die zum laufenden Benutzer gehören. | +| `-r` | um zu überprüfen, ob ein Neustart erforderlich sein könnte. | +| `-s` | um zu überprüfen, ob Dienste neu gestartet werden müssen. | +| `-s -r` | um beides in einem Lauf zu tun. | + +### `versionlock` Plugin + +Manchmal ist es nützlich, Pakete vor Aktualisierungen zu schützen oder bestimmte Versionen eines Pakets auszuschließen (zum Beispiel wegen bekannter Probleme). Zu diesem Zweck wird das versionlock-Plugin eine große Hilfe sein. + +Dazu müssen Sie ein zusätzliches Paket installieren: + +``` +dnf install python3-dnf-plugin-versionlock +``` + +Beispiele: + +* Die ansible Version sperren: + +``` +dnf versionlock add ansible +Adding versionlock on: ansible-0:6.3.0-2.el9.* +``` + +* Gesperrte Pakete auflisten: + +``` +dnf versionlock list +ansible-0:6.3.0-2.el9.* +``` From 6deb48f96643a9063fcf00eee9952eb9a61daea8 Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Sat, 3 Feb 2024 00:49:22 -0500 Subject: [PATCH 3/3] New translations 04-advanced-commands.md (Chinese Simplified) --- .../admin_guide/04-advanced-commands.zh.md | 337 +++++++++++++----- 1 file changed, 246 insertions(+), 91 deletions(-) diff --git a/docs/books/admin_guide/04-advanced-commands.zh.md b/docs/books/admin_guide/04-advanced-commands.zh.md index 8c0ea8c18f..29e0a2ab02 100644 --- a/docs/books/admin_guide/04-advanced-commands.zh.md +++ b/docs/books/admin_guide/04-advanced-commands.zh.md @@ -10,13 +10,11 @@ title: 高级Linux 命令 **目标**:在本章中,未来的Linux管理员将学习: -:heavy_check_mark: 上一章没有介绍的一些有用命令。 -:heavy_check_mark: 一些高级命令。 +:heavy_check_mark: 上一章中没有介绍的一些有用命令。 :heavy_check_mark: 一些高级命令。 :checkered_flag: **用户命令**, **Linux** -**知识**: :star: -**复杂度**: :star: :star: :star: +**知识性**: :star: **复杂度**: :star: :star: :star: **阅读时间**: 20 分钟 @@ -26,9 +24,9 @@ title: 高级Linux 命令 `uniq`命令是一个非常强大的命令,与`sort`命令一起使用尤其适合用于日志文件分析。 它允许您通过删除重复项来排序和显示条目。 -为了说明`uniq`命令的工作原理,让我们使用一个包含名字列表的`firstnames.txt`文件: +为了说明 `uniq` 命令的工作原理,让我们使用一个包含名字列表的 `firstnames.txt` 文件: -``` +```text antoine xavier steven @@ -45,7 +43,7 @@ steven 如果不带选项,`uniq`命令将不会显示`firstnames.txt`文件中紧随其后的相同行: -``` +```bash $ sort firstnames.txt | uniq antoine patrick @@ -55,14 +53,14 @@ xavier 要仅显示只出现一次的行,请使用`-u`选项: -``` +```bash $ sort firstnames.txt | uniq -u patrick ``` 相反,要只显示文件中至少出现两次的行,请使用`-d`选项: -``` +```bash $ sort firstnames.txt | uniq -d antoine steven @@ -71,7 +69,7 @@ xavier 要简单地删除只出现一次的行,请使用`-D`选项: -``` +```bash $ sort firstnames.txt | uniq -D antoine antoine @@ -84,7 +82,7 @@ xavier 最后,要计算每行出现的次数,请使用`-c`选项: -``` +```bash $ sort firstnames.txt | uniq -c 3 antoine 1 patrick @@ -92,7 +90,7 @@ $ sort firstnames.txt | uniq -c 2 xavier ``` -``` +```bash $ sort firstnames.txt | uniq -cd 3 antoine 2 steven @@ -107,7 +105,7 @@ $ sort firstnames.txt | uniq -cd 第一个也是最简单的示例如下: -``` +```bash $ xargs use of @@ -116,18 +114,18 @@ xargs use of xargs ``` -`xargs`命令等待来自标准**stdin**输入的输入, 输入三行。 用户输入的结束是通过按键顺序CTRL+D指定给`xargs`的。 `xargs`然后执行默认命令`echo`,后跟与用户输入对应的三个参数,即: +`xargs`命令等待来自标准 **stdin** 输入的输入, 输入三行。 用户输入的结束是通过按键顺序 ++ctrl+d++ 指定给 `xargs` 的。 `xargs` 然后执行默认命令 `echo`,后跟与用户输入对应的三个参数,即: -``` +```bash $ echo "use" "of" "xargs" use of xargs ``` -可以通过`xargs`来指定一个要运行的命令。 +可以通过 `xargs` 来指定一个要运行的命令。 -在下面的示例中,`xargs`将对标准输入中指定的一组文件夹上运行命令`ls-ld`: +在下面的示例中,`xargs` 将对标准输入中指定的一组文件夹上运行命令 `ls -ld`: -``` +```bash $ xargs ls -ld /home /tmp @@ -138,27 +136,27 @@ dr-xr-x---. 2 root root 4096 5 avril 15:52 /root drwxrwxrwt. 3 root root 4096 6 avril 10:25 /tmp ``` -实际上,`xargs`命令执行的是 `ls -ld /home /tmp /root`命令。 +实际上,`xargs` 命令执行的是 `ls -ld /home /tmp /root` 命令。 -如果要执行的命令不像`find`命令那样接受多个参数,会发生什么情况? +如果要执行的命令不像 `find` 命令那样接受多个参数,会发生什么情况? -``` +```bash $ xargs find /var/log -name *.old *.log find: paths must precede expression: *.log ``` -`xargs`命令试图执行`-name`选项后面带有多个参数的`find`命令,这导致`find`产生错误: +`xargs` 命令试图执行 `-name` 选项后面带有多个参数的 `find` 命令,这导致 `find` 产生错误: -``` +```bash $ find /var/log -name "*.old" "*.log" find: paths must precede expression: *.log ``` -在这种情况下,必须强制`xargs`命令多次执行find命令(每行输入一次作为标准输入)。 `-L`选项后跟 **整数**允许您指定一次使用该命令能处理的最大条目数: +在这种情况下,必须强制 `xargs` 命令多次执行 `find` 命令(每行输入一次作为标准输入)。 `-L` 选项后跟 **整数** 允许您指定一次使用该命令能处理的最大条目数: -``` +```bash $ xargs -L 1 find /var/log -name *.old /var/log/dmesg.old @@ -175,9 +173,9 @@ $ xargs -L 1 find /var/log -name ``` -如果我们希望能够在同一行中指定这两个参数,则必须使用`-n 1`选项: +如果我们希望能够在同一行中指定这两个参数,则必须使用 `-n 1` 选项: -``` +```bash $ xargs -n 1 find /var/log -name *.old *.log /var/log/dmesg.old @@ -193,89 +191,90 @@ $ xargs -n 1 find /var/log -name ``` -基于搜索使用`tar`进行备份的案例研究: +基于搜索使用 `tar` 进行备份的案例研究: -``` +```bash $ find /var/log/ -name "*.log" -mtime -1 | xargs tar cvfP /root/log.tar $ tar tvfP /root/log.tar -rw-r--r-- root/root 1720 2017-04-05 15:43 /var/log/boot.log -rw-r--r-- root/root 499270 2017-04-06 11:01 /var/log/audit/audit.log ``` -`xargs`命令的特殊功能是将输入参数放在被调用命令的结尾, 这对于上面的示例非常有效,因为传入的文件将形成要添加到归档中的文件列表。 +`xargs` 命令的特殊功能是将输入参数放在被调用命令的结尾, 这在上面的示例中工作得非常好,因为传入的文件将形成要添加到存档中的文件列表。 现在,如果我们以 `cp` 命令为例并希望复制目录中的文件列表,则该文件列表将被添加到该命令的结尾... 但是 `cp` 命令在命令结尾要求的是目标文件。 为此,我们使用 `-I` 选项将输入参数放在行尾以外的其他位置。 -``` +```bash $ find /var/log -type f -name "*.log" | xargs -I % cp % /root/backup ``` -`-I`选项允许您指定一个字符(上面示例中是`%`字符),用于放置`xargs`的输入文件。 +`-I` 选项允许您指定一个字符(上面示例中是 `%` 字符),用于放置 `xargs` 的输入文件。 ## `yum-utils` 软件包 -`yum-utils`软件包是由不同作者为`yum`构建的实用程序集合,这使其更易于使用且功能更强大。 +`yum-utils` 软件包是由不同作者为 `yum` 构建的实用程序集合,这使其更易于使用且功能更强大。 !!! note "说明" 在 Rocky Linux 8 中,`yum`被替换为`dnf`,虽然也可以安装`dnf-utils`,但包名仍然是`yum-utils`。 这些都是经典的YUM工具,在DNF之上以CLI shims的形式实现,以保持与`yum-3`的向后兼容。 -以下是这些实用程序的一些示例: +以下是这些实用程序的一些示例。 -* `repoquery` 命令 +### `repoquery` 命令 `repoquery` 命令用于查询存储库中的软件包。 使用示例: - * 显示软件包的依赖关系 (它可以是已安装或未安装的软件包), 等同于`dnf deplist ` - ``` - repoquery --requires - ``` - - * 显示已安装软件包提供的文件(对于未安装的软件包不起作用),相当于`rpm -ql ` - - ``` - $ repoquery -l yum-utils - /etc/bash_completion.d - /etc/bash_completion.d/yum-utils.bash - /usr/bin/debuginfo-install - /usr/bin/find-repos-of-install - /usr/bin/needs-restarting - /usr/bin/package-cleanup - /usr/bin/repo-graph - /usr/bin/repo-rss - /usr/bin/repoclosure - /usr/bin/repodiff - /usr/bin/repomanage - /usr/bin/repoquery - /usr/bin/reposync - /usr/bin/repotrack - /usr/bin/show-changed-rco - /usr/bin/show-installed - /usr/bin/verifytree - /usr/bin/yum-builddep - /usr/bin/yum-config-manager - /usr/bin/yum-debug-dump - /usr/bin/yum-debug-restore - /usr/bin/yum-groups-manager - /usr/bin/yumdownloader - … - ``` - -* `yumdownloader` 命令: - -`yumdownloader`命令用来从存储库下载RPM软件包。 等同于 `dnf download --downloadonly --downloaddir ./ package-name` +* 显示包的依赖项(可以是已安装或未安装的软件包),相当于 `dnf deplist ` + +```bash +repoquery --requires +``` + +* 显示已安装软件包提供的文件(不适用于未安装的软件包),相当于 `rpm-ql ` + +```bash +$ repoquery -l yum-utils +/etc/bash_completion.d +/etc/bash_completion.d/yum-utils.bash +/usr/bin/debuginfo-install +/usr/bin/find-repos-of-install +/usr/bin/needs-restarting +/usr/bin/package-cleanup +/usr/bin/repo-graph +/usr/bin/repo-rss +/usr/bin/repoclosure +/usr/bin/repodiff +/usr/bin/repomanage +/usr/bin/repoquery +/usr/bin/reposync +/usr/bin/repotrack +/usr/bin/show-changed-rco +/usr/bin/show-installed +/usr/bin/verifytree +/usr/bin/yum-builddep +/usr/bin/yum-config-manager +/usr/bin/yum-debug-dump +/usr/bin/yum-debug-restore +/usr/bin/yum-groups-manager +/usr/bin/yumdownloader +… +``` + +### `yumdownloader` 命令 + +`yumdownloader` 命令用来从存储库下载 RPM 软件包。 等同于 `dnf download --downloadonly --downloaddir ./ package-name` !!! note "说明" - 这个命令对于快速构建几个rpm的本地存储库非常有用! + 这个命令对于快速构建一些 rpm 的本地存储库非常有用! -示例:`yumdownloader` 将下载 _samba_软件包及其所有依赖项: +示例:`yumdownloader` 将下载 _samba_ 软件包及其所有依赖项: -``` +```bash $ yumdownloader --destdir /var/tmp --resolve samba -or +或者 $ dnf download --downloadonly --downloaddir /var/tmp --resolve samba ``` @@ -290,11 +289,11 @@ $ dnf download --downloadonly --downloaddir /var/tmp --resolve samba * `pstree`:`pstree` 命令会以树状结构显示系统上的当前进程。 * `killall`:`killall` 命令会向按名称标识的所有进程发送一个 kill 信号。 -* `fuser`:`fuser` 命令用于标识指定文件或文件系统的进程`PID`。 +* `fuser`:`fuser` 命令用于标识指定文件或文件系统的进程 `PID` 。 示例: -``` +```bash $ pstree systemd─┬─NetworkManager───2*[{NetworkManager}] ├─agetty @@ -314,13 +313,13 @@ systemd─┬─NetworkManager───2*[{NetworkManager}] └─tuned───4*[{tuned}] ``` -``` +```bash # killall httpd ``` -结束访问 `/etc/httpd/conf/httpd.conf` 文件的进程(`-k`选项): +结束访问 `/etc/httpd/conf/httpd.conf` 文件的进程(`-k` 选项): -``` +```bash # fuser -k /etc/httpd/conf/httpd.conf ``` @@ -332,20 +331,20 @@ systemd─┬─NetworkManager───2*[{NetworkManager}] !!! note "说明" - 要退出`watch`命令,您必须键入按键:CTRL+C 来终止进程。 + 要退出 `watch` 命令,您必须键入以下键:CTRL+C 以终止进程。 示例: -* 每5秒显示一次 `/etc/passwd` 文件的结尾: +* 每 5 秒显示一次 `/etc/passwd` 文件的结尾: -``` -$ watch -n 5 tail -n 3 /etc/passwd +```bash +watch -n 5 tail -n 3 /etc/passwd ``` 结果: -``` -Every 5,0s: tail -n 3 /etc/passwd rockstar.rockylinux.lan: Thu Jul 1 15:43:59 2021 +```bash +Every 5.0s: tail -n 3 /etc/passwd rockstar.rockylinux.lan: Thu Jul 1 15:43:59 2021 sssd:x:996:993:User for sssd:/:/sbin/nologin chrony:x:995:992::/var/lib/chrony:/sbin/nologin @@ -354,12 +353,168 @@ sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin * 监控文件夹中的文件数: -``` -$ watch -n 1 'ls -l | wc -l' +```bash +watch -n 1 'ls -l | wc -l' ``` * 显示时钟: +```bash +watch -t -n 1 date +``` + +## `install` 命令 + +与其名称可能暗示的相反,`install` 命令不用于安装新软件包。 + +此命令结合了文件复制(`cp`)和目录创建(`mkdir`),以及权限管理(`chmod`、`chown`)和其他有用的功能(如备份)。 + +```bash +install source dest +install -t directory source [...] +install -d directory ``` -$ watch -t -n 1 date + +选项: + +| 选项 | 备注                           | +| -------------------------- | ----------------------------- | +| `-b` 或 `--backup[=suffix]` | 创建目标文件的备份 | +| `-d`     | 将参数视为目录名               | +| `-D`     | 在将 SOURCE 复制到 DEST 之前创建所有主要部分 | +| `-g` 和 `-o`     | 设置所有权               | +| `-m`     | 设置权限               | +| `-p`     | 保留源文件的时间戳           | +| `-t` | 将所有源参数复制到目录 | + +!!! note "说明" + + 有一些管理 SELinux 上下文的选项(请参阅手册页)。 + +示例: + +使用 `-d` 选项创建一个目录: + +```bash +install -d ~/samples ``` + +将文件从源位置复制到目录: + +```bash +install src/sample.txt ~/samples/ +``` + +这两条命令可以用一个命令来执行: + +```bash +$ install -v -D -t ~/samples/ src/sample.txt +install: creating directory '~/samples' +'src/sample.txt' -> '~/samples/sample.txt' +``` + +这个命令已经节省了时间。 将其与所有者、所属组和权限管理相结合,以节省时间: + +```bash +sudo install -v -o rocky -g users -m 644 -D -t ~/samples/ src/sample.txt +``` + + !!! note "说明" + + 在这种情况下,需要使用 `sudo` 来进行属性更改。 + +你也可以通过 `-b` 选项创建现有文件的备份: + +```bash +$ install -v -b -D -t ~/samples/ src/sample.txt +'src/sample.txt' -> '~/samples/sample.txt' (archive: '~/samples/sample.txt~') +``` + +如您所见,使用 `install` 命令创建了一个备份文件,这会在原始文件名后面附加 `~` 波浪号。 + +由于有 `-S` 选项,可以指定后缀: + +```bash +$ install -v -b -S ".bak" -D -t ~/samples/ src/sample.txt +'src/sample.txt' -> '~/samples/sample.txt' (archive: '~/samples/sample.txt.bak') +``` + +## `tree` 命令 + +以树状方式展开目录中包含的文件或目录。 + +| 选项 | 描述 | +|:---- |:-------------- | +| `-a` | 列出所有文件 | +| `-h` | 以更易于阅读的方式打印大小 | +| `-u` | 显示文件所有者或 UID 号 | +| `-g` | 显示文件所属组或 GID 号 | +| `-p` | 打印每个文件的权限 | + +例如: + +```bash +$ tree -hugp /etc/yum.repos.d/ +/etc/yum.repos.d/ +├── [-rw-r--r-- root root 1.6K] epel-modular.repo +├── [-rw-r--r-- root root 1.3K] epel.repo +├── [-rw-r--r-- root root 1.7K] epel-testing-modular.repo +├── [-rw-r--r-- root root 1.4K] epel-testing.repo +├── [-rw-r--r-- root root 710] Rocky-AppStream.repo +├── [-rw-r--r-- root root 695] Rocky-BaseOS.repo +├── [-rw-r--r-- root root 1.7K] Rocky-Debuginfo.repo +├── [-rw-r--r-- root root 360] Rocky-Devel.repo +├── [-rw-r--r-- root root 695] Rocky-Extras.repo +├── [-rw-r--r-- root root 731] Rocky-HighAvailability.repo +├── [-rw-r--r-- root root 680] Rocky-Media.repo +├── [-rw-r--r-- root root 680] Rocky-NFV.repo +├── [-rw-r--r-- root root 690] Rocky-Plus.repo +├── [-rw-r--r-- root root 715] Rocky-PowerTools.repo +├── [-rw-r--r-- root root 746] Rocky-ResilientStorage.repo +├── [-rw-r--r-- root root 681] Rocky-RT.repo +└── [-rw-r--r-- root root 2.3K] Rocky-Sources.repo + +0 directories, 17 files +``` + +## `stat` 命令 + +`stat` 命令用于显示文件或文件系统的状态。 + +```bash +$ stat /root/anaconda-ks.cfg + File: /root/anaconda-ks.cfg + Size: 1352 Blocks: 8 IO Block: 4096 regular file +Device: 10302h/66306d Inode: 2757097 Links: 1 +Access: (0755/-rwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root) +Access: 2024-01-20 13:04:57.012033583 +0800 +Modify: 2023-09-25 14:04:48.524760784 +0800 +Change: 2024-01-24 16:37:34.315995221 +0800 + Birth: 2 +``` + +* `File` - 显示文件的路径位置。 +* `Size` - 以字节为单位显示文件大小。 如果这是一个目录,则显示目录名所占用的固定 4096 字节。 +* `Blocks` - 显示已分配的块数。 请注意! 此命令中每个块的大小为 512 字节。 'ls -ls' 中每个块的默认大小为1024字节。 +* `Device` - 十进制格式的设备编号。 十六进制格式的设备编号。 +* `Inode` - Inode是 Linux 内核为文件或目录分配的唯一 ID 号。 +* `Links` - 硬链接数。 硬链接有时也被称为物理链接。 +* `Access` - 文件和目录的最后访问时间,即 GNU/Linux 中的 `atime` 。 +* `Modify` - 文件和目录的最后修改时间,即 GNU/Linux 中的 `mtime` 。 +* `Change` - 最后一次修改属性的时间,即 GNU/Linux 中的 `ctime` 。 +* `Birth` - 诞生时间(创建时间)。 在某些文档中,缩写为 `btime` 或 `crtime` 。 要显示创建时间,需要文件系统和内核版本高于某个版本。 + +对于文件而言: + +**atime** - 使用 `cat`、`less`、`more` 和 `head` 等命令访问文件内容后,可以更新文件的 `atime` 。 请注意! 文件的 `atime` 不是实时更新的,出于性能原因,需要等待一段时间才能显示。 **mtime** - 修改文件内容可以更新文件的 `mtime` (如通过重定向追加或覆盖文件内容),因为文件大小是文件的属性,所以 `ctime` 也会同步更新。 **ctime** - 变更文件的所有者、所属组、权限、文件大小和链接(软链接和硬链接)将更新 ctime 。 + +对于目录而言: + +**atime** - 在使用 `cd` 命令进入一个以前从未访问过的新目录后,您可以更新并固定该目录的 `atime` 。 **mtime** - 在该目录下执行创建、删除、重命名等操作,会更新目录的 `mtime` 和 `ctime` 。 **ctime** - 当目录的权限、所有者、所属组等发生变更时,该目录的 `ctime` 将被更新。 + +!!! tip "提示" + + * 如果创建新文件或目录,其 `atime`、`mtime` 和 `ctime` 完全相同 + * 如果修改了文件的内容,那么文件的 `mtime` 和 `ctime` 必然会被更新。 + * 如果在该目录中创建了一个全新的文件,则该目录的 `atime`、`ctime` 和 `mtime` 将同时更新。 + * 如果更新了目录的 `mtime` ,则必须更新该目录的 `ctime`。