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.
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.
/dev/null
moż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.)Odpowiedzi:
Tworzenie
/dev/null
nazwanej rury jest prawdopodobnie najłatwiejszym sposobem. Ostrzegamy, że niektóre programy (sshd
na 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óciEOF
).Powinno to działać we wszystkich dystrybucjach Linuksa i wszystkich głównych BSD.
źródło
tail
nie powiedzie, wówczas wiele programów może się nie powieść, ponieważ bufor potoku jest pełny./dev/null
nie polubią tego.No magic
jest naczelną zasadą w filozofii UNIX./dev/null
to magia,mknod /dev/null c 1 3
to magiczna formuła, aby ją przywołać. (I do tego potrzebujesz supermocy ...)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/null
i powiedziano nam,no such file or directory
co 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ł.
źródło
/dev/null
zawsze zwraca 0 bajtów na read (cat /dev/null > foo
). Będąc/dev/null
zwykłym plikiem z zawartością, przerwałoby to oczekiwania.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.
źródło
/dev/null
z demona), alesshd
nadal narzekałem i nie chciałem zacząć.sshd
(przynajmniej w pakiecie dla Debian Squeeze) narzeka,sshd: cannot create /dev/null
jeśli jest to coś innego niż najczęstsza implementacja.