From 88c7fe550f6b5ed4c7cf9456f147284f6f9c9373 Mon Sep 17 00:00:00 2001 From: Vladimir Protsenko Date: Tue, 29 Aug 2023 23:53:04 +0400 Subject: [PATCH] Updated tasks for the 01_bash. --- module1/01_bash/tasks.md | 130 ++++++++++++++++++++++++--------------- 1 file changed, 82 insertions(+), 48 deletions(-) diff --git a/module1/01_bash/tasks.md b/module1/01_bash/tasks.md index a013cfe..de9c377 100644 --- a/module1/01_bash/tasks.md +++ b/module1/01_bash/tasks.md @@ -1,7 +1,32 @@ # Задания # 1 -Вы в директории /home/stud/data. Какая из команд переместит вас в домашнюю директорию? +Повторите структуру директории с помощью команд `mkdir` и `touch`: +``` +project/ +|-- backup +|-- data +| `-- raw +| |-- 2022-07-23-exp1.data +| |-- 2022-07-23-exp1.log +| |-- 2022-08-03-exp2.calib +| |-- 2022-08-03-exp2.data +| |-- 2022-08-03-exp2.log +| |-- 2022-11-23-exp3.calib +| |-- 2022-11-23-exp3.data +| `-- 2022-11-23-exp3.log +|-- shared +`-- this + `-- is + `-- a + `-- long + `-- and + `-- strange + `-- path +``` + +# 2 +Вы в директории `/home/stud/project/`. Какая из команд переместит вас в домашнюю директорию? ``` 1 cd . 2 cd / @@ -9,56 +34,52 @@ 4 cd ../.. 5 cd ~ 6 cd home -7 cd ~/data/.. +7 cd ~/project/.. 8 cd 9 cd .. ``` -# 2 -Создайте файл dummy в /tmp. Попробуйте удалить его указав флаг -i для команды rm. В чём отличие удаления файла с этим флагом и без него? # 3 -Создайте папку backup в домашней директории. Одновременно скопируйте файл .bashrc в /tmp/ и в backup с помощью cp. +Перейдите в папку `backup`. Используя команду `cp`, выполните следующие действия одной строкой: +- скопируйте два файла: `.bashrc` и `.bash_profile` в папку `backup`, +- скопируйте файл `.bashrc` в две директории: `/tmp/` и `shared`. # 4 -Повторите структуру директории: -``` -project/ -├── .git -├── data - └── raw - ├── 2022-07-23-exp1.log - ├── 2022-08-03-exp2.log - ├── 2022-11-23-exp3.log - ├── 2022-07-23-exp1.dat - ├── 2022-08-03-exp2.dat - ├── 2022-08-03-exp2-calibration.dat - ├── 2022-11-23-exp3.dat - └── 2022-11-23-exp3-calibration.dat -├── backup -└── shared -``` +Создайте файл `dummy` в `/tmp`. Попробуйте удалить его указав флаг `-i` для команды `rm`. В чём отличие удаления файла с этим флагом и без него? + # 5 -Скопируйте файлы экспериментов в backup, но распределите по папкам разные типы файлов. .data в backup/dataset, dat-calibration в backup/calibration, логи в backup/logs. В shared поместите все файлы, созданные 23 числа в папку 23day. Напишите команды в двух вариантах: с относительными путями и с абсолютными. +Скопируйте файлы экспериментов в `backup`, но распределите их по папкам. Файлы с расширением `.datа` в `backup/data`, файлы с расширением `.calib` в `backup/calibration`, логи `.log` в `backup/logs`. В `shared` поместите все файлы, созданные 23 числа в папку `23day`. Напишите команды в двух вариантах: с относительными путями и с абсолютными и проверьте, что их выполнение даёт одинаковый результат. # 6 -Посчитайте количество строк в файле /var/log/messages. +Посчитайте количество строк, слов и символов в файле `/var/log/dpkg.log`. # 7 -Инициализируйте файл head_tail_messages с помощью команды head из строк в /var/log/messages, затем добавьте в head_tail_messages последние 23 строки из /var/log/messages. +Инициализируйте файл `head_tail_messages` с помощью команды `head` из строк в `/var/log/dpkg.log`. Затем добавьте в `head_tail_messages` последние 23 строки из `/var/log/dpkg.log`. # 8 -Создайте псевдоним "dc", который разрешается в команду "cd" для случаев опечатки. +Постройте конвейр с помощью оператора `|`, который считывает содержимое `/var/log/dpkg.log`, находит только строки содержащие слово `perl`, сохраняет результат в файл `/tmp/perl_pkgs` и одновременно выводит в консоль количество найденных строк. + +# 9 +Выполните две команды: `head /nonexistent; echo Ok` и `head /nonexistent && echo Ok`. В чём отличие в поведении? + +# 10 +Оператор `||` похож на оператор ИЛИ в программировании. Что вы ожидаете увидеть при запуске `mkdir test || echo Ok`? Проверьте так ли это. -# 9 -Прочитайте мануал `man ls` и напишите `ls` команду, которая выводит список файлов в следующем виде: +# 11 +Создайте псевдонимы: `dc`, `chomd` которые разрешаются в команды: `cd`, `chmod` чтобы наконец решить проблему опечаток. + +Создайте псевдоним `ls` для команды `ls -alF` и `cdw` для команды `cd /home/stud/project/`. Проверьте работу псведонимов. -* список файлов включает скрытые, -* размер файла указан с метрическими приставками (e.g. 454M вместо 454279954), -* файлы выводятся в историческом порядке, -* вывод в цвете. +Удалите псевдоним `ls` командой `unalias`. Проверьте, что выдача соответствует оригинальной команде `ls`. -Пример, того как он должен выглядеть +# 12 +Прочитайте мануал `man ls`. Напишите `ls` команду, которая выводит список файлов в следующем виде: +- список файлов включает скрытые, +- размер файла указан с метрическими приставками (e.g. 454M вместо 454279954), +- файлы выводятся в историческом порядке, +- выводит в цвете. +Пример, того как должен выглядеть вывод команды ``` -rw-r--r-- 1 user group 1.1M Jan 14 09:53 baz drwxr-xr-x 5 user group 160 Jan 14 09:53 . @@ -67,11 +88,19 @@ drwxr-xr-x 5 user group 160 Jan 14 09:53 . drwx------+ 47 user group 1.5K Jan 12 18:08 .. ``` -# 10 -Запишите в переменную среды PATH значение "". Как это повлияло на выполнение команд? Перезайдите по ssh и попробуйте вызывать любую команду заново. Сохранилиcь ли изменения? +# 13 +Запишите в переменную среды `PATH` значение `""`. Как это повлияло на выполнение команд? Перелогиньтесь и попробуйте вызывать любую команду заново. Сохранилиcь ли изменения? -# 11 -Выполните в терминале следующую команду в директории /tmp: +# 14 +C помощью bash синтаксиса для арифметических операций выведите результат: +- сложения 10 и 4, +- умножения 10 на 4, +- деления 10 на b, где b это переменная равная 3. + +Сохраните результат операции `a % b` в переменную `c`, где `a` и `b` результаты любых предыдущих двух операций. Выведите `с`. + +# 15 +Выполните в терминале следующую команду в директории `/tmp`: ``` for species in cubane ethane methane; do @@ -81,19 +110,24 @@ do done done ``` -Что в результате вы получили в консоли? Модифицируйте команду так, чтобы у директорий в начале названия присутствовал глобальный индекс idx. - -# 12 -(*) Напишите команду или сценарий для рекурсивного поиска самого последнего измененного файла в каталоге. В общем, можете ли вы перечислить все файлы по давности? +Что в результате вы видите в консоли? Модифицируйте команду так, чтобы у директорий в начале названия присутствовал глобальный индекс `idx`. На каждой итерации внутреннего цикла `idx` должна увеличиваться на единицу. -# 13 +# 16 Напишите цикл, который проходит по списку файлов в текущей директории и выводит полный путь к директории и имя файла. -# 14 -Выведите результат сложения 10 и 4 с помощью bash синтаксиса для арифметических операций. +# 17 +Далее поработайте с командой `watch date`. Команда `watch` вызывает периодически переданную ей команду в качестве аргумента. Это удобно для организации простого мониторинга. -# 15 -Выведите результат умножения двух переменных с помощью bash синтаксиса для арифметических операций. +Первый раз вызовите команду и отправьте процессу сигнал `SIGINT` комбинацией клавишь `Ctrl+C`. -# 16 -Напишите команду, которая рекурсивно находит все HTML-файлы в папке и упаковывает их в tar.gz архив. Используйте find и xargs. Ваша команда должна работать, даже если в файлах есть пробелы (подсказка: используйте null разделитель). +Второй раз вызовите команду и отправьте процессу сигнал `SIGTSTP` комбинацией клавишь `Ctrl+Z`. Выведите статус процесса командой `jobs`. Переведите процесс в активное состояние командой `fg` и остановите процесс. + +Третий раз вызовите команду с добавлением одиночного символа `&`. Остановите процесс командой `kill`. + +*man страницы: kill, signal* + +# 18 +Напишите команду, которая рекурсивно находит все HTML-файлы в папке и упаковывает их в `tar.gz` архив. Используйте `find` и `xargs`. Ваша команда должна работать, даже если в файлах есть пробелы (подсказка: используйте `null` разделитель). + +# 19 +(*) Напишите команду или сценарий для рекурсивного поиска самого последнего измененного файла в каталоге. В общем, можете ли вы перечислить все файлы по давности? \ No newline at end of file