Monitoruj, co jest wysyłane do / dev / null?

19

Dla zabawy:
Czy istnieje sposób monitorowania / przechwytywania / zrzutu tego, co jest zapisywane /dev/null?

Na Debianie lub FreeBSD, jeśli ma to znaczenie, mile widziane są również inne rozwiązania specyficzne dla systemu operacyjnego.

Ali
źródło
3
Możliwe, ale jak opisują odpowiedzi i komentarze, jest to / bardzo / bardzo zły pomysł.
Shadur
2
@Shadur: Mogą istnieć złe rozwiązania, ale nie czyni to pomysłu nieciekawym lub złym.
jlliagre
1
Rzeczywiście, właśnie znalazłem to pytanie, ponieważ zastanawiałem się, co /dev/nullmoże się pojawić analiza zawartości wielu przechwyconych obrazów . Nie chciałbym sam przeprowadzać badań, ale chciałbym przeczytać wyniki. (Zasadniczo istniałyby pewne problemy etyczne podczas „przeglądania ludzkich śmieci”, ale koncepcja jest jednak interesująca.)
beporter

Odpowiedzi:

12

Tworzenie /dev/nullnazwanej rury jest prawdopodobnie najłatwiejszym sposobem. Ostrzegamy, że niektóre programy ( sshdna przykład) będą działać nieprawidłowo lub nie będą działać, gdy dowiedzą się, że nie jest to specjalny plik (lub mogą czytać /dev/null, oczekując, że zwróci 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

Powinno to działać we wszystkich dystrybucjach Linuksa i wszystkich głównych BSD.

Chris Down
źródło
1
Należy zauważyć, że jeśli się tailnie powiedzie, wówczas wiele programów może się nie powieść, ponieważ bufor potoku jest pełny.
Arcege
4
Programy, które czytają, /dev/nullnie polubią tego.
Gilles „SO - przestań być zły”,
@Gilles - Rzeczywiście, stąd moja notatka.
Chris Down,
3
@Ali Tak. No magicjest naczelną zasadą w filozofii UNIX.
phihag
4
Ahem /dev/null to magia, mknod /dev/null c 1 3to magiczna formuła, aby ją przywołać. (I do tego potrzebujesz supermocy ...)
Stéphane Gimenez
6

Kiedyś przekonałem się, że / dev / null nie musi być specjalnym plikiem dla programistów. Dawno, dawno temu / dev / null w działającym systemie Ultrix został usunięty, więc następnym razem program przekierował się do / dev / null, w rezultacie był to normalny plik pełen danych wyjściowych z tego programu. (Myślę, że to „nie ma takiego pliku ani katalogu”, co oznaczało, że kiedy próbowaliśmy dowiedzieć się, co się dzieje, zrobiliśmy to cat /dev/nulli powiedziano nam, no such file or directoryco nas do cholery zmyliło).

Tak więc moją sugestią byłoby zastąpienie go nazwanym potokiem, a następnie dołączenie do potoku programu, który by go odczytał i monitorował.

Paul Tomblin
źródło
4
Wiele programów polega również na tym, że /dev/nullzawsze zwraca 0 bajtów na read ( cat /dev/null > foo). Będąc /dev/nullzwykłym plikiem z zawartością, przerwałoby to oczekiwania.
Arcege
1
Tak, tak to odkryliśmy. Programy nie spodziewały się żadnych danych wejściowych i dostawały się z tego mnóstwo, plus / dev / był już wypełniony.
Paul Tomblin,
1

Myślę o pomyśle, w którym / dev / null może być dowiązaniem symbolicznym do deskryptora pliku, ale z mechanizmem dodawania kodu w celu określenia operacji odczytu lub zapisu, a następnie, jeśli zostanie odczytana, powinna faktycznie odczytać z / dev / actualnull utworzonego osobno za pomocą mknod, a jeśli jest zapisany, zanotuj program wywołujący i spróbuj zalogować się / policzyć w celu analizy programów, które używają / dev / null do zapisu. Podejrzewam, że będzie to dużo kosztować pod względem wydajności. Myślę, że to nie jest praktyczne, ponieważ większość programów powłoki lub kodu i tak używa przekierowania. Czy można używać inotify do monitorowania użycia / dev / null? lub przepisz kod jądra, który obsługuje urządzenia 1: 3, ponownie skompiluj i zainstaluj ponownie, eksperymentuj.

Nikhil Mulley
źródło
2
Nadal są pewne problemy, próbowałem zrobić coś takiego (nie w jądrze, ale w przejrzysty sposób, pozwalając na odczyt z innego pliku i kontrolowanie /dev/nullz demona), ale sshdnadal narzekałem i nie chciałem zacząć.
Chris Down
hmm .. ciekawe na / dev / null kontrolowanie z demona. Myślę, że większość programów po prostu chciałaby użyć / dev / null jako kolejnego pliku, pozostawiając znaczenie i semantykę / dev / null systemowi.
Nikhil Mulley
Cóż sshd(przynajmniej w pakiecie dla Debian Squeeze) narzeka, sshd: cannot create /dev/nulljeśli jest to coś innego niż najczęstsza implementacja.
Chris Down,