From 682940f2455f0f86a58592c024e0c00dfcc3787e Mon Sep 17 00:00:00 2001 From: vlpr Date: Wed, 18 Oct 2023 13:57:50 +0000 Subject: [PATCH] Updated 12 tasks --- module1/10_bash_scripts/tasks.md | 11 ++++++++--- module1/12_troubleshooting/tasks.md | 17 +++++++++++++++-- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/module1/10_bash_scripts/tasks.md b/module1/10_bash_scripts/tasks.md index 599f234..1ad7d2d 100644 --- a/module1/10_bash_scripts/tasks.md +++ b/module1/10_bash_scripts/tasks.md @@ -28,7 +28,7 @@ Следующий синтаксис `<( CMD )` выполнит `CMD`, поместит вывод во временный файл и заменит `<()` именем этого файла. Это полезно, когда команды ожидают, что значения будут переданы через файл, а не `STDIN`. Например, `diff <(ls foo) <(ls bar)` покажет различия между файлами в каталогах foo и bar. ### 1. -Кроме результатов в `STDOUT` и ошибок в `STDERR` cценарии возвращают код возврата. Код возврата или статус выхода — это то, как скрипты/команды должны сообщать о том, как прошло выполнение. Значение `0` обычно означает, что все прошло нормально; все, что отличается от `0`, означает, что произошла ошибка. +Кроме результатов в `STDOUT` и ошибок в `STDERR` сценарии возвращают код возврата. Код возврата или статус выхода — это то, как скрипты/команды должны сообщать о том, как прошло выполнение. Значение `0` обычно означает, что все прошло нормально; все, что отличается от `0`, означает, что произошла ошибка. Коды выхода можно использовать для условного выполнения команд с использованием операторов `&&` (`и`) и `||` (`или`). Команды также можно разделять в пределах одной строки с помощью точки с запятой `;`, если они должны выполниться независимо от возвращаемого кода. Истинная программа всегда будет иметь код возврата `0`, а ложная команда всегда будет иметь код возврата от `1` до `255`. @@ -87,12 +87,14 @@ echo_arguments () { ``` По умолчанию переменная глобальна для скрипта, даже если определена внутри функции. Чтобы сделать переменную локальной, используйте синтаксис `local variable` внутри функции. -Напишите аналогичный предыдущему заданию скрипт, но оберните все действия в функцию, а в конце скрипта выполните эту функцию. Проверьте работу скрипта. Работает ли функция за пределами контекста скрипта? +Напишите аналогичный предыдущему заданию скрипт, но оберните все действия в функцию, а в конце скрипта выполните эту функцию. Проверьте работу скрипта. Доступна ли функция за пределами контекста скрипта? + +Заведите внутри функции глобальную `a` и локальную переменную `local b`. Вызовите функцию в скрипте. Выведите обе переменные на экран внутри функции после присвоения значений переменным и после вызова функции. ### 5. Функции выполняются в текущей среде оболочке, тогда как скрипты выполняются в своем собственном процессе. -Проверьте, что функции могут изменять переменные среды, например, изменить текущий каталог, тогда как скрипт не может. Напишите скрипт, в котором инициализируются две переменные `A` и `B`. Перед одной из них указывается `export`. Выполните скрипт и посмотрите на выдачу команды `env`. Выполните файл командой `source` (документация в `source --help` и секции встроенных комманд `man bash`). Какие переменные экспортировались в оболочку? +Проверьте, что функции могут изменять переменные среды, например, изменить текущий каталог, тогда как скрипт не может. Напишите скрипт, в котором инициализируются две переменные `A` и `B`. Перед одной из них указывается `export`. Выполните скрипт и посмотрите на выдачу команды `env`. Выполните файл командой `source` (документация в `source --help` и секции встроенных команд `man bash`). Какие переменные экспортировались в оболочку? ### 6. Попробуйте условные выражения в скрипте в `if` конструкции: @@ -181,12 +183,14 @@ echo survived ``` #### 9.4. Почему эти два сценария не идентичны? ```bash +#!/usr/bin/env bash set -e f() { test -d nosuchdir && echo no dir; } f echo survived ``` ```bash +#!/usr/bin/env bash set -e f() { if test -d nosuchdir; then echo no dir; fi; } f @@ -194,6 +198,7 @@ echo survived ``` #### 9.5. При каких условиях это приведет к отказу? ```bash +#!/usr/bin/env bash set -e read -r foo < configfile ``` diff --git a/module1/12_troubleshooting/tasks.md b/module1/12_troubleshooting/tasks.md index f1af3ab..430ae26 100644 --- a/module1/12_troubleshooting/tasks.md +++ b/module1/12_troubleshooting/tasks.md @@ -1,5 +1,18 @@ # Задания -Исправьте проблемы настройки сети в виртуальных машинах `troublesome-X-task[1-5]`. В каждой машине 1 проблема после исправления которой работает команда `ping yandex.com`. Шлюз по умолчанию для машины в каждом задании - 192.168.1.1 в сети 192.168.1.0/24. +#### studX-troublesome-1 - studX-troublesome-5 +Исправьте проблемы настройки сети в виртуальных машинах. Команда `ping ya.ru` должна работать. -В 6ом задании `troublesome-X-task6` вам требуется отладить команду `ssh localhost -l mike`, запущенную от пользователя stud. Команда должна отработать без ввода пароля. \ No newline at end of file +#### studX-troublesome-6 +Выполните на машине studX-net1 следующие команды +``` +ssh-keygen +ssh-copy-id stud@192.168.0.106 +``` +Почему даже после добавления публичного ключа на `studX-troublesome-6` авторизация по публичному ключу не работает? Найдите и исправьте проблему на `studX-troublesome-6`. + +#### studX-troublesome-7 +После логина стрелки не работают и выводят странные символы. Исправьте проблему. + +#### studX-troublesome-8 +Залогиньтесь сначала в `stud` потом в `root`. Посмотрите логи командой `journalctl -o short-iso`. В чём заключается проблема настройки машины? Исправьте её. \ No newline at end of file