Відстежуйте, що надсилається в / dev / null?


19

Просто для розваги:
чи є спосіб відстежувати / захоплювати / скидати все, що написано /dev/null?

У Debian або FreeBSD, якщо це важливо, будь-які інші специфічні для ОС рішення також вітаються.


3
Можливо, але, як описуються відповіді та коментарі, це / дуже / дуже не дуже гарна ідея.
Шадур

2
@Shadur: Можуть бути погані рішення, але це не робить ідею нецікавою чи поганою.
jlliagre

1
Дійсно, я просто знайшов це питання, тому що розглядав, який аналіз вмісту з багатьох захоплених даних /dev/nullможе виявитись. Я б не хотів займатися дослідженням сам, але хотів би прочитати результати. (Дуже ймовірно, що в принципі "переглядати сміття людей" будуть якісь етичні проблеми, але все-таки ця концепція цікава.)
beporter

Відповіді:


12

Зробити /dev/nullназвану трубу, мабуть, найпростіший спосіб. Попереджуйте, що деякі програми ( sshdнаприклад) будуть діяти ненормально або не виконуватимуться, коли дізнаються, що це не спеціальний файл (або вони можуть прочитати з нього /dev/null, очікуючи його повернення EOF).

# Remove special file, create FIFO and read from it
rm /dev/null && mkfifo -m622 /dev/null && tail -f /dev/null
# Remove FIFO, recreate special file
rm /dev/null && mknod -m666 /dev/null c 1 3

Це повинно працювати в усіх дистрибутивах Linux та всіх основних BSD.


1
Варто зазначити, що якщо tailне вдасться, багато програм може вийти з ладу, оскільки буфер труби заповнений.
Арседж

4
Програмам, які читають /dev/null, не подобається це.
Жил "ТАК - перестань бути злим"

@Gilles - Дійсно, звідси і моя примітка.
Кріс Даун

3
@Ali Так. No magicє керівним принципом у філософії UNIX.
фігаг

4
Ахем /dev/null - це магія, mknod /dev/null c 1 3це магічна формула, щоб викликати її. (І для цього вам потрібні надпотужні сили ...)
Стефан Гіменез

6

Одного разу я з’ясував важкий шлях, що / dev / null не повинен бути спеціальним файлом розробників. Здавна / dev / null в системі Ultrix на роботі видалили, тож наступного разу програма перенаправлялася на / dev / null, і в кінцевому підсумку це був звичайний файл, повний виводу з цієї програми. (Я думаю, що це "немає такого файлу чи каталогу", що означало, коли ми намагалися розібратися, що відбувається, ми б це зробили, cat /dev/nullі нам сказали, no such file or directoryщо збентежило нас з нами. "

Тож моя пропозиція повинна була б замінити його на іменовану трубку, а потім приєднати до труби програму, яка б читала її та моніторувала її.


4
Дуже багато програм також покладаються на те, що /dev/nullзавжди повертають 0 байт на read ( cat /dev/null > foo). Будучи /dev/nullзвичайним файлом із вмістом, зламає це очікування.
Арседж

1
Так, саме так ми його і виявили. Програми не очікували введення та отримання грошей, плюс / dev / заповнювався.
Пол Томблін

1

Я думаю про ідею, де / dev / null може бути символьним посиланням на дескриптор файлу, але з механізмом додавання коду, щоб визначити, що операція читається чи записується, а потім, якщо вона читається, вона насправді повинна читати з / dev / фактичного утворення, створеного окремо з mknod, і якщо він пише, запишіть програму, що викликає, та спробуйте ввійти / рахувати для аналізу програм, які використовують / dev / null для запису. Я думаю, що це коштуватиме багато в плані продуктивності. Я думаю, це не практично, оскільки більшість програм оболонки або код все одно використовують перенаправлення. Можливо, інотифікація може бути використана для моніторингу використання / dev / null? або переписати код ядра, який обробляє пристрої 1: 3, знову компілювати та перевстановлювати, експериментуючи.


2
Проблеми все ще є, я намагався зробити щось подібне (не в ядрі, а прозоро-ish, дозволяючи читати з іншого файлу і керувати /dev/nullз демона), і sshdвсе ж скаржився і не запускався.
Кріс Даун

хм..інтересує керування / dev / null управління від демон. Я думаю, що більшість програм просто хотіли б використовувати / dev / null як просто ще один файл, залишаючи важливість та семантику / dev / null для системи.
Nikhil Mulley

Ну, sshd(принаймні, в комплекті для Debian Squeeze) скаржиться, sshd: cannot create /dev/nullякщо це щось інше, але найпоширеніша реалізація.
Кріс Даун
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.