From 63e3d440f39bbe7bc587de9034eff0cf206efebd Mon Sep 17 00:00:00 2001 From: Vladimir Protsenko Date: Thu, 1 Sep 2022 15:11:43 +0400 Subject: [PATCH] Added tasks for lesson 1. --- 01_bash/solutions.md | 66 +++++++++++++++++++++++++------------------- 01_bash/tasks.md | 12 ++++---- 2 files changed, 44 insertions(+), 34 deletions(-) diff --git a/01_bash/solutions.md b/01_bash/solutions.md index a8a3bf8..8fa243d 100644 --- a/01_bash/solutions.md +++ b/01_bash/solutions.md @@ -2,33 +2,33 @@ # 1 Вы в директории /home/stud/data. Какая из команд переместит вас в домашнюю директорию? - +``` 3 cd /home/stud 5 cd ~ 8 cd 9 cd .. - +``` # 2 Создайте файл dummy в /tmp. Попробуйте удалить его указав флаг -i для команды rm. В чём отличие удаления файла с этим флагом и без него? - +``` mkdir /tmp/dummy rm -r -i /tmp/dummy rm: remove directory '/tmp/dummy'? y rm -r /tmp/dummy - +``` Отличие в запросе подтверждения действия. # 3 Создайте папку backup в домашней директории. Одновременно скопируйте файл .bashrc в /tmp/ и в backup с помощью cp. - +``` $ mkdir ~/backup $ cp .bashrc ~/backup; cp .bashrc /tmp/ - +``` # 4 Повторите структуру директории: - +``` mkdir project cd project mkdir .git @@ -46,40 +46,45 @@ touch 2022-11-23-exp3-calibration.dat cd ../ mkdir backup mkdir shared +``` # 5 Скопируйте файлы экспериментов в backup, но распределите по папкам разные типы файлов. .data в backup/dataset, dat-calibration в backup/calibration, логи в backup/logs. В shared поместите все файлы, созданные 23 числа в папку 23day. Напишите команды в двух вариантах: с относительными путями и с абсолютными. +``` cd backup mkdir dataset calibration logs cp ./raw/*-exp?.dat backup/dataset/ cp ./raw/*-exp?-calibration.dat backup/calibration cp ./raw/*.log ./backup/logs/ +``` +``` export PD=/home/stud/project mkdir $PD/backup/dataset $PD/backup/calibration $PD/backup/logs cp $PD/raw/*-exp?.dat backup/dataset/ cp $PD/raw/*-exp?-calibration.dat backup/calibration cp $PD/raw/*.log ./backup/logs/ +``` # 6 Посчитайте количество строк в файле /var/log/messages. - +``` sudo wc -l /var/log/messages sudo cat /var/log/messages | wc -l - +``` # 7 Инициализируйте файл head_tail_messages с помощью команды head из строк в /var/log/messages, затем добавьте в head_tail_messages последние 23 строки из /var/log/messages. - +``` sudo head /var/log/messages > head_tail_messages sudo tail -n 23 /var/log/messages >> head_tail_messages - +``` # 8 Создайте псевдоним "dc", который разрешается в команду "cd" для случаев опечатки. - +``` alias dc=”cd” - +``` # 9 Прочитайте мануал `man ls` и напишите `ls` команду, которая выводит список файлов в следующем виде: @@ -87,19 +92,19 @@ alias dc=”cd” * размер файла указан с метрическими приставками (e.g. 454M вместо 454279954), * файлы выводятся в историческом порядке, * вывод в цвете. - +``` ls -caht или ls -cahtl - +``` # 10 Запишите в переменную среды PATH значение "". Как это повлияло на выполнение команд? Перезайдите по ssh и попробуйте вызывать любую команду заново. Сохранились ли изменения? - +``` export PATH=”” следствие: ни один исполняемый файл системой теперь не находится после переподключения система вернулась в прежнее состояние - +``` # 11 Модифицируйте команду так, чтобы у директорий в начале названия присутствовал глобальный индекс idx. - +``` idx=0; for species in cubane ethane methane; do @@ -109,17 +114,21 @@ do ((idx+=1)); done done - +``` +``` idx=-1; for species in cubane ethane methane; do for temperature in 25 30 37 40; do mkdir $idx-$species-$temperature; ((idx+=1)); done; done - +``` # 12 (*) Напишите команду или сценарий для рекурсивного поиска самого последнего измененного файла в каталоге. В общем, можете ли вы перечислить все файлы по давности? Плохое решение +``` ls -Rlht - +``` Лучше +``` find ./ -type f -printf "%T+ %H%P\n" 2>/dev/null | sort -r +``` где %T+ - время последнего изменения в формате 2004-04-28+22:22:05.0, %H - путь к директории, в которой файл найден, @@ -127,20 +136,21 @@ find ./ -type f -printf "%T+ %H%P\n" 2>/dev/null | sort -r # 13 Напишите цикл, который проходит по списку файлов в текущей директории и выводит полный путь к директории и имя файла. - +``` for f in $(ls); do echo $(pwd)/$f; done - +``` # 14 Выведите результат сложения 10 и 4 с помощью bash синтаксиса для арифметических операций. - +``` echo $((10 + 4)) - +``` # 15 Выведите результат умножения двух переменных с помощью bash синтаксиса для арифметических операций. - +``` a=1; b=2; echo $((a*b)) - +``` # 16 Напишите команду, которая рекурсивно находит все HTML-файлы в папке и запаковывает их в tar.gz архив. Ваша команда должна работать, даже если в файлах есть пробелы. - +``` find . -type f -name "*.html" -print0 | xargs -0 tar cfz htmls.tar.gz +``` diff --git a/01_bash/tasks.md b/01_bash/tasks.md index 7f54d23..a013cfe 100644 --- a/01_bash/tasks.md +++ b/01_bash/tasks.md @@ -2,7 +2,7 @@ # 1 Вы в директории /home/stud/data. Какая из команд переместит вас в домашнюю директорию? - +``` 1 cd . 2 cd / 3 cd /home/stud @@ -12,7 +12,7 @@ 7 cd ~/data/.. 8 cd 9 cd .. - +``` # 2 Создайте файл dummy в /tmp. Попробуйте удалить его указав флаг -i для команды rm. В чём отличие удаления файла с этим флагом и без него? @@ -21,7 +21,7 @@ # 4 Повторите структуру директории: - +``` project/ ├── .git ├── data @@ -36,7 +36,7 @@ project/ └── 2022-11-23-exp3-calibration.dat ├── backup └── shared - +``` # 5 Скопируйте файлы экспериментов в backup, но распределите по папкам разные типы файлов. .data в backup/dataset, dat-calibration в backup/calibration, логи в backup/logs. В shared поместите все файлы, созданные 23 числа в папку 23day. Напишите команды в двух вариантах: с относительными путями и с абсолютными. @@ -72,7 +72,7 @@ drwx------+ 47 user group 1.5K Jan 12 18:08 .. # 11 Выполните в терминале следующую команду в директории /tmp: - +``` for species in cubane ethane methane; do for temperature in 25 30 37 40; @@ -80,7 +80,7 @@ do mkdir $species-$temperature; done done - +``` Что в результате вы получили в консоли? Модифицируйте команду так, чтобы у директорий в начале названия присутствовал глобальный индекс idx. # 12