Updated tasks for the 01_bash.

pull/1/head
Vladimir Protsenko 1 year ago
parent 3f036aa652
commit 88c7fe550f

@ -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
Прочитайте мануал `man ls` и напишите `ls` команду, которая выводит список файлов в следующем виде:
Выполните две команды: `head /nonexistent; echo Ok` и `head /nonexistent && echo Ok`. В чём отличие в поведении?
# 10
Оператор `||` похож на оператор ИЛИ в программировании. Что вы ожидаете увидеть при запуске `mkdir test || echo Ok`? Проверьте так ли это.
# 11
Создайте псевдонимы: `dc`, `chomd` которые разрешаются в команды: `cd`, `chmod` чтобы наконец решить проблему опечаток.
* список файлов включает скрытые,
* размер файла указан с метрическими приставками (e.g. 454M вместо 454279954),
* файлы выводятся в историческом порядке,
* вывод в цвете.
Создайте псевдоним `ls` для команды `ls -alF` и `cdw` для команды `cd /home/stud/project/`. Проверьте работу псведонимов.
Пример, того как он должен выглядеть
Удалите псевдоним `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.
Что в результате вы видите в консоли? Модифицируйте команду так, чтобы у директорий в начале названия присутствовал глобальный индекс `idx`. На каждой итерации внутреннего цикла `idx` должна увеличиваться на единицу.
# 12
(*) Напишите команду или сценарий для рекурсивного поиска самого последнего измененного файла в каталоге. В общем, можете ли вы перечислить все файлы по давности?
# 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
(*) Напишите команду или сценарий для рекурсивного поиска самого последнего измененного файла в каталоге. В общем, можете ли вы перечислить все файлы по давности?
Loading…
Cancel
Save