Вопрос: Время файла linux procfs


При изучении «длинного» списка каталогов /proc/<pid>/ в Linux, я заметил, что записи псевдо-файла в каталоге иногда имеют разные времена, связанные с ними.

Из того, что я знаю о том, как работают внутренние элементы, в структуре нет никаких «произвольных» или «непредсказуемых» атрибутов, все детерминировано, все (включая время файла) должно быть определено где-то основанные на некоторых критериях; является ли этот критерий полезным или нет, является важным вопросом.

Например, временная метка в самой папке (/proc/<pid>/), похоже, отражает время начала соответствующего процесса (идентификатор процесса, по крайней мере - он не обновляется вызовом exec), в то время как различные записи, такие как proc/<pid>/fd/ или /proc/<pid>/cwd может быть другой ценностью. Лучше всего предположить, что многие из этих кешей время, когда информация была сначала восстановлена, но это трудно сказать.

Есть ли полезные знания, которые можно получить здесь?


5
2018-01-03 04:58


Источник




Ответы:


Как вы, возможно, знаете, файлы под /proc являются файлами в памяти, что означает, что они не существуют на жестком диске. Однако их можно рассматривать как любой другой файл. Я не вижу особого значения времени модификации этих файлов. Они похожи на любой другой файл в вашей файловой системе.

Вы можете попробовать проверить время одного файла, а затем touch Это. Как и ожидалось, время изменения файла будет обновлено.


2
2018-01-03 08:10





/proc это просто еще одна файловая система, конечные записи внутри нее создаются так же, как и в любой другой файловой системе. Если вы создаете процесс, то /proc/<pid>/ запись создается для хранения данных о процессе. Когда этот процесс открывает файловый дескриптор, тогда запись создается внутри /proc/<pid>/fd/,

Что касается полезных знаний, у меня не было возможности использовать содержимое /proc/<pid>/ на что угодно, но я ожидаю, что однажды смогу. Это зависит от того, что вам полезно. Sysadmin найдет для себя интересные вещи, чем эксперт по безопасности, чем администратор db. Тем не менее, хорошо знать, что есть такие данные. Однажды это может пригодиться, но я не буду вкладывать слишком много времени в изучение орехов и болтов этой проблемы. Это потому, что для меня лично это было бы плохой инвестицией времени. Ваш пробег может варьироваться :).

редактировать: Я не смог ответить на комментарий пользователя tylerl в комментарии, поэтому он здесь.

tylerl, вы правы и неправы одновременно, в зависимости от того, как вы смотрите на проблему (подумайте: двойственность волны / частицы). Вы, безусловно, правы, когда говорите, что procfs не является «реальной» файловой системой. Вы не можете создавать каталоги или файлы или хранить там данные. Да, это API, который позволяет получить доступ к некоторым структурам ядра, он определенно не создает никаких структур на диске. Я не уверен в структурах памяти (где [cm] время каталогов в /proc хранится?), но я признаю невежество и не буду спорить с этим.

С другой стороны, когда вы хотите исследовать procfs, посмотрите, что там есть, и учитесь на входах там, вы можете в значительной степени рассматривать его как «просто еще одну файловую систему». Вы можете прочитать некоторые «файлы», и вы можете писать (обычно строго определенные значения) в некоторые «файлы». Когда вы создаете процесс (скажем, запустите bash &), /proc/<pid> запись будет иметь дату создания, соответствующую времени создания процесса. Я думаю, что для модели «посмотрим, что есть» достаточно хорошее приближение - «эта запись создается в файловой системе во время создания процесса». Конечно, это может быть ложью. Тем не менее, это очень полезная ложь, если вам не нужна вся гора истины, брошенная на вас.


1
2018-01-03 08:45



А на самом деле - Я могу с уверенностью сказать, что ваш первый абзац неверен. proc тип файловой системы не является реальной файловой системой, и записи не создаются в ответ на системные события так, как они есть, скажем, в udev, Вместо этого ОС реагирует на запросы (например, доступ к файлам и каталогам), синтезируя и возвращая правильные данные на месте. Это не столько объект, сколько API. Это может кэш результаты, но он никогда не создает фактическую структуру в памяти или на диске в любом месте. - tylerl
@tylerl Спасибо за комментарий. Я отреагировал на это в редактировании. - Paweł Brodacki