Added tasks for lesson 1.

pull/1/head
Vladimir Protsenko 2 years ago
parent a317c9b26f
commit e60dc06b90

1
.gitignore vendored

@ -0,0 +1 @@
*~

@ -0,0 +1,146 @@
# Решения
# 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
mkdir data
mkdir raw
cd raw
touch 2022-07-23-exp1.log
touch 2022-08-03-exp2.log
touch 2022-11-23-exp3.log
touch 2022-07-23-exp1.dat
touch 2022-08-03-exp2.dat
touch 2022-08-03-exp2-calibration.dat
touch 2022-11-23-exp3.dat
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` команду, которая выводит список файлов в следующем виде:
* список файлов включает скрытые,
* размер файла указан с метрическими приставками (e.g. 454M вместо 454279954),
* файлы выводятся в историческом порядке,
* вывод в цвете.
ls -caht или ls -cahtl
# 10
Запишите в переменную среды PATH значение "". Как это повлияло на выполнение команд? Перезайдите по ssh и попробуйте вызывать любую команду заново. Сохранились ли изменения?
export PATH=””
следствие: ни один исполняемый файл системой теперь не находится
после переподключения система вернулась в прежнее состояние
# 11
Модифицируйте команду так, чтобы у директорий в начале названия присутствовал глобальный индекс idx.
idx=0;
for species in cubane ethane methane;
do
for temperature in 25 30 37 40;
do
mkdir $idx-$species-$temperature;
((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 - путь к директории, в которой файл найден,
%P - имя файла.
# 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

@ -0,0 +1,99 @@
# Задания
# 1
Вы в директории /home/stud/data. Какая из команд переместит вас в домашнюю директорию?
1 cd .
2 cd /
3 cd /home/stud
4 cd ../..
5 cd ~
6 cd home
7 cd ~/data/..
8 cd
9 cd ..
# 2
Создайте файл dummy в /tmp. Попробуйте удалить его указав флаг -i для команды rm. В чём отличие удаления файла с этим флагом и без него?
# 3
Создайте папку backup в домашней директории. Одновременно скопируйте файл .bashrc в /tmp/ и в backup с помощью cp.
# 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
# 5
Скопируйте файлы экспериментов в backup, но распределите по папкам разные типы файлов. .data в backup/dataset, dat-calibration в backup/calibration, логи в backup/logs. В shared поместите все файлы, созданные 23 числа в папку 23day. Напишите команды в двух вариантах: с относительными путями и с абсолютными.
# 6
Посчитайте количество строк в файле /var/log/messages.
# 7
Инициализируйте файл head_tail_messages с помощью команды head из строк в /var/log/messages, затем добавьте в head_tail_messages последние 23 строки из /var/log/messages.
# 8
Создайте псевдоним "dc", который разрешается в команду "cd" для случаев опечатки.
# 9
Прочитайте мануал `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 .
-rw-r--r-- 1 user group 514 Jan 14 06:42 bar
-rw-r--r-- 1 user group 106M Jan 13 12:12 foo
drwx------+ 47 user group 1.5K Jan 12 18:08 ..
```
# 10
Запишите в переменную среды PATH значение "". Как это повлияло на выполнение команд? Перезайдите по ssh и попробуйте вызывать любую команду заново. Сохранилиcь ли изменения?
# 11
Выполните в терминале следующую команду в директории /tmp:
for species in cubane ethane methane;
do
for temperature in 25 30 37 40;
do
mkdir $species-$temperature;
done
done
Что в результате вы получили в консоли? Модифицируйте команду так, чтобы у директорий в начале названия присутствовал глобальный индекс idx.
# 12
(*) Напишите команду или сценарий для рекурсивного поиска самого последнего измененного файла в каталоге. В общем, можете ли вы перечислить все файлы по давности?
# 13
Напишите цикл, который проходит по списку файлов в текущей директории и выводит полный путь к директории и имя файла.
# 14
Выведите результат сложения 10 и 4 с помощью bash синтаксиса для арифметических операций.
# 15
Выведите результат умножения двух переменных с помощью bash синтаксиса для арифметических операций.
# 16
Напишите команду, которая рекурсивно находит все HTML-файлы в папке и упаковывает их в tar.gz архив. Используйте find и xargs. Ваша команда должна работать, даже если в файлах есть пробелы (подсказка: используйте null разделитель).
Loading…
Cancel
Save