Monitorar o que está sendo enviado para / dev / null?

19

Apenas por diversão:
existe uma maneira de monitorar / capturar / despejar o que está sendo gravado /dev/null?

No Debian, ou no FreeBSD, se necessário, quaisquer outras soluções específicas de SO também são bem-vindas.

Todos
fonte
3
Possível, mas como as respostas e os comentários descrevem, não é uma boa ideia.
Shadur 17/02/2012
2
@Shadur: Pode haver soluções ruins, mas isso não torna a ideia desinteressante ou ruim.
Jlliagre
1
Na verdade, acabei de encontrar essa pergunta porque estava considerando o que /dev/nullpoderia ser uma análise do conteúdo de muitos s capturados . Eu não gostaria de fazer a pesquisa, mas adoraria ler os resultados. (Não seria muito provavelmente alguns problemas éticos em "olhando o lixo das pessoas" essencialmente, mas o conceito é interessante, no entanto.)
beporter

Respostas:

12

Fazer /dev/nullum pipe nomeado é provavelmente a maneira mais fácil. Esteja avisado de que alguns programas ( sshdpor exemplo) agirão de maneira anormal ou não serão executados quando descobrirem que não é um arquivo especial (ou podem ler /dev/null, esperando que ele retorne 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

Isso deve funcionar em todas as distribuições Linux e em todos os principais BSDs.

Chris Down
fonte
1
Uma coisa a observar é que, se a tailfalha falhar, muitos programas poderão falhar porque o buffer do canal está cheio.
Arcege 17/02/2012
4
Os programas que lêem /dev/nullnão serão assim.
Gilles 'SO- stop be evil'
@ Gilles - De fato, daí a minha nota.
21712 Chris Down
3
@ Ali Sim. No magicé um princípio orientador na filosofia UNIX.
phihag
4
Ahem /dev/null é mágica, mknod /dev/null c 1 3é a fórmula mágica para invocá-lo. (E você precisa de super-poderes para isso ...)
Stéphane Gimenez
6

Certa vez, descobri da maneira mais difícil que / dev / null não precisa ser um arquivo dev especial. Há muito tempo, o / dev / null em um sistema Ultrix no trabalho foi excluído; portanto, na próxima vez que um programa foi redirecionado para / dev / null, acabou sendo um arquivo normal, cheio da saída desse programa. (Eu acho que não era 'nenhum arquivo ou diretório', o que significava que, quando estávamos tentando descobrir o que estava acontecendo, faríamos cat /dev/nulle saberíamos o no such file or directoryque confundia o inferno conosco).

Portanto, minha sugestão seria substituí-lo por um pipe nomeado e, em seguida, anexar um programa ao pipe que o leria e o monitoraria.

Paul Tomblin
fonte
4
Muitos programas também dependem /dev/nullsempre de retornar 0 bytes em um read ( cat /dev/null > foo). Ter /dev/nullum arquivo regular com o conteúdo quebraria essa expectativa.
Arcege 17/02/2012
1
Sim, foi assim que a descobrimos. Os programas não esperavam entrada e estavam recebendo muitas informações, mais / dev / estava sendo preenchido.
Paul Tomblin
1

Penso em uma idéia em que / dev / null pode ser um link simbólico para um descritor de arquivo, mas com o mecanismo add code para determinar se a operação é lida ou escrita e, se for lida, ela deve realmente ler de / dev / actualnull criado separadamente com mknod e se for write, anote o programa que está chamando e tente registrar / contar para analisar os programas que usam / dev / null para gravação. Isso vai custar muito em termos de desempenho, embora eu suponha. Eu acho que não é prático, já que a maioria dos programas ou códigos shell usa o redirecionamento de qualquer maneira. Pode ser inotify poderia ser usado para monitorar o uso de / dev / null? ou reescreva o código do kernel que lida com dispositivos 1: 3, compile e reinstale novamente, experimentável.

Nikhil Mulley
fonte
2
Ainda existem alguns problemas, tentei fazer algo assim (não no kernel, mas de forma transparente, permitindo a leitura de outro arquivo e o controle /dev/nullde um daemon), e sshdainda reclamei e não iniciei.
18372 Chris Down
hmm..interessante no controle / dev / null de um daemon. Eu acho que a maioria dos programas gostaria de usar / dev / null como apenas outro arquivo, deixando a importância e a semântica de / dev / null para o sistema.
Nikhil Mulley
Bem, sshd(pelo menos, como fornecido para o Debian Squeeze) se queixa, sshd: cannot create /dev/nullse for qualquer coisa, menos a implementação mais comum.
19412 Chris Down