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.

8.2 KiB

Задания

1

Повторите структуру директории с помощью команд 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 /
3 cd /home/stud
4 cd ../..
5 cd ~
6 cd home
7 cd ~/project/..
8 cd
9 cd ..

3

Перейдите в папку backup. Используя команду cp, выполните следующие действия одной строкой:

  • скопируйте два файла: .bashrc и .bash_profile в папку backup,
  • скопируйте файл .bashrc в две директории: /tmp/ и shared.

4

Создайте файл dummy в /tmp. Попробуйте удалить его указав флаг -i для команды rm. В чём отличие удаления файла с этим флагом и без него?

5

Скопируйте файлы экспериментов в backup, но распределите их по папкам. Файлы с расширением .datа в backup/data, файлы с расширением .calib в backup/calibration, логи .log в backup/logs. В shared поместите все файлы, созданные 23 числа в папку 23day. Напишите команды в двух вариантах: с относительными путями и с абсолютными и проверьте, что их выполнение даёт одинаковый результат.

6

Посчитайте количество строк, слов и символов в файле /var/log/dpkg.log.

7

Инициализируйте файл head_tail_messages с помощью команды head из строк в /var/log/dpkg.log. Затем добавьте в head_tail_messages последние 23 строки из /var/log/dpkg.log.

8

Постройте конвейр с помощью оператора |, который считывает содержимое /var/log/dpkg.log, находит только строки содержащие слово perl, сохраняет результат в файл /tmp/perl_pkgs и одновременно выводит в консоль количество найденных строк.

9

Выполните две команды: head /nonexistent; echo Ok и head /nonexistent && echo Ok. В чём отличие в поведении?

10

Оператор || похож на оператор ИЛИ в программировании. Что вы ожидаете увидеть при запуске mkdir test || echo Ok? Проверьте так ли это.

11

Создайте псевдонимы: dc, chomd которые разрешаются в команды: cd, chmod чтобы наконец решить проблему опечаток.

Создайте псевдоним 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 .
-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 ..

13

Попробуйте вывести содержимое переменной среды HOME с помощью echo в одинарных и двойных кавычках. В чём разница?

14

Запишите в переменную среды PATH значение "". Как это повлияло на выполнение команд? Перелогиньтесь и попробуйте вызывать любую команду заново. Сохранилиcь ли изменения?

15

C помощью bash синтаксиса для арифметических операций выведите результат:

  • сложения 10 и 4,
  • умножения 10 на 4,
  • деления 10 на b, где b это переменная равная 3.

Сохраните результат операции a % b в переменную c, где a и b результаты любых предыдущих двух операций. Выведите с.

16

Выполните в терминале следующую команду в директории /tmp:

for species in cubane ethane methane;
do
    for temperature in 25 30 37 40;
    do
        mkdir $species-$temperature;
    done
done

Что в результате вы видите в консоли? Модифицируйте команду так, чтобы у директорий в начале названия присутствовал глобальный индекс idx. На каждой итерации внутреннего цикла idx должна увеличиваться на единицу.

17

Напишите цикл, который проходит по списку файлов в текущей директории и выводит полный путь к директории и имя файла.

18

Далее поработайте с командой watch date. Команда watch вызывает периодически переданную ей команду в качестве аргумента. Это удобно для организации простого мониторинга.

Первый раз вызовите команду и отправьте процессу сигнал SIGINT комбинацией клавишь Ctrl+C.

Второй раз вызовите команду и отправьте процессу сигнал SIGTSTP комбинацией клавишь Ctrl+Z. Выведите статус процесса командой jobs. Переведите процесс в активное состояние командой fg и остановите процесс.

Третий раз вызовите команду с добавлением одиночного символа &. Остановите процесс командой kill.

man страницы: kill, signal

19

Напишите команду, которая рекурсивно находит все HTML-файлы в папке и упаковывает их в tar.gz архив. Используйте find и xargs. Ваша команда должна работать, даже если в файлах есть пробелы (подсказка: используйте null разделитель).

20

(*) Напишите команду или сценарий для рекурсивного поиска самого последнего измененного файла в каталоге. В общем, можете ли вы перечислить все файлы по давности?