diff --git a/docs/books/admin_guide/00-toc.de.md b/docs/books/admin_guide/00-toc.de.md index 356954a646..84fa40a831 100644 --- a/docs/books/admin_guide/00-toc.de.md +++ b/docs/books/admin_guide/00-toc.de.md @@ -12,7 +12,7 @@ Zunächst werden wir GNU/Linux, Distributionen und das gesamte Ökosystem rund u Wir werden uns dann die Benutzerbefehle ansehen, die für den Einstieg in GNU/Linux unerlässlich sind. Erfahrene Benutzer sollten das Kapitel über erweiterte Befehle besuchen. -Im nächsten Kapitel wird der vi-Editor behandelt. Während GNU/Linux mit vielen Editoren geliefert wird, ist der vi einer der leistungsstärksten. Einige Befehle verwenden manchmal eine identische Syntax wie der vi (`sed` sei erwähnt). Daher ist es sinnvoll, einiges über vi zu wissen oder zumindest seine wesentlichen Funktionen kennen zu lernen (wie man eine Datei öffnet, speichert, vi beendet oder ohne Speichern beendet). Bei regelmäßiger Verwendung von vi, kann sich der Benutzer nach und nach mit weiterenen Funktionen vertraut machen. Eine Alternative wäre die Verwendung von nano, das standardmäßig mit Rocky Linux installiert wird. Obwohl es nicht so vielseitig ist, ist es einfach zu bedienen, unkompliziert und erledigt die Arbeit. +Im nächsten Kapitel wird der VI-Editor behandelt. Während GNU/Linux mit vielen Editoren geliefert wird, ist der vi einer der leistungsstärksten. Einige Befehle verwenden manchmal eine identische Syntax wie der vi (`sed` sei erwähnt). Daher ist es sinnvoll, einiges über vi zu wissen oder zumindest seine wesentlichen Funktionen kennen zu lernen (wie man eine Datei öffnet, speichert, vi beendet oder ohne Speichern beendet). Bei regelmäßiger Verwendung von vi, kann sich der Benutzer nach und nach mit weiterenen Funktionen vertraut machen. Eine Alternative wäre die Verwendung von nano, das standardmäßig mit Rocky Linux installiert wird. Obwohl es nicht so vielseitig ist, ist es einfach zu bedienen, unkompliziert und erledigt die Arbeit. Wir können dann tiefer in die Funktionsweise von Linux einsteigen: diff --git a/docs/books/admin_guide/01-presentation.de.md b/docs/books/admin_guide/01-presentation.de.md index a50d829fb2..daaeb93952 100644 --- a/docs/books/admin_guide/01-presentation.de.md +++ b/docs/books/admin_guide/01-presentation.de.md @@ -206,7 +206,7 @@ In der Welt **GNU/Linux**-Welt bietet die Bewegung der Freien Software überwieg **Frei** ist gemeint im Sinne von Freiheit nicht von Freibier! -**Open Source**: die Quellen sind verfügbar, es ist möglich, sie einzusehen und verändern, aber nur unter bestimmte Bedingungen. +**Open Source**: die Quellen sind verfügbar, es ist möglich, sie einzusehen und zu verändern, aber nur unter bestimmte Bedingungen. Eine freie Software – im Sinne von Freiheit – ist notwendigerweise Open Source, aber das Gegenteil ist nicht der Fall, da sich Open-Source-Software von der Freiheit unterscheidet, die die GPL-Lizenz bietet. diff --git a/docs/books/admin_guide/03-commands.zh.md b/docs/books/admin_guide/03-commands.zh.md index bfd0d56e50..89e88eae22 100644 --- a/docs/books/admin_guide/03-commands.zh.md +++ b/docs/books/admin_guide/03-commands.zh.md @@ -11,13 +11,13 @@ contributors: Steven Spencer, Aditya Putta, tianci li, Grammaresque, Ganna Zhyrn **** -**目标**: 在本章中,未来的 Linux 管理员们将学习如何: +**目标**: 在本章中,未来的 Linux 管理员们将学习如何: :heavy_check_mark: 在系统树中 **移动**。 :heavy_check_mark: **创建** 一个文本文件, **显示** 其内容并对其 **修改**。 :heavy_check_mark: **使用** 最实用的Linux命令。 -:checkered_flag: **用户命令**,**linux** +:checkered_flag: **用户命令**,**linux**** **知识性**: :star: **复杂度**: :star: diff --git a/docs/books/admin_guide/04-advanced-commands.de.md b/docs/books/admin_guide/04-advanced-commands.de.md index 842b09028d..d81891992a 100644 --- a/docs/books/admin_guide/04-advanced-commands.de.md +++ b/docs/books/admin_guide/04-advanced-commands.de.md @@ -41,7 +41,7 @@ steven !!! note "Hinweis" - `uniq` erfordert, dass die Eingabedatei sortiert wird, da sie nur aufeinander folgende Zeilen vergleicht. + `uniq` erfordert, dass die Eingabedatei sortiert ist, da sie nur aufeinander folgende Zeilen vergleicht. Ohne Argument wird der `uniq` Befehl die gleichen Zeilen nicht anzeigen, die einander in der `firstnames.txt` Datei folgen: diff --git a/docs/books/admin_guide/05-vi.de.md b/docs/books/admin_guide/05-vi.de.md index df508529a1..9c23c379e7 100644 --- a/docs/books/admin_guide/05-vi.de.md +++ b/docs/books/admin_guide/05-vi.de.md @@ -4,7 +4,7 @@ title: VI-Texteditor # VI-Texteditor -In diesem Kapitel erfahren Sie, wie Sie mit dem VIsual-Editor arbeiten. +In diesem Kapitel erfahren Sie, wie Sie mit dem `VI`sual-Editor arbeiten. **** @@ -15,8 +15,8 @@ In diesem Kapitel erfahren Sie, wie Sie mit dem VIsual-Editor arbeiten. :checkered_flag: **Benutzerbefehle**, **Linux** -**Vorwissen**: :star: -**Komplexität**: :star: :star: +**Vorkenntnisse**: :star: +**Schwierigkeitsgrad**: :star::star: **Lesezeit**: 23 Minuten @@ -156,7 +156,7 @@ Der Cursor befindet sich unter dem gewünschten Zeichen. * Zum Anfang der Zeile verschieben: -++0++ oder ++"POS1"++ +++0++ oder ++home++ ### Vom ersten Zeichen eines Wortes @@ -296,7 +296,7 @@ Diese Operationen werden im *Befehls*-Modus durchgeführt. * Ein Wort ersetzen: -++c+w+"word"+escape++ +++"c"+"w"+"word"+escape++ !!! tip "Hinweis" @@ -533,7 +533,7 @@ Es gibt ein Tutorial zum Erlernen der Verwendung von `VI`. Es ist mit dem Befehl vimtutor ``` -### Visualizations-Modus +### Visualisierungs-Modus Dieser Modus ist ein Unterpunkt des Befehlsmodus. Sie können es vervollständigen, indem Sie ++"v"++ oder ++v++ eingeben. Der Operationsinhalt des ersteren befindet sich auf Zeichenebene und der Operationsinhalt des letzteren auf Zeilenebene. diff --git a/docs/books/admin_guide/05-vi.fr.md b/docs/books/admin_guide/05-vi.fr.md index 06f2055c2f..909182618d 100644 --- a/docs/books/admin_guide/05-vi.fr.md +++ b/docs/books/admin_guide/05-vi.fr.md @@ -296,7 +296,7 @@ Ces opérations se font en mode *command*. * Remplacer un mot : -++c+w+"mot"+escape++ +++"c"+"w"+"word"+escape++ !!! tip "Astuce" diff --git a/docs/books/admin_guide/05-vi.it.md b/docs/books/admin_guide/05-vi.it.md index d265ad3db2..a8d2473eb7 100644 --- a/docs/books/admin_guide/05-vi.it.md +++ b/docs/books/admin_guide/05-vi.it.md @@ -296,7 +296,7 @@ Queste operazioni vengono eseguite in modalità *comando*. * Sostituire una parola: -++c+w+"word"+escape++ +++"c"+"w"+"word"+escape++ !!! Tip "Suggerimento" diff --git a/docs/books/admin_guide/05-vi.uk.md b/docs/books/admin_guide/05-vi.uk.md index 4d12c02f9b..f1b1dde12a 100644 --- a/docs/books/admin_guide/05-vi.uk.md +++ b/docs/books/admin_guide/05-vi.uk.md @@ -296,7 +296,7 @@ VI дозволяє редагувати текст, керуючи: * Замінити одне слово: -++c+w+"слово"+escape++ +++"c"+"w"+"word"+escape++ !!! tip "Порада" diff --git a/docs/books/admin_guide/05-vi.zh.md b/docs/books/admin_guide/05-vi.zh.md index 37861c241e..1fdd4a48f8 100644 --- a/docs/books/admin_guide/05-vi.zh.md +++ b/docs/books/admin_guide/05-vi.zh.md @@ -296,7 +296,7 @@ VI允许通过管理以下内容进行文本编辑: * 替换一个单词: -++c+w+"word"+escape++ +++"c"+"w"+"word"+escape++ !!! Tip "提示" diff --git a/docs/books/admin_guide/06-users.zh.md b/docs/books/admin_guide/06-users.zh.md index bcab9aeb85..2376f4c797 100644 --- a/docs/books/admin_guide/06-users.zh.md +++ b/docs/books/admin_guide/06-users.zh.md @@ -21,7 +21,7 @@ title: 用户管理 **知识性**: :star: :star: **复杂度**: :star: :star: -**阅读时间**:30 分钟 +**阅读时间**: 30 分钟 **** ## 常规信息 @@ -353,7 +353,7 @@ test1:!:: sudo useradd -u 1000 -g GroupA -G GroupP,GroupC albert ``` -!!! note "说明" +!!! Note "说明" 在 **Debian** 下,您需要指定 `-m` 选项强制创建登录目录,或者在 `/etc/login.defs` 文件中设置 `CREATE_HOME` 变量。 在所有情况下,管理员都应该使用 `man` 中指定的 `adduser` 和 `deluser` 命令,但在可移植到所有 Linux 发行版的脚本中除外: @@ -609,7 +609,7 @@ sudo chgrp group1 file | `-R` | 递归地更改目录和目录下所有文件的所属组。 | | `-v` | 显示变更。 | -!!! note "说明" +!!! Note "说明" 通过参考另一个文件的所有者和所属组,可以向另一个文件应用所有者和所属组: @@ -766,7 +766,7 @@ sudo passwd -n 60 -x 90 -w 80 -i 10 patrick sudo passwd alain ``` -!!! note "说明" +!!! Note "说明" 可登录的用户可以使用 `passwd` 命令更改自己的密码(此过程需要请求用户的旧密码)。 root(uid=0)用户可以更改任何用户的密码。 @@ -830,7 +830,7 @@ $ sudo chage -d 0 philippe * `/etc/login.defs` * `/etc/skel` -!!! note "说明" +!!! Note "说明" 使用 `useradd` 命令编辑 `/etc/default/useradd` 文件。 @@ -982,7 +982,7 @@ $ sudo su - alain 0 ``` -请注意! `su` 和 `su -` 是不同的,如以下示例所示: +Attention please! `su` 和 `su -` 是不同的,如以下示例所示: ```bash $ whoami diff --git a/docs/books/admin_guide/07-file-systems.zh.md b/docs/books/admin_guide/07-file-systems.zh.md index b09f8bc031..d893a5c738 100644 --- a/docs/books/admin_guide/07-file-systems.zh.md +++ b/docs/books/admin_guide/07-file-systems.zh.md @@ -391,7 +391,7 @@ mkfs [-t fstype] filesys 每个文件系统的结构在每个分区上都是相同的。 **Boot Sector** 和 **Super block** 由系统初始化完成,**Inode table** 和 **Data block** 由管理员初始化完成。 -!!! note "说明" +!!! Note "说明" 唯一例外的是 **swap** 分区。 @@ -433,7 +433,7 @@ Boot sector 是可引导存储介质的第一个扇区,即 0 柱面、0 磁道 **inode table** 的大小在创建时定义,并存储在分区中。 它由称为 inode 的记录组成,这些记录与创建的文件相对应。 每条记录都包含组成文件的 data block 的地址。 -!!! note "说明" +!!! Note "说明" inode 编号在文件系统中是唯一的。 @@ -443,7 +443,7 @@ Boot sector 是可引导存储介质的第一个扇区,即 0 柱面、0 磁道 文件由其 inode 编号管理。 -!!! note "说明" +!!! Note "说明" inode table 的大小决定了 FS 可以包含的最大文件数量。 @@ -511,7 +511,7 @@ or ![文件系统的组织](images/07-file-systems-008.png) -!!! note "说明" +!!! Note "说明" 在 Linux 中,一切都是一个文件。 @@ -552,7 +552,7 @@ Linux 符合 **FHS**(_Filesystems Hierarchy Standard_)(参阅 `man hier`), `/etc/fstab` 文件是在随系统启动时被读取的,其中包含要执行的挂载。 每个要挂载的文件系统都在一行上说明,字段由空格或制表符分隔。 -!!! note "说明" +!!! Note "说明" 相关的命令按照顺序读取行(如 `fsck`、`mount`、`umount`)。 @@ -623,7 +623,7 @@ mount [-option] [device] [directory] | `-w` | 默认情况下以读/写方式挂载文件系统(等同于 `-o rw`) | | `-o opts` | opts 参数是逗号分隔的列表(如 `remount`、`ro` 等)。 | -!!! note "说明" +!!! Note "说明" 仅使用 `mount` 命令即可显示所有已挂载的文件系统。 如果挂载参数为 `-o defaults` ,则表示等同于 ` -o rw,suid,dev,exec,auto,nouser,async`,且这些参数与文件系统无关。 如果您需要浏览与文件系统相关的特殊挂载选项,请阅读 `man 8 mount` 中的 "Mount options FS-TYPE" 部分(将 FS-TYPE 类型替换为相应的文件系统,如ntfs、vfat、ufs 等)。 @@ -649,7 +649,7 @@ umount [-option] [device] [directory] | `-f` | 强制卸载。 | | `-a` | 删除 `/etc/fstab` 文件中提到的所有文件系统的挂载。 | -!!! note "说明" +!!! Note "说明" 卸载时,您必须不能停留在挂载点中。 否则将显示以下错误消息:`device is busy`。 @@ -668,11 +668,11 @@ umount [-option] [device] [directory] [root]# mkdir "working dir" ``` -!!! note "说明" +!!! Note "说明" 虽然在技术上创建包含空格的文件或目录并无不妥,但通常应该避免这种情况并用下划线替换任何空格是一种「最佳做法」。 -!!! note "说明" +!!! Note "说明" 以 **.** 开头的文件表示这是隐藏文件,它不能被简单的 `ls` 看到。 @@ -913,7 +913,7 @@ Mode 指示可以用八进制表示(例如 `744`)或符号表示([`ugoa`] | 1 | x | | 0 | - | -将这三个数字加在一起即可获得一个用户类型的权限。 例如: **755=rwxr-xr-x**。 +将这三个数字加在一起即可获得一个用户类型的权限。 例如 **755=rwxr-xr-x**。 ![八进制表示](images/07-file-systems-011.png) @@ -1015,7 +1015,7 @@ $ ls -la umask_025 `umask` 并不会影响现有文件。 `umask -S` 显示将要创建文件的文件权限(没有执行权限)。 所以,它不是用减去最大值的掩码来显示的。 -!!! note "说明" +!!! Note "说明" 在上面的示例中,使用命令修改掩码仅适用于当前连接的会话。 diff --git a/docs/books/admin_guide/08-process.de.md b/docs/books/admin_guide/08-process.de.md index 323a125fb8..058ba5cfaa 100644 --- a/docs/books/admin_guide/08-process.de.md +++ b/docs/books/admin_guide/08-process.de.md @@ -200,13 +200,13 @@ Beispiel: kill -9 1664 ``` -| Code | Signal | Beschreibung | -| ---- | --------- | ------------------------------------------------------------------------------------------------------------ | -| `2` | *SIGINT* | Sofortige Beendigung des Prozesses | -| `9` | *SIGKILL* | Den Prozess unterbrechen (++control+"d"++) | -| `15` | *SIGTERM* | Bereinigung und Beenden des Prozesses | -| `18` | *SIGCONT* | Prozess fortsetzen. Prozesse, die durch das Signal SIGSTOP gestoppt wurden, können dank SIGCONT weiterlaufen | -| `19` | *SIGSTOP* | Prozess unterbrechen (Stop process). Die Wirkung dieses Signals entspricht ++ctrl+"z"++ | +| Code | Signal | Beschreibung | +| ---- | --------- | ---------------------------------------------------------------------------------------------------------------- | +| `2` | *SIGINT* | Sofortige Beendigung des Prozesses | +| `9` | *SIGKILL* | Den Prozess unterbrechen (++control+"d"++) | +| `15` | *SIGTERM* | Bereinigung und Beenden des Prozesses | +| `18` | *SIGCONT* | Setzt den Prozess fort. Prozesse, die durch das Signal SIGSTOP gestoppt wurden, können dank SIGCONT weiterlaufen | +| `19` | *SIGSTOP* | Prozess unterbrechen (Stop process). Die Wirkung dieses Signals entspricht ++ctrl+"z"++ | Signale sind das Mittel der Kommunikation zwischen den Prozessen. Der `kill` Befehl sendet ein Signal an einen Prozess. @@ -296,7 +296,7 @@ Die Spalten repräsentieren: 1. Jobnummer 2. die Reihenfolge in der die Prozesse ausgeführt werden: - * ein `+` : Dieser Prozess ist der nächste Prozess, der standardmäßig mit `fg` oder `bg` ausgeführt wird; + * a `+` : Der Prozess, der standardmäßig für die Befehle `fg` und `bg` ausgewählt wird, wenn keine Job-Nummer angegeben ist * ein `-` : Dieser Prozess ist der nächste Prozess, der die `+` übernimmt `+` 3. *Running* (laufender Prozess) oder *Stopped* (abgebrochener Prozess) diff --git a/docs/books/admin_guide/08-process.uk.md b/docs/books/admin_guide/08-process.uk.md index bddf7fe426..914c14e1b3 100644 --- a/docs/books/admin_guide/08-process.uk.md +++ b/docs/books/admin_guide/08-process.uk.md @@ -8,7 +8,7 @@ title: Менеджер процесів **** -**Цілі**: у цьому розділі майбутні адміністратори Linux дізнаються, як: +**Цілі**: у цьому розділі майбутні адміністратори Linux дізнаються як: :heavy_check_mark: Розпізнавати `PID` і `PPID` процесу; :heavy_check_mark: Перегляд і пошук процесів; @@ -210,7 +210,7 @@ kill -9 1664 Сигнали є засобами зв'язку між процесами. Команда `kill` надсилає сигнал процесу. -!!! tip "Порада" +!!! Tip "Порада" Повний список сигналів, які враховує команда kill, становиться доступним після введення команди: @@ -328,7 +328,7 @@ nice find / -name "file" Як показано у прикладі вище, перші три команди вказують на встановлення значення Nice на "-5", тоді як друга команда є нашим рекомендованим використанням. Четверта команда вказує на встановлення значення Nice на «5». Для п’ятої команди відсутність параметрів означає, що значення Nice встановлено на «10». -!!! tip "Порада" +!!! Tip "Порада" «Nice» - це абревіатура від «niceness». @@ -356,7 +356,7 @@ renice -n 15 -p 1664 Команда `renice` діє на вже запущені процеси. Таким чином, можна змінити пріоритет певного процесу та кількох процесів, що належать користувачеві чи групі. -!!! tip "Порада" +!!! Tip "Порада" Команда `pidof` у поєднанні з командою `xargs` (див. курс Advanced Commands) дозволяє застосувати новий пріоритет в одній команді: diff --git a/docs/books/admin_guide/08-process.zh.md b/docs/books/admin_guide/08-process.zh.md index a8bd1a1b6f..04772b57ef 100644 --- a/docs/books/admin_guide/08-process.zh.md +++ b/docs/books/admin_guide/08-process.zh.md @@ -210,7 +210,7 @@ kill -9 1664 信号是进程之间的通信手段。 `kill` 命令的作用就是向进程发送信号。 -!!! Tip "提示" +!!! Tip "小提示" `kill` 命令所考虑到的完整信号列表可通过键入以下命令获得: @@ -328,7 +328,7 @@ nice find / -name "file" 如上例所示,前三个命令表示将 Nice 值设置为 "-5",而第二个命令是我们推荐的用法。 第四个命令指示将 Nice 值设置为 "5"。 对于第五个命令,不键入任何选项意味着 Nice 值设置为 "10"。 -!!! Tip "提示" +!!! Tip "小提示" "Nice" 是 "niceness" 的缩写。 @@ -356,7 +356,7 @@ renice -n 15 -p 1664 `renice` 命令作用于现有进程。 因此,我们可以改变一个特定进程的优先级,也可以改变属于一个用户或一个组的几个进程的优先级。 -!!! Tip "提示" +!!! Tip "小提示" `pidof` 命令与 `xargs` 命令相结合(请参阅 "高级命令" 课程),可允许在单个命令中应用新的优先级: diff --git a/docs/books/admin_guide/09-backups.uk.md b/docs/books/admin_guide/09-backups.uk.md index 686d863db7..a436e83f36 100644 --- a/docs/books/admin_guide/09-backups.uk.md +++ b/docs/books/admin_guide/09-backups.uk.md @@ -8,7 +8,7 @@ title: Резервне копіювання і відновлення **** -**Цілі**: у цьому розділі майбутні адміністратори Linux дізнаються, як: +**Цілі**: у цьому розділі майбутні адміністратори Linux дізнаються як: :heavy_check_mark: використовувати команди `tar` і `cpio`, для створення резервної копії; :heavy_check_mark: перевіряти резервні копії та відновлювати дані; @@ -82,7 +82,7 @@ title: Резервне копіювання і відновлення * **Періодичне**: резервне копіювання протягом певного періоду перед великим оновленням системи (зазвичай у непікові години) * **Циклічне**: резервне копіювання в днях, тижнях, місяцях тощо -!!! tip "Порада" +!!! Tip "Порада" Перед зміною системи може бути корисно зробити резервну копію. Однак немає сенсу щодня створювати резервні копії даних, які змінюються лише щомісяця. @@ -138,7 +138,7 @@ title: Резервне копіювання і відновлення * використовувані опції; * дата. -!!! tip "Порада" +!!! Tip "Порада" Ім’я резервної копії має бути чітким. @@ -231,7 +231,7 @@ $ tar cjf - /directory/to/backup/ | wc -c tar c[vf] [device] [file(s)] ``` -Приклад: +Приклади: ```bash [root]# tar cvf /backups/home.133.tar /home/ @@ -243,7 +243,7 @@ tar c[vf] [device] [file(s)] | `v` | Відображає назву оброблених файлів. | | `f` | Дозволяє вказати назву резервної копії (носій). | -!!! tip "Порада" +!!! Tip "Порада" Дефіс (`-`) перед `tar` не потрібен! @@ -255,7 +255,7 @@ tar c[vf] [device] [file(s)] tar c[vf]P [device] [file(s)] ``` -Приклад: +Приклади: ```bash [root]# tar cvfP /backups/home.133.P.tar /home/ @@ -406,7 +406,7 @@ tar cvfW file_name.tar dir/ tar vfd file_name.tar dir/ ``` -!!! tip "Порада" +!!! Tip "Порада" Додавши другий `v` до попереднього ключа, ви отримаєте список заархівованих файлів, а також відмінності між заархівованими файлами та файлами, присутніми у файловій системі. @@ -483,7 +483,7 @@ tar xvfz backup.tar.gz tar xvfj backup.tar.bz2 ``` -!!! tip "Порада" +!!! Tip "Порада" Щоб видобути або отримати список вмісту резервної копії, немає необхідності згадувати алгоритм стиснення, який використовується для створення резервної копії. Тобто `tar xvf` еквівалентний `tar xvfj`, щоб витягнути вміст, а `tar tvf` еквівалентний `tar tvfj`, щоб отримати список. @@ -589,7 +589,7 @@ tar xvf backup.tar --wildcards '*.conf' [files command |] cpio {-o| --create} [-options] [< file-list] [> device] ``` -Приклад: +Приклади: З перенаправленням виводу `cpio`: @@ -649,7 +649,7 @@ find /etc | cpio -o > /backups/etc.A.cpio [files command |] cpio {-o| --create} -A [-options] [< fic-list] {F| > device} ``` -Приклад: +Приклади: ```bash find /etc/shadow | cpio -o -AF SystemFiles.A.cpio @@ -693,7 +693,7 @@ find /etc | cpio –o | gzip > /backups/etc.A.cpio.gz cpio -t [-options] [< fic-list] ``` -Приклад: +Приклади: ```bash cpio -tv < /backups/etc.152.cpio | less @@ -716,7 +716,7 @@ cpio -tv < /backups/etc.152.cpio | less cpio {-i| --extract} [-E file] [-options] [< device] ``` -Приклад: +Приклади: ```bash cpio -iv < /backups/etc.152.cpio | less @@ -760,7 +760,7 @@ cpio –iuvF home.A.cpio cpio --no-absolute-filenames -divuF home.A.cpio ``` -!!! tip "Порада" +!!! Tip "Порада" Створення каталогів, можливо, необхідне, тому використовується опція `d` @@ -801,7 +801,7 @@ rm -f tmp gzip [options] [file ...] ``` -Приклад: +Приклади: ```bash $ gzip usr.tar @@ -823,7 +823,7 @@ usr.tar.gz bzip2 [options] [file ...] ``` -Приклад: +Приклади: ```bash $ bzip2 usr.cpio @@ -845,7 +845,7 @@ usr.cpio.bz2 gunzip [options] [file ...] ``` -Приклад: +Приклади: ```bash $ gunzip usr.tar.gz @@ -872,7 +872,7 @@ usr.tar bzip2 [options] [file ...] ``` -Приклад: +Приклади: ```bash $ bunzip2 usr.cpio.bz2 diff --git a/docs/books/admin_guide/09-backups.zh.md b/docs/books/admin_guide/09-backups.zh.md index ce68c551da..990cb26599 100644 --- a/docs/books/admin_guide/09-backups.zh.md +++ b/docs/books/admin_guide/09-backups.zh.md @@ -8,7 +8,7 @@ title: 备份和还原 **** -**目标**: 在本章中,未来的 Linux 管理员们将学习如何: +**目标**: 在本章中,未来的 Linux 管理员们将学习如何: :heavy_check_mark: 使用 `tar` 和 `cpio` 命令进行备份; :heavy_check_mark: 检查他们的备份并恢复数据。 @@ -23,7 +23,7 @@ title: 备份和还原 **** -!!! note "说明" +!!! Note "说明" 在本章中,命令结构通过使用 "device" 来指定备份的目标位置以及还原时的源位置。 该设备可以是外部介质,也可以是本地文件。 随着本章的展开,你应该对这一点有所了解,但如果你需要的话,可以随时参考这篇笔记以获得解释。 @@ -82,7 +82,7 @@ title: 备份和还原 * **定期**:在主要系统更新之前的特定时间段内进行备份(通常在非高峰时段) * **循环**:以天、周、月等为单位进行备份 -!!! Tip "提示" +!!! Tip "小提示" 在系统更改之前,进行备份可能很有用。 然而,每天备份每月都会变更的数据是没有意义的。 @@ -97,7 +97,7 @@ title: 备份和还原 我们不建议在执行恢复操作之前直接删除当前活动操作系统中的目录或文件(除非您知道删除后会发生什么)。 如果你不知道会发生什么,你可以在当前操作系统上执行 "快照" 操作。 -!!! Tip "提示" +!!! Tip "小提示" 出于安全原因,建议您在执行恢复操作之前将还原的目录或文件存储在 /tmp 目录中,以避免旧文件(旧目录)覆盖新文件(新目录)的情况。 @@ -123,7 +123,7 @@ title: 备份和还原 3. 跳过损坏的文件; 4. 可对整个文件系统使用。 -!!! note "说明" +!!! Note "说明" 这些命令以专有的和标准化的格式保存。 @@ -138,11 +138,11 @@ title: 备份和还原 * 所使用的选项; * 日期。 -!!! Tip "提示" +!!! Tip "小提示" 备份的名称必须是一目了然的。 -!!! note "说明" +!!! Note "说明" 在 Linux 系统中,除了图形用户界面(GUI)环境中的少数例外情况(如 .jpg、.mp4、.gif)外,大多数文件都没有扩展名的概念。 换句话说,大多数文件不需要扩展名。 人为添加后缀的原因是为了方便人类用户识别。 例如,如果系统管理员看到 `.tar.gz` 或 `.tgz` 文件扩展名,那么他就知道如何处理该文件。 @@ -243,7 +243,7 @@ tar c[vf] [device] [file(s)] | `v` | 显示已处理文件的名称。 | | `f` | 允许您指定备份(介质)的名称。 | -!!! Tip "提示" +!!! Tip "小提示" `tar` 键前的连字符(`-`)是可选的! @@ -281,11 +281,11 @@ tar cvzf backup.tar.gz dirname/ | --- | -------------- | | `z` | 用 *gzip* 压缩备份。 | -!!! note "说明" +!!! Note "说明" `.tgz` 扩展名等效于 `.tar.gz`。 -!!! note "说明" +!!! Note "说明" 对于所有备份操作,保持 `cvf`(`tvf` 或 `xvf`)键不变,只需在键的末尾添加压缩键,即可使命令更容易理解(例如:`cvfz` 或 `cvfj` 等)。 @@ -301,7 +301,7 @@ tar cvfj backup.tar.bz2 dirname/ | --- | --------------- | | `j` | 用 *bzip2* 压缩备份。 | -!!! note "说明" +!!! Note "说明" `.tbz` 和 `.tb2` 扩展名等同于 `.tar.bz2` 扩展名。 @@ -342,7 +342,7 @@ tar rvf backup_name.tar dirtoadd | `r` | 将文件或目录追加到归档的末尾。 | | `A` | 将一个归档中的所有文件追加到另一个归档的末尾。 | -!!! note "说明" +!!! Note "说明" 无法将文件或文件夹添加到压缩备份中。 @@ -352,7 +352,7 @@ tar rvf backup_name.tar dirtoadd Try `tar --help' or `tar --usage' for more information. ``` -!!! note "说明" +!!! Note "说明" 如果备份是在相对模式下执行的,请以相对模式添加文件。 如果备份是以绝对模式完成的,请以绝对模式添加文件。 @@ -384,11 +384,11 @@ tar tvfj backup.tar.bz2 tar tvf backup.tar | less ``` -!!! Tip "提示" +!!! Tip "小提示" 要列出或检索备份的内容,不必提及创建备份时使用的压缩算法。 也就是说,读取内容时,`tar tvf` 等同于 `tar tvfj`。 仅在创建压缩备份时才 **必须** 选择压缩类型或算法。 -!!! Tip "提示" +!!! Tip "小提示" 在执行还原操作之前,您应该始终检查和查看备份文件的内容。 @@ -406,7 +406,7 @@ tar cvfW file_name.tar dir/ tar vfd file_name.tar dir/ ``` -!!! Tip "提示" +!!! Tip "小提示" 通过在前一个键中添加第二个 `v`,您将得到归档文件的列表以及归档文件与文件系统中已存在文件之间的差异。 @@ -483,7 +483,7 @@ tar xvfz backup.tar.gz tar xvfj backup.tar.bz2 ``` -!!! Tip "提示" +!!! Tip "小提示" 要提取或列出备份的内容,不需要提及用于创建备份的压缩算法。 也就是说,`tar xvf` 相当于 `tar xvfj`,用于提取内容,`tar tvf` 相当于 `tar tvfj`,用于列出。 @@ -561,7 +561,7 @@ tar xvf backup.tar --wildcards '*.conf' * `ls`:列出一个目录(无论是否递归); * `cat`:读取包含要保存的树或文件的文件。 - !!! note "说明" + !!! Note "说明" `ls` 不能与 `-l`(细节)或 `-R`(递归)一起使用。 @@ -577,7 +577,7 @@ tar xvf backup.tar --wildcards '*.conf' 1. `-t` - 打印输入的内容表。 2. `-A` - 追加到现有归档。 仅工作在 copy-in 模式。 -!!! note "注意" +!!! Note "说明" `cpio` 的一些选项需要与正确的操作模式相结合才能正常工作。 参阅 `man 1 cpio` @@ -760,7 +760,7 @@ cpio –iuvF home.A.cpio cpio --no-absolute-filenames -divuF home.A.cpio ``` -!!! Tip "提示" +!!! Tip "小提示" 创建目录可能是必要的,因此需要使用 `d` 选项 @@ -787,7 +787,7 @@ rm -f tmp * 延长了备份时间和恢复时间。 * 这使得无法将文件添加到备份中。 -!!! note "说明" +!!! Note "说明" 因此,最好进行备份并压缩它,而不是在备份过程中压缩它。 diff --git a/docs/books/admin_guide/10-boot.uk.md b/docs/books/admin_guide/10-boot.uk.md index 27c55bfc24..2696800b14 100644 --- a/docs/books/admin_guide/10-boot.uk.md +++ b/docs/books/admin_guide/10-boot.uk.md @@ -357,7 +357,7 @@ timers.target loaded active active Timers systemctl set-default name.target ``` -Приклад: +Приклади: ```bash # systemctl set-default multi-user.target diff --git a/docs/books/admin_guide/11-tasks.uk.md b/docs/books/admin_guide/11-tasks.uk.md index abc12325f6..15b83f556d 100644 --- a/docs/books/admin_guide/11-tasks.uk.md +++ b/docs/books/admin_guide/11-tasks.uk.md @@ -8,7 +8,7 @@ title: Управління задачами **** -**Цілі**: у цьому розділі майбутні адміністратори Linux дізнаються, як: +**Цілі**: у цьому розділі майбутні адміністратори Linux дізнаються як: :heavy_check_mark: Linux займається плануванням завдань; :heavy_check_mark: обмежує використання **`cron`** певними користувачами; @@ -52,7 +52,7 @@ title: Управління задачами [root] # systemctl status crond ``` -!!! tip "Порада" +!!! Tip "Порада" Якщо демон `crond` не працює, вам доведеться ініціалізувати його вручну та/або автоматично під час запуску. Дійсно, навіть якщо задачі заплановані, вони не будуть запущені. diff --git a/docs/books/admin_guide/11-tasks.zh.md b/docs/books/admin_guide/11-tasks.zh.md index 6708704c20..c9da18f87f 100644 --- a/docs/books/admin_guide/11-tasks.zh.md +++ b/docs/books/admin_guide/11-tasks.zh.md @@ -8,7 +8,7 @@ title: 任务管理 **** -**目标**: 在本章中,未来的 Linux 管理员们将学习如何: +**目标**: 在本章中,未来的 Linux 管理员们将学习如何: :heavy_check_mark: 使用 Linux 处理计划任务; :heavy_check_mark: 将 **`cron`** 的使用限制为某些用户; @@ -52,7 +52,7 @@ title: 任务管理 [root] # systemctl status crond ``` -!!! Tip "提示" +!!! Tip "小提示" 如果 `crond` 守护程序未运行,则必须在启动时手动 和/或 自动对其进行初始化。 即使任务被安排了,它们也不会被启动。 diff --git a/docs/books/admin_guide/12-network.uk.md b/docs/books/admin_guide/12-network.uk.md index a06db75653..64b25de269 100644 --- a/docs/books/admin_guide/12-network.uk.md +++ b/docs/books/admin_guide/12-network.uk.md @@ -169,7 +169,7 @@ hostname [-f] [hostname] | `-f` | Відображає FQDN | | `-i` | Відображає IP-адреси системи | -!!! tip "Порада" +!!! Tip "Порада" Ця команда використовується різними мережевими програмами для ідентифікації машини. @@ -190,7 +190,7 @@ HOSTNAME=pc-rocky.mondomaine.lan Тому важливо заповнити ці два файли перед будь-яким налаштуванням мережевих служб. -!!! tip "Порада" +!!! Tip "Порада" Щоб дізнатися, чи правильно виконано цю конфігурацію, команди `hostname` і `hostname -f` мають відповідати очікуваними значеннями. @@ -212,7 +212,7 @@ HOSTNAME=pc-rocky.mondomaine.lan Файл `/etc/hosts` все ще використовується системою, особливо під час завантаження, коли визначається FQDN системи. -!!! tip "Порада" +!!! Tip "Порада" RedHat рекомендує заповнити принаймні один рядок із назвою системи. @@ -251,7 +251,7 @@ search mondomaine.lan nameserver 192.168.1.254 ``` -!!! tip "Порада" +!!! Tip "Порада" Цей файл є історичним. Він більше не заповнюється безпосередньо! @@ -328,7 +328,7 @@ BOOTPROTO=dhcp HWADDR=00:0c:29:96:32:e3 ``` -!!! tip "Порада" +!!! Tip "Порада" Якщо встановлено NetworkManager, зміни враховуються автоматично. Якщо ні, потрібно перезапустити службу мережі. @@ -473,7 +473,7 @@ ping [-c numerical] destination [root]# ping –c 4 localhost ``` -!!! tip "Порада" +!!! Tip "Порада" Перевірте підключення від близького до далекого @@ -575,7 +575,7 @@ ipcalc [options] IP BROADCAST=172.16.79.255 ``` -!!! tip "Порада" +!!! Tip "Порада" Цікава ця команда, після якої слідує перенаправлення для автоматичного заповнення конфігураційних файлів ваших інтерфейсів: @@ -622,7 +622,7 @@ tcp LISTEN 0 128 *:22 *:* ### Команда `netstat` -!!! Warning "Важливо" +!!! Warning "Увага" Команда `netstat` тепер застаріла та більше не встановлюється за замовчуванням у Rocky Linux. Ви все ще можете знайти деякі версії Linux, у яких він встановлений, але найкраще переходити до використання `ss` для всього, для чого ви використовували `netstat`. @@ -667,7 +667,7 @@ $ arp-scan -I eth0 -l 172.16.1.232 88:51:fb:5e:fa:b3 (Unknown) (DUP: 2) ``` -!!! tip "Порада" +!!! Tip "Порада" Як показує наведений вище приклад, конфлікти MAC-адрес можливі! Технології віртуалізації та копіювання віртуальних машин викликають ці проблеми. diff --git a/docs/books/admin_guide/13-softwares.uk.md b/docs/books/admin_guide/13-softwares.uk.md index 5908adf9cf..19e6d24fd2 100644 --- a/docs/books/admin_guide/13-softwares.uk.md +++ b/docs/books/admin_guide/13-softwares.uk.md @@ -94,7 +94,7 @@ rpm -qf /path/to/file Після параметра "-q" ім'я пакета має бути точним. Метасимволи (знаки підстановки) не підтримуються. -!!! tip "Порада" +!!! Tip "Порада" Однак можна переглянути список усіх встановлених пакетів і відфільтрувати їх за допомогою команди grep. diff --git a/docs/books/incus_server/00-toc.uk.md b/docs/books/incus_server/00-toc.uk.md index 27e4c6bfb9..05eb0c8db3 100644 --- a/docs/books/incus_server/00-toc.uk.md +++ b/docs/books/incus_server/00-toc.uk.md @@ -48,13 +48,13 @@ Incus найкраще описано на [офіційному веб-сайт ## Передумови та припущення - Один сервер Rocky Linux 9, гарно налаштований. Розгляньте окремий жорсткий диск для дискового простору ZFS у робочому середовищі (це потрібно зробити, якщо ви використовуєте ZFS). І так, ми припускаємо, що це чистий сервер, а не VPS. -- Це слід вважати розширеною темою, але ми зробили все можливе, щоб зробити її максимально зрозумілою для всіх. Тим не менш, знання кількох основних речей про керування контейнерами займе у вас довгий шлях. Знання кількох базових речей про керування контейнерами значно допоможе. +- Це слід вважати розширеною темою, але ми зробили все можливе, щоб зробити її максимально зрозумілою для всіх. Тим не менш, знання кількох основних речей про керування контейнерами займе у вас довгий шлях. Тим не менш, знання кількох основних речей про управління контейнерами буде дуже корисним. - Ви маєте добре володіти командним рядком на своїй машині (машинах) і вільно володіти редактором командного рядка. (Використовуємо _vi_ в цих прикладах, але ви можете використовувати свій улюблений редактор.) - Для більшості цих процесів вам потрібно буде бути непривілейованим користувачем. Для початкових кроків налаштування вам потрібно буде бути користувачем root або вміти `sudo`, щоб стати ним. У цих розділах ми припускаємо, що ваш непривілейований користувач є "incusadmin". Вам доведеться створити цей обліковий запис користувача пізніше в процесі. - Для ZFS переконайтеся, що безпечне завантаження UEFI НЕ ввімкнено. В іншому випадку вам доведеться підписати модуль ZFS, щоб змусити його завантажити. -- Здебільшого ми використовуємо контейнери на основі Rocky Linux. +- Здебільшого ми використовуємо контейнери на основі Rocky Linux -!!! info +!!! info "примітка" ``` Автор включає методологію використання файлової системи ZFS. Зверніть увагу, що проект Incus рекомендує BTRFS як файлову систему для сервера Incus. (ZFS все ще є опцією файлової системи.) Проте BTRFS взагалі недоступний у Rocky Linux 9.4. Поки він не буде санкціонований апстрімом і не буде випущено там, ваш єдиний вихід — використовувати ZFS або іншу включену файлову систему. Щоб дізнатися більше про параметри файлової системи Incus, перегляньте [офіційний документ проекту тут.](https://linuxcontainers.org/incus/docs/main/reference/storage_dir/) diff --git a/docs/books/incus_server/01-install.uk.md b/docs/books/incus_server/01-install.uk.md index 935ca60f2a..1d50cc9ebf 100644 --- a/docs/books/incus_server/01-install.uk.md +++ b/docs/books/incus_server/01-install.uk.md @@ -69,7 +69,7 @@ dnf install zfs ## Налаштування середовища -Для запуску багатьох контейнерів потрібно більше, ніж більшість налаштувань ядра сервера. Якщо ми з самого початку припустимо, що будемо використовувати наш сервер у робочому стані, тоді нам потрібно внести ці зміни заздалегідь, щоб уникнути таких помилок, як «Забагато відкритих файлів». +Для запуску багатьох контейнерів потрібно більше, ніж більшість налаштувань ядра сервера. Якщо ви з самого початку припускаєте, що будете використовувати свій сервер у виробничому середовищі, вам потрібно заздалегідь внести ці зміни, щоб уникнути таких помилок, як «Занадто багато відкритих файлів». На щастя, налаштувати параметри для Incus неважко за допомогою кількох змін файлів і перезавантаження. diff --git a/docs/books/incus_server/06-profiles.uk.md b/docs/books/incus_server/06-profiles.uk.md index 10e34359be..89769eaa43 100644 --- a/docs/books/incus_server/06-profiles.uk.md +++ b/docs/books/incus_server/06-profiles.uk.md @@ -104,7 +104,7 @@ incus profile assign rockylinux-test-9 default,macvlan Якщо ви хочете запустити контейнери Rocky Linux і використовувати `macvlan` для призначення IP-адреси з вашої мережі LAN або WAN, процес буде відрізнятися залежно від версії контейнера операційної системи (8.x або 9.x). -### Rocky Linux 9.0 macvlan – виправлення DHCP +### Rocky Linux 9.x macvlan - the DHCP fix Спочатку давайте проілюструємо, що відбувається під час зупинки та перезапуску двох контейнерів після призначення профілю `macvlan`. @@ -169,7 +169,7 @@ incus shell rockylinux-test-9 dnf install which ``` -А потім запустіть: +Потім запустіть: ```bash which dhclient diff --git a/docs/books/incus_server/07-configurations.uk.md b/docs/books/incus_server/07-configurations.uk.md index 0607b2448f..5153e5aa39 100644 --- a/docs/books/incus_server/07-configurations.uk.md +++ b/docs/books/incus_server/07-configurations.uk.md @@ -126,7 +126,7 @@ locations: - none ``` -Це показує, що всі наші контейнери використовують наш пул сховищ dir. Під час використання ZFS ви також можете встановити дискову квоту для контейнера. Ось як це виглядатиме встановлення дискової квоти розміром 2 Гб для контейнера ubuntu-test. +Це показує, що всі наші контейнери використовують наш пул сховищ dir. Під час використання ZFS ви також можете встановити дискову квоту для контейнера. Ось як це виглядатиме встановлення дискової квоти розміром 2 Гб для контейнера ubuntu-test: ```bash incus config device override ubuntu-test root size=2GB diff --git a/docs/books/learning_ansible/01-basic.uk.md b/docs/books/learning_ansible/01-basic.uk.md index 7a397bafac..9ff7631bfd 100644 --- a/docs/books/learning_ansible/01-basic.uk.md +++ b/docs/books/learning_ansible/01-basic.uk.md @@ -11,7 +11,7 @@ update: 15 грудня 2021 р **** -**Цілі**: В цьому розділі ви дізнаєтеся як: +**Цілі**: В цьому розділі ви дізнаєтеся про: :heavy_check_mark: Реалізувати Ansible; :heavy_check_mark: Застосувати зміни конфігурації на сервері; @@ -360,7 +360,7 @@ ansible rocky8 -i ./local-inventory -m command -a 'date' Як у цьому прикладі, іноді простіше розділити декларацію керованих пристроїв на кілька файлів (наприклад, за хмарним проектом) і надати Ansible шлях до цих файлів, а не підтримувати довгий файл інвентаризації. -| Опція | Опис | +| Опція | Інформація | | ------------------------ | -------------------------------------------------------------------------------------------------- | | `-a 'arguments'` | Аргументи для передачі в модуль. | | `-b -K` | Запитує пароль і виконує команду з вищими привілегіями. | @@ -783,7 +783,7 @@ PLAY RECAP ********************************************************************* ... ``` -!!! tip "Порада" +!!! Tip "Порада" `dnf` — це один із модулів, який дозволяє надати йому список як аргумент. diff --git a/docs/books/learning_ansible/02-advanced.de.md b/docs/books/learning_ansible/02-advanced.de.md index b8d937f6ad..1db70735d5 100644 --- a/docs/books/learning_ansible/02-advanced.de.md +++ b/docs/books/learning_ansible/02-advanced.de.md @@ -8,7 +8,7 @@ In diesem Kapitel lernen Sie weitere Themen über die Arbeit mit Ansible. **** -**Ziele**: In diesem Kapitel wird Folgendes behandelt: +**Ziele**: In diesem Kapitel lernen Sie Folgendes: :heavy_check_mark: arbeiten mit Variablen; :heavy_check_mark: Verwendung von Schleifen; diff --git a/docs/books/learning_ansible/03-working-with-files.uk.md b/docs/books/learning_ansible/03-working-with-files.uk.md index d2d1b3aa67..6cfb118d63 100644 --- a/docs/books/learning_ansible/03-working-with-files.uk.md +++ b/docs/books/learning_ansible/03-working-with-files.uk.md @@ -8,7 +8,7 @@ title: Керування файлами **** -**Цілі**: В цьому розділі ви дізнаєтеся як: +**Цілі**: В цьому розділі ви дізнаєтеся про: :heavy_check_mark: змінити вміст файлу; :heavy_check_mark: завантажити файли на цільові сервери; diff --git a/docs/books/learning_ansible/04-ansible-galaxy.uk.md b/docs/books/learning_ansible/04-ansible-galaxy.uk.md index d00055901c..579febb32b 100644 --- a/docs/books/learning_ansible/04-ansible-galaxy.uk.md +++ b/docs/books/learning_ansible/04-ansible-galaxy.uk.md @@ -8,7 +8,7 @@ title: Ansible Galaxy **** -**Цілі**: В цьому розділі ви дізнаєтеся як: +**Цілі**: В цьому розділі ви дізнаєтеся про: :heavy_check_mark: встановлювати та керувати колекціями. :heavy_check_mark: встановлювати ролі та керувати ними. @@ -18,7 +18,7 @@ title: Ansible Galaxy **Знання**: :star: :star: **Складність**: :star: :star: :star: -**Час для читання**: 40 хвилин +**Час читання**: 40 хвилин **** @@ -36,14 +36,14 @@ title: Ansible Galaxy ansible-galaxy role [import|init|install|login|remove|...] ``` -| Підкоманди | Функціональність | -| ---------- | ------------------------------------------------- | -| `install` | встановлює роль. | -| `remove` | видаляє одну або кілька ролей. | -| `list` | відображає назву та версію встановлених ролей. | -| `info` | відображає інформацію про роль. | -| `init` | створює скелет нової ролі. | -| `import` | імпортує ролі з веб-сайту galaxy. Потрібен логін. | +| Підкоманди | Функціональність | +| ----------------- | ------------------------------------------------- | +| `install` | встановлює роль. | +| `remove` | видаляє одну або кілька ролей. | +| `list` | відображає назву та версію встановлених ролей. | +| `info "примітка"` | відображає інформацію про роль. | +| `init` | створює скелет нової ролі. | +| `import` | імпортує ролі з веб-сайту galaxy. Потрібен логін. | * Щоб керувати колекціями: diff --git a/docs/books/learning_ansible/05-deployments.de.md b/docs/books/learning_ansible/05-deployments.de.md index c241b8b3fa..89c53f453a 100644 --- a/docs/books/learning_ansible/05-deployments.de.md +++ b/docs/books/learning_ansible/05-deployments.de.md @@ -12,9 +12,9 @@ In diesem Kapitel erfahren Sie, wie Sie Anwendungen mit der Ansible-Rolle [Ansis :heavy_check_mark: Ansistrano implementieren; :heavy_check_mark: Ansistrano konfigurieren; -:heavy_check_mark: freigegebene Ordner und Dateien zwischen bereitgestellten Versionen verwenden; -:heavy_check_mark: verschiedene Versionen einer Website über git bereitstellen; -bereit :heavy_check_mark: zwischen Bereitstellungsschritten reagieren. +:heavy_check_mark: Gemeinsame Ordner und Dateien zwischen bereitgestellten Versionen verwenden; +:heavy_check_mark: Verschiedene Versionen einer Site aus Git bereitstellen; +:heavy_check_mark: Zwischen den Bereitstellungsschritten handeln. :checkered_flag: **ansible**, **ansistrano**, **Rollen**, **Bereitstellung** diff --git a/docs/books/learning_ansible/05-deployments.uk.md b/docs/books/learning_ansible/05-deployments.uk.md index 7afe27e0b0..98bbcd3532 100644 --- a/docs/books/learning_ansible/05-deployments.uk.md +++ b/docs/books/learning_ansible/05-deployments.uk.md @@ -8,7 +8,7 @@ title: Розгортання за допомогою Ansistrano **** -**Цілі**: В цьому розділі ви дізнаєтеся як: +**Цілі**: В цьому розділі ви дізнаєтеся про: :heavy_check_mark: Запровадити Ansistrano; :heavy_check_mark: Налаштувати Ansistrano; @@ -21,7 +21,7 @@ title: Розгортання за допомогою Ansistrano **Знання**: :star: :star: **Складність**: :star: :star: :star: -**Час для читання**: 40 хвилин +**Час читання**: 40 хвилин **** diff --git a/docs/books/learning_ansible/06-large-scale-infrastructure.uk.md b/docs/books/learning_ansible/06-large-scale-infrastructure.uk.md index 782b10f6cc..6c5339a06d 100644 --- a/docs/books/learning_ansible/06-large-scale-infrastructure.uk.md +++ b/docs/books/learning_ansible/06-large-scale-infrastructure.uk.md @@ -8,7 +8,7 @@ title: Великомасштабна інфраструктура **** -**Цілі**: В цьому розділі ви дізнаєтеся як: +**Цілі**: В цьому розділі ви дізнаєтеся про: :heavy_check_mark: Організувати свій код для великої інфраструктури; :heavy_check_mark: Застосувати все або частину вашого керування конфігурацією до групи вузлів; diff --git a/docs/books/learning_bash/00-toc.uk.md b/docs/books/learning_bash/00-toc.uk.md index b6a38e00e9..cb404d41cb 100644 --- a/docs/books/learning_bash/00-toc.uk.md +++ b/docs/books/learning_bash/00-toc.uk.md @@ -4,7 +4,7 @@ author: Antoine Le Morvan contributors: Steven Spencer, Ganna Zhyrnova tested_with: 8.5 tags: - - освіта + - education - сценарій bash - bash --- diff --git a/docs/books/learning_bash/01-first-script.uk.md b/docs/books/learning_bash/01-first-script.uk.md index 70fec14384..65e4fe8ae6 100644 --- a/docs/books/learning_bash/01-first-script.uk.md +++ b/docs/books/learning_bash/01-first-script.uk.md @@ -4,7 +4,7 @@ author: Antoine Le Morvan contributors: Steven Spencer, Ganna Zhyrnova tested_with: 8.5 tags: - - освіта + - education - сценарій bash - bash --- @@ -15,7 +15,7 @@ tags: **** -**Цілі**: В цьому розділі ви дізнаєтеся як: +**Цілі**: В цьому розділі ви дізнаєтеся про: :heavy_check_mark: Написати свій перший сценарій у bash; :heavy_check_mark: Виконати свій перший сценарій; diff --git a/docs/books/learning_bash/02-using-variables.uk.md b/docs/books/learning_bash/02-using-variables.uk.md index 961f2d089b..a151a36375 100644 --- a/docs/books/learning_bash/02-using-variables.uk.md +++ b/docs/books/learning_bash/02-using-variables.uk.md @@ -4,7 +4,7 @@ author: Antoine Le Morvan contributors: Steven Spencer, Ganna Zhyrnova tested_with: 8.5 tags: - - освіта + - education - сценарій bash - bash --- diff --git a/docs/books/learning_bash/03-data-entry-and-manipulations.uk.md b/docs/books/learning_bash/03-data-entry-and-manipulations.uk.md index 8c3803ad64..8e51d196e2 100644 --- a/docs/books/learning_bash/03-data-entry-and-manipulations.uk.md +++ b/docs/books/learning_bash/03-data-entry-and-manipulations.uk.md @@ -4,7 +4,7 @@ author: Antoine Le Morvan contributors: Steven Spencer, Ganna Zhyrnova tested_with: 8.5 tags: - - освіта + - education - сценарій bash - bash --- @@ -15,14 +15,14 @@ tags: **** -**Цілі**: В цьому розділі ви дізнаєтеся як: +**Цілі**: В цьому розділі ви дізнаєтеся про: :heavy_check_mark: прочитати введені дані від користувача; :heavy_check_mark: маніпулювати записами даних; :heavy_check_mark: використовувати аргументи в сценарії; :heavy_check_mark: керувати позиційними змінними; -:checkered_flag: **linux**, **сценарій**, **bash**, **змінна** +:checkered_flag: **linux**, **script**, **bash**, **variable** **Знання**: :star: :star: **Складність**: :star: :star: @@ -113,7 +113,7 @@ cut -d: -f1 /etc/passwd * Команда `grep` працює "по вертикалі" (ізоляція одного рядка від усіх рядків у файлі). * Комбінація двох команд дозволяє **ізолювати конкретне поле у файлі**. -Приклад: +Приклади: ```bash grep "^root:" /etc/passwd | cut -d: -f3 @@ -218,7 +218,7 @@ dirname $FILE | `$#` | містить кількість переданих аргументів. | | `$*` або `$@` | містить в одній змінній усі передані аргументи. | -Приклад: +Приклади: ```bash #!/usr/bin/env bash @@ -340,7 +340,7 @@ All without separation ($@) = tree four set [value] [$variable] ``` -Приклад: +Приклади: ```bash $ set one two three diff --git a/docs/books/learning_bash/04-check-your-knowledge.uk.md b/docs/books/learning_bash/04-check-your-knowledge.uk.md index a30665ae2e..1d00743e21 100644 --- a/docs/books/learning_bash/04-check-your-knowledge.uk.md +++ b/docs/books/learning_bash/04-check-your-knowledge.uk.md @@ -4,7 +4,7 @@ author: Antoine Le Morvan contributors: Steven Spencer, Ganna Zhyrnova tested_with: 8.5 tags: - - освіта + - education - сценарій bash - bash --- diff --git a/docs/books/learning_bash/05-tests.uk.md b/docs/books/learning_bash/05-tests.uk.md index de5bbb9c4c..edbd26e626 100644 --- a/docs/books/learning_bash/05-tests.uk.md +++ b/docs/books/learning_bash/05-tests.uk.md @@ -4,7 +4,7 @@ author: Antoine Le Morvan contributors: Steven Spencer, Ganna Zhyrnova tested_with: 8.5 tags: - - освіта + - education - сценарій bash - bash --- @@ -13,14 +13,14 @@ tags: **** -**Цілі**: В цьому розділі ви дізнаєтеся як: +**Цілі**: В цьому розділі ви дізнаєтеся про: :heavy_check_mark: працювати з кодом повернення; :heavy_check_mark: перевірити та порівняти файли; :heavy_check_mark: перевірити змінні, рядки та цілі числа; :heavy_check_mark: виконати операцію з цілими числами; -:checkered_flag: **linux**, **сценарій**, **bash**, **змінна** +:checkered_flag: **linux**, **script**, **bash**, **variable** **Знання**: :star: :star: **Складність**: :star: :star: :star: diff --git a/docs/books/learning_bash/06-conditional-structures.uk.md b/docs/books/learning_bash/06-conditional-structures.uk.md index 8d87858220..98c1b3b487 100644 --- a/docs/books/learning_bash/06-conditional-structures.uk.md +++ b/docs/books/learning_bash/06-conditional-structures.uk.md @@ -4,7 +4,7 @@ author: Antoine Le Morvan contributors: Steven Spencer, Ganna Zhyrnova tested_with: 8.5 tags: - - освіта + - education - сценарій bash - bash --- @@ -13,7 +13,7 @@ tags: **** -**Цілі**: В цьому розділі ви дізнаєтеся як: +**Цілі**: В цьому розділі ви дізнаєтеся про: :heavy_check_mark: використовувати умовний синтаксис `if`; :heavy_check_mark: використовувати умовний синтаксис `case`; diff --git a/docs/gemstones/git/02-gh_cli_edit_pr_title.de.md b/docs/gemstones/git/02-gh_cli_edit_pr_title.de.md new file mode 100644 index 0000000000..26eedcec20 --- /dev/null +++ b/docs/gemstones/git/02-gh_cli_edit_pr_title.de.md @@ -0,0 +1,52 @@ +--- +title: Bearbeiten des Titels eines vorhandenen Pull Requests über die CLI +author: Wale Soyinka +contributors: Ganna Zhyrnova +tags: + - GitHub + - Pull-Request + - Dokumentation + - CLI +--- + +## Einleitung + +In diesem Gemstone wird erklärt, wie Sie den Titel eines vorhandenen Pull Requests (PR) in einem GitHub-Repository mithilfe der GitHub-Weboberfläche und der CLI bearbeiten. + +## Problembeschreibung + +Manchmal muss der Titel eines PR nach seiner Erstellung angepasst werden, um die aktuellen Änderungen oder Diskussionen besser widerzuspiegeln. + +## Voraussetzungen + +- Ein vorhandener GitHub-Pull-Request. +- Zugriff auf die GitHub-Weboberfläche oder CLI mit den erforderlichen Berechtigungen. + +## Prozedur + +### GitHub CLI – Verwendung + +1. **Checken Sie den entsprechenden Zweig aus**: + - Stellen Sie sicher, dass Sie sich auf dem mit dem PR verknüpften Branch befinden. + + ```bash + git checkout branch-name + ``` + +2. **Bearbeiten Sie den PR mithilfe der CLI**: + - Verwenden Sie den folgenden Befehl, um den PR zu bearbeiten: + + ```bash + gh pr edit PR_NUMBER --title "New PR Title" + ``` + + - Ersetzen Sie `PR_NUMBER` durch die Nummer Ihres Pull Requests und `"New PR Title"` durch den gewünschten Titel. + +## Zusätzliche Informationen (optional) + +- Das Bearbeiten eines PR-Titels hat keine Auswirkungen auf den Diskussionsthread oder Codeänderungen. +- Es gilt als gute Praxis, Mitwirkende zu informieren, wenn an einem PR-Titel wesentliche Änderungen vorgenommen werden. + +## Zusammenfassung + +Mit diesen Schritten können Sie den Titel einer vorhandenen Pull-Anfrage in einem GitHub-Repository ganz einfach über das GitHub-CLI-Tool (gh) ändern. diff --git a/docs/index.de.md b/docs/index.de.md index d10c7c4aec..9d52e3f04f 100644 --- a/docs/index.de.md +++ b/docs/index.de.md @@ -24,7 +24,7 @@ Die Hauptbereiche der Dokumentationseite sind: * **Anleitungen**: die bestimmte Themen zum Einrichten und Benutzen von Rocky Linux abdecken. * **Bücher**: enthalten detailliertere Informationen rund um einen bestimmten Bereich. -* **Labs**: Sie werden Spaß an diese Tutorials haben! +* **Labors**: Sie werden Spaß an diese Tutorials haben! * **Gems**: Hier werden nützliche Skripte und Tipps zur Verwendung von Befehlen vorgestellt. * **Release Notes**: enthalten Rocky Linux Release Notes und Versionsupdate Informationen. * **Rocky Linux**: Link zur Offiziellen Homepage. diff --git a/docs/labs/kubernetes-the-hard-way/lab11-pod-network-routes.it.md b/docs/labs/kubernetes-the-hard-way/lab11-pod-network-routes.it.md new file mode 100644 index 0000000000..3ee616d2da --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab11-pod-network-routes.it.md @@ -0,0 +1,94 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tags: + - kubernetes + - k8s + - lab exercise + - runc + - containerd + - etcd + - kubectl +--- + +# Laboratorio 11: Provisioning delle rotte di rete dei Pod + +!!! info + + Si tratta di un fork dell'originale ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way) scritto originariamente da Kelsey Hightower (GitHub: kelseyhightower). A differenza dell'originale, che si basa su distribuzioni simili a Debian per l'architettura ARM64, questo fork si rivolge a distribuzioni Enterprise Linux come Rocky Linux, che gira su architettura x86_64. + +I pod assegnati a un nodo ricevono un indirizzo IP dall'intervallo CIDR dei pod del nodo. Attualmente, i pod non possono comunicare con altri pod in esecuzione su nodi diversi a causa della mancanza dei [percorsi di rete] (https://cloud.google.com/compute/docs/vpc/routes). + +In questo laboratorio si creerà un percorso per ciascun nodo di lavoro che mappa l'intervallo CIDR del pod del nodo all'indirizzo IP interno del nodo. + +> Esistono [altri modi](https://kubernetes.io/docs/concepts/cluster-administration/networking/#how-to-achieve-this) per implementare il modello di rete Kubernetes. + +## La tabella di instradamento + +In questa sezione si raccoglieranno le informazioni necessarie per creare percorsi nella rete VPC `kubernetes-the-hard-way`. + +Stampare l'indirizzo IP interno e l'intervallo CIDR del pod per ogni istanza di lavoro: + +```bash +{ + SERVER_IP=$(grep server machines.txt | cut -d " " -f 1) + NODE_0_IP=$(grep node-0 machines.txt | cut -d " " -f 1) + NODE_0_SUBNET=$(grep node-0 machines.txt | cut -d " " -f 5) + NODE_1_IP=$(grep node-1 machines.txt | cut -d " " -f 1) + NODE_1_SUBNET=$(grep node-1 machines.txt | cut -d " " -f 5) +} +``` + +```bash +ssh root@server <U>.| +00000150 80 3a 39 d5 08 f9 6c de 6b 0a |.:9...l.k.| +0000015a +``` + +È necessario anteporre alla chiave `etcd` il prefisso `k8s:enc:aescbc:v1:key1`, che indica l'utilizzo del provider `aescbc` per crittografare i dati con la chiave di crittografia `key1`. + +## Implementazioni + +In questa sezione verranno verificate le capacità di creare e gestire [Distribuzioni](https://kubernetes.io/docs/concepts/workloads/controllers/deployment/). + +Creare una distribuzione per il server web [nginx](https://nginx.org/en/): + +```bash +kubectl create deployment nginx \ + --image=nginx:latest +``` + +Elencare il pod creato dalla distribuzione `nginx`: + +```bash +kubectl get pods -l app=nginx +``` + +```bash +NAME READY STATUS RESTARTS AGE +nginx-54c98b4f84-dfwl9 1/1 Running 0 71s +``` + +### Port Forwarding + +In questa sezione verranno verificate le capacità di accedere alle applicazioni in remoto utilizzando il [port forwarding](https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/). + +Recuperare il nome completo del pod `nginx`: + +```bash +POD_NAME=$(kubectl get pods -l app=nginx \ + -o jsonpath="{.items[0].metadata.name}") +``` + +Inoltrare la porta `8080` sul tuo computer locale alla porta `80` del pod `nginx`: + +```bash +kubectl port-forward $POD_NAME 8080:80 +``` + +```text +Forwarding from 127.0.0.1:8080 -> 80 +Forwarding from [::1]:8080 -> 80 +``` + +In un nuovo terminale, inviare una richiesta HTTP con l'indirizzo di inoltro: + +```bash +curl --head http://127.0.0.1:8080 +``` + +```text +HTTP/1.1 200 OK +Server: nginx/1.27.4 +Date: Tue, 04 Mar 2025 01:30:20 GMT +Content-Type: text/html +Content-Length: 615 +Last-Modified: Wed, 05 Feb 2025 11:06:32 GMT +Connection: keep-alive +ETag: "67a34638-267" +Accept-Ranges: bytes +``` + +Torna al terminale precedente e interrompere il port forwarding al pod `nginx` digitando ++ctrl+c++: + +```text +Forwarding from 127.0.0.1:8080 -> 80 +Forwarding from [::1]:8080 -> 80 +Handling connection for 8080 +^C +``` + +### Registri + +In questa sezione verranno verificate le capacità di [recuperare i log dei container](https://kubernetes.io/docs/concepts/cluster-administration/logging/). + +Stampare i log del pod `nginx`: + +```bash +kubectl logs $POD_NAME +``` + +```text +...... +127.0.0.1 - - [04/Mar/2025:01:30:20 +0000] "HEAD / HTTP/1.1" 200 0 "-" "curl/7.76.1" "-" +``` + +### Exec + +In questa sezione verranno verificate le capacità di [eseguire comandi in un container](https://kubernetes.io/docs/tasks/debug-application-cluster/get-shell-running-container/#running-individual-commands-in-a-container). + +Stampare la versione di `nginx` eseguendo il comando `nginx -v` nel container `nginx`: + +```bash +kubectl exec -ti $POD_NAME -- nginx -v +``` + +```text +nginx version: nginx/1.27.4 +``` + +## Servizi + +In questa sezione, verranno verificate le capacità di esporre le applicazioni con un [Servizio](https://kubernetes.io/docs/concepts/services-networking/service/). + +Esporre la distribuzione `nginx` utilizzando un servizio [NodePort](https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport): + +```bash +kubectl expose deployment nginx \ + --port 80 --type NodePort +``` + +> Non è possibile utilizzare il tipo di servizio LoadBalancer perché il cluster non è configurato con l'[integrazione del provider cloud](https://kubernetes.io/docs/getting-started-guides/scratch/#cloud-provider). Questo tutorial non tratta la configurazione dell'integrazione con i provider cloud. + +Recuperare la porta del nodo assegnata al servizio `nginx`: + +```bash +NODE_PORT=$(kubectl get svc nginx \ + --output=jsonpath='{range .spec.ports[0]}{.nodePort}') +``` + +Effettuare una richiesta HTTP con l'indirizzo IP e la porta del nodo `nginx`: + +```bash +curl -I http://node-0:${NODE_PORT} +``` + +```text +HTTP/1.1 200 OK +Server: nginx/1.27.4 +Date: Tue, 04 Mar 2025 01:40:20 GMT +Content-Type: text/html +Content-Length: 615 +Last-Modified: Wed, 05 Feb 2025 11:06:32 GMT +Connection: keep-alive +ETag: "67a34638-267" +Accept-Ranges: bytes +``` + +Successivo: [Pulizia](lab13-cleanup.md) diff --git a/docs/labs/kubernetes-the-hard-way/lab13-cleanup.it.md b/docs/labs/kubernetes-the-hard-way/lab13-cleanup.it.md new file mode 100644 index 0000000000..9c6ff312a4 --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab13-cleanup.it.md @@ -0,0 +1,24 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tags: + - kubernetes + - k8s + - lab exercise +--- + +# Laboratorio 13: Pulizia + +!!! info + + Si tratta di un fork dell'originale ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way) scritto originariamente da Kelsey Hightower (GitHub: kelseyhightower). A differenza dell'originale, che si basa su distribuzioni simili a Debian per l'architettura ARM64, questo fork si rivolge a distribuzioni Enterprise Linux come Rocky Linux, che gira su architettura x86_64. + +In questo laboratorio si elimineranno le risorse di calcolo create durante questo tutorial. + +## Istanze di calcolo + +Le versioni precedenti di questa guida utilizzavano risorse GCP per vari aspetti dell'elaborazione dati e della rete. La versione attuale è agnostica; tutte le configurazioni vengono eseguite su `jumpbox`, `server` o nodi. + +Per ripulire il sistema è sufficiente eliminare tutte le macchine virtuali create per questo esercizio. + +Successivo: [Ricomincia da capo](lab0-README.md) diff --git a/docs/labs/kubernetes-the-hard-way/lab5-kubernetes-configuration-files.it.md b/docs/labs/kubernetes-the-hard-way/lab5-kubernetes-configuration-files.it.md new file mode 100644 index 0000000000..5fbd86fc58 --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab5-kubernetes-configuration-files.it.md @@ -0,0 +1,214 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tags: + - kubernetes + - k8s + - lab exercise +--- + +# Laboratorio 5: Generazione dei file di configurazione di Kubernetes per l'autenticazione + +!!! info + + Si tratta di un fork dell'originale ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way) scritto originariamente da Kelsey Hightower (GitHub: kelseyhightower). A differenza dell'originale, che si basa su distribuzioni simili a Debian per l'architettura ARM64, questo fork si rivolge a distribuzioni Enterprise Linux come Rocky Linux, che gira su architettura x86_64. + +In questo laboratorio, si genereranno i [file di configurazione client Kubernetes](https://kubernetes.io/docs/concepts/configuration/organize-cluster-access-kubeconfig/), che vengono solitamente chiamati kubeconfig. Questi file configurano i client Kubernetes per connettersi e autenticarsi con i server API Kubernetes. + +## Configurazioni di autenticazione del client + +In questa sezione si generano i file kubeconfig per `kubelet` e per l'utente `admin`. + +### Il file di configurazione kubelet Kubernetes + +Quando si generano i file kubeconfig per i Kubelet, è necessario far corrispondere il certificato del client al nome del nodo del Kubelet. Questo assicura che i Kubelets siano autorizzati correttamente dal [Node Authorizer] di Kubernetes (https://kubernetes.io/docs/reference/access-authn-authz/node/). + +> I comandi seguenti devono essere eseguiti nella stessa directory utilizzata per generare i certificati SSL durante il laboratorio [Generazione di certificati TLS](lab4-certificate-authority.md). + +Generare un file kubeconfig per i nodi di lavoro node-0 e node-1: + +```bash +for host in node-0 node-1; do + kubectl config set-cluster kubernetes-the-hard-way \ + --certificate-authority=ca.crt \ + --embed-certs=true \ + --server=https://server.kubernetes.local:6443 \ + --kubeconfig=${host}.kubeconfig + + kubectl config set-credentials system:node:${host} \ + --client-certificate=${host}.crt \ + --client-key=${host}.key \ + --embed-certs=true \ + --kubeconfig=${host}.kubeconfig + + kubectl config set-context default \ + --cluster=kubernetes-the-hard-way \ + --user=system:node:${host} \ + --kubeconfig=${host}.kubeconfig + + kubectl config use-context default \ + --kubeconfig=${host}.kubeconfig +done +``` + +Risultati: + +```text +node-0.kubeconfig +node-1.kubeconfig +``` + +### Il file di configurazione di Kubernetes kube-proxy + +Generare un file kubeconfig per il servizio `kube-proxy`: + +```bash + kubectl config set-cluster kubernetes-the-hard-way \ + --certificate-authority=ca.crt \ + --embed-certs=true \ + --server=https://server.kubernetes.local:6443 \ + --kubeconfig=kube-proxy.kubeconfig + + kubectl config set-credentials system:kube-proxy \ + --client-certificate=kube-proxy.crt \ + --client-key=kube-proxy.key \ + --embed-certs=true \ + --kubeconfig=kube-proxy.kubeconfig + + kubectl config set-context default \ + --cluster=kubernetes-the-hard-way \ + --user=system:kube-proxy \ + --kubeconfig=kube-proxy.kubeconfig + + kubectl config use-context default \ + --kubeconfig=kube-proxy.kubeconfig +``` + +Risultati: + +```text +kube-proxy.kubeconfig +``` + +### Il file di configurazione di Kubernetes di kube-controller-manager + +Generare un file kubeconfig per il servizio `kube-controller-manager`: + +```bash + kubectl config set-cluster kubernetes-the-hard-way \ + --certificate-authority=ca.crt \ + --embed-certs=true \ + --server=https://server.kubernetes.local:6443 \ + --kubeconfig=kube-controller-manager.kubeconfig + + kubectl config set-credentials system:kube-controller-manager \ + --client-certificate=kube-controller-manager.crt \ + --client-key=kube-controller-manager.key \ + --embed-certs=true \ + --kubeconfig=kube-controller-manager.kubeconfig + + kubectl config set-context default \ + --cluster=kubernetes-the-hard-way \ + --user=system:kube-controller-manager \ + --kubeconfig=kube-controller-manager.kubeconfig + + kubectl config use-context default \ + --kubeconfig=kube-controller-manager.kubeconfig +``` + +Risultati: + +```text +kube-controller-manager.kubeconfig +``` + +### Il file di configurazione di kube-scheduler Kubernetes + +Generare un file kubeconfig per il servizio `kube-scheduler`: + +```bash + kubectl config set-cluster kubernetes-the-hard-way \ + --certificate-authority=ca.crt \ + --embed-certs=true \ + --server=https://server.kubernetes.local:6443 \ + --kubeconfig=kube-scheduler.kubeconfig + + kubectl config set-credentials system:kube-scheduler \ + --client-certificate=kube-scheduler.crt \ + --client-key=kube-scheduler.key \ + --embed-certs=true \ + --kubeconfig=kube-scheduler.kubeconfig + + kubectl config set-context default \ + --cluster=kubernetes-the-hard-way \ + --user=system:kube-scheduler \ + --kubeconfig=kube-scheduler.kubeconfig + + kubectl config use-context default \ + --kubeconfig=kube-scheduler.kubeconfig +``` + +Risultati: + +```text +kube-scheduler.kubeconfig +``` + +### Il file di configurazione Kubernetes dell'amministratore + +Generare un file kubeconfig per l'utente `admin`: + +```bash + kubectl config set-cluster kubernetes-the-hard-way \ + --certificate-authority=ca.crt \ + --embed-certs=true \ + --server=https://127.0.0.1:6443 \ + --kubeconfig=admin.kubeconfig + + kubectl config set-credentials admin \ + --client-certificate=admin.crt \ + --client-key=admin.key \ + --embed-certs=true \ + --kubeconfig=admin.kubeconfig + + kubectl config set-context default \ + --cluster=kubernetes-the-hard-way \ + --user=admin \ + --kubeconfig=admin.kubeconfig + + kubectl config use-context default \ + --kubeconfig=admin.kubeconfig +``` + +Risultati: + +```text +admin.kubeconfig +``` + +## Distribuire i file di configurazione di Kubernetes + +Copiare i file `kubelet` e `kube-proxy` nelle istanze `node-0` e `node-1`: + +```bash +for host in node-0 node-1; do + ssh root@$host "mkdir /var/lib/{kube-proxy,kubelet}" + + scp kube-proxy.kubeconfig \ + root@$host:/var/lib/kube-proxy/kubeconfig \ + + scp ${host}.kubeconfig \ + root@$host:/var/lib/kubelet/kubeconfig +done +``` + +Copiare i file kubeconfig `kube-controller-manager` e `kube-scheduler` nell'istanza del controller: + +```bash +scp admin.kubeconfig \ + kube-controller-manager.kubeconfig \ + kube-scheduler.kubeconfig \ + root@server:~/ +``` + +Successivo: [Generazione della configurazione e della chiave di crittografia dei dati](lab6-data-encryption-keys.md) diff --git a/docs/labs/kubernetes-the-hard-way/lab6-data-encryption-keys.de.md b/docs/labs/kubernetes-the-hard-way/lab6-data-encryption-keys.de.md new file mode 100644 index 0000000000..2761023c4c --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab6-data-encryption-keys.de.md @@ -0,0 +1,43 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tags: + - kubernetes + - k8s + - Laborübung +--- + +# Übung 6: Generieren der Datenverschlüsselungskonfiguration und des Schlüssels + +!!! info + + Dies ist ein Fork des ursprünglichen ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way), das ursprünglich von Kelsey Hightower geschrieben wurde (GitHub: kelseyhightower). Im Gegensatz zum Original, das auf Debian-ähnlichen Distributionen für die ARM64-Architektur basiert, zielt dieser Fork auf Enterprise-Linux-Distributionen wie Rocky Linux ab, das auf der x86_64-Architektur läuft. + +Kubernetes speichert verschiedene Daten, darunter Clusterstatus, Anwendungskonfigurationen und Secrets. Kubernetes ermöglicht die [Verschlüsselung](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data) ruhender Clusterdaten. + +In diesem Labor generieren Sie einen Verschlüsselungsschlüssel und eine [Verschlüsselungskonfiguration](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#understanding-the-encryption-at-rest-configuration), die zum Verschlüsseln von Kubernetes-Secrets geeignet sind. + +## Der Chiffrierschlüssel + +Generieren Sie einen Verschlüsselungsschlüssel: + +```bash +export ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64) +``` + +## Die Verschlüsselungs-Konfigurations-Datei + +Erstellen Sie die Verschlüsselungskonfigurationsdatei `encryption-config.yaml`: + +```bash +envsubst < configs/encryption-config.yaml \ + > encryption-config.yaml +``` + +Kopieren Sie die Verschlüsselungskonfigurationsdatei `encryption-config.yaml` in jede Controller-Instanz: + +```bash +scp encryption-config.yaml root@server:~/ +``` + +Fortsetzung folgt: [Bootstrapping vom etcd-Cluster](lab7-bootstrapping-etcd.md) diff --git a/docs/labs/kubernetes-the-hard-way/lab6-data-encryption-keys.it.md b/docs/labs/kubernetes-the-hard-way/lab6-data-encryption-keys.it.md new file mode 100644 index 0000000000..d36808783a --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab6-data-encryption-keys.it.md @@ -0,0 +1,43 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tags: + - kubernetes + - k8s + - lab exercise +--- + +# Laboratorio 6: Generazione della configurazione e della chiave di crittografia dei dati + +!!! info + + Si tratta di un fork dell'originale ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way) scritto originariamente da Kelsey Hightower (GitHub: kelseyhightower). A differenza dell'originale, che si basa su distribuzioni simili a Debian per l'architettura ARM64, questo fork si rivolge a distribuzioni Enterprise Linux come Rocky Linux, che gira su architettura x86_64. + +Kubernetes memorizza vari dati, tra cui lo stato del cluster, le configurazioni delle applicazioni e i dati segreti. Kubernetes consente di [crittografare](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data) i dati del cluster inattivi. + +In questo laboratorio, genererai una chiave di crittografia e una [configurazione di crittografia](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/#understanding-the-encryption-at-rest-configuration) adatta alla crittografia dei dati segreti Kubernetes. + +## La chiave di crittografia + +Generare una chiave di crittografia: + +```bash +export ENCRYPTION_KEY=$(head -c 32 /dev/urandom | base64) +``` + +## Il file di configurazione della crittografia + +Creare il file di configurazione della crittografia `encryption-config.yaml`: + +```bash +envsubst < configs/encryption-config.yaml \ + > encryption-config.yaml +``` + +Copiare il file di configurazione della crittografia `encryption-config.yaml` su ciascuna istanza del controller: + +```bash +scp encryption-config.yaml root@server:~/ +``` + +Successivo: [Avvio del cluster etcd](lab7-bootstrapping-etcd.md) diff --git a/docs/labs/kubernetes-the-hard-way/lab7-bootstrapping-etcd.it.md b/docs/labs/kubernetes-the-hard-way/lab7-bootstrapping-etcd.it.md new file mode 100644 index 0000000000..57d10c6c30 --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab7-bootstrapping-etcd.it.md @@ -0,0 +1,96 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tags: + - kubernetes + - k8s + - lab exercise +--- + +# Laboratorio 7: Avvio del cluster `etcd` + +!!! info + + Si tratta di un fork dell'originale ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way) scritto originariamente da Kelsey Hightower (GitHub: kelseyhightower). A differenza dell'originale, che si basa su distribuzioni simili a Debian per l'architettura ARM64, questo fork si rivolge a distribuzioni Enterprise Linux come Rocky Linux, che gira su architettura x86_64. + +I componenti di Kubernetes sono stateless e memorizzano lo stato del cluster in [etcd](https://github.com/etcd-io/etcd). In questo laboratorio si avvierà un cluster a tre nodi `etcd` e lo si configurerà per l'alta disponibilità e l'accesso remoto sicuro. + +## Prerequisiti + +Copiare i binari di `etcd` e i file dell'unità `systemd` nell'istanza `server`: + +```bash +scp \ + downloads/etcd-v3.4.36-linux-amd64.tar.gz \ + units/etcd.service \ + root@server:~/ +``` + +Eseguire i comandi nelle sezioni seguenti di questo laboratorio sul computer `server`. Accedere alla macchina `server` con il comando `ssh`. Esempio: + +```bash +ssh root@server +``` + +## Avvio di un Cluster etcd + +### Installare i binari di etcd + +Se non è già installato, installare prima l'utilità `tar` con `dnf`. Quindi, estrarre e installare il server `etcd` e l'utilità a riga di comando `etcdctl`: + +```bash + dnf -y install tar + tar -xvf etcd-v3.4.36-linux-amd64.tar.gz + mv etcd-v3.4.36-linux-amd64/etcd* /usr/local/bin/ +``` + +### Configurare il Server etcd + +```bash + mkdir -p /etc/etcd /var/lib/etcd + chmod 700 /var/lib/etcd + cp ca.crt kube-api-server.key kube-api-server.crt \ + /etc/etcd/ +``` + +Ogni membro di `etcd` deve avere un nome unico all'interno di un cluster `etcd`. Impostare il nome `etcd` in modo che corrisponda al nome host dell'istanza di calcolo corrente: + +Crea il file dell'unità `systemd` `etcd.service`: + +```bash +mv etcd.service /etc/systemd/system/ +chmod 644 /etc/systemd/system/etcd.service +``` + +!!! note "Nota" + + Sebbene sia considerata una forma di sicurezza inadeguata, potrebbe essere necessario disabilitare temporaneamente o permanentemente SELinux se si riscontrano problemi nell'avvio del servizio `etcd` `systemd`. La soluzione corretta consiste nell'analizzare e creare i file di policy necessari con strumenti quali `ausearch`, `audit2allow` e altri.\ + + I comandi eliminano SELinux e lo disabilitano eseguendo quanto segue: + + ```bash + sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config + setenforce 0 + ``` + +### Avviare il Server `etcd` + +```bash + systemctl daemon-reload + systemctl enable etcd + systemctl start etcd +``` + +## Verifica + +Elencare i membri del cluster `etcd`: + +```bash +etcdctl member list +``` + +```text +6702b0a34e2cfd39, started, controller, http://127.0.0.1:2380, http://127.0.0.1:2379, false +``` + +Successivo: [Avvio del piano di controllo Kubernetes](lab8-bootstrapping-kubernetes-controllers.md) diff --git a/docs/labs/kubernetes-the-hard-way/lab8-bootstrapping-kubernetes-controllers.it.md b/docs/labs/kubernetes-the-hard-way/lab8-bootstrapping-kubernetes-controllers.it.md new file mode 100644 index 0000000000..f112a00ccf --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab8-bootstrapping-kubernetes-controllers.it.md @@ -0,0 +1,187 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tags: + - kubernetes + - k8s + - lab exercise + - kubectl + - etcd + - runc +--- + +# Laboratorio 8: Avvio del piano di controllo Kubernetes + +!!! info + + Si tratta di un fork dell'originale ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way) scritto originariamente da Kelsey Hightower (GitHub: kelseyhightower). A differenza dell'originale, che si basa su distribuzioni simili a Debian per l'architettura ARM64, questo fork si rivolge a distribuzioni Enterprise Linux come Rocky Linux, che gira su architettura x86_64. + +In questo laboratorio, verrà avviato il piano di controllo Kubernetes. Sulla macchina controller verranno installati i seguenti componenti: Kubernetes API Server, Scheduler e Controller Manager. + +## Prerequisiti + +Connettersi alla `jumpbox` e copiare i file binari di Kubernetes e i file di unità `systemd` sull'istanza `server`: + +```bash +scp \ + downloads/kube-apiserver \ + downloads/kube-controller-manager \ + downloads/kube-scheduler \ + downloads/kubectl \ + units/kube-apiserver.service \ + units/kube-controller-manager.service \ + units/kube-scheduler.service \ + configs/kube-scheduler.yaml \ + configs/kube-apiserver-to-kubelet.yaml \ + root@server:~/ +``` + +È necessario eseguire i comandi riportati nelle sezioni seguenti di questo laboratorio sul computer `server`. Accedi all'istanza del controller con il comando `ssh`. Esempio: + +```bash +ssh root@server +``` + +## Fornitura del piano di controllo Kubernetes + +Crea la directory di configurazione di Kubernetes: + +```bash +mkdir -p /etc/kubernetes/config +``` + +### Installazione dei binari del controller Kubernetes + +Installare i binari Kubernetes: + +```bash + chmod +x kube-apiserver \ + kube-controller-manager \ + kube-scheduler kubectl + + mv kube-apiserver \ + kube-controller-manager \ + kube-scheduler kubectl \ + /usr/local/bin/ +``` + +### Configurazione del server API Kubernetes + +```bash + mkdir -p /var/lib/kubernetes/ + + mv ca.crt ca.key \ + kube-api-server.key kube-api-server.crt \ + service-accounts.key service-accounts.crt \ + encryption-config.yaml \ + /var/lib/kubernetes/ +``` + +Creare il file dell'unità `systemd` `kube-apiserver.service`: + +```bash +mv kube-apiserver.service /etc/systemd/system/kube-apiserver.service +``` + +### Configurazione del Kubernetes Controller Manager + +Spostare il kubeconfig `kube-controller-manager` nella posizione corretta: + +```bash +mv kube-controller-manager.kubeconfig /var/lib/kubernetes/ +``` + +Creare il file dell'unità `systemd` `kube-controller-manager.service`: + +```bash +mv kube-controller-manager.service /etc/systemd/system/ +``` + +### Configurazione del scheduler Kubernetes + +Spostare il kubeconfig `kube-scheduler` nella posizione corretta: + +```bash +mv kube-scheduler.kubeconfig /var/lib/kubernetes/ +``` + +Creare il file di configurazione `kube-scheduler.yaml`: + +```bash +mv kube-scheduler.yaml /etc/kubernetes/config/ +``` + +Creare il file dell'unità systemd `kube-scheduler.service`: + +```bash +mv kube-scheduler.service /etc/systemd/system/ +``` + +### Avvio dei servizi del controller + +```bash + systemctl daemon-reload + + systemctl enable kube-apiserver \ + kube-controller-manager kube-scheduler + + systemctl start kube-apiserver \ + kube-controller-manager kube-scheduler +``` + +> Attendere fino a 10 secondi affinché il server API Kubernetes completi l'inizializzazione. + +### Verifica + +```bash +kubectl cluster-info --kubeconfig admin.kubeconfig +``` + +```text +Kubernetes control plane is running at https://127.0.0.1:6443 +``` + +## RBAC per l'autorizzazione Kubelet + +In questa sezione si configurano le autorizzazioni RBAC per consentire al server API Kubernetes di accedere all'API Kubelet su ciascun nodo di lavoro. È necessario accedere all'API Kubelet per recuperare metriche e log ed eseguire comandi nei pod. + +> Questo tutorial imposta il flag Kubelet `--authorization-mode` su `Webhook`. La modalità `Webhook` utilizza l'API [SubjectAccessReview](https://kubernetes.io/docs/reference/kubernetes-api/authorization-resources/subject-access-review-v1/) per determinare l'autorizzazione. + +Eseguire i comandi riportati in questa sezione sul nodo controller, che interessano l'intero cluster. + +```bash +ssh root@server +``` + +Creare il `system:kube-apiserver-to-kubelet` [ClusterRole](https://kubernetes.io/docs/reference/access-authn-authz/rbac/#role-and-clusterrole) con le autorizzazioni per accedere all'API Kubelet ed eseguire le attività più comuni associate alla gestione dei pod: + +```bash +kubectl apply -f kube-apiserver-to-kubelet.yaml \ + --kubeconfig admin.kubeconfig +``` + +### Verifica RBAC + +A questo punto, il piano di controllo Kubernetes è attivo e funzionante. Eseguire i seguenti comandi dalla macchina `jumpbox` per verificare che funzioni: + +Effettuare una richiesta HTTP per ottenere le informazioni sulla versione di Kubernetes: + +```bash +curl -k --cacert ca.crt https://server.kubernetes.local:6443/version +``` + +```text +{ + "major": "1", + "minor": "32", + "gitVersion": "v1.32.0", + "gitCommit": "70d3cc986aa8221cd1dfb1121852688902d3bf53", + "gitTreeState": "clean", + "buildDate": "2024-12-11T17:59:15Z", + "goVersion": "go1.23.3", + "compiler": "gc", + "platform": "linux/amd64" +} +``` + +Successivo: [Avvio dei nodi worker di Kubernetes](lab9-bootstrapping-kubernetes-workers.md) diff --git a/docs/labs/kubernetes-the-hard-way/lab9-bootstrapping-kubernetes-workers.it.md b/docs/labs/kubernetes-the-hard-way/lab9-bootstrapping-kubernetes-workers.it.md new file mode 100644 index 0000000000..4843fc7206 --- /dev/null +++ b/docs/labs/kubernetes-the-hard-way/lab9-bootstrapping-kubernetes-workers.it.md @@ -0,0 +1,203 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tags: + - kubernetes + - k8s + - lab exercise + - runc + - containerd + - etcd + - kubectl +--- + +# Laboratorio 9: Avvio dei nodi di lavoro Kubernetes + +!!! info + + Si tratta di un fork dell'originale ["Kubernetes the hard way"](https://github.com/kelseyhightower/kubernetes-the-hard-way) scritto originariamente da Kelsey Hightower (GitHub: kelseyhightower). A differenza dell'originale, che si basa su distribuzioni simili a Debian per l'architettura ARM64, questo fork si rivolge a distribuzioni Enterprise Linux come Rocky Linux, che gira su architettura x86_64. + +In questo laboratorio, si avvierà il bootstrap di due nodi di lavoro Kubernetes. Si installeranno i seguenti componenti: [runc](https://github.com/opencontainers/runc), [plugin di rete per container](https://github.com/containernetworking/cni), [containerd](https://github.com/containerd/containerd), [kubelet](https://kubernetes.io/docs/ reference/command-line-tools-reference/kubelet/), e [kube-proxy](https://kubernetes.io/docs/concepts/cluster-administration/proxies). + +## Prerequisiti + +Dal `jumpbox`, copiare i file binari di Kubernetes e i file unit di `systemd` su ciascuna istanza di lavoro: + +```bash +for host in node-0 node-1; do + SUBNET=$(grep $host machines.txt | cut -d " " -f 5) + sed "s|SUBNET|$SUBNET|g" \ + configs/10-bridge.conf > 10-bridge.conf + + sed "s|SUBNET|$SUBNET|g" \ + configs/kubelet-config.yaml > kubelet-config.yaml + + scp 10-bridge.conf kubelet-config.yaml \ + root@$host:~/ +done +``` + +```bash +for host in node-0 node-1; do + scp \ + downloads/runc.amd64 \ + downloads/crictl-v1.32.0-linux-amd64.tar.gz \ + downloads/cni-plugins-linux-amd64-v1.6.2.tgz \ + downloads/containerd-2.0.3-linux-amd64.tar.gz \ + downloads/kubectl \ + downloads/kubelet \ + downloads/kube-proxy \ + configs/99-loopback.conf \ + configs/containerd-config.toml \ + configs/kubelet-config.yaml \ + configs/kube-proxy-config.yaml \ + units/containerd.service \ + units/kubelet.service \ + units/kube-proxy.service \ + root@$host:~/ +done +``` + +I comandi in questo laboratorio devono essere eseguiti separatamente su ciascuna istanza di lavoro: `node-0` e `node-1`. Vengono mostrati solo i passaggi relativi a `node-0`. È necessario ripetere esattamente gli stessi passaggi e comandi su `node-1`. + +Accedere all'istanza di lavoro `node-0` con il comando `ssh`. + +```bash +ssh root@node-0 +``` + +## Fornitura ad un nodo di lavoro Kubernetes + +Installare le dipendenze del sistema operativo: + +```bash + dnf -y update + dnf -y install socat conntrack ipset tar +``` + +> Il binario `socat` supporta il comando `kubectl port-forward`. + +### Disattivazione della swap + +Se hai abilitato la [swap](https://help.ubuntu.com/community/SwapFaq), il kubelet non riuscirà ad avviarsi. Si [consiglia di disabilitare lo swap](https://github.com/kubernetes/kubernetes/issues/7294) per garantire che Kubernetes fornisca una corretta allocazione delle risorse e una qualità del servizio adeguata. + +Verificare se la swap è attiva: + +```bash +swapon --show +``` + +Se l'output è vuoto, la swap non è abilitata. Se l'output non è vuoto, eseguire il seguente comando per disabilitare immediatamente la swap: + +```bash +swapoff -a +``` + +Per garantire che la swap rimanga disattivata dopo il riavvio, commentare la riga che monta automaticamente il volume di swap nel file `/etc/fstab`. Digitare: + +```bash +sudo sed -i '/swap/s/^/#/' /etc/fstab +``` + +Creare le directory di installazione: + +```bash +mkdir -p \ + /etc/cni/net.d \ + /opt/cni/bin \ + /var/lib/kubelet \ + /var/lib/kube-proxy \ + /var/lib/kubernetes \ + /var/run/kubernetes +``` + +Installare i binari di lavoro: + +```bash + mkdir -p containerd + tar -xvf crictl-v1.32.0-linux-amd64.tar.gz + tar -xvf containerd-2.0.3-linux-amd64.tar.gz -C containerd + tar -xvf cni-plugins-linux-amd64-v1.6.2.tgz -C /opt/cni/bin/ + mv runc.amd64 runc + chmod +x crictl kubectl kube-proxy kubelet runc + mv crictl kubectl kube-proxy kubelet runc /usr/local/bin/ + mv containerd/bin/* /bin/ +``` + +### Configurazione della rete CNI + +Creare il file di configurazione di rete `bridge`: + +```bash +mv 10-bridge.conf 99-loopback.conf /etc/cni/net.d/ +``` + +### Configurazione di `containerd` + +Installare i file di configurazione `containerd`: + +```bash + mkdir -p /etc/containerd/ + mv containerd-config.toml /etc/containerd/config.toml + mv containerd.service /etc/systemd/system/ +``` + +### Configurazione di Kubelet + +Creare il file di configurazione `kubelet-config.yaml`: + +```bash + mv kubelet-config.yaml /var/lib/kubelet/ + mv kubelet.service /etc/systemd/system/ +``` + +### Configurazione del proxy Kubernetes + +```bash + mv kube-proxy-config.yaml /var/lib/kube-proxy/ + mv kube-proxy.service /etc/systemd/system/ +``` + +!!! note "Nota" + + Sebbene questa sia considerata una forma di sicurezza inadeguata, potrebbe essere necessario disabilitare temporaneamente o permanentemente SELinux se si riscontrano problemi nell'avvio dei servizi systemd necessari. La soluzione corretta consiste nell'analizzare e creare i file di policy richiesti utilizzando strumenti quali ausearch, audit2allow, ecc.\ + + Per rimuovere SELinux e disabilitarlo, eseguire quanto segue: + + ```bash + sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config + setenforce 0 + ``` + +### Avvio dei servizi di lavoro + +```bash + systemctl daemon-reload + systemctl enable containerd kubelet kube-proxy + systemctl start containerd kubelet kube-proxy +``` + +## Verifica + +Le istanze di calcolo create in questo tutorial non avranno l'autorizzazione per completare questa sezione di verifica. Eseguire i seguenti comandi dalla macchina `jumpbox`. + +Elencare i nodi Kubernetes registrati: + +```bash +ssh root@server "kubectl get nodes --kubeconfig admin.kubeconfig" +``` + +```text +NAME STATUS ROLES AGE VERSION +node-0 Ready 1m v1.32.0 +``` + +Dopo aver completato tutti i passaggi precedenti in questo laboratorio sia su `node-0` che su `node-1`, l'output del comando `kubectl get nodes` dovrebbe mostrare: + +```text +NAME STATUS ROLES AGE VERSION +node-0 Ready 1m v1.32.0 +node-1 Ready 10s v1.32.0 +``` + +Successivo: [Configurazione di kubectl per l'accesso remoto](lab10-configuring-kubectl.md) diff --git a/docs/labs/systems_administration_I/lab3-system_utilities.it.md b/docs/labs/systems_administration_I/lab3-system_utilities.it.md new file mode 100644 index 0000000000..a7d2456d94 --- /dev/null +++ b/docs/labs/systems_administration_I/lab3-system_utilities.it.md @@ -0,0 +1,983 @@ +- - - +author: Wale Soyinka contributors: Steven Spencer, Ganna Zhyrnova tested on: All Versions tags: + - lab exercise + - system utilities + - cli +- - - + +# Laboratorio 3: Utilità di sistema comuni + +## Obiettivi + +Dopo aver completato questo laboratorio, sarete in grado di + +- Utilizzare le utilità di sistema comuni presenti sulla maggior parte dei sistemi Linux + +Tempo stimato per completare questo laboratorio: 70 minuti + +## Utilità di sistema comuni presenti nei sistemi Linux + +Gli esercizi di questo laboratorio riguardano l'utilizzo di alcune utilità di sistema di base che sia gli utenti che gli amministratori devono conoscere bene. La maggior parte dei comandi viene utilizzata per navigare e manipolare il file system. Il file system è costituito da file e directory. + +Gli esercizi tratteranno l'utilizzo delle utilità –`pwd`, `cd`, `ls`, `rm`, `mv`, `ftp`, `cp`, `touch`, `mkdir`, `file`, `cat`, `find`, e `locate`. + +## Esercizio 1 + +### `cd` + +Il comando `cd` sta per cambia directory. Inizierete questi laboratori passando ad altre directory sul file system. + +#### Per utilizzare `cd` + +1. Accedere al computer come root + +2. Passare dalla directory corrente alla directory /etc. + + ```bash + [root@localhost root]# cd /etc + ``` + +3. Si noti che il prompt è cambiato da "[root@localhost root]#" a: "[root@localhost etc]#" + +4. Passare alla directory `/usr/local/` + + ```bash + [root@localhost etc]# cd /usr/local + + [root@localhost local]# + ``` + + !!! question "Domanda" + + Cosa è cambiato nel tuo prompt? + +5. Tornare alla directory home di root + + ```bash + [root@localhost local]# cd /root + ``` + +6. Passare nuovamente alla directory /usr/local/. Digitare: + + ```bash + [root@localhost root]# cd /usr/local + ``` + +7. Per passare alla directory principale della directory locale, digitare "cd ..". + + ```bash + [root@localhost local]# cd .. + ``` + + !!! question "Domanda" + + Qual è la directory principale della directory /usr/local/? + +8. Per tornare rapidamente alla directory home di root, digitare "cd" senza alcun argomento. + + ```bash + [root@localhost usr]# cd + + [root@localhost root]# + ``` + +## Esercizio 2 + +### `pwd` + +Il comando `pwd` sta per "directory di lavoro corrente". Mostra la posizione in cui ti trovi nel file system. + +#### Per utilizzare `pwd` + +1. Per scoprire la vostra directory di lavoro attuale, digitare: + + ```bash + [root@localhost root]# pwd + /root + ``` + +2. Passare alla directory /usr/local/ utilizzando il comando "cd": + + ```bash + [root@localhost root]# cd /usr/local + ``` + +3. Utilizzare `pwd` per trovare la vostra directory di lavoro attuale: + + ```bash + [root@localhost local]# pwd + /usr/local + ``` + +4. Tornare alla directory home di root: + + ```bash + [root@localhost root]# cd + ``` + +## Esercizio 3 + +### `mkdir` + +Il comando `mkdir` viene utilizzato per creare directory. Si creeranno due directory chiamate "folder1" e "folder2". + +#### Per utilizzare `mkdir` + +1. Digitare: + + ```bash + [root@localhost root]# mkdir folder1 + ``` + +2. Crea una seconda directory chiamata folder2 + + ```bash + [root@localhost root]# mkdir folder2 + ``` + +3. Ora cambiate la vostra directory di lavoro nella directory “folder1” che avete creato sopra. + + ```bash + [root@localhost root]# cd folder1 + ``` + +4. Visualizzare la directory di lavoro corrente. + + ```bash + [root@localhost folder1]# pwd + /root/folder1 + ``` + + !!! question "Domanda" + + Senza uscire dalla directory corrente, passare alla directory “folder2”. Qual è il comando per farlo? + +5. Tornare alla directory home di root. + +## Esercizio 4 + +### `touch` + +Il comando `touch` può essere utilizzato per creare file ordinari. Verranno creati i file “file11, file12, file21 e file22” nelle cartelle create sopra. + +#### Per utilizzare `touch` + +1. Cambiare directory, ovvero `cd` alla folder1 e creare il "file11:" + + ```bash + [root@localhost folder1]# touch file11 + ``` + +2. Mentre si è ancora nella folder1, creare “file12:” + + ```bash + [root@localhost folder1]# touch file12 + ``` + +3. Ora ritornare alla directory home di root. + +4. `cd` nella folder2 e creare "file21" e "file22" + + ```bash + [root@localhost folder2]# Touch file21 file22 + ``` + +5. Tornare alla directory home di root. + +## Esercizio 5 + +### `ls` + +Il comando `ls` sta per lista. Elenca il contenuto di una directory. + +#### Per utilizzare `ls` + +1. Digitare `ls` nella directory home di root: + + ```bash + [root@localhost root]# ls + ``` + + !!! question "Domanda" + + Elenca il contenuto della directory + +2. Passare alla directory "folder1" + +3. Elencare il contenuto della directory "folder1". Digitare `ls` + + ```bash + [root@localhost folder1]# ls + file11 file12 + ``` + +4. Passare alla directory "folder2" ed elencare il suo contenuto: + +5. Tornare alla directory home ed elencare "tutti" i file e le cartelle nascosti: + + ```bash + [root@localhost folder2]# cd + + [root@localhost root]# ls –a + .. .bash_history .bash_logout .bash_profile .bashrc folder1 folder2 .gtkrc .kde screenrc + ``` + +6. Per ottenere un elenco lungo o dettagliato di tutti i file e le cartelle presenti nella directory home, digitare: + + ```bash + [root@localhost root]# ls –al + total 44 + + drwx------ 5 root root 4096 May 8 10:15 . + + drwxr-xr-x 8 root root 4096 May 8 09:44 .. + + -rw------- 1 root root 43 May 8 09:48 .bash_history + + -rw-r--r-- 1 root root 24 May 8 09:44 .bash_logout + + -rw-r--r-- 1 root root 191 May 8 09:44 .bash_profile + + -rw-r--r-- 1 root root 124 May 8 09:44 .bashrc + + drwxrwxr-x 2 root root 4096 May 8 10:17 folder1 + + drwxrwxr-x 2 root root 4096 May 8 10:18 folder2 + + ……………………….. + ``` + +## Esercizio 6 + +### `mv` + +Il comando `mv` sta per muovere. Rinomina file o directory. Può anche spostare i file. + +#### Per utilizzare `mv` + +1. Passare alla directory "folder1" ed elencare il suo contenuto: + + ```bash + [root@localhost root]# cd folder1 + [root@localhost folder1] ls + + file11 file12 + ``` + +2. Si rinomineranno i file file11 e file12 nella directory “folder1” rispettivamente in temp_file11 e temp_file12: + + ```bash + [root@localhost folder1]# mv file11 temp_file11 + ``` + +3. Elencare nuovamente il contenuto della folder1. + + ```bash + [root@localhost folder1]# ls + ``` + + !!! question "Domanda" + + Annotare i contenuti: + +4. Rinominare il file12 in temp_file12: + + ```bash + [root@localhost folder1]# mv file12 temp_file12 + ``` + +5. Senza cambiare directory, rinominare il file21 e il file22 nella "folder2" rispettivamente in temp_file21 e temp_file22: + + ```bash + [root@localhost folder1]# mv /root/folder2/file21 /root/folder2/temp_file21 + + [root@localhost folder1]# mv /root/folder2/file22 /root/folder2/temp_file22 + ``` + +6. Senza cambiare la directory corrente, elencare il contenuto della folder2. + + !!! question "Domanda" + + Qual è il comando per farlo? Elencare anche l'output del comando? + +## Esercizio 7 + +### `cp` + +Il comando `cp` sta per copia. Crea copie di file o cartelle. + +1. Cambiare la vostra directory nella directory "folder2". + +2. Copiare il contenuto della "folder2" (temp_file21 e temp_file22) nella "folder1:" + + ```bash + [root@localhost folder2]# cp temp_file21 temp_file22 ../folder1 + ``` + +3. Elencare il contenuto della folder1. + + ```bash + [root@localhost folder2]# ls ../folder1 + temp_file11 temp_file12 temp_file21 temp_file22 + ``` + +4. Elencare il contenuto della folder2. Si noti che le copie originali di temp_file21 e temp_file22 rimangono nella folder2. + + ```bash + [root@localhost folder2]# ls + temp_file21 temp_file22 + ``` + +## Esercizio 8 + +### `file` + +L'utilità `file` viene utilizzata per determinare i tipi di file o directory. + +#### Per utilizzare `file` + +1. Tornare alla directory home. + +2. Per vedere se "folder1" è un file o una directory, digitare: + + ```bash + [root@localhost root]# file folder1 + folder1: directory + ``` + +3. Passare alla folder1 + +4. Utilizzare l'utilità `file` per determinare il tipo di file per temp_file11: + + ```bash + [root@localhost folder1]# file temp_file11 + temp_file11: empty + ``` + +5. Utilizzare l'utilità `file` per scoprire il tipo di file di tutti i file presenti nella folder1. Elenco qui: + +6. Passare alla cartella /etc: + + ```bash + [root@localhost folder1]# cd /etc + ``` + +7. Utilizzare l'utilità `file` per scoprire il tipo di file del file "passwd". + + ```bash + [root@localhost etc]# file passwd + ``` + + !!! question "Domanda" + + Di che tipo di file si tratta? + +## Esercizio 9 + +### `cat` + +Il comando `cat` è l'abbreviazione di concatenate, cioè mettere insieme i file. Il comando `cat` visualizza anche il contenuto di un intero file sullo schermo. Si utilizzerà `cat` insieme al simbolo di reindirizzamento ">" per creare un file. + +#### Per usare `cat` per creare un file + +1. Passare alla directory /root/folder1 + +2. Creare un nuovo file di testo chiamato "first.txt" + + ```bash + [root@localhost folder1]# cat > first.txt + ``` + +3. Digitare la frase seguente nel prompt vuoto e premere ++enter++. + + ```bash + Questa è una riga di first.txt !! + ``` + +4. Premere contemporaneamente i tasti ++ctrl+c++. + +5. Digitare "cat first.txt" per leggere il testo appena digitato: + + ```bash + [root@localhost folder1]# cat first.txt + Questa è una riga di first.txt !! + ``` + +6. Creare un altro file chiamato "second.txt" utilizzando `cat`. Digitare il seguente testo nel file – “Questa è una riga di second.txt !!” + + !!! question "Domanda" + + Qual è il comando per farlo? + +#### Per usare `cat` per concatenare insieme i file + +1. Si concatenaneranno i file "first.txt" e "second.txt". Digitare: + + ```bash + [root@localhost folder1]# cat first.txt second.txt + ``` + + !!! question "Domanda" + + Qual è il vostro risultato? + +## Esercizio 10 + +### `ftp` + +`ftp` è un programma client per l'utilizzo e la connessione ai servizi FTP tramite il File Transfer Protocol. Il programma consente agli utenti di trasferire file da e verso un sito di rete remoto. Si tratta di un'utility che potrebbe essere utilizzata spesso. + +In questo esercizio imparerete ad accedere in modo anonimo a un server FTP e a scaricare un file dal server utilizzando un programma client `ftp`. + +!!! note "Nota" + + Per poter seguire questo esercizio specifico, che richiede un server FTP disponibile e raggiungibile, è necessario aver completato gli esercizi del laboratorio precedente. + +#### Per utilizzare `ftp` + +1. Accedere al computer come root + +2. Passare alla directory "/usr/local/src/" + +3. Creare una nuova directory chiamata "downloads" nella directory "/usr/local/src/". + + !!! question "Domanda" + + Qual è il comando per farlo? + +4. Passa alla directory "downloads" appena creata + + ```bash + [root@localhost src]# cd downloads + ``` + +5. Digitare "ftp" per avviare il client `ftp`: + + ```bash + [root@localhost downloads]# ftp + ftp> + ``` + +6. Per connettersi al server FTP, digitare: + + ```bash + ftp> open < server-address> (Obtain the from your instructor) + ……… + + 220 localhost.localdomain FTP server (Version wu-2.6.2-5) ready. + ……….. + ``` + +7. Accedere come utente anonimo. Digitare "anonymous" al prompt: + + ```bash + Name (10.4.51.29:root): anonymous + ``` + +8. Digitare un indirizzo e-mail qualsiasi alla richiesta della password e premere Invio + + ```bash + Password: *************** + + 230 Guest login ok, access restrictions apply. + + Remote system type is UNIX. + + Using binary mode to transfer files. + + ftp> + ``` + +9. Passare alla modalità binaria. Digitare: + + ```bash + ftp> binary + ``` + + !!! question "Domanda" + + Qual è l'output del comando binario e cos'è la modalità binaria “modalità binaria”? + +10. Elencare le directory correnti sul server ftp. Digitare "ls" al prompt ftp. (ftp>): + + ```bash + ftp> ls + 227 Entering Passive Mode (10,0,4,5,16,103). + 125 Data connection already open; Transfer starting. + 11-23-43 10:23PM images + 11-02-43 02:20PM pub + 226 Transfer complete. + ``` + +11. Passare alla directory "pub". Digitare: + + ```bash + ftp> cd pub + ``` + +12. Utilizzare il comando "ls" per elencare i file e le directory presenti nella directory "pub" + + !!! question "Domanda" + + Quanti file e directory ci sono adesso? + +13. Scaricare il file denominato "hello-2.1.1.tar.gz" nella directory locale. Digitare "yes" quando richiesto. + + ```bash + ftp> mget hello-2.1.1.tar.gz + mget hello-2.1.1.tar.gz? yes + + 227 Entering Passive Mode (10,0,4,5,16,252). + + 125 Data connection already open; Transfer starting. + + 226 Transfer complete. + + 389363 bytes received in 0.0745 secs (5.1e+03 Kbytes/sec) + ``` + +14. Disconnettersi dal server FTP e chiudere il client `ftp`. Digitare: + + ```bash + ftp> bye + ``` + +15. Verrai reindirizzato alla tua shell locale. + +16. Assicurati di trovarti ancora nella directory "download" del tuo computer locale. + + !!! question "Domanda" + + Elencare i file nella cartella dei downloads. + +## Esercizio 11 + +### Utilizzo del reindirizzamento + +La maggior parte delle utility e dei comandi utilizzati in Linux inviano il loro output allo schermo. Lo schermo è chiamato output standard (stdout). Il reindirizzamento consente di inviare l'output altrove – ad esempio in un file. + +Ogni programma avviato su un sistema Linux ha tre descrittori di file aperti: stdin (0), stdout (1) e stderr (2). È possibile reindirizzarli o convogliarli individualmente tramite "pipe". I simboli di reindirizzamento sono ">, < " + +#### Per utilizzare il reindirizzamento + +1. Assicurarsi di essere ancora nella directory folder1. + +2. Si utilizzerà il reindirizzamento dell'output per reindirizzare l'output del comando ls (elenco) a un file di testo denominato myredirects: + + ```bash + [root@localhost folder1]# ls > myredirects + ``` + +3. Esaminare il contenuto del nuovo file (myredirects) creato nella directory folder1. + + ```bash + [root@localhost folder1] # cat myredirects + temp_file11 temp_file12 temp_file21 temp_file22 myredirects + ``` + +4. Ora il risultato del comando file verrà reindirizzato nello stesso file. Si vuole scoprire il tipo di file per temp_file11 nella directory folder1 e inviare l'output al file myredirects: + + ```bash + [root@localhost folder1]# file temp_file11 > myredirects + ``` + +5. Esaminare il contenuto del file myredirects. + + !!! question "Domanda" + + È cambiato. Cos'è successo? + +6. Se si vuole evitare che si verifichi quanto sopra, si utilizzerà il doppio simbolo di reindirizzamento “>>”. Questo aggiungerà (appenderà) il nuovo output al file invece di sostituirlo. Fate una prova: + + ```bash + [root@localhost folder1]# ls >> myredirects + ``` + +7. Ora esaminare nuovamente il contenuto del file myredirects utilizzando `cat`. + + !!! question "Domanda" + + Scrivi qui il suo contenuto: + +### Utilizzo del reindirizzamento per sopprimere l'output di un comando + +I concetti trattati in questa sezione saranno molto utili in Linux, quindi ti invitiamo a prestare particolare attenzione. Può essere un po' complicato. + +Ci saranno momenti in cui non vorrai che l'utente veda l'output di un comando, ad esempio un messaggio di errore. Questo accade solitamente perché i messaggi di errore strani spesso spaventano gli utenti abituali. In questo esercizio si invierà l'output tuoi comandi al dispositivo nullo ( /dev/null/ ). Il dispositivo nullo è come un "bit bucket". Tutto ciò che metti dentro scompare per sempre. È anche possibile inviare (o reindirizzare) l'output regolare dei comandi al dispositivo nullo "null device". + +Utilizzare le linee guida riportate di seguito: + +```bash +|Redirector|

