Просто для удовольствия:
есть ли способ контролировать / захватывать / сбрасывать то, на что пишется /dev/null
?
В Debian или FreeBSD, если это имеет значение, также приветствуются любые другие решения для конкретных ОС.
Просто для удовольствия:
есть ли способ контролировать / захватывать / сбрасывать то, на что пишется /dev/null
?
В Debian или FreeBSD, если это имеет значение, также приветствуются любые другие решения для конкретных ОС.
/dev/null
s. Я бы не хотел проводить исследование сам, но я бы хотел прочитать результаты. (Скорее всего, существуют некоторые этические проблемы, связанные с «просмотром мусора людей», но концепция, тем не менее, интересна.)Ответы:
Создание
/dev/null
именованного канала, вероятно, самый простой способ. Имейте в виду, что некоторые программы (sshd
например) будут работать неправильно или не будут выполняться, когда обнаружат, что это не специальный файл (или они могут прочитать из него/dev/null
, ожидая его возвратаEOF
).Это должно работать во всех дистрибутивах Linux и всех основных BSD.
источник
tail
сбоя может произойти сбой многих программ, поскольку буфер канала заполнен./dev/null
, не понравится.No magic
является руководящим принципом в философии UNIX./dev/null
это магия,mknod /dev/null c 1 3
это волшебная формула, чтобы вызвать его. (И для этого вам нужны суперсилы ...)Однажды я обнаружил, что / dev / null не должен быть специальным файлом dev. Давным-давно / dev / null на работающей системе Ultrix был удален, поэтому в следующий раз, когда программа перенаправилась на / dev / null, она оказалась обычным файлом, полным выходных данных этой программы. (Я думаю, что это был «не такой файл или каталог», что означало, что, когда мы пытались выяснить, что происходит, нам приходилось делать
cat /dev/null
и говорить,no such file or directory
что чертовски смущало нас.)Поэтому я предлагаю заменить его на именованный канал, а затем присоединить к каналу программу, которая будет читать и отслеживать ее.
источник
/dev/null
всегда возвращают 0 байтов в read (cat /dev/null > foo
). Наличие/dev/null
обычного файла с содержимым нарушило бы это ожидание.Я думаю о идее, где / dev / null может быть символической ссылкой на дескриптор файла, но с механизмом добавления кода для определения операции чтения или записи, а затем, если она читается, она должна фактически считываться из / dev / actualnull, созданного отдельно с mknod, и если он записан, запишите вызывающую программу и попытайтесь выполнить запись / подсчет для анализа программ, использующих / dev / null для записи. Я полагаю, что это будет стоить дорого с точки зрения производительности. Я предполагаю, что это не практично, так как большинство программ оболочки или кода все равно используют перенаправление. Может быть, inotify может быть использован для мониторинга использования / dev / null? или переписать код ядра, который обрабатывает устройства 1: 3, снова скомпилировать и переустановить, экспериментально.
источник
/dev/null
из демона), иsshd
все равно жаловался и не запускался.sshd
(по крайней мере, в пакете для Debian Squeeze) жалуется,sshd: cannot create /dev/null
если это что-то кроме самой распространенной реализации.