Monitor apa yang sedang dikirim ke / dev / null?

19

Hanya untuk bersenang-senang:
Apakah ada cara untuk memantau / menangkap / membuang apa pun yang sedang ditulis /dev/null?

Pada Debian, atau FreeBSD, jika itu penting, solusi spesifik OS lainnya juga diterima.

Ali
sumber
3
Mungkin saja, tetapi sebagai jawaban dan komentar menggambarkan itu / sangat / banyak bukan ide yang baik.
Shadur
2
@ Safad: Mungkin ada solusi buruk tapi itu tidak membuat ide itu tidak menarik atau ide buruk.
jlliagre
1
Memang, saya baru saja menemukan pertanyaan ini karena saya sedang mempertimbangkan apa yang bisa muncul dari analisis konten dari banyak orang yang ditangkap /dev/null. Saya tidak ingin melakukan penelitian sendiri, tetapi saya ingin membaca hasilnya. (Kemungkinan besar akan ada beberapa masalah etika dalam "melihat melalui sampah orang" pada dasarnya, tetapi konsepnya tetap menarik.)
beporter

Jawaban:

12

Membuat /dev/nullpipa bernama mungkin cara termudah. Berhati-hatilah karena beberapa program ( sshd, misalnya) akan bertindak tidak normal atau gagal dijalankan ketika mereka mengetahui bahwa itu bukan file khusus (atau mereka dapat membacanya /dev/null, mengharapkannya kembali 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

Ini harus bekerja di bawah semua distribusi Linux, dan semua BSD utama.

Chris Down
sumber
1
Satu hal yang perlu diperhatikan adalah jika tailgagal, maka banyak program mungkin gagal karena buffer pipa penuh.
Arcege
4
Program yang membaca dari /dev/nulltidak akan suka ini.
Gilles 'SO- stop being evil'
@Gilles - Memang, maka catatan saya.
Chris Down
3
@ Ali Ya. No magicadalah prinsip panduan dalam filosofi UNIX.
phihag
4
Ahem /dev/null adalah sihir, mknod /dev/null c 1 3adalah formula ajaib untuk memohonnya. (Dan Anda membutuhkan kekuatan super untuk itu ...)
Stéphane Gimenez
6

Saya pernah menemukan cara yang sulit bahwa / dev / null tidak harus menjadi file dev khusus. Beberapa waktu yang lalu / dev / null pada sistem Ultrix di tempat kerja dihapus, sehingga pada saat berikutnya sebuah program dialihkan ke / dev / null, akhirnya menjadi file normal yang penuh dengan output dari program itu. (Saya pikir itu 'tidak ada file atau direktori', yang berarti ketika kami mencoba untuk mencari tahu apa yang sedang terjadi, kami akan melakukan cat /dev/nulldan diberitahu no such file or directoryyang membingungkan kami.)

Jadi saran saya adalah menggantinya dengan pipa bernama, dan kemudian melampirkan program ke pipa yang akan membacanya dan memonitornya.

Paul Tomblin
sumber
4
Banyak program juga mengandalkan /dev/nullselalu mengembalikan 0 byte pada read ( cat /dev/null > foo). Memiliki /dev/nullfile biasa dengan konten, akan mematahkan harapan ini.
Arcege
1
Ya, itulah bagaimana kami menemukannya. Program tidak mengharapkan input dan mendapatkan banyak darinya, plus / dev / semakin penuh.
Paul Tomblin
1

Saya memikirkan sebuah ide di mana / dev / null dapat menjadi symlink ke deskriptor file tetapi dengan menambahkan mekanisme kode untuk menentukan operasi membaca atau menulis dan kemudian jika dibaca, sebenarnya harus membaca dari / dev / actualnull yang dibuat secara terpisah dengan mknod dan jika ditulis maka buat catatan tentang program pemanggilan dan coba log / hitung untuk menganalisis program yang menggunakan / dev / null untuk menulis. Ini akan menghabiskan banyak biaya dalam hal kinerja, saya kira. Saya kira itu tidak praktis karena sebagian besar program shell atau kode tetap menggunakan pengalihan. Mungkin tidak dapat digunakan untuk memantau penggunaan / dev / null? atau menulis ulang kode kernel yang menangani perangkat 1: 3, lagi kompilasi dan instal ulang, dapat dicoba.

Nikhil Mulley
sumber
2
Masih ada beberapa masalah, saya mencoba melakukan sesuatu seperti ini (bukan di-kernel, tapi secara transparan-ish dengan mengizinkan membaca dari file lain dan mengendalikan /dev/nulldari daemon), dan sshdmasih mengeluh dan tidak mau memulai.
Chris Down
hmm..menarik kendali / dev / null dari daemon. Saya pikir sebagian besar program hanya ingin menggunakan / dev / null hanya sebagai file lain meninggalkan pentingnya dan semantik / dev / null ke sistem.
Nikhil Mulley
Yah, sshd(setidaknya, seperti yang dikemas untuk Debian Squeeze) mengeluh sshd: cannot create /dev/nulljika itu adalah implementasi yang paling umum.
Chris Down