Способ обнуления открытого удаленного файла
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Open with Desktop
- View raw
- Copy raw contents Copy raw contents
Copy raw contents
Copy raw contents
Какой системный вызов делает команда cd? В прошлом ДЗ мы выяснили, что cd не является самостоятельной программой, это shell builtin, поэтому запустить strace непосредственно на cd не получится. Тем не менее, вы можете запустить strace на /bin/bash -c 'cd /tmp'. В этом случае вы увидите полный список системных вызовов, которые делает сам bash при старте. Вам нужно найти тот единственный, который относится именно к cd.
Попробуйте использовать команду 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 на основании которой она делает свои догадки.
openat(AT_FDCWD, "/usr/share/misc/magic.mgc", O_RDONLY) = 3
Предположим, приложение пишет лог в текстовый файл. Этот файл оказался удален (deleted в lsof), однако возможности сигналом сказать приложению переоткрыть файлы или просто перезапустить приложение – нет. Так как приложение продолжает писать в удаленный файл, место на диске постепенно заканчивается. Основываясь на знаниях о перенаправлении потоков предложите способ обнуления открытого удаленного файла (чтобы освободить место на файловой системе).
что я попробовал, в очередной раз, установил nginx sudo apt install nginx далее зашел в дректорию где лежат его логи, cd /var/log/nginx удаляю sudo rm access.log пробую найти по удаленному файлу и процессу ps aux -P | grep nginx | grep access.log пробовал разные комбинации, все время вовращает пустую строку далее если бы вернулось, то как в лекции cat /proc/181248/fd/3 > /var/log/nginx/access.log только пиды мои с nginx.
в теории я понял что необходимо сделать и в чем смысл, но на практике проделать я не смог, смыл такой что у нас какой то процесс работает с файлом, но файл мы удилии, нам как я понял из леции узнать PID процесса, вот я это и не смог сделать возвращает пустую строку, на пример я открыл файл чего то там сделал в nano, потом закрыл и удалил, наверное вот это что то там ине правильно я делаю, файл тут же отпускаеться, я не понял как сделать что бы он был удален, но удерживался при этом. ну так вот мы узнаем PID процесса что собственно удерживает файл, после чего по PID и названию отыскиваем его и восстанавливаем. lsof -p 181248 | grep do_not_delete_me
Занимают ли зомби-процессы какие-то ресурсы в ОС (CPU, RAM, IO)? Ответ: "Зомби" в отличии от "сирот" освобождают свои ресурсы, но не освобождают запись в таблице процессов.
как я не пытался и под root в том числе результат был таков /usr/sbin/opensnoop-bpfcc
Какой системный вызов использует uname -a? Приведите цитату из man по этому системному вызову, где описывается альтернативное местоположение в /proc, где можно узнать версию ядра и релиз ОС.
Часть информации, возвращаемой данным системным вызовом также доступна через sysctl и через файлы /proc/sys/kernel/.
test -d /tmp/some_dir && echo Hi - в данном случае echo отработает только если успешно отработает test
set -e - разорвет сессию при ненулевом значении исполняемых команд в случае && вместе с set -e- наверное при ошибке , выполнение команд прекратиться.
Из каких опций состоит режим bash set -euxo pipefail и почему его хорошо было бы использовать в сценариях? Ответ: -e прерывает выполнение при ошибке любой команды кроме последней -x с помощью него bash печатает в стандартный вывод все команды перед их исполнением -u благодаря ему оболочка проверяет инициализацию переменных в скрипте. -o pipefail возвращает код возврата набора/последовательности команд, ненулевой при последней команды или 0 для успешного выполнения команд.
Используя -o stat для ps, определите, какой наиболее часто встречающийся статус у процессов в системе. В man ps ознакомьтесь (/PROCESS STATE CODES) что значат дополнительные к основной заглавной буквы статуса процессов. Его можно не учитывать при расчете (считать S, Ss или Ssl равнозначными).
Самые частые S*(S,S+,Ss,Ssl,Ss+) - Процессы ожидающие завершения I*(I,I<) - фоновые(бездействующие).
Вот и займтесь этим!
У него в голове дыра и там поселился выводок дроздов
RTFM, в UNIX открытие файла - это создание хардлинка на него. При удалении файла удаляется хардлинк, созданный в файловой системе, а сам файл физически удаляется, когда будет удален последний хардлинк на него (то есть тот, который создан при открытии файла).
==============================================================================
удаление файлов в Unix происходит совершенно иначе, чем в DOS/Windows. А именно, файл считается
удаленным, когда уничтожены все имена, ссылающиеся на идентификатор данного inode (то есть файл
исключен из файловой системы), и закрыта последняя программа, к нему обращающаяся (то есть
завершен процесс, загрузивший данные файла в память, и уничтожен индексный дескриптор файла в
этом процессе). В описании атрибутов файла это выражается в том, что счетчик ссылок его inode
обнуляется. Разумеется, сами по себе данные, составляющие содержание файла, физически могут
продолжать существовать на диске, но для системы они уже недоступны. А поскольку содержание
файла оторвано от его имени, восстановление случайно удаленного файла по фрагменту имени (на чем
основаны DOS-утилиты типа UNERASE и UNDELETE) оказывается невозможным.
Пока любой файл открыт, то есть существует ссылающийся на него процесс, он продолжает
существовать, даже если имя его исключено из всех каталогов, и может быть записан, скопирован,
переименован, и т.д. То есть открытый каким либо процессом дескриптор данного файла - гарантия его
существования, по крайней мере до завершения процесса. Именно поэтому я ранее сказал, что файл не
обязательно имеет имя: в случае удаления открытого файла из каталога он некоторое время существует
как бы безымянным, для поддержания его бытия достаточно открытого дескриптора, ассоциированного с
inode.
==============================================================================
можно, но не всегда;) нередки таинственные письмена Permission Denied %)
При удалении все еще открытого файла количество свободного места не меняется. Ситуация кстати очень нередкая. >А если я вытащу съёмный диск, могу ли я проигрываемый с него файл восстановить так же, или нет? а на каком разделе? >удаляю проигрываемый файл, получается 3 064 694 байт. Но я всё Всем привет. >cp /dev/null > file.log На своих БД(Sybase ASE) лог файлы режу стандартно: А что за процесс? Может он сам умеет переоткрывать свои логи? >Всем привет. >Процесс, который пишет в файл - tcpdump: This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Copy raw contents Copy raw contents 1. Какой системный вызов делает команда cd ? 2. . Используя strace выясните, где находится база данных file на основании которой она делает свои догадки. . 3. Предположим, приложение пишет лог в текстовый файл. Этот файл оказался удален (deleted в lsof), однако возможности сигналом сказать приложению переоткрыть файлы или просто перезапустить приложение – нет. Так как приложение продолжает писать в удаленный файл, место на диске постепенно заканчивается. Основываясь на знаниях о перенаправлении потоков предложите способ обнуления открытого удаленного файла (чтобы освободить место на файловой системе). wryter.py создаёт файл lsof.log 4. Занимают ли зомби-процессы какие-то ресурсы в ОС (CPU, RAM, IO)? 5. В iovisor BCC есть утилита opensnoop : 6. Какой системный вызов использует uname -a ? Приведите цитату из man по этому системному вызову, где описывается альтернативное местоположение в /proc , где можно узнать версию ядра и релиз ОС. Если установить дополнительно пакет manpages-dev 7. Чем отличается последовательность команд через ; и && в bash? Для выполнения команд которые будут выполнены последовательно, одна за другой. Для этого используется специальный оператор ; Если написать в командной строке: то оболочка вначале запустит на выполнение команду mkdir /tmp/new-folder , выполнится создание каталога, после чего выполнится перемещение в директорию cd /tmp/new-folder . Оператор && является управляющим оператором. Если в командной строке стоит command1 && command2 , то command2 выполняется в том случае, если статус выхода из команды command1 имеет нулевой статус, что говорит об успешном ее завершении. 7. Есть ли смысл использовать в bash && , если применить set -e set -e - Немедленно выйти, если команда завершается с ненулевым статусом. 8. Изкаких опций состоит режим bash set -euxo pipefail и почему его хорошо было бы использовать в сценариях? Сценарий с такими ключами выйдет если статуc завершения будет удачным, необходимо вводить определённые переменный при выполнении сценария, в противном случаее выдаст ошибку об не установленных переменных, будет выводить выполнение команд по мере их выполнения, выдаст pipefail если статус выполнения будет не удачным. S - Самый встречающийся 5 процессов. This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Copy raw contents Copy raw contents Домашнее задание к занятию "3.3. Операционные системы, лекция 1" 1. Какой системный вызов делает команда cd ? 2. Попробуйте использовать команду file на объекты разных типов на файловой системе. Например: Используя strace выясните, где находится база данных file на основании которой она делает свои догадки. 3. Основываясь на знаниях о перенаправлении потоков предложите способ обнуления открытого удаленного файла (чтобы освободить место на файловой системе). 4. Занимают ли зомби-процессы какие-то ресурсы в ОС (CPU, RAM, IO)? Нет. Когда процесс завершается через exit , вся память и связанные с ним ресурсы освобождаются, чтобы их могли использовать другие процессы. 5. В iovisor BCC есть утилита opensnoop : На какие файлы вы увидели вызовы группы open за первую секунду работы утилиты? Воспользуйтесь пакетом bpfcc-tools для Ubuntu 20.04. 6. Какой системный вызов использует uname -a ? Приведите цитату из man по этому системному вызову, где описывается альтернативное местоположение в /proc , где можно узнать версию ядра и релиз ОС. uname() Part of the utsname information is also accessible via /proc/sys/kernel/. 7. Чем отличается последовательность команд через ; и через && в bash ? Например: Есть ли смысл использовать в bash &&, если применить set -e? Операторы последовательного выполнения команд.
Скрипт с set -e не упадёт, если ошибкой завершится команда, выполненная в конструкции с оператором && . Смысла использования bash && + set -e не вижу. 8. Из каких опций состоит режим bash set -euxo pipefail и почему его хорошо было бы использовать в сценариях?
Повышает детализацию вывода ошибок и завершит сценарий при наличии ошибок, на любом этапе выполнения сценария, кроме последней завершающей команды. 9. Используя -o stat для ps , определите, какой наиболее часто встречающийся статус у процессов в системе. В man ps ознакомьтесь ( /PROCESS STATE CODES ) что значат дополнительные к основной заглавной буквы статуса процессов. Его можно не учитывать при расчете (считать S, Ss или Ssl равнозначными). S - процессы спящие, находятся в режиме ожидания Читайте также:
|