Skip to content

Latest commit

 

History

History
91 lines (57 loc) · 7.13 KB

README.md

File metadata and controls

91 lines (57 loc) · 7.13 KB

Домашнее задание к занятию «Операционные системы. Лекция 1»

Цель задания

В результате выполнения задания вы:

  • познакомитесь с инструментом strace, который помогает отслеживать системные вызовы процессов и является необходимым для отладки и расследований при возникновении ошибок в работе программ;
  • рассмотрите различные режимы работы скриптов, настраиваемые командой set. Один и тот же код в скриптах в разных режимах работы ведёт себя по-разному.

Чеклист готовности к домашнему заданию

  1. Убедитесь, что у вас установлен инструмент strace, выполнив команду strace -V для проверки версии. В Ubuntu 20.04 strace установлен, но в других дистрибутивах его может не быть в коплекте «из коробки». Обратитесь к документации дистрибутива, чтобы понять, как установить инструмент strace.
  2. Убедитесь, что у вас установлен пакет bpfcc-tools, информация по установке по ссылке.

Дополнительные материалы для выполнения задания

  1. Изучите документацию lsof — man lsof. Та же информация есть в сети.
  2. Документация по режимам работы bash находится в help set или в сети.

Задание

  1. Какой системный вызов делает команда cd?

    В прошлом ДЗ вы выяснили, что cd не является самостоятельной программой. Это shell builtin, поэтому запустить strace непосредственно на cd не получится. Вы можете запустить strace на /bin/bash -c 'cd /tmp'. В этом случае увидите полный список системных вызовов, которые делает сам bash при старте.

    Вам нужно найти тот единственный, который относится именно к cd. Обратите внимание, что strace выдаёт результат своей работы в поток stderr, а не в stdout.

  2. Попробуйте использовать команду file на объекты разных типов в файловой системе. Например:

    vagrant@netology1:~$ file /dev/tty
    /dev/tty: character special (5/0)
    vagrant@netology1:~$ file /dev/sda
    /dev/sda: block special (8/0)
    vagrant@netology1:~$ file /bin/bash
    /bin/bash: ELF 64-bit LSB shared object, x86-64

    Используя strace, выясните, где находится база данных file, на основании которой она делает свои догадки.

  3. Предположим, приложение пишет лог в текстовый файл. Этот файл оказался удалён (deleted в lsof), но сказать сигналом приложению переоткрыть файлы или просто перезапустить приложение возможности нет. Так как приложение продолжает писать в удалённый файл, место на диске постепенно заканчивается. Основываясь на знаниях о перенаправлении потоков, предложите способ обнуления открытого удалённого файла, чтобы освободить место на файловой системе.

  4. Занимают ли зомби-процессы ресурсы в ОС (CPU, RAM, IO)?

  5. В IO Visor BCC есть утилита opensnoop:

    root@vagrant:~# dpkg -L bpfcc-tools | grep sbin/opensnoop
    /usr/sbin/opensnoop-bpfcc

    На какие файлы вы увидели вызовы группы open за первую секунду работы утилиты? Воспользуйтесь пакетом bpfcc-tools для Ubuntu 20.04. Дополнительные сведения по установке по ссылке.

  6. Какой системный вызов использует uname -a? Приведите цитату из man по этому системному вызову, где описывается альтернативное местоположение в /proc и где можно узнать версию ядра и релиз ОС.

  7. Чем отличается последовательность команд через ; и через && в bash? Например:

    root@netology1:~# test -d /tmp/some_dir; echo Hi
    Hi
    root@netology1:~# test -d /tmp/some_dir && echo Hi
    root@netology1:~#

    Есть ли смысл использовать в bash &&, если применить set -e?

  8. Из каких опций состоит режим bash set -euxo pipefail, и почему его хорошо было бы использовать в сценариях?

  9. Используя -o stat для ps, определите, какой наиболее часто встречающийся статус у процессов в системе. В man ps изучите (/PROCESS STATE CODES), что значат дополнительные к основной заглавной букве статуса процессов. Его можно не учитывать при расчёте (считать S, Ss или Ssl равнозначными).


Правила приёма домашнего задания

В личном кабинете отправлена ссылка на .md-файл в вашем репозитории.

Критерии оценки

Зачёт:

  • выполнены все задания;
  • ответы даны в развёрнутой форме;
  • приложены соответствующие скриншоты и файлы проекта;
  • в выполненных заданиях нет противоречий и нарушения логики.

На доработку:

  • задание выполнено частично или не выполнено вообще;
  • в логике выполнения заданий есть противоречия и существенные недостатки.