You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

5.9 KiB

Решения

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