diff --git a/module1/02_vim_regexp_dataprocessing/2_regexptutor_ru.md b/module1/02_vim_regexp_dataprocessing/2_regexptutor_ru.md index a9b7bc3..24dabc6 100644 --- a/module1/02_vim_regexp_dataprocessing/2_regexptutor_ru.md +++ b/module1/02_vim_regexp_dataprocessing/2_regexptutor_ru.md @@ -29,7 +29,7 @@ отмеченные словом "пропустите" не должны находится. В заданиях на замены результатом должны быть новая строка. -Попробуйте написать шаблон, который соответствует всем трем строкам, это может +Попробуйте написать шаблон, который соответствует всем трём строкам, это может быть так же просто, как общие буквы в каждой строке. Упражнение 1. Сопоставление символов @@ -83,7 +83,7 @@ нужно использовать экранирующий символ - обратный слеш. Ниже приведена пара строк с разными символами, но одинаковой длины. Попробуйте -написать один шаблон, который может соответствовать первым трем строкам, но не +написать один шаблон, который может соответствовать первым трём строкам, но не последней. Упражнение 2. Сопоставление с подстановочными знаками @@ -192,7 +192,7 @@ До сих пор мы узнали, как указать диапазон символов, которые мы хотим сопоставить, но как насчет количества повторений символов, которые мы хотим сопоставить? Один из способов сделать это — явно указать, сколько именно -символов мы хотим, например. \\d\\d\\d, который будет соответствовать ровно трем +символов мы хотим, например. \\d\\d\\d, который будет соответствовать ровно трём цифрам. Более удобный способ — указать, сколько повторений каждого символа мы хотим, diff --git a/module1/04_systemd/solutions.md b/module1/04_systemd/solutions.md index ef1f5f6..71072fd 100644 --- a/module1/04_systemd/solutions.md +++ b/module1/04_systemd/solutions.md @@ -1,7 +1,7 @@ # Задание 1 -0. Если у вас есть машина с графической оболочкой, в консоли перейдите в уровень запуска multi-user.target без перезагрузкпи, а затем обратно graphical.target. +0. Если у вас есть машина с графической оболочкой, в консоли перейдите в уровень запуска multi-user.target без перезагрузки, а затем обратно graphical.target. ``` # systemctl isolate multi-user.target # systemctl isolate graphical.target diff --git a/module1/04_systemd/tasks.md b/module1/04_systemd/tasks.md index 7dbc1e3..9dc61db 100644 --- a/module1/04_systemd/tasks.md +++ b/module1/04_systemd/tasks.md @@ -2,7 +2,7 @@ ### Задание 1. Команды -0. Если у вас есть машина с графической оболочкой, в консоли перейдите в уровень запуска multi-user.target без перезагрузкпи, а затем обратно graphical.target. +0. Если у вас есть машина с графической оболочкой, в консоли перейдите в уровень запуска multi-user.target без перезагрузки, а затем обратно graphical.target. 1. Если у вас есть машина с графической оболочкой, перейдите в уровень запуска multi-user.target с перезагрузкой, а затем переключитесь в графическую оболочку обратно. 2. Выведите модуль, который активируется по-умолчанию. 3. Выведите возможные состояния модулей командой systemctl --state=help. diff --git a/module1/05_hash_ciphers_ssh_certs/tasks.md b/module1/05_hash_ciphers_ssh_certs/tasks.md index 58ebac9..5b0c1eb 100644 --- a/module1/05_hash_ciphers_ssh_certs/tasks.md +++ b/module1/05_hash_ciphers_ssh_certs/tasks.md @@ -33,7 +33,7 @@ gpg --output un_encrypted.data --decrypt encrypted.data ### 5. Используйте `ssh-copy-id имя-удаленной-машины`, чтобы скопировать ваш ssh-ключ на сервер. Перед установкой попробуйте команду -в тестовом режиме с ключём `-n`. +в тестовом режиме с ключом `-n`. ### 6. Отредактируйте `.ssh/config` на локальной машине, чтобы запись выглядела следующим образом @@ -78,7 +78,7 @@ decrypt(шифрованные данные: массив байт, ключ) -> ### Асимметричная криптография ``` -keygen() -> (открытый ключ, закрытый ключ) (функция рандомизирована) +keygen() -> (открытый ключ, закрытый ключ) (функция основана на генерации случайных чисел) encrypt(данные, открытый ключ) -> шифрованные данные decrypt(шифрованные данные, закрытый ключ) -> данные diff --git a/module1/06_user_management/solutions.md b/module1/06_user_management/solutions.md index 250b425..e2bddcc 100644 --- a/module1/06_user_management/solutions.md +++ b/module1/06_user_management/solutions.md @@ -7,7 +7,7 @@ $ sudo useradd mike --shell /bin/bash $ sudo su - mike su: warning: cannot change directory to /home/mike: No such file or directory ``` -Зайти под пользователем mike теперь можно. Без домашней директории не будет сохраняться история комманд, а также нельзя настроить +Зайти под пользователем mike теперь можно. Без домашней директории не будет сохраняться история команд, а также нельзя настроить оболочку. Например, активировать пользовательские псевдонимы при входе. ``` $ sudo mkdir /home/mike diff --git a/module1/07_file_permissions/solutions.md b/module1/07_file_permissions/solutions.md index c1313a3..4fb3d36 100644 --- a/module1/07_file_permissions/solutions.md +++ b/module1/07_file_permissions/solutions.md @@ -168,7 +168,7 @@ total 16 ``` ### 9. -В каталоге `/projects` cоздайте файл `test` в папках `1`, `2`, `3`. Поменяйте для папок атрибуты доступа для категории `other`: `r--`, `r-x`, `--x` соответственно. Зайдите под другого пользователя, который входит в категорию `other` и попробуйте найти файл с помощью `find`, начиная с каталога `/projects`. Попробуйте найти слово в содержимом файлов. Как влияют атрибуты на возможность поиска? +В каталоге `/projects` создайте файл `test` в папках `1`, `2`, `3`. Поменяйте для папок атрибуты доступа для категории `other`: `r--`, `r-x`, `--x` соответственно. Зайдите под другого пользователя, который входит в категорию `other` и попробуйте найти файл с помощью `find`, начиная с каталога `/projects`. Попробуйте найти слово в содержимом файлов. Как влияют атрибуты на возможность поиска? ``` stud@stud15:/projects$ mkdir 1 stud@stud15:/projects$ mkdir 2 diff --git a/module1/07_file_permissions/tasks.md b/module1/07_file_permissions/tasks.md index f426d17..298f364 100644 --- a/module1/07_file_permissions/tasks.md +++ b/module1/07_file_permissions/tasks.md @@ -16,7 +16,7 @@ Проверьте может ли mike удалить папку с чужим проектом? Может ли он удалить свою папку? Уберите stickybit у папки /projects. А теперь может ли mike удалить папку, созданную vera или stud? Влияет ли на возможность удаления наличие в папке файлов? ### 6. -От root cоздайте ещё одну общую директорию shared в /home/. Создайте группу shared_files c большим значением идентификатора, например 70000, в которую входят mike, vera и stud. Поменяйте владельца /home/shared на nobody, а владельца-группу на shared_files. Установите полные права доступа для владельца и группы владельца. Все остальным запретите доступ к папке. Также установите бит SGID. +От root создайте ещё одну общую директорию shared в /home/. Создайте группу shared_files c большим значением идентификатора, например 70000, в которую входят mike, vera и stud. Поменяйте владельца /home/shared на nobody, а владельца-группу на shared_files. Установите полные права доступа для владельца и группы владельца. Все остальным запретите доступ к папке. Также установите бит SGID. Создайте несколько файлов под разными аккаунтами в этой папке и проверьте, что они имеют владельца-группу shared_files. @@ -32,7 +32,7 @@ touch /tmp/root_$RANDOM Сделайте его исполняемым для всех. Вызовите скрипт от пользователя stud. Обратите внимание на владельца созданного файла /tmp/root_*. Как на него повлиял SUID? Установите SUID на gen_file_root.sh, сгенерируйте новый файл. Есть ли изменения в поле владельца? ### 9. -В каталоге /projects cоздайте файл test в папках 1, 2, 3. Поменяйте для папок атрибуты доступа для категории other: r--, r-x, --x соответственно. Зайдите под другого пользователя, который входит в категорию other и попробуйте найти файл с помощью find, начиная с каталога /projects. Попробуйте найти слово в содержимом файлов. Как влияют атрибуты на возможность поиска? +В каталоге /projects создайте файл test в папках 1, 2, 3. Поменяйте для папок атрибуты доступа для категории other: r--, r-x, --x соответственно. Зайдите под другого пользователя, который входит в категорию other и попробуйте найти файл с помощью find, начиная с каталога /projects. Попробуйте найти слово в содержимом файлов. Как влияют атрибуты на возможность поиска? # Справка diff --git a/module1/09_nginx/solutions.md b/module1/09_nginx/solutions.md index d5e5624..733f060 100644 --- a/module1/09_nginx/solutions.md +++ b/module1/09_nginx/solutions.md @@ -174,7 +174,7 @@ $ tree /etc/nginx/ Проверьте, что в конфигурационных файлах указаны абсолютные пути. -Проверьте порты прослушивания. Проброшеные порты с 193.32.63.170+X на 10.160.179.10+X: 22, 80, 443. +Проверьте порты прослушивания. Проброшенные порты с 193.32.63.170+X на 10.160.179.10+X: 22, 80, 443. Проверьте, конфигурации на предмет синтаксических ошибок. Завершения строк `;`. Помочь сделать проверку может команда `nginx -t`. diff --git a/module1/for_tutor.md b/module1/for_tutor.md index c4d5537..1e85f22 100644 --- a/module1/for_tutor.md +++ b/module1/for_tutor.md @@ -76,7 +76,7 @@ ### Подготовка к занятию "Поиск и устранение неисправностей" -Данные вирутальные +Данные виртуальные Создайте N vlan без доступа в интернет: bond0.N+X и мост vmbrN+X с параметрами: - Bridge ports: bond0.N+X, @@ -137,7 +137,7 @@ ip link set address "$(gateway_mac)" dev ens18 Активируйте следующий сервис: ```bash -# /etc/systemd/system/netowrk-problem.service +# /etc/systemd/system/network-problem.service [Unit] After=network.target @@ -146,7 +146,7 @@ Type=oneshot ExecStart=/sbin/task5.sh [Install] -WantedBy=nulti-user.target +WantedBy=multi-user.target ``` #### 6. @@ -162,6 +162,6 @@ chmod 777 /home/stud/.ssh - 1 сокет с 4 ядрами, - 8 Гб оперативной памяти, - 6 Гб дискового пространства, -- сетевой интрфейс vmbr499. +- сетевой интерфейс vmbr499. Подключите cdrom с образом debian-11.4.0-amd64-netinst.iso. \ No newline at end of file diff --git a/module2/00_bootloader/lection.md b/module2/00_bootloader/lection.md index 2b2b64e..69bcd8a 100644 --- a/module2/00_bootloader/lection.md +++ b/module2/00_bootloader/lection.md @@ -1,4 +1,4 @@ -# Процесс загруски системы +# Процесс загрузки системы Когда компьютер включается, первое программное обеспечение, которое запускается, — это загрузчик. Это фрагмент кода, единственной целью которого является загрузка ядра операционной системы и передача ему управления. Ядро загрузит необходимые драйверы, инициализирует аппаратное обеспечение, а затем загрузит остальную часть операционной системы. diff --git a/module2/01_partitions_raid_lvm_fs/tasks.md b/module2/01_partitions_raid_lvm_fs/tasks.md index ab796a6..44c6aef 100644 --- a/module2/01_partitions_raid_lvm_fs/tasks.md +++ b/module2/01_partitions_raid_lvm_fs/tasks.md @@ -13,7 +13,7 @@ ### 1.1 RAID 0 #### 1.1.1 -Зайдите в терминал. Изучите документацию `mdadm`: `man mdadm` и `mdadm --help`. Cоздайте программный raid массив типа 0 (чередование записи разбитого на блоки потока данных) на основе первых 2 созданных дисков по 0.1ГБ. Используйте сырые диски, например `/dev/sdc /dev/sdd`. +Зайдите в терминал. Изучите документацию `mdadm`: `man mdadm` и `mdadm --help`. Создайте программный raid массив типа 0 (чередование записи разбитого на блоки потока данных) на основе первых 2 созданных дисков по 0.1ГБ. Используйте сырые диски, например `/dev/sdc /dev/sdd`. #### 1.1.2 Изучите документацию `mkfs.ext4`. Отформатируйте raid `/dev/md0` командой `mkfs.ext4` с опцией указания метки `-L raid0`. diff --git a/module2/03_nginx_ha/tasks.md b/module2/03_nginx_ha/tasks.md index 360a4dc..6c428b9 100644 --- a/module2/03_nginx_ha/tasks.md +++ b/module2/03_nginx_ha/tasks.md @@ -113,7 +113,7 @@ sudo apt install nginx keepalived Отредактируйте приветственную страницу по-умолчанию `/var/www/html/index.nginx-debian.html`, добавив номер сервера и проверьте, что сайт доступен по локальному адресу стандартному порту 80. ## 2.3 -Настройте keepalived на обоих узлах, используя следующую конфигурацию `/etc/keepalived/keepalived.conf` cогласно схеме приведённой выше. Пример конфигурации для узла `nginx 3`: +Настройте keepalived на обоих узлах, используя следующую конфигурацию `/etc/keepalived/keepalived.conf` согласно схеме приведённой выше. Пример конфигурации для узла `nginx 3`: ``` global_defs { vrrp_version 3 @@ -141,7 +141,7 @@ vrrp_instance VI1 { } ``` -Cлужебная информация (vrrp-объявления от keepalived-лидера о том, что узел работоспособен) будет передаваться через сетевой интерфейс ens18 vlanX. Работоспособность узла отслеживается скриптом `chech_nginx`, указанным в блоке `track_script`. Скрипт настраивается в блоке `vrrp_script`, где указывается путь к исполняемому файлу и другие параметры. Keepalived пакет предоставляет документацию man для конфигурационного файла - `man keepalived`. +Служебная информация (vrrp-объявления от keepalived-лидера о том, что узел работоспособен) будет передаваться через сетевой интерфейс ens18 vlanX. Работоспособность узла отслеживается скриптом `chech_nginx`, указанным в блоке `track_script`. Скрипт настраивается в блоке `vrrp_script`, где указывается путь к исполняемому файлу и другие параметры. Keepalived пакет предоставляет документацию man для конфигурационного файла - `man keepalived`. Поменяйте параметр `state` на `BACKUP` и уменьшите параметр `priority` для резервного узла, поменяйте адрес `mcast_src_ip`, используемый для передачи служебной информации. diff --git a/module2/05_sql_postgresql/tasks.md b/module2/05_sql_postgresql/tasks.md index a12dff9..010c45f 100644 --- a/module2/05_sql_postgresql/tasks.md +++ b/module2/05_sql_postgresql/tasks.md @@ -147,7 +147,7 @@ FROM employees e INNER JOIN departments d ON (e.department_id = d.department_id); ``` -Обратите внимание, как мы обращаемся к `employee_id`, `first_name`, `last_name` из таблицы `employees` и к `department_name` из таблицы `departments`. Мы связыаем эти два множества информации в часи `FROM`. Обратите внимание, что `INNER JOIN` и `ON` зарезервированные слова. В примеры выше мы хотим получить пересечение элементов таблицы `employees` и `departments` по полю `department_id`. +Обратите внимание, как мы обращаемся к `employee_id`, `first_name`, `last_name` из таблицы `employees` и к `department_name` из таблицы `departments`. Мы связываем эти два множества информации в части `FROM`. Обратите внимание, что `INNER JOIN` и `ON` зарезервированные слова. В примеры выше мы хотим получить пересечение элементов таблицы `employees` и `departments` по полю `department_id`. Мы обратились к СУБД на специальном языке и СУБД взяла на себя самую сложную часть, избавив нас от необходимости писать специализированную программу для поиска и выгрузки информации. @@ -214,7 +214,7 @@ FROM departments d Результат нам сообщают, что в городе Effingham штата Индиана США нет отдела. Значит офис был закрыт. -### 4.4 Cоединения на себя (self join) +### 4.4 Соединения на себя (self join) Соединение на себя - вид соединения, хотя и не имеет специального синтаксиса, стоит упомянуть отдельно. Такой способ соединения полезен, когда таблица содержит иерархические данные. В нашем примере это таблица `employees`. @@ -259,13 +259,13 @@ FROM employees e LEFT OUTER JOIN employees m ON (e.manager_id = m.employee_id); С механизмом транзакций количество шагов уменьшается в 2 раза: 1. Создать пользователя 2. Создать аккаунт -3. Соединить аккаунт и ползьзователя +3. Соединить аккаунт и пользователя Транзакции позволяют не писать логику возврата в предыдущее состояние, до начала транзакции. ### 5.1 Простейшие транзакции -Самая простая транзакия состоит из одного запроса на модификацию данны, заключенного между `BEGIN` и `COMMIT`. +Самая простая транзакция состоит из одного запроса на модификацию данны, заключенного между `BEGIN` и `COMMIT`. ```sql BEGIN; INSERT INTO employees (first_name, last_name, start_date, salary, job_title, manager_id, department_id) diff --git a/module2/07_containerization_docker/lection.md b/module2/07_containerization_docker/lection.md index 4791a4d..721b13a 100644 --- a/module2/07_containerization_docker/lection.md +++ b/module2/07_containerization_docker/lection.md @@ -4,7 +4,7 @@ Виртуальные машины эмулируют аппаратное обеспечение на котором выполняется гостевая операционная система с целевым приложением. Виртуальные машины отлично подходят для изоляции приложения. Но за такую изоляцию приходится платить большими накладными расходами на создание виртуальной среды. -Контейнеры вместо эмуляции аппаратного обеспечения эмулирует операционную систему, делая контейнеры более легковесными. Ключом для этого типа эмуляции является правильное согласование таких механизмов Linux, как: контрольные группу (cgroups), пространсва имён (kernel namespaces), union-capable файловых систем, netfilter. В отличие от виртуальных машин, контейнеры не создают больших накладных расходов, что позволяет использовать систему и ресурсы эффективнее. +Контейнеры вместо эмуляции аппаратного обеспечения эмулирует операционную систему, делая контейнеры более легковесными. Ключом для этого типа эмуляции является правильное согласование таких механизмов Linux, как: контрольные группу (cgroups), пространства имён (kernel namespaces), union-capable файловых систем, netfilter. В отличие от виртуальных машин, контейнеры не создают больших накладных расходов, что позволяет использовать систему и ресурсы эффективнее. Контейнер представляет собой изолированную группу процессов, которые ограничены частной корневой файловой системой и пространством имён процессов. Содержащиеся процессы совместно используют ядро и другие службы хост-системы, но по умолчанию они не могут получить доступ к файлам или системным ресурсам за пределами своего контейнера. @@ -22,9 +22,9 @@ Docker это самый известный инструмент, который #### 1.1. Пространства имён -Пространства имён изолируют контейнерные процессы с точки зрения нескольких функций операционной системы, включая монтирование файловой системы, ууправление процессами и сетевое взаимодействие. +Пространства имён изолируют контейнерные процессы с точки зрения нескольких функций операционной системы, включая монтирование файловой системы, управление процессами и сетевое взаимодействие. -Например, пространство имён команды `mount` отображает процессы с помощью индивидуального представления иерарзии файловой системы. Это аналогично системному вызову `chroot`, который необратимо устанавливает видимый процессу корневой каталог и тем самым отключает доступ к файлам и каталогам хоста, расположенным выше уровня `chroot`. +Например, пространство имён команды `mount` отображает процессы с помощью индивидуального представления иерархии файловой системы. Это аналогично системному вызову `chroot`, который необратимо устанавливает видимый процессу корневой каталог и тем самым отключает доступ к файлам и каталогам хоста, расположенным выше уровня `chroot`. Контейнеры могут работать на разных уровнях интеграции с операционной системой хоста в зависимости от того, как эти пространства имён были настроены. diff --git a/module2/07_containerization_docker/tasks.md b/module2/07_containerization_docker/tasks.md index 3f32e11..e26c6fb 100644 --- a/module2/07_containerization_docker/tasks.md +++ b/module2/07_containerization_docker/tasks.md @@ -24,7 +24,7 @@ sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin ``` -Проверте, всё ли установлено корректно: +Проверьте, всё ли установлено корректно: ``` $ sudo docker run hello-world