From 3b306a1d7d505c821834a6b51a41a46dfc206439 Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Thu, 22 Feb 2024 09:17:47 -0700 Subject: [PATCH 1/5] New translations lab3-auditing_the_system.md (Ukrainian) --- docs/labs/security/lab3-auditing_the_system.uk.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/docs/labs/security/lab3-auditing_the_system.uk.md b/docs/labs/security/lab3-auditing_the_system.uk.md index e04f8a85bc..69fc735021 100644 --- a/docs/labs/security/lab3-auditing_the_system.uk.md +++ b/docs/labs/security/lab3-auditing_the_system.uk.md @@ -526,7 +526,11 @@ SYNOPSIS Файли звітів Tripwire — це набір порушень правил, виявлених під час перевірки цілісності. -Існує кілька методів перегляду файлу звіту Tripwire. Ви могли переглядати його під час перевірки цілісності; ви можете переглядати його як електронний лист, автоматично надісланий вам, або ви можете переглядати його за допомогою команди «twprint», що надається разом із пакетом Tripwire. +Є кілька способів переглянути файл звіту Tripwire: + +- під час перевірки цілісності +- у вигляді електронного листа, автоматично надісланого вам +- за допомогою команди `twprint`, що надається разом із пакетом Tripwire !!! note "Примітка" From 58baebc4c0fdcd13b8ba57855306230214bb0bc0 Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Thu, 22 Feb 2024 09:18:14 -0700 Subject: [PATCH 2/5] New translations lab8-system_and_process_monitoring-i.md (Ukrainian) --- ...lab8-system_and_process_monitoring-I.uk.md | 1035 +++++++++++++++++ 1 file changed, 1035 insertions(+) create mode 100644 docs/labs/systems_administration_I/lab8-system_and_process_monitoring-I.uk.md diff --git a/docs/labs/systems_administration_I/lab8-system_and_process_monitoring-I.uk.md b/docs/labs/systems_administration_I/lab8-system_and_process_monitoring-I.uk.md new file mode 100644 index 0000000000..4e155ad398 --- /dev/null +++ b/docs/labs/systems_administration_I/lab8-system_and_process_monitoring-I.uk.md @@ -0,0 +1,1035 @@ +--- +author: Wale Soyinka +contributors: Steven Spencer, Ganna Zhyrnova +tested on: Всі версії +tags: + - моніторинг системи + - моніторинг процесу + - ps + - pgrep + - pidof + - cgroups + - pstree + - top + - kill + - lsof + - pkill + - exec +--- + +# Лабораторна робота 8: Моніторинг системи та процесів + +## Завдання + +Після виконання цієї лабораторної роботи ви зможете: + +- переглядати та керувати процесами +- вбити помилкові процеси +- змінити пріоритет процесу + +Приблизний час виконання цієї лабораторної роботи: 60 хвилин + +## Вступ + +Ці вправи охоплюють різні теми, пов’язані з моніторингом та керуванням процесами в системах Linux. Розглянуті теми включають ідентифікацію та контроль процесів, керування пріоритетами процесів, обробку сигналів, моніторинг ресурсів та керування «cgroups». + +## Завдання 1 + +### `ps` і /proc дослідження + +#### Щоб дослідити та ідентифікувати перший системний процес + +1. Увійдіть в систему під будь-яким користувачем. + +2. Знайдіть назву процесу з ідентифікатором процесу 1 за допомогою /proc. + + ```bash + cat /proc/1/comm + ``` + + !!! question "Питання" + + ``` + Як називається процес з PID 1? + ``` + +3. Перегляньте ім’я та шлях до виконуваного файлу процесу з PID 1. + + ```bash + ls -l /proc/1/exe + ``` + + !!! question "Питання" + + ``` + Який шлях до виконуваного файлу за PID 1? + ``` + +4. Використовуйте команду `ps`, щоб дізнатися назву процесу або програми, що стоїть за PID 1. + + ```bash + ps -p 1 -o comm= + ``` + + !!! question "Питання" + + ``` + Чи підтверджує команда `ps` назву процесу? + ``` + +5. Використовуйте команду `ps`, щоб переглянути повний шлях і будь-які аргументи командного рядка процесу або програми за PID 1. + + ```bash + ps -p 1 -o args= + ``` + + !!! question "Питання" + + ``` + Який повний шлях і аргументи командного рядка для процесу з PID 1? + ``` + + !!! question "Питання" + + ``` + Чому процес із PID 1 важливий у системі Linux? + ``` + +#### Щоб відобразити детальну інформацію про процес за допомогою `ps` + +Наступні кроки показують, як використовувати `ps` для відображення основної інформації про процес. + +1. Використовуйте команду `ps`, щоб відобразити список усіх процесів у структурі дерева. + + ```bash + ps auxf + ``` + + !!! question "Питання" + + ``` + Яка структура списку процесів і яка інформація відображається? + ``` + +2. Відфільтруйте список лише для відображення процесів, пов’язаних із певним користувачем, наприклад, користувачем «root». + + ```bash + ps -U root + ``` + + Переконайтеся, що відображаються лише процеси для користувача root. + +3. Показуйте процеси в детальному форматі, включаючи дерево процесів і потоки. Впишіть: + + ```bash + ps -eH + ``` + + !!! question "Питання" + + ``` + Які додаткові деталі відображаються в цьому форматі? + ``` + +4. Відображати процеси, відсортовані за використанням ЦП у порядку спадання. + + ```bash + ps aux --sort=-%cpu + ``` + + !!! question "Питання" + + ``` + Який процес споживає найбільше ЦП? + ``` + +## Завдання 2 + +### Керування процесами за допомогою `kill` + +#### Щоб завершити процес за допомогою `kill` + +1. Запустіть тривалий процес сну у фоновому режимі та відобразіть PID на своєму терміналі. Впишіть: + + ```bash + (sleep 3600 & MYPROC1=$! && echo PID is: $MYPROC1) 2>/dev/null + ``` + + Вихід + + ```bash + PID is: 1331933 + ``` + + Занотуйте PID для нового процесу у вашій системі. PID також зберігається в змінній $MYPROC1. + +2. Надішліть сигнал завершення (SIGTERM) процесу «сплячого режиму». + + ```bash + kill $MYPROC1 + ``` + + Замініть $MYPROC1 фактичним PID з кроку 1. + +3. Перевірте, чи було завершено процес за допомогою `ps` і `ps aux`. + + ```bash + ps aux | grep -v grep | grep sleep + ``` + +#### Для завершення процесів за допомогою сигналів `kill` + +1. Почніть новий процес сну та запишіть його PID. Впишіть: + + ```bash + (sleep 3600 & MYPROC2=$! && echo PID is: $MYPROC2) 2>/dev/null + ``` + + Вихід + + ```bash + PID is: 1333258 + ``` + +2. Надішліть інший сигнал (наприклад, SIGHUP) до нового процесу сну. Впишіть: + + ```bash + kill -1 $MYPROC2 + ``` + + Переконайтеся, що $MYPROC2 більше не міститься в таблиці процесів. + +3. Почніть новий процес ping і запишіть його PID. Впишіть: + + ```bash + { ping localhost > /dev/null 2>&1 & MYPROC3=$!; } \ + 2>/dev/null; echo "PID is: $MYPROC3" + ``` + +4. Використовуйте команду `kill`, щоб надіслати сигнал `SIGTERM` процесу ping. Впишіть: + + ```bash + kill -15 $MYPROC3 + ``` + + Замініть MYPROC3 фактичним PID процесу у вашій системі. + +5. Запустіть тривалий процес за допомогою команди `cat`. Впишіть: + + ```bash + { cat /dev/random > /dev/null 2>&1 & MYPROC4=$!; } \ + 2>/dev/null; echo PID is: $MYPROC4 + ``` + + Занотуйте PID для процесу у вашій системі. + +6. Використовуйте `kill`, щоб примусово завершити процес, надіславши сигнал SIGKILL. + + ```bash + kill -9 $MYPROC4 + ``` + + Підтвердьте, що процес завершено. + + !!! question "Питання" + + ``` + Поясніть мету надсилання сигналів процесам за допомогою команди `kill` і значення різних типів сигналів. + ``` + +## Завдання 3 + +### Моніторинг системних ресурсів за допомогою `top` + +#### Для моніторингу використання системних ресурсів за допомогою `top` + +1. Запустіть верхню команду, щоб переглянути системну статистику в реальному часі. + + ```bash + top + ``` + + !!! question "Питання" + + ``` + Яка інформація відображається у верхньому інтерфейсі? + ``` + +2. Спостерігайте за використанням процесора та пам’яті процесами у верхньому інтерфейсі. + + !!! question "Питання" + + ``` + Які процеси споживають найбільше процесора та пам’яті? + ``` + +3. Відсортуйте процеси вгорі за використанням ЦП (натисніть P) і використанням пам’яті (натисніть M). + + !!! question "Питання" + + ``` + Які процеси найбільше споживають процесор і пам’ять після сортування? + ``` + +#### Щоб контролювати використання процесора та пам’яті певними процесами, використовуючи `top` + +1. Створіть довільно великий файл розміром 512 МБ, який містить випадкові дані. + + ```bash + sudo fallocate -l 512M ~/large-file.data + ``` + +2. Почніть ресурсомісткий процес, наприклад значне стиснення файлу. + + ```bash + tar -czf archive.tar.gz /path/to/large/directory + ``` + +3. Відкрийте команду `top`, щоб контролювати використання ЦП і пам'яті. + + ```bash + top + ``` + +4. У верхньому інтерфейсі знайдіть і виберіть ресурсомісткий процес. + + !!! question "Питання" + + ``` + Який ідентифікатор процесу та використання ресурсів інтенсивного процесу? + ``` + +5. Змініть порядок сортування вгорі, щоб відобразити процеси, які використовують найбільше ЦП або пам’яті (натисніть P або M). + + !!! question "Питання" + + ``` + Який процес знаходиться у верхній частині списку після сортування? + ``` + +6. Вийдіть із верхньої частини, натиснувши `q`. + +#### Для моніторингу процесів і використання ресурсів за допомогою `top` + +1. Запустіть команду `top` в інтерактивному режимі. + + ```bash + top + ``` + + !!! question "Питання" + + ``` + Яка інформація відображається на верхньому екрані? + ``` + +2. Використовуйте одну клавішу, щоб відобразити підсумок використання окремого ядра ЦП. + + !!! question "Питання" + + ``` + Яка розбивка використання ядра ЦП для кожного ядра? + ``` + +3. Натисніть u, щоб відобразити процеси для певного користувача. Введіть своє ім'я користувача. + + !!! question "Питання" + + ``` + Які процеси зараз запущені для вашого користувача? + ``` + +4. Відсортуйте процеси за використанням пам’яті (натисніть M) і спостерігайте за процесами, які споживають найбільше пам’яті. + + !!! question "Питання" + + ``` + Які процеси використовують найбільше пам’яті? + ``` + +5. Вийдіть із верхньої частини, натиснувши q. + + !!! question "Питання" + + ``` + Поясніть значення моніторингу системних ресурсів за допомогою команди top і як це може допомогти у вирішенні проблем продуктивності. + ``` + +## Завдання 4 + +### Зміна пріоритету процесу за допомогою `nice` і `renice` + +#### Щоб налаштувати пріоритет процесу за допомогою `nice` + +1. Запустіть процес із інтенсивним використанням процесора, який виконується з пріоритетом за замовчуванням/звичайним. Впишіть: + + ```bash + bash -c 'while true; do echo "Default priority: The PID is $$"; done' + ``` + + Вихід + + ```bash + Default priority: The PID is 2185209 + Default priority: The PID is 2185209 + Default priority: The PID is 2185209 + ....... + ``` + + З виведених даних значення PID у нашій системі зразка становить «2185209». + + Значення PID у вашій системі буде іншим. + + Зверніть увагу на те, що значення PID постійно відображається на екрані вашої системи. + +2. В іншому терміналі, використовуючи значення PID, перевірте пріоритет процесу за замовчуванням за допомогою `ps`. Впишіть: + + ```bash + ps -p -o ni + ``` + + !!! question "Питання" + + ``` + Який пріоритет процесу за замовчуванням (значення `nice`) запущеного процесу? + ``` + +3. Використовуючи надрукований PID процесу, завершіть процес за допомогою команди `kill`. + +4. Використовуючи команду `nice`, перезапустіть подібний процес із нижчим значенням якості (тобто більш сприятливим для процесу АБО вищим пріоритетом). Використовуйте `nice` значення «-20». Впишіть: + + ```bash + nice -n -20 bash -c 'while true; do echo "High priority: The PID is $$"; done' + ``` + +5. Використовуючи ваше значення PID, перевірте пріоритет процесу за допомогою `ps.` Впишіть: + + ```bash + ps -p -o ni + ``` + + !!! question "Питання" + + ``` + Чи успішно встановлено пріоритет процесу? + ``` + +6. Одночасно натисніть клавіші ++ctrl+c++ на клавіатурі, щоб «закрити» новий процес з високим пріоритетом. + +7. Знову використовуючи команду `nice`, перезапустіть інший процес, але цього разу з вищим значенням акуратності (тобто найменш сприятливим для процесу АБО нижчим пріоритетом). Використовуйте `nice` значення `19`, впишіть: + + ```bash + nice -n 19 bash -c 'while true; do echo "Low priority: The PID is $$"; done' + ``` + + Вихід + + ```bash + Low priority: The PID is 2180254 + Low priority: The PID is 2180254 + ...... + ``` + +8. Перевірте настроюваний пріоритет процесу за допомогою `ps`. Впишіть: + + ```bash + ps -p -o ni + ``` + +9. Одночасно натисніть клавіші ++ctrl+c++ на клавіатурі, щоб припинити новий процес із низьким пріоритетом. + +10. Поекспериментуйте зі зміною пріоритету різних процесів на вищі та нижчі значення та спостерігайте за впливом на використання ресурсів процесу. + +#### Щоб налаштувати пріоритет запущеного процесу за допомогою `renice` + +1. Розпочніть інтенсивний процес, наприклад тривалий математичний розрахунок за допомогою утиліти md5sum. Впишіть: + + ```bash + find / -path '/proc/*' -prune -o -type f -exec md5sum {} \; > /dev/null + ``` + +2. Використовуйте команду `ps`, щоб визначити PID попереднього процесу `find/md5sum`. Впишіть: + + ```bash + ps -C find -o pid= + ``` + + Вихід + + ```bash + 2577072 + ``` + + Вихідні дані показують, що значення PID у нашій системі зразка становить «2577072». + + Значення PID у вашій системі буде іншим. + + Занотуйте значення PID у вашій системі. + +3. Використовуйте команду `renice`, щоб змінити пріоритет запущеного процесу `find/md5sum` на нижче значення точності (наприклад, -10, вищий пріоритет). Впишіть: + + ```bash + renice -n -10 -p $(ps -C find -o pid=) + ``` + + Вихід + + ```bash + (process ID) old priority 0, new priority -10 + ``` + + Замініть "" (вище) фактичним PID запущеного процесу. + +4. Контролюйте використання ресурсів для процесу `find/md5sum` за допомогою `top` (або `htop`). Впишіть: + + ```bash + top -cp $(ps -C find -o pid=) + ``` + + !!! question "Питання" + + ``` + Чи отримує процес тепер більшу частку ресурсів ЦП? + ``` + +5. Змініть пріоритет процесу `find/md5sum` на вище значення `nice` (наприклад, 10, нижчий пріоритет). Впишіть: + + ```bash + renice -n 10 -p + ``` + + Вихід + + ```bash + 2338530 (process ID) old priority -10, new priority 10 + ``` + + Замініть "" (вище) фактичним PID запущеного процесу. + + !!! question "Питання" + + ``` + Поясніть, як команда `nice` використовується для налаштування пріоритетів процесів і як вона впливає на розподіл системних ресурсів. + ``` + +6. Одночасно натисніть клавіші ++ctrl+c++ на клавіатурі, щоб зупинити процес `find/md5sum`. Ви також можете використати команду `kill`, щоб виконати те ж саме. + +## Завдання 5 + +### Ідентифікація процесів за допомогою `pgrep` + +#### Ідентифікація процесів за допомогою `pgrep` + +1. Використовуйте команду `pgrep`, щоб визначити всі процеси, пов’язані з певною програмою чи службою, наприклад `sshd`. + + ```bash + pgrep sshd + ``` + + !!! question "Питання" + + ``` + Які ідентифікатори процесів `sshd`? + ``` + +2. Перевірте існування ідентифікованих процесів за допомогою команди `ps`. + + ```bash + ps -p + ``` + + Замініть "\" ідентифікаторами процесу, отриманими на кроці 1. + +3. Використовуйте команду `pgrep`, щоб ідентифікувати процеси з певною назвою, наприклад, "cron". + + ```bash + pgrep cron + ``` + + !!! question "Питання" + + ``` + Чи існують процеси з назвою "cron"? + ``` + + !!! question "Питання" + + ``` + Поясніть різницю між використанням `ps` і `pgrep` для ідентифікації та керування процесами. + ``` + +## Завдання 6 + +### Основні та фонові процеси + +Ця вправа охоплює керування процесами за допомогою `fg` і `bg` + +#### Для керування фоновими та активними процесами за допомогою `bg` і `fg` + +1. Почніть довготривалий процес на передньому плані. Наприклад, ви можете використати просту команду на зразок `sleep`. Впишіть: + + ```bash + sleep 300 + ``` + +2. Призупиніть процес переднього плану, натиснувши ++ctrl+z++ на клавіатурі. Це повинно повернути вас до командної оболонки. + +3. Виведіть список призупинених завдань за допомогою команди `jobs`. Впишіть: + + ```bash + jobs + ``` + + !!! question "Питання" + + ``` + Який статус призупиненої роботи? + ``` + +4. Поверніть призупинене завдання на передній план за допомогою команди `fg`. + + ```bash + fg + ``` + + !!! question "Питання" + + ``` + Що відбувається, коли ви повертаєте роботу на перший план? + ``` + +5. Знову призупиніть роботу за допомогою ++ctrl+z++, а потім перемістіть її у фоновий режим за допомогою команди `bg`. + + ```bash + bg + ``` + + !!! question "Питання" + + ``` + Який зараз статус роботи? + ``` + + !!! question "Питання" + + ``` + Поясніть призначення активних і фонових процесів і як ними керують за допомогою команд `fg` і `bg`. + ``` + +#### Щоб розпочати процес у фоновому режимі + +1. Символ `&` може запускати процес, який негайно виконується у фоновому режимі. Наприклад, щоб запустити команду `sleep` у фоновому режимі, введіть: + + ```bash + sleep 300 & + ``` + + Призупиніть запущений процес за допомогою ++ctrl+z++. + +2. Список статусів усіх активних завдань. Впишіть: + + ```bash + jobs -l + ``` + + !!! question "Питання" + + ``` + Який статус процесу `sleep 300`? + ``` + +3. Поверніть фоновий процес на передній план за допомогою команди `fg`. + + ```bash + fg + ``` + +4. Передчасно завершити процес «сплячого режиму», надіславши йому сигнал SIGSTOP, натиснувши ++ctrl+c++. + +#### Для керування інтерактивними процесами за допомогою `bg` і `fg` + +1. Запустіть інтерактивний процес, наприклад текстовий редактор `vi`, щоб створити та відредагувати зразок текстового файлу під назвою "foobar.txt". Впишіть: + + ```bash + vi foobar1.txt + ``` + + Призупиніть запущений процес за допомогою `Ctrl` + `Z`. + + Використовуйте команду `bg`, щоб перевести призупинений процес у фоновий режим. + + ```bash + bg + ``` + + !!! question "Питання" + + ``` + Процес зараз працює у фоновому режимі? + ``` + +2. Введіть «Hello» у `foobar1.txt` у вашому редакторі `vi`. + +3. Призупиніть запущений сеанс редагування тексту `vi`, натиснувши ++ctrl+z++. + +4. Запустіть ще один окремий сеанс редактора `vi`, щоб створити інший текстовий файл під назвою "foobar2.txt". Впишіть: + + ```bash + vi foobar2.txt + ``` + +5. Введіть зразок тексту «Hi inside foobar2.txt» під час 2-го сеансу vi. + +6. Призупиніть 2-й сеанс vi за допомогою ++ctrl+z++. + +7. Покажіть статус усіх «задач» на поточному терміналі. Впишіть: + + ```bash + jobs -l + ``` + + Вихід + + ```bash + [1]- 2977364 Stopped vi foobar1.txt + [2]+ 2977612 Stopped vi foobar2.txt + ``` + + Ви повинні мати принаймні дві роботи, перелічені у вашому виході. Число в 1-му стовпчику вихідних даних показує номери робіт - [1] і [2]. + +8. Відновіть ==та виведіть на передній план== 1-й сеанс `vi`, ввівши: + + ```bash + fg %1 + ``` + +9. Знову призупиніть перший сеанс `vi` за допомогою ++ctrl+z++. + +10. Відновіть ==та виведіть на передній план== 2-й сеанс `vi`, ввівши: + + ```bash + fg %2 + ``` + +11. Припиніть обидва сеанси редагування `vi`, надіславши сигнал KILL до обох завдань. Слідкуйте за командою `kill` з командою jobs. Впишіть: + + ```bash + kill -SIGKILL %1 %2 && jobs + ``` + + Вихід + + ```bash + [1]- Killed vi foobar1.txt + [2]+ Killed vi foobar2.txt + ``` + +## Завдання 7 + +### Ідентифікація процесу за допомогою `pidof` + +#### Щоб знайти ідентифікатор процесу запущеної команди за допомогою `pidof` + +1. Давайте виберемо зразок/поширений запущений процес, ідентифікатор процесу якого ми хочемо знайти. Ми будемо використовувати `systemd` як наш приклад. + +2. Використовуйте команду `pidof`, щоб знайти ідентифікатор процесу `systemd`. Впишіть: + + ```bash + pidof systemd + ``` + + Зверніть увагу на ідентифікатор(и) процесу `systemd`. + +3. Перевірте існування ідентифікованого процесу за допомогою команди `ps`. + + ```bash + ps -p + ``` + + Замініть фактичним ідентифікатором процесу, отриманим на кроці 2. + + !!! question "Питання" + + ``` + Поясніть різницю між `pgrep` і `pidof` для пошуку ідентифікатора процесу запущеної команди. + ``` + +## Завдання 8 + +### Вивчення файлової системи /sys + +#### Щоб дослідити файлову систему /sys + +1. Виведіть вміст каталогу /sys. Впишіть: + + ```bash + ls /sys + ``` + + !!! question "Питання" + + ``` + Яка інформація зберігається в каталозі /sys? + ``` + +2. Перейдіть до певного запису /sys, наприклад, інформації про ЦП. + + ```bash + cd /sys/devices/system/cpu + ``` + +3. Виведіть список вмісту поточного каталогу, щоб переглянути інформацію, пов’язану з ЦП. + + ```bash + ls + ``` + + !!! question "Питання" + + ``` + Яка інформація про ЦП доступна у файловій системі /sys? + ``` + + !!! question "Питання" + + ``` + Поясніть призначення файлової системи /sys в Linux і її роль в управлінні обладнанням і конфігурацією системи. + ``` + +## Завдання 9 + +### Знищення процесів за назвою за допомогою `pkill` + +#### Щоб завершити процеси за назвою за допомогою `pkill` + +1. Ідентифікуйте процеси з конкретною назвою, наприклад "firefox". + + ```bash + pkill firefox + ``` + + !!! question "Питання" + + ``` + Чи всі процеси з назвою "firefox" були припинені? + ``` + +2. Перевірте стан процесів, які ви зупинили за допомогою `ps`. + + ```bash + ps aux | grep firefox + ``` + + !!! question "Питання" + + ``` + Чи залишилися процеси з назвою "firefox"? + ``` + + Використовуйте `pkill`, щоб примусово припинити всі процеси з певним іменем. + + ```bash + pkill -9 firefox + ``` + + Переконайтеся, що всі процеси з назвою «firefox» завершено. + + !!! question "Питання" + + ``` + Яка різниця між використанням `kill` і `pkill` для завершення процесів за назвою? + ``` + +## Вправа 10 + +Ця вправа охоплює використання потужної команди `exec`. + +### Керування процесом за допомогою `exec` + +#### Щоб замінити поточну оболонку іншою командою за допомогою `exec` + +1. Розпочніть новий сеанс оболонки. Впишіть: + + ```bash + bash + ``` + +2. Виконайте команду, яка не завершується в новій оболонці, наприклад простий цикл while. + + ```bash + while true; do echo "Running..."; done + ``` + +3. У поточній оболонці замініть запущену команду на іншу за допомогою `exec`. + + ```bash + exec echo "This replaces the previous command." + ``` + + Зауважте, що попередня команда завершується, та виконується нова команда. + +4. Переконайтеся, що стара команда більше не виконується за допомогою `ps`. + + ```bash + ps aux | grep "while true" + ``` + + !!! question "Питання" + + ``` + Попередня команда все ще виконується? + ``` + + !!! question "Питання" + + ``` + Поясніть, як команда `exec` може замінити поточний процес оболонки на іншу команду. + ``` + +## Вправа 11 + +### Керування процесом за допомогою `killall` + +Як і `kill`, `killall` є командою для завершення процесів за назвою. Можна спостерігати певну подібність між використанням `killall` , `kill` і `pkill` у завершенні процесу. + +#### Щоб завершити процеси за назвою за допомогою `killall` + +1. Ідентифікуйте процеси за допомогою конкретної назви, наприклад «chrome». + + ```bash + killall chrome + ``` + + !!! question "Питання" + + ``` + Чи всі процеси з назвою "chrome" були припинені? + ``` + +2. Перевірте стан процесів, які ви зупинили за допомогою `ps`. + + ```bash + ps aux | grep chrome + ``` + + !!! question "Питання" + + ``` + Чи залишилися процеси з назвою "chrome"? + ``` + +3. Використовуйте `killall`, щоб примусово припинити всі процеси з певною назвою. + + ```bash + killall -9 chrome + ``` + + Переконайтеся, що всі процеси з іменем "chrome" завершено. + + !!! question "Питання" + + ``` + Чим `killall` відрізняється від `pkill` і `kill` при завершенні процесів за назвою? + ``` + +## Вправа 12 + +### Керування `cgroups` + +#### Для керування процесами за допомогою `cgroups` + +1. Перелічіть існуючі `cgroups` у вашій системі. + + ```bash + cat /proc/cgroups + ``` + + !!! question "Питання" + + ``` + Які контролери `cgroup` доступні у вашій системі? + ``` + +2. Створіть нову cgroup за допомогою контролера ЦП. Назвіть її «mygroup». + + ```bash + sudo mkdir -p /sys/fs/cgroup/cpu/mygroup + ``` + +3. Перемістіть певний процес (наприклад, запущену команду сну) до «mygroup» `cgroup`. + + ```bash + echo | sudo tee /sys/fs/cgroup/cpu/mygroup/cgroup.procs + ``` + + Замініть фактичним PID процесу. + +4. Перевірте, чи процес перенесено до "mygroup" `cgroup`. + + ```bash + cat /sys/fs/cgroup/cpu/mygroup/cgroup.procs + ``` + + !!! question "Питання" + + ``` + Чи вказаний процес у "mygroup" cgroup? + ``` + + !!! question "Питання" + + ``` + Поясніть концепцію «cgroups» у Linux і те, як вони можуть керувати та контролювати розподіл ресурсів для процесів. + ``` + +## Вправа 13 + +### Керування процесами за допомогою `renice` + +#### Щоб налаштувати пріоритет запущеного процесу за допомогою `renice` + +1. Визначте запущений процес із певним PID та пріоритетом за допомогою `ps`. + + ```bash + ps -p -o ni + ``` + + !!! question "Питання" + + ``` + Який поточний пріоритет (значення nice) процесу? + ``` + +2. Використовуйте команду `renice`, щоб змінити пріоритет запущеного процесу (значення nice). + + ```bash + renice -p + ``` + + Замініть на нове значення пріоритету, яке ви хочете встановити, а на фактичний PID процесу. + +3. Переконайтеся, що пріоритет процесу було змінено за допомогою `ps`. + + ```bash + ps -p -o ni + ``` + + !!! question "Питання" + + ``` + Зараз пріоритет інший? + ``` + +4. Поекспериментуйте зі зміною пріоритету на вищі та нижчі значення та спостерігайте за впливом на використання ресурсів процесу. + + !!! question "Питання" + + ``` + Що відбувається зі споживанням ресурсів процесом із різними значеннями nice? + ``` + + !!! question "Питання" + + ``` + Поясніть, як команда renice використовується для налаштування пріоритету запущених процесів і її вплив на використання ресурсів процесу. + ``` From 10fee66d0cb43658e14b5a72173edbc281e46830 Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Thu, 22 Feb 2024 10:20:15 -0700 Subject: [PATCH 3/5] New translations lab3-bootup_and_startup.md (Ukrainian) --- .../lab3-bootup_and_startup.uk.md | 75 +++++++++---------- 1 file changed, 35 insertions(+), 40 deletions(-) diff --git a/docs/labs/systems_administration_II/lab3-bootup_and_startup.uk.md b/docs/labs/systems_administration_II/lab3-bootup_and_startup.uk.md index 8571536605..a895fd9a00 100644 --- a/docs/labs/systems_administration_II/lab3-bootup_and_startup.uk.md +++ b/docs/labs/systems_administration_II/lab3-bootup_and_startup.uk.md @@ -1,7 +1,9 @@ - - - author: Wale Soyinka contributors: Steven Spencer, Ganna Zhyrnova tested on: Всі версії tags: - лабораторні вправи - - керування завантаженням, призначенням і службами + - керування завантаженням + - цільове управління + - управління обслуговуванням - systemd - systemctl - - - @@ -9,24 +11,20 @@ author: Wale Soyinka contributors: Steven Spencer, Ganna Zhyrnova tested on: В # Лабораторна робота 3: Процеси завантаження та запуску - ## Завдання - -Виконавши цю лабораторну роботу, ви зможете +Після виконання цієї лабораторної роботи ви зможете: - вручну контролювати деякі процеси та служби запуску - автоматично керувати послугами - Приблизний час виконання цієї лабораторної роботи: 50 хвилин - ## Огляд процесу завантаження Вправи в цій лабораторній роботі розпочнуться від процесу завантаження до входу користувача. Ці кроки перевірять і намагатимуться налаштувати частини процесів завантаження. Етапами високого рівня в процесі завантаження є: -*Підсумок кроків* +### Підсумок кроків 1. Апаратне забезпечення завантажує, читає та виконує завантажувальний сектор. 2. завантажувач виконується (GRUB у більшості дистрибутивів Linux) @@ -34,46 +32,45 @@ author: Wale Soyinka contributors: Steven Spencer, Ganna Zhyrnova tested on: В 4. ядро ініціалізує обладнання. 5. ядро монтує кореневу файлову систему. 6. ядро виконує /usr/lib/systemd/systemd як PID 1. -7. systemd запускає модулі, необхідні та налаштовані для запуску цільового завантаження за замовчуванням. -8. програми getty створюються на кожному визначеному терміналі. -9. getty запитує вхід. -10. getty виконує /bin/login для автентичного користувача. +7. `systemd` запускає модулі, необхідні та налаштовані для запуску цільового завантаження за замовчуванням. +8. програми `getty` створюються на кожному визначеному терміналі. +9. `getty` запитує вхід. +10. `getty` виконує /bin/login для автентичного користувача. 11. вхід запускає оболонку. - ### `systemd` -systemd — це системний менеджер і менеджер служб для операційних систем Linux. +`systemd` — це менеджер системи та послуг для операційних систем Linux. -### `systemd` units +### Юніти `systemd` -`systemd` забезпечує систему залежності між різними сутностями, які називаються «одиницями» ("units"). Юніти інкапсулюють різні об’єкти, необхідні для завантаження та обслуговування системи. Більшість одиниць налаштовуються у так званих файлах конфігурації одиниць — простих текстових файлах у стилі ini. +`systemd` забезпечує систему залежності між різними сутностями, які називаються "одиницями". Модулі інкапсулюють різні об’єкти, необхідні для завантаження та обслуговування системи. Більшість одиниць налаштовуються у так званих файлах конфігурації одиниць — простих текстових файлах у стилі ini. ### Типи юнітів `systemd` -`systemd` має наступні 11 типів визначених юнітів: +У `systemd` визначено наступні 11 типів одиниць: -*Service units* запускає та контролює демони та процеси, з яких вони складаються. +*Service units* запускають і контролюють демони та процеси, з яких вони складаються. -*Socket units* інкапсулює локальні IPC або мережеві сокети в системі, що корисно для активації на основі сокетів. +*Socket units* інкапсулюють локальні IPC або мережеві сокети в системі, корисні для активації на основі сокетів. *Target units* використовуються для групування інших одиниць. Вони забезпечують добре відомі точки синхронізації під час завантаження -*Device units* розкриває пристрої ядра в systemd і може використовуватися для реалізації активації на основі пристрою. +*Device units* розкриває пристрої ядра в `systemd` і може використовуватися для реалізації активації на основі пристрою. -*Mount units* контролює точки монтування у файловій системі +*Device units* керують точками монтування у файловій системі -*Automount units* забезпечують можливості автоматичного монтування для монтування файлових систем за вимогою та розпаралеленого завантаження. +*Automount units* надають можливості автоматичного монтування для монтування файлових систем на вимогу, а також розпаралеленого завантаження. -*Timer units* корисні для запуску активації інших одиниць на основі таймерів. +*Timer units* корисні для ініціювання активації інших одиниць на основі таймерів. -*Swap units* дуже схожі на модулі монтування та інкапсулюють розділи підкачки пам’яті або файли операційної системи. +*Swap units* дуже схожі на модулі монтування та інкапсулюють розділи або файли підкачки пам’яті операційної системи. -*Path units* може використовуватися для активації інших служб, коли об’єкти файлової системи змінюються або модифікуються. +*Path units* можуть активувати інші служби, коли об’єкти файлової системи змінюються або модифікуються. -*Slice units* може використовуватися для групування одиниць, які керують системними процесами (таких як одиниці обслуговування та області дії), в ієрархічному дереві з метою управління ресурсами. +*Slice units* можна використовувати для групування одиниць, які керують системними процесами (таких як одиниці обслуговування та області) в ієрархічному дереві з метою керування ресурсами. -*Scope units* схожі на сервісні одиниці, але керують сторонніми процесами замість того, щоб запускати їх. +*Scope units* подібні до службових одиниць, але керують сторонніми процесами, а не запускають їх. ## Завдання 1 @@ -83,7 +80,7 @@ systemd — це системний менеджер і менеджер слу Незалежно від назви чи реалізації, init (або його еквівалент) часто називають *матір'ю всіх процесів*. -Сторінка довідки для «init» називає його батьківським для всіх процесів. Згідно з угодою, перша програма або процес ядра, який виконується, завжди має ідентифікатор процесу 1. Після запуску першого процесу він запускає інші служби, демони, процеси, програми тощо. +Сторінка довідки для «init» посилається на нього як на батьківський для всіх процесів. Згідно з угодою, перша програма або процес ядра, який виконується, завжди має ідентифікатор процесу 1. Після запуску першого процесу він запускає інші служби, демони, процеси, програми тощо. #### Для вивчення першого системного процесу @@ -141,7 +138,7 @@ systemd — це системний менеджер і менеджер слу ### `systemd` Targets (RUNLEVELS) -`systemd` визначає та покладається на багато різних цілей для керування системою. У цій вправі ми зосередимося лише на 5 основних цілях. 5 основних цілей, розглянутих у цьому розділі, перераховані тут: +`systemd` defines and relies on many different targets for managing the system. У цій вправі ми зосередимося лише на 5 основних цілях. 5 основних цілей, розглянутих у цьому розділі, перераховані тут: 1. poweroff.target 2. rescue.target @@ -149,7 +146,7 @@ systemd — це системний менеджер і менеджер слу 4. graphical.target - Завантажує систему з мережею, підтримкою кількох користувачів і менеджером відображення. 5. reboot.target -!!! tip "Порада" +!!! Tip "Підказка" Цільові одиниці замінюють рівні виконання SysV у класичній системі ініціалізації SysV. @@ -244,7 +241,6 @@ systemd — це системний менеджер і менеджер слу #### Щоб змінити ціль завантаження за замовчуванням - 1. Встановити/змінити ціль за замовчуванням, з якої система завантажується. Використовуйте команду `systemctl set-default`, щоб змінити ціль за замовчуванням на `graphical.target`. Впишіть: ```bash @@ -287,9 +283,9 @@ systemd — це системний менеджер і менеджер слу ``` -7. Встановити/змінити ціль завантаження системи за замовчуванням на multi-user.target. +7. Встановити/змінити ціль завантаження системи за замовчуванням на multi-user.target. -8. Запустіть швидку [і додаткову] ручну перевірку, щоб побачити, на яку ціль вказує символічне посилання default.target, виконавши: +8. Запустіть швидку [і додаткову] ручну перевірку, щоб побачити, на яку ціль вказує символічне посилання default.target, виконавши: ```bash [root@localhost ~]# ls -l /etc/systemd/system/default.target @@ -309,7 +305,7 @@ systemd — це системний менеджер і менеджер слу Це покаже повний список активних і завантажених, але неактивних одиниць. -2. Перегляньте список активних модулів systemd, які мають тип служби. +2. Перегляньте список активних одиниць `systemd` із типом служби. ```bash [root@localhost ~]# systemctl list-units --state=active --type service @@ -379,7 +375,7 @@ systemd — це системний менеджер і менеджер слу 3. Використовуючи `systemctl`, перегляньте статус `crond.service`, щоб побачити ефект ваших змін. -4. Скористайтеся `pgrep` знову, щоб перевірити, чи процес crond все ще відображається у списку процесів. +4. Скористайтеся `pgrep` знову, щоб перевірити, чи процес `crond` все ще відображається у списку процесів. ### Щоб запустити сервіси @@ -436,7 +432,7 @@ systemd — це системний менеджер і менеджер слу [root@localhost ~]# systemctl -n 0 status crond.service ``` - Занотуйте PID для crond у вихідних даних. + У вихідних даних зверніть увагу на PID для `crond`. 2. Запустіть `systemctl restart`, щоб перезапустити `crond.service`. Впишіть: @@ -459,7 +455,6 @@ systemd — це системний менеджер і менеджер слу Чому, на вашу думку, PID відрізняються кожного разу, коли ви перезапускаєте службу? - !!! tip "Порада" Функціональність старої доброї класичної команди служби перенесено для бездоганної роботи в керованих системах systemd. Ви можете використовувати такі команди служби, як наведені нижче, щоб зупинити, запустити, перезапустити та переглянути статус служби `smartd`. @@ -499,11 +494,11 @@ systemd — це системний менеджер і менеджер слу На сервері, яким потрібно керувати віддалено, чому б вам НЕ вимкнути автоматичний запуск під час завантаження системи такої служби, як `sshd.service`? -### Щоб забезпечити відключення (тобто маскування) служби +### Щоб забезпечити відключення (маскування) сервісу -Незважаючи на те, що команду `systemctl disable` можна використати для вимкнення служб, як ви бачили в попередніх вправах, інші одиниці systemd (процеси, служби, демони тощо) можуть повторно ввімкнути вимкнену службу – якщо потрібно крадькома. Це може статися, коли служба залежить від іншої [вимкненої] служби. +Незважаючи на те, що команду `systemctl disable` можна використовувати для вимкнення служб, як ви бачили в попередніх вправах, інші елементи `systemd` (процеси, служби, демони тощо) можуть непомітно - увімкнути відключену службу, якщо потрібно. Це може статися, коли служба залежить від іншої [вимкненої] служби. -Щоб забезпечити відключення блоку обслуговування systemd і запобігти випадковій повторній активації, ви повинні замаскувати службу. +Ви повинні замаскувати службу, щоб гарантувати вимкнення служби `systemd` і запобігти випадковій повторній активації. 1. Використовуйте `systemctl`, щоб замаскувати `crond.service` і запобігти будь-якій небажаній повторній активації, введіть: @@ -529,7 +524,7 @@ systemd — це системний менеджер і менеджер слу Removed /etc/systemd/system/crond.service. ``` -### Щоб увімкнути послугу +### Щоб увімкнути сервіс 1. Використовуйте `systemctl`, щоб перевірити стан блоку `crond.service`. Впишіть: From 93f0a5fd1abacb2748eb98740bc2736a7c421c01 Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Thu, 22 Feb 2024 23:12:41 -0700 Subject: [PATCH 4/5] New translations 03-working-with-files.md (French) --- docs/books/learning_ansible/03-working-with-files.fr.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/books/learning_ansible/03-working-with-files.fr.md b/docs/books/learning_ansible/03-working-with-files.fr.md index 9fcc84e0ed..854d783c27 100644 --- a/docs/books/learning_ansible/03-working-with-files.fr.md +++ b/docs/books/learning_ansible/03-working-with-files.fr.md @@ -1,5 +1,5 @@ --- -title: Gestion de fichiers +title: Gestion de Fichiers --- # Ansible - Gestion de Fichiers From e90fa44ec41edd47f68039a62e2ea6acca4939fe Mon Sep 17 00:00:00 2001 From: Rocky Linux Automation <75949597+rockylinux-auto@users.noreply.github.com> Date: Fri, 23 Feb 2024 03:55:23 -0700 Subject: [PATCH 5/5] New translations template_chadrc.md (Italian) --- docs/books/nvchad/template_chadrc.it.md | 215 ++++++++++++++---------- 1 file changed, 130 insertions(+), 85 deletions(-) diff --git a/docs/books/nvchad/template_chadrc.it.md b/docs/books/nvchad/template_chadrc.it.md index 3bcf7295fb..0eb923971f 100644 --- a/docs/books/nvchad/template_chadrc.it.md +++ b/docs/books/nvchad/template_chadrc.it.md @@ -1,5 +1,5 @@ --- -title: Chadrc Template +title: Esempio di configurazione author: Franco Colussi contributors: Steven Spencer, Ganna Zhyrnova tested_with: 8.7, 9.1 @@ -9,70 +9,113 @@ tags: - plugins --- -# Template Chadrc +# Esempio di configurazione -Nella versione 2.0 di NvChad, gli sviluppatori hanno introdotto la possibilità di creare, durante la fase di installazione, una cartella `custom` in cui è possibile effettuare le proprie personalizzazioni. L'introduzione di questa funzione consente di avere un editor con le caratteristiche di base di un IDE fin dall'inizio. +## :material-message-outline: Introduzione -L'aspetto più importante della creazione della cartella _custom_ è la scrittura dei file che contengono le configurazioni per l'impostazione di alcune funzioni avanzate, come i server linguistici, i linters e i formattatori. Questi file ci permettono di integrare, con poche modifiche, le funzionalità di cui abbiamo bisogno. +La versione 2.0 di NvChad introduce la possibilità di creare una cartella ==custom== durante la fase di installazione. La sua creazione è il punto di partenza per personalizzare l'editor modificando i suoi file. Installato al bootstrap permette, al primo avvio, di avere un editor con le caratteristiche di base di un IDE, ma può essere incluso anche dopo l'installazione di NvChad. -La cartella contiene anche i file per l'evidenziazione del codice e la mappatura dei comandi personalizzati. +L'aspetto più importante della sua installazione è la creazione delle strutture di base per l'inclusione di alcune funzionalità avanzate come i server linguistici, i linters e i formattatori. Queste strutture consentono di integrare le funzionalità necessarie con poche modifiche. -La cartella viene creata a partire da un esempio presente sul repository GitHub di NvChad: ([example-config](https://github.com/NvChad/example_config)). Per crearlo durante l'installazione è sufficiente rispondere "y" alla domanda che ci viene posta all'inizio dell'installazione: +La cartella viene creata da un modello della repository di NvChad di GitHub: ([example-config](https://github.com/NvChad/example_config)). -> Do you want to install chadrc template? (y/N) : +## :material-monitor-arrow-down-variant: Installazione -Una risposta affermativa avvierà un processo che clonerà il contenuto della cartella _example-config_ da GitHub in **~/.config/nvim/lua/custom/** e, una volta terminato, rimuoverà la cartella **.git** da essa. Questo ci permette di mettere la configurazione sotto il nostro controllo di versione. +=== "Installazione all'avvio" -Al termine avremo la seguente struttura: + Per crearla durante l'installazione, rispondere "y" alla domanda che viene posta all'inizio dell'installazione: + + > Do you want to install example custom config? (y/N): + + Una risposta affermativa avvierà un processo che clonerà il contenuto della cartella *example-config* da GitHub in **~/.config/nvim/lua/custom/** e, una volta terminato, rimuoverà la cartella **.git** da essa. + Rimuovendola, la cartella può essere posta sotto un controllo di versione personale. + + La cartella è pronta e verrà utilizzata al successivo avvio di NvChad per inserire le configurazioni personalizzate nell'editor. + +=== "Installazione dal repository" + + L'installazione della configurazione fornita da ==example-config== può essere fatta anche dopo l'installazione di NvChad, nel qual caso il repository è ugualmente utilizzato ma viene recuperato con un'operazione manuale. + + L'installazione standard senza ==example-config== crea comunque una cartella *custom* in cui salvare il file ==chadrc.lua== per le personalizzazioni dell'utente e deve essere cancellata o salvata in un ==backup== per consentire l'esecuzione del clone. Salvare quindi la configurazione esistente con: + + ```bash + mv ~/.config/nvim/lua/custom/ ~/.config/nvim/lua/custom.bak + ``` + + + E clonare il repository GitHub nella propria configurazione: + + ```bash + git clone https://github.com/NvChad/example_config.git ~/.config/nvim/lua/custom + ``` + + + Il comando copia l'intero contenuto dei repository trovati online nella cartella `~/.config/nvim/lua/custom/`, copiando la cartella nascosta `.git`, che è necessario cancellare manualmente per consentire il passaggio a un controllo di versione personale. Eseguire il comando per la sua rimozione: + + ```bash + rm rf ~/.config/nvim/lua/custom/.git/ + ``` + + + La cartella è pronta e verrà utilizzata al successivo avvio di NvChad per inserire le configurazioni personalizzate nell'editor. + +## :material-file-outline: Struttura + +La struttura della cartella ==custom== consiste in diversi file di configurazione e in una cartella `configs` contenente i file delle opzioni dei plugin impostati in *plugins.lua*. + +L'uso di file separati per le impostazioni dei plugin consente di avere un file *plugins.lua* molto più snello e di lavorare solo sul codice del plugin mentre lo si personalizza. Questo è anche il metodo consigliato per sviluppare i plugin che verranno aggiunti in seguito. + +La struttrua creata è la seguente: ```text custom/ ├── chadrc.lua -├── init.lua -├── plugins.lua -├── mappings.lua -├── highlights.lua ├── configs +│   ├── conform.lua │   ├── lspconfig.lua -│   ├── null-ls.lua │   └── overrides.lua +├── highlights.lua +├── init.lua +├── mappings.lua +├── plugins.lua └── README.md + ``` -Come si può vedere, la cartella contiene alcuni file con lo stesso nome che si trovano anche nella struttura di base di NvChad. Questi file consentono di integrare la configurazione e di sovrascrivere le impostazioni di base dell'editor. +Come si può notare, la cartella contiene alcuni file con lo stesso nome, che si incontrano anche nella struttura di base di NvChad. Questi, ti consentono di integrare la configurazione e sovrascrivere le impostazioni di base dell'editor. -## Analisi della struttura +## :octicons-file-code-16: Analisi della struttura -Passiamo ora ad esaminarne il contenuto: +Passiamo ora ad esaminarne i contenuti: -### File principali +### :material-file-multiple-outline: File principali -#### chadrc.lua +#### :material-language-lua: chadrc.lua ```lua ---@type ChadrcConfig local M = {} -- Path to overriding theme and highlights files -local highlights = require("custom.highlights") +local highlights = require "custom.highlights" M.ui = { - theme = "onedark", - theme_toggle = { "onedark", "one_light" }, + theme = "onedark", + theme_toggle = { "onedark", "one_light" }, - hl_override = highlights.override, - hl_add = highlights.add, + hl_override = highlights.override, + hl_add = highlights.add, } M.plugins = "custom.plugins" -- check core.mappings for table structure -M.mappings = require("custom.mappings") +M.mappings = require "custom.mappings" return M ``` -Il file viene inserito nella configurazione di Neovim dalla funzione `load_config` impostata nel file **~/.config/nvim/lua/core/utils.lua**, una funzione che si occupa di caricare le impostazioni predefinite e, se presenti, anche quelle del nostro _chadrc.lua:_ +Il file viene inserito nella configurazione di Neovim dalla funzione `load_config`, impostata nel file **~/.config/nvim/lua/core/utils.lua**. La funzione si occupa di caricare le impostazioni predefinite e, se presenti, anche quelle del file *chadrc.lua* nella cartella *custom*: ```lua M.load_config = function() @@ -81,29 +124,29 @@ M.load_config = function() ... ``` -La sua funzione è quella di inserire i file della nostra cartella _custom_ nella configurazione di NvChad, per poi utilizzarli insieme ai file predefiniti per avviare l'istanza di _Neovim_. I file vengono inseriti nell'albero di configurazione attraverso funzioni `require` come: +La sua funzione è quella di inserire i file della cartella *custom* nella configurazione di NvChad, per poi utilizzarli insieme ai file predefiniti per avviare l'istanza di *Neovim*. I file vengono inseriti nell'albero della configurazione attraverso le funzioni `require`, come ad esempio: ```lua require("custom.mappings") ``` -La stringa **custom.mappings** indica il percorso relativo al file senza estensione rispetto al percorso predefinito, che in questo caso è **~/.config/nvim/lua/**. Il punto sostituisce la barra, poiché questa è la convenzione nel codice scritto in Lua (nel _linguaggio lua_ non esiste il concetto di _directory_). +La stringa **custom.mappings** indica il percorso relativo al file senza estensione rispetto al percorso predefinito, che in questo caso è **~/.config/nvim/lua/**. Il punto sostituisce la slash, in quanto questa è la convenzione nel codice scritto in Lua (nel linguaggio *lua* non esiste il concetto di *directory*). -In sintesi, possiamo dire che la chiamata descritta sopra inserisce le configurazioni scritte nel file **custom/mappings.lua** nella mappatura di NvChad, inserendo così le scorciatoie per richiamare i comandi dei nostri plugin. +In sintesi, possiamo dire che la chiamata descritta sopra inserisce le configurazioni scritte nel file `custom/mappings.lua` nella mappatura di NvChad, inserendo così le scorciatoie per richiamare i comandi per i plugin impostati in `custom/plugins.lua`. -Abbiamo poi una sezione che sovrascrive alcune impostazioni di configurazione dell'interfaccia utente di NvChad contenute in **~/.config/nvim/lua/core/default_config.lua**, in particolare la sezione `M.ui` che ci permette, ad esempio, di selezionare un tema chiaro o scuro. +Una sezione del file sovrascrive anche alcune impostazioni di configurazione dell'interfaccia utente di NvChad contenute in `core/default_config.lua`, in particolare la sezione **M.ui** che consente, ad esempio, di selezionare un tema chiaro o scuro. -E abbiamo anche l'inclusione dei nostri plugin definiti in **custom/plugins.lua** corrispondenti alla stringa: +Alla fine del file viene impostata la chiamata ==require== al file `custom/plugins.lua` corrispondente alla stringa: ```lua M.plugins = "custom.plugins" ``` -In questo modo i nostri plugin saranno passati insieme a quelli che compongono la configurazione di NvChad a _lazy.nvim_ per l'installazione e la gestione. L'inclusione in questo caso non è nell'albero di Neovim, ma piuttosto nella configurazione di _lazy.nvim_, poiché questo plugin disabilita completamente la funzionalità relativa dell'editor con la chiamata `vim.go.loadplugins = false`. +In questo modo, i plugin impostati in `custom/plugins.lua` vengono passati insieme a quelli che compongono la configurazione di NvChad a *lazy.nvim* per l'installazione e la loro gestione. In questo caso, l'inclusione non è nell'albero di Neovim. Si trova invece nella configurazione di *lazy.nvim*, in quanto questo plugin disabilita completamente la funzionalità correlata dell'editor con la chiamata `vim.go.loadplugins = false`. -#### init.lua +#### :material-language-lua: init.lua -Questo file è usato per sovrascrivere su disco le impostazioni definite in **~/.config/nvim/lua/core/init.lua**, come l'indentazione o l'intervallo di scrittura dello swap. Viene utilizzato anche per la creazione di comandi automatici, come descritto nelle righe commentate del file. Un esempio potrebbe essere il seguente, in cui sono state inserite alcune impostazioni per la scrittura di documenti in Markdown: +Questo file è usato per sovrascrivere su disco le impostazioni definite in `core/init.lua`, come l'indentazione o l'intervallo di scrittura della swap. Viene utilizzato anche per creare comandi automatici, come descritto nelle righe commentate del file. Un esempio potrebbe essere il seguente, in cui sono state inserite alcune impostazioni per la scrittura di documenti in Markdown: ```lua --local autocmd = vim.api.nvim_create_autocmd @@ -126,15 +169,15 @@ opt.smartindent = true -- }) ``` -In questo modo le nostre impostazioni sostituiranno quelle predefinite. +Questo, tra l'altro, sostituisce la tabulazione a 2 spazi con una a 4 spazi, più adatta al codice Markdown. -#### plugins.lua +#### :material-language-lua: plugins.lua -Questo file, come si può intuire dal nome, è usato per aggiungere i nostri plugin a quelli presenti nella configurazione di base di NvChad. L'inserimento dei plugin è spiegato in dettaglio nella pagina dedicata al [Plugins Manager](nvchad_ui/plugins_manager.md). +Questo file imposta i plugin da aggiungere a quelli presenti nella configurazione di base di NvChad. Le istruzioni per inserire i plugin sono spiegate in dettaglio nella pagina dedicata al [Gestore dei plugin](nvchad_ui/plugins_manager.md). -Il file _plugins.lua_ creato dal _template chadrc_ ha nella prima parte una serie di personalizzazioni che sovrascrivono le opzioni di definizione dei plugin e le configurazioni predefinite dei plugin. Questa parte del file non deve essere modificata da noi, poiché gli sviluppatori hanno preparato dei file speciali a questo scopo, presenti nella cartella _config_. +Il file *plugins.lua* creato dal file *example-config* ha nella prima parte una serie di personalizzazioni che sovrascrivono le opzioni di definizione dei plugin e le loro configurazioni predefinite. Questa parte del file non ha bisogno di essere modificata, in quanto gli sviluppatori hanno preparato dei file speciali per questo scopo, presenti nella cartella *config*. -Segue l'installazione di un plugin. Questo è un esempio per iniziare a familiarizzare con il formato usato da _lazy.nvim_, che differisce leggermente dal formato usato da _packer.nvim_, il gestore usato nella versione 1.0. +Segue l'installazione di un plugin. Questo è stato creato come esempio, in modo da familiarizzare con il formato utilizzato da *lazy.nvim*. ```lua -- Install a plugin @@ -147,13 +190,13 @@ Segue l'installazione di un plugin. Questo è un esempio per iniziare a familiar }, ``` -Dopo questo plugin e prima dell'ultima parentesi possiamo inserire tutti i nostri plugin. Esiste un intero ecosistema di plugin adatti a ogni scopo. Per una prima panoramica è possibile visitare il sito [Neovimcraft](https://neovimcraft.com/). +È possibile inserire tutti i plugin aggiuntivi dopo questo plugin e prima dell'ultima parentesi. Esiste un intero ecosistema di plugin adatti a ogni scopo. È possibile visitare [Neovimcraft](https://neovimcraft.com/) per una prima panoramica. -#### mappings.lua +#### :material-language-lua: mappings.lua -Questo file inserisce nell'albero di configurazione le mappature (scorciatoie da tastiera) che saranno necessarie per richiamare i comandi dei plugin che stiamo per aggiungere. +Questo file consente di inserire nell'albero della configurazione le mappature (scorciatoie da tastiera) necessarie per richiamare i comandi aggiuntivi del plugin. -Viene inoltre presentato un esempio di impostazioni, in modo da poterne studiare il formato: +Viene inoltre presentato un esempio di impostazione, in modo da poterne studiare il formato: ```lua M.general = { @@ -163,73 +206,74 @@ M.general = { } ``` -Questa mappatura viene inserita per lo stato NORMAL `n =` il carattere ++";"++ una volta premuto sulla tastiera, riproduce il carattere ++":"++. Questo carattere è quello utilizzato per accedere alla modalità COMMAND. L'opzione `nowait = true` è anche impostata per entrare immediatamente in questa modalità. In questo modo, su una tastiera con layout QWERTY statunitense, non sarà necessario utilizzare ++shift++ per accedere alla modalità COMMAND. +Questa mappatura viene inserita per lo stato NORMAL `n =` il carattere ++";"++ una volta premuto sulla tastiera, riproduce il carattere ++"colon"++. Questo carattere è quello utilizzato per accedere alla modalità COMMAND. Inoltre, viene impostata l'opzione `nowait = true` per entrare immediatamente in questa modalità. In questo modo, su una tastiera con layout QWERTY statunitense, non sarà necessario utilizzare ++shift++ per accedere alla modalità COMMAND. !!! Tip "Suggerimento" - Per gli utenti di tastiere europee (come quella italiana), si consiglia di sostituire il carattere ++";"++ con ++","++. + Per gli utenti con tastiere europee (come quella italiana), si consiglia di sostituire il carattere ++";"++ con ++","++. -#### highlights.lua +#### :material-language-lua: highlights.lua -Il file viene utilizzato per personalizzare lo stile dell'editor. Le impostazioni scritte qui servono a modificare aspetti come lo stile dei caratteri (**bold**, _italic_), il colore di sfondo di un elemento, il colore di primo piano e così via. +Il file viene utilizzato per personalizzare lo stile dell'editor. Le impostazioni inserite qui servono a modificare aspetti come lo stile dei caratteri (**bold**, *italic*), il colore di sfondo di un elemento, il colore di primo piano e così via. -### Cartella Configs +### :material-folder-cog-outline: Cartella configs -I file contenuti in questa cartella sono tutti file di configurazione usati nel file **custom/plugins.lua** per modificare le impostazioni predefinite dei plugin che si occupano dei server linguistici (_lspconfig_), linter/formatters (_null-ls_) e per sovrascrivere le impostazioni di base di **treesitter**, **mason** e **nvim-tree (**_override_). +Questa cartella contiene tutti i file di configurazione utilizzati nel file **custom/plugins.lua** che consentono di modificare le impostazioni predefinite dei plugin che si occupano dei server linguistici (*lspconfig*) e dei linter/formatter (*conform*), e per sovrascrivere le impostazioni di base di **treesitter**, **mason**, e **nvim-tree** (*override*). ```text configs/ +├── conform.lua ├── lspconfig.lua -├── null-ls.lua └── overrides.lua ``` -#### lspconfig.lua +#### :material-language-lua: lspconfig.lua -Il file _lspconfig.lua_ imposta i server linguistici locali che l'editor può utilizzare. Ciò consentirà di utilizzare funzioni avanzate per i file supportati, come il completamento automatico o gli snippet, per la creazione rapida di parti di codice. Per aggiungere il nostro _lsp_ alla configurazione, basta modificare la tabella (in _lua_ ciò che è rappresentato qui sotto tra parentesi graffe è una tabella) preparata appositamente dagli sviluppatori di NvChad: +Il file *lspconfig.lua* imposta i server linguistici locali che l'editor può utilizzare. Ciò consentirà di utilizzare funzioni avanzate per i file supportati, come il completamento automatico o gli snippet, per creare rapidamente parti di codice. Per aggiungere il nostro *lsp* alla configurazione, è sufficiente modificare la tabella (in *lua* quello che viene rappresentato qui sotto tra parentesi graffe è una tabella) preparata appositamente dagli sviluppatori di NvChad: ```lua local servers = { "html", "cssls", "tsserver", "clangd" } ``` -Come si può vedere, alcuni server sono già impostati di default. Per aggiungerne uno nuovo è sufficiente inserirlo alla fine della tabella. I server disponibili si trovano nei [pacchetti mason](https://github.com/williamboman/mason.nvim/blob/main/PACKAGES.md) e per le loro configurazioni si può fare riferimento a [configurazioni dei server lsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md). +Come possiamo vedere, alcuni server sono già impostati di default. Per aggiungerne uno nuovo, inserirlo alla fine della tabella. I server disponibili si trovano all'indirizzo [pacchetti mason](https://github.com/williamboman/mason.nvim/blob/main/PACKAGES.md) e per le loro configurazioni si può fare riferimento a [configurazioni dei server lsp](https://github.com/neovim/nvim-lspconfig/blob/master/doc/server_configurations.md). -Per esempio, se vogliamo avere anche il supporto per il linguaggio `yaml`, possiamo aggiungerlo come nell'esempio seguente: +Ad esempio, se vogliamo avere anche il supporto per il linguaggio `yaml`, possiamo aggiungerlo come nell'esempio seguente: ```lua local servers = { "html", "cssls", "tsserver", "clangd", "yamlls" } ``` -La modifica del file, tuttavia, non comporta l'installazione del relativo server linguistico. Dovrà essere installato separatamente con _Mason_. Il server linguistico che fornisce il supporto per _yaml_ è [yaml-language-server](https://github.com/redhat-developer/yaml-language-server), da installare con il comando `:MasonInstall yaml-language-server`. A questo punto avremo, ad esempio, il controllo del codice scritto nelle intestazioni(_frontmatter_) delle pagine di documentazione di Rocky Linux. +La modifica del file, tuttavia, non comporta l'installazione del relativo server linguistico. Questo, dev'essere installato separatamente con *Mason*. Il server linguistico che fornisce il supporto a *yaml* è [yaml-language-server](https://github.com/redhat-developer/yaml-language-server) che andrà installato con il comando `:MasonInstall yaml-language-server`. A questo punto avremo, ad esempio, il controllo del codice scritto nelle intestazioni (*frontmatter*) delle pagine di documentazione di Rocky Linux. -#### null-ls.lua +#### :material-language-lua: conform.lua -Questo file si occupa di configurare alcune funzioni orientate al controllo e alla formattazione del codice scritto. La modifica di questo file richiede un po' più di ricerca per la configurazione rispetto al file precedente. Una panoramica dei componenti disponibili si trova nella [pagina dei builtins](https://github.com/jose-elias-alvarez/null-ls.nvim/blob/main/doc/BUILTINS.md). + Questo file configura alcune funzioni orientate al controllo e la formattazione del codice scritto. La modifica di questo file richiede maggiori ricerche per la configurazione rispetto al precedente. Una panoramica dei componenti disponibili si trova nella pagina [dei builtins](https://github.com/stevearc/conform.nvim/tree/master?tab=readme-ov-file#formatters). -Anche in questo caso è stata creata una tabella, la tabella delle `local sources`, in cui inserire le nostre personalizzazioni, come si può vedere qui sotto: +Anche in questo caso è stata creata una tabella, la tabella ==formatters_by_ft==, dove inserire le personalizzazioni: ```lua -local sources = { +--type conform.options +local options = { + lsp_fallback = true, - -- webdev stuff - b.formatting.deno_fmt, - b.formatting.prettier.with({ filetypes = { "html", "markdown", "css" } }), - -- Lua - b.formatting.stylua, + formatters_by_ft = { + lua = { "stylua" }, - -- cpp - b.formatting.clang_format, + javascript = { "prettier" }, + css = { "prettier" }, + html = { "prettier" }, + sh = { "shfmt" }, + }, } ``` -Come si può vedere, nella configurazione iniziale sono stati inclusi solo i formattatori, ma potremmo ad esempio aver bisogno di una diagnostica per il linguaggio Markdown e in tal caso potremmo aggiungere [Markdownlint](https://github.com/DavidAnson/markdownlint) in questo modo: +Come si può vedere, nella configurazione iniziale sono stati inclusi solo i formattatori standard. Ad esempio, si potrebbe aver bisogno di un formattatore per il linguaggio Markdown e in questo caso si potrebbe aggiungere, ad esempio, [Markdownlint](https://github.com/DavidAnson/markdownlint): ```lua - -- diagnostic markdown - b.diagnostics.markdownlint, + markdown = { "markdownlint" }, ``` -Anche in questo caso, la configurazione richiede l'installazione del relativo pacchetto, che installeremo sempre con _Mason_: +Anche in questo caso, la configurazione richiede l'installazione del pacchetto corrispondente, che viene effettuata con *Mason*: ```text :MasonInstall markdownlint @@ -237,15 +281,15 @@ Anche in questo caso, la configurazione richiede l'installazione del relativo pa !!! Note "Nota" - La configurazione di questo strumento di diagnostica richiede anche la creazione di un file di configurazione nella cartella principale, che non verrà trattato in questo documento. + La configurazione di questo formattatore richiede anche la creazione di un file di configurazione nella cartella home, che non verrà trattato in questo documento. -#### overrides.lua +#### :material-language-lua: overrides.lua -Il file _overrides.lua_ contiene le modifiche da apportare alle impostazioni predefinite del plugin. I plugin a cui applicare le modifiche sono specificati nella sezione `-- override plugin configs` del file **custom/plugins.lua** tramite l'opzione `opts` (ad esempio `opts = overrides.mason`). +Il file *overrides.lua* contiene le modifiche da apportare alle impostazioni predefinite del plugin. I plugin a cui applicare le modifiche sono specificati nella sezione ==-- Override plugin definition options== del file `custom/plugins.lua` tramite l'opzione **opts** (ad esempio `opts = overrides.mason`). -Nella configurazione iniziale ci sono tre plugin che devono essere sovrascritti: _treesitter_, _mason_ e _nvim-tree_. Tralasciando per il momento _nvim-tree_, ci concentreremo sui primi due che ci permettono di cambiare in modo significativo la nostra esperienza di editing. +Nella configurazione iniziale ci sono tre plugin che devono essere sovrascritti e sono *treesitter*, *mason* e *nvim-tree*. Tralasciando per il momento *nvim-tree*, ci concentreremo sui primi due che ci permettono di cambiare in modo significativo la nostra esperienza di editing. -_treesitter_ è un parser di codice che si occupa della sua formattazione in modo interattivo. Ogni volta che salviamo un file riconosciuto da _treesitter_, questo viene passato al parser che restituisce un albero di codice ottimamente indentato ed evidenziato, in modo da facilitare la lettura, l'interpretazione e la modifica del codice nell'editor. +*treesitter* è un parser di codice che si occupa della sua formattazione in modo interattivo. Ogni volta che viene salvato un file riconosciuto da *treesitter*, questo viene passato al parser, che restituisce un albero di codice indentato ed evidenziato in modo ottimale, rendendo più facile la lettura, l'interpretazione e la modifica del codice nell'editor. La parte del codice che si occupa di questo aspetto è la seguente: @@ -272,7 +316,7 @@ M.treesitter = { } ``` -Ora, seguendo l'esempio precedente, se vogliamo che il _frontmatter_ delle nostre pagine di documentazione su Rocky Linux sia evidenziato correttamente, possiamo aggiungere il supporto per _yaml_ nella tabella `ensure_installed` dopo l'ultimo parser impostato: +Ora, seguendo l'esempio precedente, se vogliamo che il *frontmatter* delle nostre pagine di documentazione su Rocky Linux sia evidenziato correttamente, possiamo aggiungere il supporto per *yaml* nella tabella `ensure_installed` dopo l'ultimo parser impostato: ```text ... @@ -284,7 +328,7 @@ Ora, seguendo l'esempio precedente, se vogliamo che il _frontmatter_ delle nostr ... ``` -Ora, la prossima volta che si apre NvChad, anche il parser appena aggiunto verrà installato automaticamente. +La prossima volta che si aprirà NvChad, verrà installato automaticamente anche il parser appena aggiunto. Per avere il parser disponibile direttamente nell'istanza in esecuzione di NvChad possiamo sempre installarlo, anche senza aver modificato il file, con il comando: @@ -292,7 +336,7 @@ Per avere il parser disponibile direttamente nell'istanza in esecuzione di NvCha :TSInstall yaml ``` -Proseguendo, il file contiene la parte relativa all'installazione dei server da parte di _Mason_. Tutti i server impostati in questa tabella vengono installati in un'unica operazione con il comando `:MasonInstallAll` (questo comando viene invocato anche durante la creazione della cartella _custom_ ). La parte è la seguente: +Di seguito nel file è riportata la parte relativa all'installazione dei server da parte di *Mason*. Tutti i server impostati in questa tabella vengono installati in un'unica operazione con il comando `:MasonInstallAll` (questo comando viene richiamato anche durante la creazione della cartella *custom*). La parte è la seguente: ```lua M.mason = { @@ -311,7 +355,7 @@ M.mason = { } ``` -Ancora una volta, seguendo l'esempio iniziale in cui abbiamo abilitato il supporto per _yaml_ installando manualmente il server, possiamo assicurarci di averlo sempre installato aggiungendolo alla tabella: +Ancora una volta, seguendo l'esempio iniziale in cui abbiamo abilitato il supporto per *yaml* installando manualmente il server, possiamo assicurarci di averlo sempre installato aggiungendolo alla tabella: ```text ... @@ -324,11 +368,12 @@ Ancora una volta, seguendo l'esempio iniziale in cui abbiamo abilitato il suppor ... ``` -Sebbene questo aspetto possa essere marginale su un'istanza in esecuzione di NvChad, dato che possiamo sempre installare manualmente i server mancanti, si rivela molto utile durante il trasferimento della nostra configurazione da una macchina all'altra. +Sebbene questo aspetto possa essere marginale su un'istanza di esecuzione di NvChad, poiché possiamo sempre installare manualmente i server mancanti, si rivela molto utile durante il trasferimento della nostra configurazione da una macchina all'altra. + +Ad esempio, supponiamo di aver configurato la nostra cartella `custom` e di volerla trasferire ad un'altra installazione di NvChad. Se si è configurato questo file, dopo aver copiato o clonato la cartella `custom` sarà sufficiente un `:MasonInstallAll` per avere tutti i server pronti all'uso anche sull'altra installazione. -Ad esempio, supponiamo di aver configurato la nostra cartella `custom` con tutte le funzioni necessarie e di volerla trasferire a un'altra installazione di NvChad. Se abbiamo configurato questo file, dopo aver copiato o clonato la nostra cartella `custom` sarà sufficiente un `:MasonInstallAll` per avere tutti i server pronti all'uso anche sull'altra installazione. -La parte finale della configurazione, la sezione `M.nvimtree`, si occupa di configurare _nvim-tree_ abilitando la funzionalità di visualizzazione dello stato dell'albero dei file rispetto al repository git: +La parte finale della configurazione, la sezione `M.nvimtree`, si occupa di configurare *nvim-tree* abilitando la funzionalità di visualizzazione dello stato dell'albero dei file relativo al repository git: ```lua git = { @@ -349,8 +394,8 @@ la loro evidenziazione e le icone corrispondenti: }, ``` -## Conclusione +## :material-contain-end: Conclusione -L'introduzione in NvChad 2.0 della possibilità di creare una cartella `custom` durante la prima installazione è sicuramente un grande aiuto per tutti gli utenti che si avvicinano a questo editor per la prima volta. È anche un notevole risparmio di tempo per chi ha già avuto a che fare con NvChad. +L'introduzione in NvChad 2.0 della possibilità di creare una cartella `custom` durante la prima installazione è sicuramente un grande aiuto per tutti quegli utenti che si avvicinano a questo editor per la prima volta. Inoltre, offre anche un notevole risparmio di tempo per coloro che hanno già avuto a che fare con NvChad. -Grazie alla sua introduzione e all'uso di _Mason_, è molto facile e veloce integrare le proprie funzionalità. Bastano poche modifiche e si è subito pronti a usare l'IDE per scrivere codice. +Grazie alla sua introduzione e all'uso di *Mason*, l'integrazione delle proprie funzionalità è semplice e veloce. Bastano poche modifiche e si è subito pronti a utilizzare l'IDE per scrivere del codice.