reorganize homeworks structure for parts 1-3

This commit is contained in:
2022-04-06 10:22:40 +07:00
parent e8c9ed8597
commit 2f7fd3bee7
30 changed files with 156 additions and 160 deletions

View File

@@ -0,0 +1,122 @@
Выполнение [домашнего задания](https://github.com/netology-code/sysadm-homeworks/blob/devsys10/03-sysadmin-03-os/README.md)
по теме "3.3. Операционные системы, лекция 1".
## Q/A
1. Какой системный вызов делает команда `cd`?
Для удобства поиска перенаправим вывод команды `strace` в утилиту `less`
```shell
strace /bin/bash -c 'cd /tmp' 2>&1 | less
```
Далее, найдём в трейсе упоминание директории `tmp`, указанной в команде. Таким образом, обнаружим, что команда `cd`
делает системный вызов `chdir("/tmp")`.
2. Используя `strace` выясните, где находится база данных `file` на основании которой она делает свои догадки.
При использовании команды `file` на любом файле, `strace` выведет такую строку:
```
openat(AT_FDCWD, "/usr/share/misc/magic.mgc", O_RDONLY) = 3
```
Предположительно, `/usr/share/misc/magic.mgc` - это и есть база данных для команды `file`.
3. Предложите способ обнуления открытого удаленного файла (чтобы освободить место на файловой системе)
Зная PID процесса и то, что каждый процесс пишет свои потоки в файлы в директории `/proc/<PID>/fd`.
Таким образом, можно найти конкретный поток, который пишет в файл, вызвав команду
```shell
ls -la /proc/1988/fd/
total 0
dr-x------ 2 vagrant vagrant 0 Feb 16 03:25 .
dr-xr-xr-x 9 vagrant vagrant 0 Feb 16 03:25 ..
lrwx------ 1 vagrant vagrant 64 Feb 16 03:25 0 -> /dev/pts/0
lrwx------ 1 vagrant vagrant 64 Feb 16 03:25 1 -> /dev/pts/0
lrwx------ 1 vagrant vagrant 64 Feb 16 03:25 2 -> /dev/pts/0
lr-x------ 1 vagrant vagrant 64 Feb 16 03:25 3 -> /tmp/do_not_delete_me
```
В данном случае, поток под номером 3 держит соединение с искомым файлом. Таким образом, чтобы обнулить данный файл,
достаточно направить пустую строку в данный поток:
```shell
echo "" > /proc/1988/fd/3
```
4. Занимают ли зомби-процессы какие-то ресурсы в ОС (CPU, RAM, IO)?
Нет, zombie-процессы не используют никаких ресурсов операционной системы.
Единственное, что они занимают - это идентификатор процесса.
5. На какие файлы вы увидели вызовы группы `open` за первую секунду работы утилиты `opensnoop-bpfcc`?
За первую секунду работы утилиты был произведён следующий вывод:
```shell
sudo opensnoop-bpfcc
PID COMM FD ERR PATH
833 vminfo 5 0 /var/run/utmp
619 dbus-daemon -1 2 /usr/local/share/dbus-1/system-services
619 dbus-daemon 19 0 /usr/share/dbus-1/system-services
619 dbus-daemon -1 2 /lib/dbus-1/system-services
619 dbus-daemon 19 0 /var/lib/snapd/dbus-1/system-services/
```
6. Какой системный вызов использует `uname -a`? Приведите цитату из man по этому системному вызову,
где описывается альтернативное местоположение в /proc, где можно узнать версию ядра и релиз ОС.
Утилита `uname` использует системный вызов `uname`, мануал к которому можно прочитать командой `man 2 uname`.
Цитата из мануала
> Part of the utsname information is also accessible via /proc/sys/kernel/{ostype, hostname, osrelease, version, domainname}.
PS. На виртуальной машине не было установленных мануалов для системных вызовов. Чтобы их установить,
нужно выполнить команду `sudo apt install manpages-dev`.
7. Чем отличается последовательность команд через `;` и через `&&` в bash?
Есть ли смысл использовать в bash `&&`, если применить `set -e`?
При использовании `&&` будет учитываться код выхода предыдущей выполненой команды. Если он не 0, то выполнение последовательности будет прервано.
В случае же `;` последовательность будет выполнена в любом случае.
В случае `set -e` параметр имеет следующее определение
>When this option is on, if a simple command fails for any of the reasons listed in Consequences of Shell Errors or returns an exit status value >0,
> and is not part of the compound list following a while, until, or if keyword,
> and is not a part of an AND or OR list,
> and is not a pipeline preceded by the ! reserved word, then the shell shall immediately exit.
То есть, если данная команда будет выполнена в связке с другими командами, то она не сможет прервать выполнение последовательности.
Таким образом, для данной команды использование `&&` и `;` будет иметь одинаковое поведение.
8. Из каких опций состоит режим bash `set -euxo pipefail` и почему его хорошо было бы использовать в сценариях?
Параметр `-e` уже был рассмотрен в предыдущем вопросе.
`-u` - пишет ошибку в stderr, когда скрипт пытается обратиться к несуществующей переменной, но при этом не останавливает его работу.
Если запущен интерактивный режим, то его работа никогда не прерывается.
`-x` - пишет в stderr трейс (последовательность выполнения системных вызовов) для каждой команды перед её выполнением.
`-o` - устанавливает настройку работы последовательности команд. В данном случае значение `pipefail` говорит о том,
что статус работы всей последовательности будет значение последней команды с ненулевым кодом выхода или 0, если все команды выполнились успешно.
9. Используя `-o stat` для `ps`, определите, какой наиболее часто встречающийся статус у процессов в системе.
Выполним данную команду на виртуальной машине
```shell
ps -o stat
STAT
Ss
R+
```
Таким образом, самым встречающимся статусом является `Ss`. Первая буква - это непосредственно статус (`S - interruptible sleep (waiting for an event to complete)`),
вторая - дополнительная информация (`s - is a session leader`).