Function

| +| :- | :- | +|> file|Indirizza l'output standard su un file| +|< file|Prende l'input standard dal file| +|Cmd1 | cmd2|Pipe; prende lo standard out da cmd1 come input standard per cmd2| +|n> file|Descritore di file n a file| +|N< file|Imposta il file come descrittore di file n| +|>&n|Duplica l'output standard nel descrittore di file n| +|<&n|Duplica l'input standard dal descrittore di file n| +|&>file|Indirizza l'output standard e l'errore standard al file| + +``` + +1. Assicurarsi di essere ancora nella directory folder1. Utilizzare l'opzione di elenco esteso del comando ls su temp_file11: + + ```bash + [root@localhost folder1]# ls –l temp_file11 + -rw-r--r-- 1 root root 0 Jul 26 18:26 temp_file11 + ``` + +2. Reindirizzare l'output dello stesso comando sopra riportato (ls –l temp_file11) al dispositivo nullo. + + ```bash + [root@localhost folder1]# ls –l temp_file11 > /dev/null + ``` + + Non si dovrebbe ottenere alcun risultato. + +3. Ora, se per sbaglio viene digitato in modo errato il nome del file di cui si desidera visualizzare le informazioni, verrà visualizzato il seguente messaggio: + + ```bash + [root@localhost folder1]# ls –l te_file1 + ls: te_file1: No such file or directory + ``` + + Quanto sopra è il risultato del tipo di errore che il comando `ls` ha programmato di restituire. + +4. Eseguire lo stesso comando di cui sopra con un nome file scritto in modo errato e reindirizzarlo a /dev/null + + ```bash + [root@localhost folder1]# ls -l te_file1 > /dev/null + + ls: te_file1: No such file or directory + ``` + + !!! question "Domanda" + + Cosa è successo qui? Perché l'output continuava a essere visualizzato sullo schermo (stdout)? + +5. Per vari motivi potresti voler sopprimere messaggi di errore come quello sopra riportato. Per farlo, digitare: + + ```bash + [root@localhost folder1]# ls –l te_file1 > /dev/null 2>&1 + ``` + + Non otterrete alcun risultato. + + Questa volta vengono soppressi sia l'output standard che l'errore standard. + + L'ordine di reindirizzamento è IMPORTANTE!! + + Il reindirizzamento viene letto da sinistra a destra sulla riga di comando. + + La parte più a sinistra del simbolo di reindirizzamento - “>”: invierà l'output standard (stdout) a /dev/null. Quindi la parte più a destra del reindirizzamento - “2>&1 ”: duplicherà l'errore standard (2) nell'output standard (1). + + Quindi il comando sopra riportato può essere letto come: reindirizza stdout(1) a “/dev/null” e poi copia stderr (2) su stdout + +6. Per dimostrare ulteriormente l'importanza dell'ordine di reindirizzamento, prova: + + ```bash + [root@localhost folder1]# ls –l tem_file 2>&1 > order.txt + ``` + + Utilizzare il comando `cat` per esaminare il contenuto del file "order.txt" + + La parte più a sinistra – “2>&1” copierà l'errore standard nell'output standard. Quindi, la parte più a destra di quanto sopra – “ > order.txt” reindirizza stdout al file order.txt. + +7. Provare questa variante del passaggio precedente: + + ```bash + [root@localhost folder1]# ls –l hgh_ghz 2> order2.txt > order2.txt + ``` + + !!! question "Domanda" + + Esamina il file "order2.txt" e spiega cosa è successo? + +8. Per inviare l'output standard e l'errore standard a file separati; Digitare: + + ```bash + [root@localhost folder1]# ls –l tep_f > standard_out 2> standard_err + ``` + + !!! question "Domanda" + + Sono stati creati due nuovi file. Quali sono i nomi dei file e qual è il loro contenuto? + +9. È possibile reindirizzare sia stdout che stderr allo stesso file utilizzando: + + ```bash + [root@localhost folder1]# ls –l te_fil &> standard_both + ``` + +## Esercizio 12 + +### `rm` + +Il comando `rm` viene utilizzato per eliminare file o directory. Si utilizzerà il comando `rm` per eliminare alcuni dei file creati negli esercizi precedenti. + +#### Per utilizzare `rm` + +1. Mentre si è ancora nella directory "folder1", eliminare il file standard_err. Digitare "y" alla richiesta di conferma: + + ```bash + [root@localhost folder1]# rm standard_err + rm: remove `standard_err'? y + ``` + +2. Eliminare il file "standard_out". Per evitare che venga richiesta la conferma prima di eliminare un file, utilizzare l'opzione "–f " con il comando `rm`: + + ```bash + [root@localhost folder1]# rm -f standard_out + ``` + +3. Ritornare alla directory home (/root) ed eliminare la directory "folder2". Se si vuole usare `rm` per eliminare una cartella, bisogna usare l'opzione “–r”: + + ```bash + [root@localhost root]# rm -r folder2 + + rm: descend into directory `folder2'? y + + rm: remove `folder2/temp_file21'? y + + rm: remove `folder2/temp_file22'? y + + rm: remove directory `folder2'? y + ``` + + !!! question "Domanda" + + Vi è stato nuovamente chiesto di confermare la rimozione di ogni singolo file nella directory e della directory stessa. Quale opzione si utilizzerà con il comando `rm –r` per evitare che ciò accada? + +## Esercizio 13 + +### Imparare `vi` + +`vi` è un editor di testo. Può essere utilizzato per modificare tutti i tipi di testo semplice. È particolarmente utile per i programmi di editing. + +`vi` è un mostro enorme che può fare praticamente tutto, compreso prepararti il caffè o la cioccolata calda!! + +Invece di cercare di insegnarvi `vi`, questo esercizio vi indicherà uno strumento che vi consentirà di familiarizzare meglio con `vi`. + +Vi invitiamo a dedicare un po' di tempo alla lettura del tutorial online su `vi` (più precisamente su `vim`). Basta seguire le istruzioni. + +#### Per imparare `vi` + +1. Una volta effettuato l'accesso al sistema, digitare: + + [root@localhost root]# vimtutor + +## Esercizio 14 + +### Ricerca di file: (`find` e `locate`) + +Questo esercizio tratterà due delle utility più diffuse utilizzate per la ricerca di file e directory nel file system. Si tratta dei comandi `find` e `locate`. + +#### `find` + +L'utilità `find` esiste da molto tempo. Esegue una scansione ricorsiva delle directory per trovare i file che corrispondono a un determinato criterio. + +La sintassi generale per `find` è: + +```bash +find [path] [options] [criterion] [action] +``` + +Se non si specifica alcuna directory o percorso, find cercherà nella directory corrente. Se non si specifica alcun criterio, ciò equivale a "vero", quindi verranno trovati tutti i file. L'utilità `find` offre numerose opzioni per eseguire praticamente qualsiasi tipo di ricerca di un file. Di seguito sono elencate solo alcune delle opzioni, dei criteri e delle azioni disponibili. + +```bash +OPZIONI: + +-xdev: non effettuare ricerche nelle directory situate su altri file system.; + +-mindepth scendere di almeno livelli al di sotto della directory specificata prima della + +ricerca di file; + +-maxdepth : cerca i file che si trovano al massimo a n livelli sotto la directory specificata; + +-follow: segui i collegamenti simbolici se puntano a directory. + +-daystart: quando si utilizzano test relativi al tempo (vedi sotto), prendere l'inizio del giorno corrente come timestamp invece del valore predefinito (24 ore prima dell'ora corrente). +``` + +```bash +CRITERIO + +-type : cerca un determinato tipo di file; può essere uno dei seguenti: f (file regolare), d (directory), + +l (collegamento simbolico), s (socket), b (file in modalità blocco), c (file in modalità carattere) o + +p (pipe con nome); + +-name : trova i file i cui nomi corrispondono al modello specificato ; + +-iname : like -name, but ignore case; + +-atime , -amin : trova i file a cui è stato effettuato l'ultimo accesso giorni fa (-atime) o minuti fa (-amin). È anche possibile specificare + o -, nel qual caso la ricerca verrà effettuata rispettivamente sui file a cui è stato effettuato l'accesso al massimo o al minimo giorni/minuti fa; + +-anewer : trova i file che sono stati aperti più di recente rispetto al file ; + +-ctime , -cmin , -cnewer : come per -atime, -amin e -anewer, ma si applica all'ultima volta in cui il contenuto del file è stato modificato; + +-regex : come per -name, ma il pattern viene trattato come un'espressione regolare; + +-iregex : come per -regex, ma ignora le maiuscole/minuscole. +``` + +```bash +AZIONE: + +-print: stampa semplicemente il nome di ogni file sullo standard output. Questa è l'azione predefinita; + +-ls: stampa sullo standard output l'equivalente di ls -ilds per ogni file trovato; + +-exec : execute command su ogni file trovato. La riga di comando deve terminare con un ;, che deve essere preceduto dal carattere di escape in modo che la shell non lo interpreti; la posizione del file è contrassegnata da {}. + +-ok : come per -exec, ma richiede una conferma per ogni comando. +``` + +#### Per utilizzare `find` + +1. Assicurarsi di trovarsi nella directory home. + +2. Utilizzare il comando find per visualizzare tutti i file nella directory corrente (`pwd`). Digitare: + + ```bash + [root@localhost root]# find + + + ……….. + + ./.bash_profile + + ./.bashrc + + ./.cshrc + + ./.tcshrc + + ./.viminfo + + ./folder1 + + ./folder1/first.txt + + ………… + ``` + + Il risultato mostra il comportamento predefinito di find quando viene utilizzato senza alcuna opzione. + + Visualizza tutti i file e le directory (compresi i file nascosti) nella directory di lavoro in modo ricorsivo. + +3. Ora utilizzare `find` per trovare solo le directory nella tua pwd. Digitare: + + ```bash + [root@localhost root]# find -type d + . + ./folder1 + ./folder2 + ……… + ``` + + !!! question "Domande" + + Dal comando sopra riportato "find –type d"; cos'è l'"opzione", cos'è il "percorso", cos'è il "criterio" e infine cos'è l'"azione"? + +4. Successivamente si cercheranno tutti i file presenti nel sistema che terminano con il suffisso “.txt”: + + ```bash + [root@localhost root]# find / -maxdepth 3 -name "*.txt" -print + /root/folder1/first.txt + /root/folder1/second.txt + /root/folder1/order.txt + /root/folder1/order2.txt + ``` + + !!! question "Domande" + + Sempre dal comando sopra riportato, cosa sono l'"opzione", il "percorso", il "criterio" e infine l'"azione"? (SUGGERIMENTO: L'azione = “- print”) + + La ricerca verrà eseguita solo su 3 directory in basso dalla directory “/”. + + L'asterisco utilizzato nel comando sopra riportato è uno dei caratteri "jolly" in Linux. + + L'uso dei caratteri jolly in Linux è chiamato "globbing". + +5. Utilizzare il comando `find` per trovare tutti i file nella "pwd" che hanno una dimensione "inferiore" a 200 kilobyte. Digitare: + + ```bash + [root@localhost root]# find . –size -200k + ``` + +6. Utilizzare il comando `find` per trovare tutti i file nella directory corrente che sono "più grandi" di 10 kilobyte e visualizzare anche il loro "tipo di file". Digitare: + + ```bash + [root@localhost root]# find . –size +10k –exec file "{ }" ";" + ``` + +#### `locate` + +La sintassi del comando `find` può essere piuttosto difficile da usare in alcuni casi e, a causa della sua ricerca estesa, può essere lenta. Un comando alternativo è `locate`. + +`locate` effettua una ricerca in un database creato in precedenza contenente tutti i file presenti nel file system. + +Si basa sul programma `updatedb`. + +```bash +utilizzo della ricerca: + +locate [-qi] [-d ] [--database=] ... + +locate [-r ] [--regexp=] + +database usage: locate [-qv] [-o ] [--output=] + +locate [-e ] [-f ] [-l ] + +[-c] <[-U ] [-u]> + +general usage: locate [-Vh] [--version] [--help] +``` + +#### Per utilizzare `locate` + +1. Passare alla directory folder1 e creare i file vuoti temp1, temp2 e temp3: + + ```bash + [root@localhost root]# cd folder1; touch temp1 temp2 temp3 + [root@localhost folder1]# + ``` + + Il punto e virgola (;) utilizzato nel comando sopra riportato consente di eseguire più comandi su una singola riga!! + +2. Utilizzare `locate` per cercare tutti i file nella directory corrente che hanno il suffisso "temp" + + ```bash + [root@localhost folder1]# locate temp* + /root/folder1/temp_file11 + /root/folder1/temp_file12 + /root/folder1/temp_file21 + /root/folder1/temp_file22 + ``` + + Si noti che i tre file creati nel passaggio 1 NON sono stati trovati. + +3. Si forzerà un aggiornamento del database utilizzando `updatedb` per consentirgli di rilevare tutti i file appena creati. Digitare: + + ```bash + [root@localhost folder1]# updatedb + ``` + +4. Ora riprovare la ricerca. Digitare: + + ```bash + [root@localhost folder1]# locate temp + ``` + + !!! question "Domanda" + + Cosa è successo questa volta? + +5. Tutto fatto con Lab 3. diff --git a/docs/labs/systems_administration_I/lab5-networking.it.md b/docs/labs/systems_administration_I/lab5-networking.it.md new file mode 100644 index 0000000000..576624f3a8 --- /dev/null +++ b/docs/labs/systems_administration_I/lab5-networking.it.md @@ -0,0 +1,611 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tested on: All Versions +tags: + - lab exercise + - networking + - nmcli + - ip + - iproute2 + - macvtap +--- + + +# Laboratorio 5: Nozioni di base sulla rete + +## Obiettivi + +Dopo aver completato questo laboratorio, si sarà in grado di: + +- Creare dispositivi di rete virtuali +- Gestire i dispositivi di rete e le impostazioni su un sistema Linux utilizzando il toolkit `iproute2` (`ip`) +- Gestire i dispositivi di rete e le impostazioni su un sistema Linux utilizzando il toolkit NetworkManager (`nmcli`) +- Risolvere i problemi di rete più comuni + +Tempo stimato per completare questo laboratorio: 60 minuti + +## Sommario + +Questo laboratorio Networking Essentials copre vari esercizi di configurazione e risoluzione dei problemi di rete su un server Linux. Potrete gestire e risolvere i problemi relativi alle impostazioni di rete in modo più efficace utilizzando le comuni utility di rete disponibili sui sistemi basati su Linux. + +## Esercizio 1 + +### Cambiare il nome del host + +Esistono molti metodi per identificare o fare riferimento ai computer. Alcuni di questi metodi garantiscono l'unicità [soprattutto su una rete], altri no. Il nome host di un computer può essere considerato come un nome intuitivo. I nomi host dei computer dovrebbero idealmente essere univoci a seconda di come vengono gestiti e assegnati. Tuttavia, poiché chiunque disponga dei privilegi amministrativi su un sistema può assegnare unilateralmente qualsiasi nome host desideri al sistema, l'unicità non è sempre garantita. + +Questo primo esercizio illustra alcuni strumenti comuni per la gestione del nome host del computer. + +#### Per modificare il nome host del sistema + +1. Una volta effettuato l'accesso al sistema, visualizzare il *hostname* corrente utilizzando la popolare utility `hostname`. Digitare: + + ```bash + hostname + ``` + +2. Eseguire nuovamente l'utilità `hostname` con un'opzione diversa per visualizzare l'FQDN del server: + + ```bash + hostname --fqdn + ``` + + !!! question "Domanda" + + Cosa significa FQDN? E perché il risultato del nome host del tuo server è diverso dal suo FQDN? + +3. Utilizzare l'utilità `hostnamectl` per visualizzare il *hostname* corrente. Digitare: + + ```bash + hostnamectl + ``` + + Sono davvero tante informazioni in più! + +4. Aggiungere l'opzione `--static` al comando `hostnamectl` per visualizzare il nome host statico del server. Digitare: + + ```bash + hostnamectl --static + ``` + +5. Aggiungere l'opzione `--transient` al comando `hostnamectl` per visualizzare il nome host transitorio del server. + +6. Ora provare l'opzione `--pretty` del comando `hostnamectl` per visualizzare il nome pretty host del server. + +7. Impostare un nuovo nome host temporaneo per il server. Digitare: + + ```bash + hostnamectl --transient set-hostname my-temp-server1 + ``` + +8. Verificare la modifica temporanea del nome host. Digitare: + + ```bash + hostnamectl --transient + ``` + +9. Impostare un nuovo nome host statico per il server. Digitare: + + ```bash + hostnamectl set-hostname my-static-hostname1 + ``` + +10. Verificare la modifica del nome host statico. + + !!! question "Domanda" + + Consultare la pagina man di `hostnamectl`. Quali sono le differenze tra nomi host pretty, transitori e statici? + +## Esercizio 2 + +Il primo passo fondamentale da completare prima di passare agli altri esercizi di questo laboratorio di rete sarà la creazione di una speciale interfaccia di rete virtuale nota come dispositivo MACVTAP. + +I dispositivi MACVTAP sono dispositivi virtuali che combinano le proprietà di un'interfaccia esclusivamente software nota come dispositivo TAP con quelle del driver MACVLAN. + +La creazione e l'utilizzo di questi dispositivi MACVTAP consentirà di testare, modificare e configurare in modo sicuro varie attività relative alla configurazione di rete. Queste interfacce di rete virtuali saranno utilizzate in varie esercitazioni senza interferire con la configurazione di rete esistente. + +!!! tip "Suggerimento" + + I dispositivi TAP forniscono un'interfaccia esclusivamente software a cui le applicazioni dello spazio utente possono accedere facilmente. I dispositivi TAP inviano e ricevono frame Ethernet non elaborati. + MACVLAN viene utilizzato per creare interfacce di rete virtuali che si collegano alle interfacce di rete fisiche. + I dispositivi MACVTAP hanno un proprio indirizzo MAC unico, distinto dall'indirizzo MAC della scheda di rete fisica sottostante a cui sono associati. + +### Creazione interfacce MACVTAP + +Questo esercizio inizia con la creazione delle interfacce di rete virtuali MACVTAP necessarie. Ciò consentirà di testare, modificare e configurare in modo sicuro varie attività relative alla configurazione di rete. Queste interfacce di rete virtuali saranno utilizzate in varie esercitazioni senza interferire con la configurazione di rete esistente. + +#### Per elencare tutte le interfacce di rete presenti nel sistema + +1. Assicurarsi di aver effettuato l'accesso al server. + +2. Utilizzare il programma `ip` per visualizzare le interfacce di rete esistenti sul sistema. Digitare: + + ```bash + ip link show + ``` + +3. Provare ad utilizzare il comando `nmcli` per elencare tutti i dispositivi di rete. Digitare: + + ```bash + nmcli -f DEVICE device + ``` + +4. Interrogare il file system virtuale di basso livello /sys per enumerare manualmente TUTTE le interfacce di rete disponibili sul server. Digitare: + + ```bash + ls -l /sys/class/net/ | grep -v 'total' | awk '{print $9}' + ``` + +#### Per creare interfacce `macvtap` + +1. Assicurarsi di aver effettuato l'accesso al sistema come utente con privilegi amministrativi. + +2. È necessario interrogare e identificare i tipi di dispositivi di rete appropriati disponibili sul server per poterli associare al dispositivo `macvtap`. Digitare: + + ```bash + ls -l /sys/class/net/ | grep -v 'virtual\|total' | tail -n 1 | awk '{print $9}' + + eno2 + ``` + + L'output sul sistema demo di esempio mostra un'interfaccia adatta denominata eno2. + +3. Eseguire nuovamente il comando per identificare il dispositivo, ma questa volta memorizzare il valore restituito in una variabile denominata $DEVICE1. Controllare nuovamente il valore di $DEVICE1 utilizzando echo. Per eseguire questa operazione, digitare i seguenti 2 comandi separati: + + ```bash + # DEVICE1=$(ls -l /sys/class/net/ | grep -v 'virtual\|total' | tail -n 1 | awk '{print $9}') + + # echo $DEVICE1 + ``` + +4. Ora, creare un'interfaccia MACVTAP denominata - `macvtap1`. La nuova interfaccia sarà associata a $DEVICE1. Digitare: + + ```bash + ip link add link $DEVICE1 name macvtap1 type macvtap mode bridge + ``` + +5. Verificare la creazione dell'interfaccia `macvtap1`. Digitare: + + ```bash + ip --brief link show macvtap1 + ``` + + Notare lo stato DOWN dell'interfaccia `macvtap` nell'output. + +6. Visualizzare le informazioni dettagliate su tutti i dispositivi di rete di tipo MACVTAP presenti nel sistema. Digitare: + + ```bash + ip --detail link show type macvtap + ``` + +7. Eseguire un comando per visualizzare tutte le interfacce di rete sul server e confrontare il risultato con quello ottenuto dal comando simile nella sezione precedente "Per elencare tutte le interfacce di rete sul sistema". + +### Abilitazione/Disabilitazione delle interfacce di rete + +#### Per abilitare o disabilitare un'interfaccia di rete + +1. Controllare lo stato dell'interfaccia di rete `macvtap1`. Digitare: + + ```bash + ip link show macvtap1 + ``` + +2. Abilitare l'interfaccia di rete `macvtap1` (se attualmente disabilitata). Eseguire: + + ```bash + ip link set macvtap1 up + ``` + +3. Verificare le modifiche di stato eseguendo: + + ```bash + ip -br link show macvtap1 + ``` + + !!! tip "Suggerimento" + + Nel caso in cui sia necessario disabilitare un'interfaccia di rete, la sintassi del comando `ip` per farlo è `ip link set down`. Ad esempio, per disabilitare un'interfaccia di rete denominata `macvtap7`, è necessario eseguire: + + ```bash + ip link set macvtap7 down + ``` + +Ora che sono state configurate le interfacce `macvtap`, è possibile eseguire in modo sicuro le varie attività di configurazione della rete e di risoluzione dei problemi negli esercizi rimanenti. + +## Esercizio 3 + +### Assegnazione degli indirizzi IP + +#### Per impostare un indirizzo IP su un'interfaccia di rete + +1. Visualizzare gli indirizzi IP di tutte le interfacce di rete sul server. Digitare: + + ```bash + ip address show + ``` + +2. Assegnare l'indirizzo IP - 172.16.99.100 - a `macvtap1`. Digitare + + ```bash + ip address add 172.16.99.100/24 dev macvtap1 + ``` + +3. Verificare l'assegnazione dell'indirizzo IP per `macvtap1` + + ```bash + ip address show macvtap1 + ``` + +4. Utilizzare il comando `nmcli` per visualizzare gli indirizzi IPv4 di tutte le interfacce presenti nel sistema. Digitare: + + ```bash + nmcli --get-values IP4.ADDRESS,GENERAL.DEVICE device show + ``` + +## Esercizio 4 + +### Configurazione degli indirizzi IPv6 + +#### Per assegnare indirizzi IPv6 alle interfacce `macvtap` + +1. Partendo da `macvtap1`, assegnare l'indirizzo IPv6 2001:db8::1/64 a `macvtap1` eseguendo: + + ```bash + ip -6 address add 2001:db8::1/64 dev macvtap1 + ``` + +3. Verificare le assegnazioni degli indirizzi IPv6, digitare: + + ```bash + ip --brief -6 address show macvtap1 && ip -br -6 address show macvtap1 + ``` + +4. Utilizzare `nmcli` per visualizzare gli indirizzi IPv6 di tutte le interfacce presenti nel sistema. Digitare: + + ```bash + nmcli --get-values IP6.ADDRESS,GENERAL.DEVICE device show + ``` + +## Esercizio 5 + +### Gestione del routing + +#### Visualizzazione della tabella di routing del sistema + +1. Visualizzare la tabella di routing corrente per il sistema. Digitare: + + ```bash + ip route show + default via 192.168.2.1 dev enp1s0 proto dhcp src 192.168.2.121 metric 100 + 10.99.99.0/24 dev tunA proto kernel scope link src 10.99.99.1 metric 450 linkdown + 192.168.2.0/24 dev enp1s0 proto kernel scope link src 192.168.2.121 metric 100 + ``` + +2. Utilizzando una delle reti visualizzate nella colonna più a sinistra dell'output del comando precedente come argomento, visualizzare la voce della tabella di routing per quella rete. Ad esempio, per visualizzare la voce della tabella di routing del kernel per la rete 10.99.99.0/24, digitare: + + ```bash + ip route show 10.99.99.0/24 + ``` + +3. Interrogare il sistema per vedere il percorso che verrà utilizzato per raggiungere una destinazione arbitraria di esempio. Ad esempio, per visualizzare i dettagli del percorso per raggiungere l'indirizzo IP di destinazione 8.8.8.8, digitare: + + ```bash + ip route get 8.8.8.8 + + 8.8.8.8 via 192.168.2.1 dev enp1s0 src 192.168.2.121 uid 0 + cache + ``` + + Ecco una spiegazione dettagliata dei risultati in parole semplici: + + - Indirizzo IP di destinazione: 8.8.8.8 è l'indirizzo IP che stiamo cercando di raggiungere + - Via: 192.168.2.1 è l'indirizzo IP del prossimo hop a cui verrà inviato il pacchetto per raggiungere la destinazione + - Dispositivo: `enp1s0` è l'interfaccia di rete che verrà utilizzata per inviare il pacchetto + - Indirizzo IP di origine: 192.168.2.121 è l'indirizzo IP dell'interfaccia di rete che verrà utilizzato come indirizzo di origine per il pacchetto + - UID: 0 è l'ID utente del processo che ha avviato questo comando + - Cache: questo campo indica se questo percorso è memorizzato nella tabella di routing del kernel + +4. Vediamo ora come il sistema instraderà un pacchetto da un indirizzo IP a un altro indirizzo IP di destinazione. Digitare: + + ```bash + ip route get from 192.168.1.1 to 192.168.1.2 + + local 192.168.1.2 from 192.168.1.1 dev lo uid 0 + cache + ``` + +### Impostazione del gateway predefinito + +#### Per configurare un gateway predefinito per il sistema + +1. Utilizzare `ip` per cercare ed elencare il gateway predefinito corrente sul sistema. Digitare: + + ```bash + ip route show default + ``` + +2. Impostare un gateway predefinito tramite l'interfaccia `macvtap1`. Digitare: + + ```bash + ip route add default via 192.168.1.1 + ``` + +3. Verificare la nuova configurazione del gateway predefinito + + ```bash + ip route show default + ``` + +### Aggiunta di un percorso statico + +#### Per aggiungere una route statica alla tabella di routing + +1. Aggiungere una route statica demo per una rete fittizia 172.16.0.0/16 tramite 192.168.1.2. Digitare: + + ```bash + ip route add 172.16.0.0/16 via 192.168.1.2 + ``` + +2. Verificare l'aggiunta della route statica eseguendo: + + ```bash + ip route show 172.16.0.0/16 + ``` + +### Rimozione del percorso statico + +#### Per rimuovere una route statica dalla tabella di routing + +1. Eliminare la route statica per 10.0.0.0/24 + + ```bash + ip route del 10.0.0.0/24 via 192.168.1.2 + ``` + +2. Verificare la rimozione della route statica + + ```bash + ip route show + ``` + +## Esercizio 6 + +### Rimozione degli indirizzi IP + +Questo esercizio illustra come eliminare gli indirizzi IP configurati (IPv4 e IPv6) sulle interfacce di rete. + +### Eliminare un indirizzo IPv4 + +#### Per rimuovere un indirizzo IP assegnato da un'interfaccia di rete + +1. Eliminare l'indirizzo IP su `macvtap1`. Digitare: + + ```bash + ip address del 172.16.99.100/24 dev macvtap1 + ``` + +2. Verificare la rimozione dell'indirizzo IP eseguendo: + + ```bash + ip address show macvtap1 + ``` + +### Eliminare un indirizzo IPv6 + +#### Per rimuovere un indirizzo IPv6 assegnato da un'interfaccia di rete + +1. Eliminare l'indirizzo IPv6 su `macvtap1` con questo comando: + + ```bash + ip -6 address del 2001:db8::1/64 dev macvtap1 + ``` + +2. Verificare la rimozione dell'indirizzo IPv6 con: + + ```bash + ip -6 address show macvtap1 + ``` + +## Esercizio 7 + +### Configurazione delle interfacce di rete con `nmcli` + +Questo esercizio mostra come configurare le interfacce di rete utilizzando lo strumento NetworkManager. + +!!! note "Nota" + + Per impostazione predefinita, qualsiasi modifica alla configurazione di rete effettuata utilizzando `nmcli` (NetworkManager) rimarrà attiva anche dopo il riavvio del sistema. + Ciò contrasta con le modifiche di configurazione effettuate con l'utilità `ip`. + +#### Per creare un'interfaccia `macvtap` utilizzando `nmcli` + +1. Iniziare elencando tutti i dispositivi di rete disponibili eseguendo: + + ```bash + nmcli device + ``` + +2. Successivamente, identificare un dispositivo di rete sottostante a cui associare la nuova interfaccia MACVTAP. Memorizzare il valore del dispositivo identificato nella variabile $DEVICE2. Digitare: + + ```bash + DEVICE2=$(ls -l /sys/class/net/ | grep -v 'virtual\|total' | tail -n 1 | awk '{print $9}') + ``` + +3. Ora, creare una nuova connessione NetworkManager chiamata `macvtap2` e un'interfaccia MACVTAP associata denominata - `macvtap2`. La nuova interfaccia sarà associata a $DEVICE2. Digitare: + + ```bash + nmcli con add con-name macvtap2 type macvlan mode bridge tap yes dev $DEVICE2 ifname macvtap2 + ``` + +4. Utilizzare `nmcli` per verificare la creazione dell'interfaccia `macvtap2`. Digitare: + + ```bash + nmcli device show macvtap2 + ``` + +5. Utilizzare `nmcli` per verificare la creazione della connessione `macvtap2`. Digitare: + + ```bash + nmcli connection show macvtap2 + ``` + +6. Allo stesso modo, utilizzare `ip` per verificare la creazione dell'interfaccia `macvtap2`. Digitare: + + ```bash + ip --brief link show macvtap2 + ``` + + Notare lo stato UP dell'output dell'interfaccia `macvtap`. + + !!! question "Domanda" + + Qual è la differenza tra il concetto di connessione e quello di dispositivo in NetworkManager? + +#### Modifica della configurazione di rete dell'interfaccia con `nmcli` + +1. Inizia interrogando l'indirizzo IPv4 per la nuova interfaccia `macvtap2` eseguendo: + + ```bash + nmcli -f ipv4.addresses con show macvtap2 + ``` + + Il valore della proprietà ipv4.addresses dovrebbe essere vuoto. + +2. Configurare la connessione `macvtap2` con queste impostazioni: + + - IPv4 Method = manual + - IPv4 Addresses = 172.16.99.200/24 + - Gateway = 172.16.99.1 + - DNS Servers = 8.8.8.8 and 8.8.4.4 + - DNS Search domain = example.com + + Digitare: + + ```bash + nmcli connection modify macvtap2 ipv4.method manual \ + ipv4.addresses 172.16.99.200/24 ipv4.gateway 172.16.99.1 \ + ipv4.dns 8.8.8.8,8.8.4.4 ipv4.dns-search example.com + ``` + +3. Verificare la nuova impostazione dell'indirizzo IPv4 eseguendo: + + ```bash + nmcli -f ipv4.addresses con show macvtap2 + ``` + +4. Eseguire una variante leggermente diversa del comando precedente per includere la configurazione di runtime delle impostazioni specificate. Digitare: + + ```bash + nmcli -f ipv4.addresses,IP4.ADDRESS con show macvtap2 + ``` + + !!! question "Domanda" + + Qual è la differenza tra queste proprietà di NetworkManager: ipv4.addresses e IP4.ADDRESS? + +5. Controllare le modifiche alla connessione di rete utilizzando il comando `ip`. Digitare: + + ```bash + ip -br address show dev macvtap2 + ``` + +6. Per applicare correttamente le nuove impostazioni e renderle i nuovi valori di runtime, utilizzare `nmcli` per spegnere prima la connessione (cioè disattivarla). Digitare: + + ```bash + nmcli connection down macvtap2 + + Connection macvtap2 successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5) + ``` + +7. Ora attivare la nuova connessione per applicare le nuove impostazioni. Digitare: + + ```bash + nmcli connection up macvtap2 + + Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6) + ``` + +8. Visualizzare l'impostazione finale utilizzando l'utilità ip. Digitare: + + ```bash + ip -br address show dev macvtap2 + ``` + +## Esercizio 8 + +### Configurazione dei server DNS + +#### Per impostare gli indirizzi dei server DNS per il sistema + +1. Configurare i server DNS per `macvtap1` + + ```bash + nmcli con mod macvtap1 ipv4.dns 8.8.8.8, 8.8.4.4 + ``` + +2. Verificare la configurazione del server DNS + + ```bash + nmcli con show macvtap1 | grep DNS + ``` + +## Esercizio 9 + +### Risoluzione dei problemi di rete + +#### Identificare e risolvere i problemi di rete più comuni + +1. Controllare lo stato delle interfacce di rete + + ```bash + ip link show + ``` + +2. Verificare la connettività di rete a un host remoto (ad esempio, google.com) + + ```bash + ping google.com + ``` + +3. Provare ad eseguire il ping del gateway locale. Digitare: + + ```bash + ping _gateway + ``` + + !!! question "Domanda" + + Attraverso quale meccanismo il sistema è in grado di risolvere correttamente il nome "_gateway" nell'indirizzo IP corretto per il gateway predefinito configurato localmente? + +### Visualizzazione delle connessioni attive + +#### Per elencare tutte le connessioni di rete attive + +1. Elencare tutte le connessioni di rete attive + + ```bash + ss -tuln + ``` + +### Monitoraggio del traffico di rete + +#### Per monitorare il traffico di rete in tempo reale + +1. Catturare il traffico di rete su un'interfaccia specifica (ad esempio, `macvtap1`) + + ```bash + tcpdump -i macvtap1 + ``` + + Analizzare i pacchetti catturati e osservare l'attività di rete. È possibile interrompere l'acquisizione dei pacchetti al termine dell'operazione premendo ++ctrl+c++ + +### Visualizzazione dei registri di rete + +#### Per visualizzare i log relativi al demone NetworkManager per la risoluzione dei problemi + +1. Visualizzare i registri relativi alla rete + + ```bash + journalctl -u NetworkManager + ``` diff --git a/docs/labs/systems_administration_I/lab6-user_and_group_management.it.md b/docs/labs/systems_administration_I/lab6-user_and_group_management.it.md new file mode 100644 index 0000000000..c5ab74b689 --- /dev/null +++ b/docs/labs/systems_administration_I/lab6-user_and_group_management.it.md @@ -0,0 +1,446 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tested on: Tutte le versioni +tags: + - introduction system administration + - lab exercise + - users + - groups +--- + +# Lab 6: Gestione di utenti e gruppi + +## Obiettivi + +Dopo aver completato questo laboratorio, si sarà in grado di: + +- Aggiungere e rimuovere utenti dal sistema +- Aggiungere e rimuovere gruppi dal sistema +- Modificare utenti e gruppi sul sistema +- Cambiare la password + +Tempo stimato per terminare il laboratorio: 40 minuti + +## Account utente + +La gestione degli utenti è importante in qualsiasi sistema operativo di rete multiutente. Linux è un sistema operativo di rete multiutente. Senza gli utenti, non ci sarebbe bisogno di un sistema operativo di rete multiutente! + +La gestione degli utenti su un sistema è strettamente legata alla sicurezza del sistema stesso. C'è un vecchio proverbio che dice: +> Un sistema è tanto sicuro quanto il suo utente più debole. + +Linux eredita la vecchia tradizione UNIX di governare l'accesso a file, programmi e altre risorse in base ad utente e gruppi. + +Proprio come tutte le altre configurazioni in Linux, la gestione degli utenti può essere effettuata modificando i file di configurazione che possono essere trovati nella gerarchia del file system. Questo laboratorio esplorerà la gestione degli utenti attraverso il metodo manuale e anche con l'uso delle utility di sistema. + +Esamineremo anche in breve la proprietà e i permessi dei file. + +Di seguito i file importanti per la gestione di utenti e gruppi. Vengono discussi anche alcuni campi o voci dei file. + +### /etc/passwd + +- **Scopo:** informazioni sull'account utente +- **Contenuto:** + - username + - password criptata + - id utente (UID) + - id del gruppo (GID) + - nome completo dell'utente + - home directory dell'utente + - shell di default + +### /etc/shadow + +- **Scopo:** proteggere le informazioni dell'account utente +- **Contenuto:** + - nome di login + - hash della password + - numero di giorni relativi all'ultimo cambio password, a partire dal 01/01/1970 + - giorni prima dei quali la password non può essere modificata. Generalmente è pari a zero. + - numero di giorni dopo i quali la password deve essere cambiata + - numero di giorni antecedenti alla scadenza della password in cui l'utente viene avvertito che la password sta per scadere + - numero di giorni successivi alla scadenza della password, in cui l'account è considerato inattivo e disabilitato + - giorni a partire dal 1/01/1970 di quando l'account sarà disabilitato + - riservato + +### /etc/group + +- **Scopo:** informazioni sui gruppi +- **Contenuto:** + - nome del gruppo + - password del gruppo + - id del gruppo (GID) + - elenco degli utenti appartenenti al gruppo + +### /etc/skel + +- **Scopo:** contiene dei template da applicare ai nuovi account + +## Utilità comuni + +Di seguito sono elencate alcune utilità comunemente utilizzate nelle attività quotidiane di gestione degli utenti e dei gruppi: + +### `useradd` + + ```bash + + Utilizzo: useradd [options] LOGIN + useradd -D + useradd -D [options] + + Opzioni: + --badname non controllare i nomi non validi + -b, --base-dir BASE_DIR directory di base per la directory home del nuovo account + --btrfs-subvolume-home utilizza il sottovolume BTRFS per la directory home. + -c, --comment COMMENT Campo GECOS del nuovo account + -d, --home-dir HOME_DIR directory home del nuovo account + -D, --defaults stampa o modifica la configurazione predefinita di useradd + -e, --expiredate EXPIRE_DATE data di scadenza del nuovo account + -g, --gid GROUP nome o ID del gruppo principale del nuovo account + -G, --groups GROUPS elenco dei gruppi supplementari del nuovo account + -h, --help visualizza questo messaggio di aiuto e esci + -k, --skel SKEL_DIR utilizza questa directory scheletro alternativa. + -K, --key KEY=VALUE sovrascrivere le impostazioni predefinite di /etc/login.defs + -l, --no-log-init non aggiungere l'utente ai database lastlog e faillog. + -m, --create-home creare la directory home dell'utente + -M, --no-create-home non creare la directory home dell'utente. + -N, --no-user-group non creare un gruppo con lo stesso nome dell'utente. + -o, --non-unique consenti la creazione di utenti con UID duplicati (non univoci) + -p, --password PASSWORD password crittografata del nuovo account + -r, --system creare un account di sistema + -R, --root CHROOT_DIR directory in cui eseguire il chroot + -P, --prefix PREFIX_DIR directory dei prefissi in cui si trovano i file /etc/* + -s, --shell SHELL shell di accesso del nuovo account + -u, --uid UID ID utente del nuovo account + -U, --user-group creare un gruppo con lo stesso nome dell'utente + -Z, --selinux-user SEUSER utilizzare un SEUSER specifico per la mappatura degli utenti SELinux + ``` + +### `groupadd` + + ```bash + Utilizzo: groupadd [options] GROUP + + Opzioni: + -f, --force esci correttamente se il gruppo esiste già e annulla -g se il GID è già utilizzato. + -g, --gid GID utilizza il GID per il nuovo gruppo + -h, --help visualizza questo messaggio di aiuto e esci + -K, --key KEY=VALUE sovrascrivere le impostazioni predefinite di /etc/login.defs + -o, --non-unique consenti la creazione di gruppi con GID duplicati (non univoci) + -p, --password PASSWORD Utilizza questa password crittografata per il nuovo gruppo. + -r, --system creare un account di sistema + -R, --root CHROOT_DIR directory in cui eseguire il chroot + -P, --prefix PREFIX_DI prefisso della directory + -U, --users USERS elenco degli utenti membri di questo gruppo + ``` + +### `passwd` + + ```bash + Utilizzo: passwd [OPTION...] + -k, --keep-tokens conserva i token di autenticazione non scaduti + -d, --delete elimina la password dell'account specificato (solo root); rimuove anche il blocco della password, se presente. + -l, --lock blocca la password per l'account specificato (solo root) + -u, --unlock sblocca la password per l'account specificato (solo root) + -e, --expire scadenza della password per l'account specificato (solo root) + -f, --force funzionamento forzato + -x, --maximum=DAYS durata massima della password (solo root) + -n, --minimum=DAYS durata minima della password (solo root) + -w, --warning=DAYS numero di giorni di preavviso che gli utenti ricevono prima della scadenza della password (solo root) + -i, --inactive=DAYS numero di giorni dopo la scadenza della password in cui un account viene disabilitato (solo root) + -S, --status segnalare lo stato della password sull'account specificato (solo root) + --stdin leggi nuovi il token da stdin (solo root) + + Opzioni di aiuto: + -?, --help Mostra questo messaggio di aiuto + --usage Visualizza breve messaggio di utilizzo + ``` + +## Esercizio 1 + +### Creazione manuale di un nuovo utente + +Finora, durante i laboratori precedenti, si è utilizzato il sistema come utente con i privilegi più elevati, ovvero l'utente `root`. Questa non è una buona pratica in un sistema di produzione perché rende il sistema vulnerabile dal punto di vista della sicurezza. L'utente root può causare danni illimitati al sistema, sia in modo permanente che temporaneo. + +Ad eccezione del superutente, tutti gli altri utenti hanno un accesso limitato ai file e alle directory. Utilizzare sempre il computer come un utente normale. Due concetti confusi saranno chiariti qui. + +- In primo luogo, la directory home dell'utente root è " /root ". +- In secondo luogo, la directory principale è la directory più alta, nota come directory / (barra). ("/root" è diverso da "/ ") + +In questo laboratorio si creerà un nuovo utente chiamato "Me Mao". Il nome utente per "Me Mao" sarà il nome proprio - "me". Questo nuovo utente apparterrà al gruppo "me". La password sarà “a1b2c3” + +!!! warning "Attenzione" + + Le configurazioni di sistema sono solitamente conformi a un formato specifico. È sempre importante attenersi a questo formato quando si modificano manualmente i file di configurazione. Un modo per farlo è trovare e copiare una voce esistente nel file, quindi modificare la riga/sezione copiata con le nuove modifiche. Questo aiuterà a ridurre le possibilità di commettere errori. + +1. Log in nel computer come root + +2. Utilizzare il comando `tail` per visualizzare le ultime 4 voci nella parte inferiore del file `/etc/passwd`. + + ```bash + [root@localhost root]# tail -n 4 /etc/passwd + apache:x:48:48:Apache:/var/www:/sbin/nologin + xfs:x:43:43:X Font Server:/etc/X11/fs:/sbin/nologin + ntp:x:38:38::/etc/ntp:/sbin/nologin + gdm:x:42:42::/var/gdm:/sbin/nologin + ``` + + Si modificherà il file passwd utilizzando il formato sopra indicato. + +#### Creazione dell'utente + +1. Sarà necessario modificare il file `/etc/passwd`. + + Avviare l'editor preferito e aprire il file "/etc/passwd" + + Aggiungere il testo sottostante alla fine del file: + + ```bash + me:x:500:500:me mao:/home/me:/bin/bash + ``` + +2. Salvare le modifiche e chiudere il file passwd. + +3. Successivamente modificheremo il file `/etc/shadow`. Avviare l'editor e aprire il file "/etc/shadow". Aggiungere una nuova voce come quella riportata di seguito alla fine del file, inserendo un asterisco (*) nel campo della password. Digitare: + + ```bash + me:x:11898:11898:99999:7 +::: + ``` + +4. Salvare le modifiche e chiudere il file shadow. + +5. Modificare ora il file `/etc/group`. Avviare l'editor e aprire il file `/etc/group`. Alla fine del file aggiungere una nuova voce: + + ```bash + me:x:1000:me + ``` + +6. Salvare le modifiche e chiudere il file group. + +7. È ora di creare la directory home. + + Copiare l'intero contenuto della directory "/etc/skel" nella directory /home, rinominando la nuova directory con il nome dell'utente, ad esempio "/home/me". Digitare: + + ```bash + [root@localhost root]# cp -r /etc/skel /home/me + ``` + +8. L'utente root è il proprietario della directory che hai appena creato, perché è stato lui a crearla. Affinché l'utente "me mao" possa utilizzare la directory, si dovranno modificare i permessi/proprietà della cartella. Digitare: + + ```bash + [root@localhost root]# chown -R me:me /home/me + ``` + +9. Creare una password per l'utente. Impostare il valore della password su `a!b!c!d!`. Si utilizzerà l'utilità "passwd". Digitare "passwd" e seguire le istruzioni + + ```bash + [root@localhost root]# passwd me + Changing password for user me. + New password: + Retype new password: + passwd: all authentication tokens updated successfully. + ``` + +10. Uscire dal sistema una volta finito. + +## Esercizio 2 + +### Creazione automatica di un nuovo utente + +Esistono numerose utility disponibili per semplificare tutte le attività/passaggi che abbiamo eseguito manualmente nell'esercizio precedente. Abbiamo solo illustrato il processo manuale di creazione di un utente, in modo che si possa vedere cosa succede effettivamente in background. + +In questo esercizio verranno utilizzate alcune utilità comuni per gestire e semplificare il processo. + +Si creerà un altro account utente per l'utente "Ying Yang"; il nome di accesso sarà "ying". + +E la password per "ying" sarà "y@i@n@g@". + +Inoltre, si creerà un gruppo denominato “common” e si aggiungeranno gli utenti “me” e “ying” al gruppo. + +#### Per creare automaticamente un nuovo account + +1. Accedere al sistema come root. + +2. Creare l'utente ying utilizzando tutte le impostazioni predefinite del comando `useradd`. Digitare: + + ```bash + [root@localhost root]# useradd -c "Ying Yang" ying + ``` + +3. Utilizzare il comando `tail` per esaminare l'inserimento appena effettuato al file `/etc/passwd`. Digitare: + + ```bash + flatpak:x:982:982:User for flatpak system helper:/:/sbin/nologin + pesign:x:981:981:Group for the pesign signing daemon:/run/pesign:/sbin/nologin + me:x:1000:1000:99999:7 +::: + ying:x:1001:1001:Ying Yang:/home/ying:/bin/bash + ``` + + !!! question "Domanda" + + Elencare qui la nuova voce? + +4. L'utente ying non potrà accedere al sistema finché non sarà stata creata una password per l'utente. Impostare la password di Ying su `y@i@n@g@`. Digitare: + + ```bash + [root@localhost root]# passwd ying + Changing password for user ying. + New password: ********** + Retype new password: ********** + passwd: all authentication tokens updated successfully. + ``` + +5. Utilizzare l'utilità `id` per visualizzare rapidamente le informazioni relative ai nuovi utenti appena creati. Digitare: + + ```bash + [root@localhost root]# id me + uid=1000(me) gid=1000(me) groups=1000(me) + ``` + +6. Fare la stessa cosa per l'utente ying. Digitare: + + ```bash + [root@localhost root]# id ying + uid=501(ying) gid=501(ying) groups=501(ying) + ``` + +#### Creazione automatica di un nuovo gruppo + +1. Utilizzare il programma `groupadd` per creare il nuovo gruppo "common". + + ```bash + [root@localhost root]# groupadd common + ``` + +2. Esaminare la parte finale del file `/etc/group` per vedere il nuovo inserimento. + + !!! question "Domanda" + + Qual è il comando per farlo? + +3. Utilizzare il comando `usermod` per aggiungere un utente esistente a un gruppo esistente. Si aggiunge l'utente ying al gruppo `common` appena creato nel passaggio 1. Digitare: + + ```bash + [root@localhost root]# usermod -G common -a ying + ``` + +4. Fare le stessa cosa per l'utente me. Digitare: + + ```bash + [root@localhost root]# usermod -G common -a me + ``` + +5. Eseguire nuovamente il comando `id` sugli utenti "ying" e "me". + + !!! question "Domanda" + + Cosa è cambiato? + +6. Utilizzare il comando `grep` per visualizzare le modifiche apportate alla voce del gruppo `common` nel file. Digitare: + + ```bash + [root@localhost root]# grep common /etc/group + common:x:1002:ying,me + ``` + +#### Modifica del profilo di un utente + +1. Utilizzare il comando `usermod` per modificare il campo commento dell'utente "me". Il nuovo commento che si aggiungerà sarà "first last". Digitare: + + ```bash + [root@localhost root]# usermod -c "first last" me + ``` + + Utilizzare il comando `tail` per esaminare le modifiche apportate al file `/etc/passwd`. + + !!! question "Domanda" + + Scrivi la riga modificata qui sotto. + + !!! question "Domanda" + + Qual è la shell di login dell'utente me? + +2. Utilizzare nuovamente il comando `usermod` per modificare la shell di login di me in shell csh. Digitare: + + ```bash + [root@localhost root]# usermod -s /bin/csh me + ``` + +3. Infine, utilizzare il comando `usermod` per annullare tutte le modifiche apportate all'utente "me" sopra. + + Ripristina i valori (shell di login ecc.) ai valori originali. + + !!! question "Domanda" + + Quali sono i comandi per farlo? + +## Esercizio 3 + +### Impostazione dell'utente + +Non sempre è conveniente uscire completamente dal sistema per accedere con un altro utente. Questo potrebbe essere dovuto al fatto che sono in esecuzione determinate attività che non si desidera terminare. Il programma `su` (set user) viene utilizzato per diventare temporaneamente un altro utente. È possibile passare da un account utente normale all'account root o viceversa utilizzando il comando "su". + +Cambia l'utente corrente in modo che abbia i diritti di accesso dell'utente temporaneo. + +Le variabili di ambiente HOME, LOGNAME e USER verranno impostate di default su quelle dell'utente temporaneo. + +#### Per diventare temporaneamente un altro utente + +1. Dopo aver effettuato l'accesso come utente root, passare all'utente "me". Digitare: + + ```bash + [root@localhost root]# su me + + [me@localhost root]$ + ``` + + Il comando `su` non ha richiesto la password dell'utente me perché siete root + +2. Passare alla directory home di me. + + ```bash + [me@localhost root]$ cd + + [me@localhost me]$ cd + ``` + +3. Mentre si è temporaneamente connessi come me, usare `su` per effettuare il login come utente ying. Digitare: + + ```bash + [me@localhost me]$ su ying + password: + [ying@localhost me]$ + ``` + +4. Per uscire dall'account di Ying, digitare: + + ```bash + [ying@localhost me]$ exit + ``` + + Questo vi riporterà all'account me. + +5. Uscire dall'account di me per tornare all'account root. + + !!! question "Domanda" + + Qual è il comando? + +#### Ereditare tutte le variabili ambientali del nuovo utente con `su` + +1. Per forzare `su` a utilizzare tutte le variabili ambientali dell'utente temporaneo. Digitare: + + ```bash + [root@system1 root]# su - me + + [me@system1 me]$ + ``` + + La differenza è immediatamente evidente. Notare la directory di lavoro corrente. + +2. Uscire completamente dal sistema e riavviare il computer. + +3. Tutto fatto con Lab 6! diff --git a/docs/release_notes/10_0.zh.md b/docs/release_notes/10_0.zh.md new file mode 100644 index 0000000000..b9f99489d3 --- /dev/null +++ b/docs/release_notes/10_0.zh.md @@ -0,0 +1,282 @@ +--- +title: 当前发布 10 版本 +tags: + - 10 + - 10.0 release + - Rocky Linux 10 +--- + +## Rocky Linux 10 + +Rocky Linux 10(RL 10)是 Rocky Linux 企业级操作系统发布的最新重大版本。 + +### 升级到 Rocky Linux 10 + +Rocky Linux 不支持任何主要版本的升级。 要从 8.x 或 9.x 迁移到 Rocky Linux 10,您应该重新安装操作系统。 + +### 新特性与变化 + +以下部分将介绍 RL 10 的精选特性。 + +与所有主要的 Rocky Linux 发行版一样,本发布说明涵盖了许多增强功能、变更项和新特性。 + +以下概述重点介绍了以下类别的变化:架构、内核、安装程序、网络、安全、虚拟化、容器、存储和软件包管理。 此处精选的特性最可能与普通用户相关。 + +有关重大变化的完整清单,请参阅 [此处](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/10/html/10.0_release_notes/overview#overview-major-changes) 的上游清单。 + +### 支持的架构 + +!!! warning "请检查 CPU 兼容性" + + 在 x86_64 处理器架构上,RL 10 不再支持 x86-64-v2 微架构级别及更早期的硬件,并将 x86-64-v3 微架构作为发行版的最低要求。 + 更多信息请参阅 [支持的微架构级别部分](#supported-microarchitecture-levels),特别是关于 CPU 兼容性测试的相关说明。 + +!!! info "停止 32 位软件包" + + Rocky Linux 10 已移除对 x86_64 架构的 32 位兼容性支持。请改用 64 位库或包含 32 位依赖项的容器环境。 + +Rocky Linux 10 支持以下处理器架构: + +- 64-bit AMD/Intel x86-64-v3 (x86_64) +- 64-bit RISC-V (riscv64) +- 64-bit ARMv8.0-A (aarch64) +- IBM POWER9, little endian (ppc64le) +- IBM z14 (s390x) + +#### 全新支持 RISC-V 架构 + +经过 Rocky Linux 发布工程团队的长期努力,终于将 Rocky Linux 10 成功适配于特定的 "RISC-V 实现"。 +发布当天支持的平台/子系统包括 - StarFive VisionFive 2 (VF2)、**QEMU** 和 SiFive HiFive Premier P550。 + +有关此里程碑的更多详细信息(包括 RL10 对 RISC-V 的支持),请访问 [此网站](https://rockylinux.org/news/rockylinux-support-for-riscv)。 + +#### 支持的微架构级别 + +x86-64-v3 微架构基于 Intel Haswell 处理器一代的特性集。 少数的英特尔 Atom 处理器(如 Gracemont 系列处理器)支持 x86-64-v3。 而其他处理器(包括英特尔 Atom Parker Ridge 系列处理器 和英特尔 Atom x6416RE Elkhart Lake 系列处理器)则不提供 x86-64-v3 功能特性,因此在 RL 10 中不支持。 若要确认处理器兼容性,请 [使用此过程](https://docs.rockylinux.org/gemstones/test_cpu_compat/) 进行验证。 + +x86-64-v3 微架构级别是 Rocky Linux 10 在 x86_64 平台的最低硬件要求标准,该标准由 AMD 通过其‌ Excavator 微架构‌首次实现。 这意味着基于 Excavator 架构之前的旧处理器可能不被 Rocky Linux 10 完全支持。 + +!!! Note "树莓派镜像差异" + + 10 版本 的 Rocky Linux Pi 镜像与之前版本的主要区别在于——10 版本支持 Pi 4 和 Pi 5,而 9 版本支持 Pi 3、Pi 4、Pi 5 和 Pi Zero 2W。 + +### 安装程序和镜像创建 + +Rocky Linux 安装程序的交互式图形界面 Anaconda 在第 10 版中进行了多项改进。 + +关键变化包括: + +- 默认情况下禁用 root 账户。 系统管理需要创建一个拥有完整 sudo 权限的管理员用户。 如果你选择通过设置密码来启用 root 账户,那么你就可以创建没有管理员权限的标准用户。 +- 远程桌面协议(RDP)在安装过程中取代了 VNC,以进行图形化远程访问。 这一变化会影响相关的内核启动选项。 +- 移除安装程序 "Time & Date" 部分下的时区地图。 +- 图形界面在初始安装时不再支持添加第三方存储库。 使用 `inst.addrepo` 启动选项或 Kickstart 代替。 +- 移除安装时可用的文档。 + +### 内核 + +RL 10 默认的开箱即用内核已经更新到 6.12.0 版本。 + +由于某些内核功能无人维护、不安全或已弃用,现在这些功能已被禁用。 + +如果需要,`rh_waived` 内核命令行参数可以启用这些功能。 最早合格虚拟截止日期优先(Earliest Eligible Virtual Deadline First,EEVDF)取代了 CFS 调度器,它优先处理具有较短时间片的延迟敏感任务,以提高响应速度。 + +### 网络 + +RL 10 中网络功能的增强包括对网络配置、网络接口聚合、DHCP 客户端和服务器的变更以及设备驱动程序的添加与删除。 + +#### NetworkManager 和 Network Script + +旧的 ifcfg-rh 网络脚本在 Rocky Linux 的旧版本(9.x)中已经被弃用。 在 Rocky Linux 10 中,这些脚本已不再可用。 + +现在你必须使用 NetworkManager。 这些工具包括 `nmcli`、`nmtui` 和 `nmstate` 。 这意味着一些较旧的文件和命令将不再起作用,同时存放网络配置文件的位置也发生了变化。 + +- 在 /etc/sysconfig/network-scripts/ 目录下带有 ifcfg- 前缀的文件将不再支持。 +- ifup 和 ifdown 命令不再可用。 +- 不再支持旧版的网络脚本(例如 ifup-local)。 +- 网络配置文件保存在 /etc/NetworkManager/system-connections/ 文件夹中。 + +#### DHCP 客户端与服务器 + +RL 10 中的 DHCP 客户端通过 NetworkManager 的内部子系统来实现。 旧版 dhcp-client 软件包已被移除且上游也不再支持它。 + +在 RL 10 中,Kea DHCP 替换了已到 EOF 的 ISC DHCP 服务器。 + +#### 网络 Bonding 和 Teaming + +Rocky Linux 的旧版本已弃用 NIC teaming 功能。 在 RL 10 中已被完全移除。 作为替代,请配置一个 bond 而不是一个网络 team。 + +### 存储 + +除了以下变更之外,还会从 RL 10 中添加、更新或删除了几个与存储相关的设备驱动程序。 + +#### Global File System 2 (GFS2) + +RL 10 不再支持 GFS2 文件系统。 + +#### Device Mapper Multipath + +RL 10 不支持在 NVMe 设备上启用 Device Mapper (DM) Multipath。 + +#### LUKS2 磁盘加密 + +cryptsetup 软件包为了解决一些问题,已变基到 2.7 版本,并在使用内核转储(kdump)服务时支持 LUKS 加密设备。 + +### 安全功能 + +随着 RL 10 的发布,其引入了许多与安全相关的全新功能。 + +一些更新包括: + +- 系统范围的加密策略(crypto-policies):OpenSSL 和 OpenSSH 现在支持后量子密码学(PQC)。 +- Sequoia PGP:一种内存安全型的 OpenPGP 实现方案。 +- OpenSSH:恢复更严格的 SSH 主机密钥权限管控。 (新权限 = 0600 Vs 旧权限 = 0640)。 +- GnuTLS:客户端与服务器证书现支持压缩传输 +- yescrypt 算法:系统默认账户的密码加密机制已调整为该算法。 + +新的 SELinux 变更包括以下更新: + +- 文件上下文等价关系现在已反转为 /var/run = /run。 +- SELinux 策略新增 libvirt 服务域类型。 + +### 虚拟化 + +虚拟化的主要变化如下: + +- 单一守护进程 libvirtd 已被弃用。 使用模块化和套接字作为替代。 请参阅 [上游文档](https://libvirt.org/daemons.html#monolithic-vs-modular-daemons) 中有关差异的详细文档 +- 弃用 i440fx 虚拟机类型 +- 弃用 Virtual Machine Manage 并打算用 Cockpit 作为替代 + +### 容器 + +RL 10 种的 Podman 5 引入了多项升级特性,其中包括新的默认容器运行时 `crun`,它取代了原有的 `runc`。 Control Groups v2 现在是默认的 cgroup 版本。 + +主要更新包括弃用 slirp4netns 网络模式、新增镜像推送/拉取操作的重试次数与延时配置功能,以及提供对多架构容器镜像的全面支持。 + +此外,Podman 5 继续支持 Podman 4.4 中引入的 Quadlets 功能,该功能允许使用声明式 unit 文件通过 `systemd` 来管理 Podman 容器。 + +### 软件管理 + +RPM 现在是 4.19 版本,其中包含了对打包和构建工具的改进和更新。 还引入了一个新的 `rpmsort` 命令,用于在输出管道中正确排序 RPM 版本字符串。 例如: + +The old `sort`: `rpm -q kernel | sort`\ +kernel-6.12.0-130.el10.x86_64\ +kernel-6.12.0-13.el10.x86_64 + +The new `rpmsort`: `rpm -q kernel | rpmsort`\ +kernel-6.12.0-13.el10.x86_64\ +kernel-6.12.0-130.el10.x86_64 + +#### DNF + +默认情况下,DNF 现在会忽略存储库文件列表元数据的下载,从而增强响应能力并节省磁盘空间。 需要此元数据的 DNF 命令通常会自动完成下载。 + +#### 模块化 + +DNF 模块化已被弃用,Rocky Linux 将在 RL 10 中停止以模块形式提供 AppStream 内容。 未来,RL 10 可能会提供其他应用程序版本,如 RPM 软件包、软件集合 或 Flatpaks 。 + +换言之,由于下一代 DNF 包管理器(`dnf5`)已经统一了 API 并且不再依赖于旧的模块化架构来管理软件的多个版本,因此 `dnf module` 命令在 RL 10 中已经被逐步淘汰。 相关比较如下: + +| 描述 | 旧(`dnf module`) | 新 | +| :------: | :-----------------------------------------------------------------------------------------------------------------------------------: | :---------------------------- | +| 查看可用版本 | `dnf module list ` | `dnf repoquery ` | +| 安装一个特定版本 | `dnf module enable nginx:1.14 && dnf module install nginx:1.14` | `dnf install nginx-1.26.3` | +| 删除某个版本 | `dnf -y module remove --all :` 或者 `dnf -y module remove --all :/` | `dnf remove -` | +| 切换到特定版本 | `dnf -y module remove --all : && dnf module reset && dnf module enable :` | 无需切换 | + +### 桌面环境 + +在 RL 10 中,Wayland 替代了 X.Org Server。 Xwayland 将支持尚未移植到 Wayland 的大多数 X11 客户端。 在 RL 10 中也替换了一些桌面应用程序和组件。 + +#### 桌面组件变更 + +| 已移除 | 替换为 | +| :------------------------ | :------------------------------------------------------- | +| gedit text editor | GNOME Text Editor (gnome-text-editor) | +| Tweaks 应用程序 | 在 GNOME 设置中使用 Tweaks 选项和/或在 Flathub 上使用 Flatpak | +| Festival 语音合成器 | Espeak NG | +| ‌GNOME之眼(eog)图像查看器 | GNOME 图像查看器(Loupe) | +| ‌Cheese 相机程序 | Snapshot 应用程序 | +| GNOME 终端 | ptyxis 终端 | +| PulseAudio 守护程序(不包含客户端接口) | ‌Pipewire(自 RL 9 起已设为默认) | + +几个图形桌面应用程序不再包含在 Rocky Linux 10 发行版中。 在大多数情况下,您可以从上游源或 Flathub 上的 Flatpack 获取这些应用程序。 + +#### 已移除的应用程序 + +| 已移除 | 替换为 | +| :------------------------ | :---------------------------------------------------------------------------------------------------------------------------------------------------- | +| LibreOffice 办公生产力软件套件 | 在 Flathub 上作为 Flatpak 正式提供,或者您可以从 [https://www.libreoffice.org/](https://www.libreoffice.org/) 下载上游包。 | +| Evolution 个人信息管理器和电子邮件客户端 | Thunderbird 通过 Appstream 存储库提供。 您还可以从上游或 Flathub 上获取 Flatpak 软件包或原生安装包。 | +| Inkscape 矢量图形编辑器 | RL 10 中没有矢量图形编辑器,但你可以在 Flathub 上找到一个 Flatpak 包。 | +| ‌Totem(GNOME 视频)媒体播放器 | 在 RL 10 中没有默认的桌面媒体播放器。 网页浏览器能播放基于网页的媒体。 用户亦可选择从第三方存储库安装其他媒体播放器,或通过 Flathub 获取 Flatpak。 | + +从 RL 10 中移除了 TigerVNC。 要使用 VNC 客户端功能,请使用 Connections 应用程序。 该系统未提供 VNC 服务器端。\ +‌GNOME 远程桌面(gnome-remote-desktop)采用 RDP 协议并成为 TigerVNC 的替代方案,其支持桌面共享、远程登录及无头会话。 该功能已集成至 GNOME 桌面环境,你可直接在 "设置" 应用程序中配置它。 + +Motif X11 桌面环境和工具包也已经从 RL 10 中移除。 + +### 基础设施服务 + +在 RL 10 的基础设施服务中,替换或移除了部分服务和软件包,包括以下内容。 + +| 已移除 | 替换为 | +| :--------------------------- | :--------------------------------------------- | +| power-profiles-daemon CPU 节流 | tuned-ppd 转译层支持为 power-profiles-daemon 编写的应用程序 | +| redis 内存键值数据库 | valkey[^1] 内存键值数据库 | +| sendmail 邮件传输代理 | Rocky Linux 建议迁移到 Postfix 邮件传输代理。 | +| spamassassin 垃圾邮件过滤器 | spamassassin 垃圾邮件过滤器现在可以在 EPEL 存储库中找到。 | + +[^1]: **valkey**:redis 的一个分叉。 1除了 `valkey` 之外,`valkey-compat-redis` 包也在 Plus 存储库中。 + +### 动态编程语言 + +几个流行编程语言的最新版本都有更新: + +- Python 3.12 +- Ruby 3.3 +- Node.js 22.13 +- Perl 5.40 +- PHP 8.3 + +### Web 服务器和数据库服务器 + +许多流行的服务器守护程序都更新到了最新版本: + +#### Web 服务器 + +- Apache HTTP Server 2.4.63 +- nginx 1.26 + +#### 代理缓存服务器 + +- Varnish Cache 7.6 +- Squid 6.10 + +#### 数据库服务器 + +- MariaDB 10.11 +- MySQL 8.4 +- PostgreSQL 16.8 +- Valkey 8.0 + +### RL 网页控制台(Cockpit) + +Cockpit 是一个基于网页的界面,用于管理和监控您的本地系统。 如果你安装了 `cockpit-files` RPM 包,现在可以在 web 控制台中使用图形文件管理器和文本编辑器。 + +由于安全原因,原本支持多系统同步管理的主机切换器现已弃用,且默认处于禁用状态。 + +Cockpit 现在支持配置 Stratis 文件系统的大小限制。 + +## 已知问题 + +### 虚拟主机上的 SELinux 问题 + +当使用启用了 `passt` 后端和内存类型为 `memfd` 的虚拟主机时,如果启用了 SELinux,则接口将无法启动。 有关更多信息,请参阅 [此上游问题](https://issues.redhat.com/browse/RHEL-80407)。 + +### 安装介质启动后出现灰色屏幕 + +在特定的硬件配置中,例如启用了 3D 图形的虚拟化环境,您可能会在显示设置向导之前遇到 Anaconda 挂起的情况。 这个问题应该可以通过从 tty6 切换到另一个 tty,然后再切换回 tty6 来解决。 例如,切换到 tty1 并返回到 tty6: ++ctrl+alt+f1++,然后 ++ctrl+alt+f6++。 + +## 参与进来和报告 bug + +请向 [Rocky Linux Bug Tracker](https://bugs.rockylinux.org/) 报告您遇到的任何 Bug 。 我们也欢迎您以任何方式加入我们的社区,不管是在我们的 [Forums](https://forums.rockylinux.org)、 [Mattermost](https://chat.rockylinux.org)、[IRC on Libera.Chat](irc://irc.liberachat/rockylinux)、 [Reddit](https://reddit.com/r/rockylinux)、[Mailing Lists](https://lists.resf.org),还是其他任何您希望参与的方式!