Theo dõi những gì đang được gửi đến / dev / null?


19

Chỉ để cho vui:
Có cách nào để giám sát / chụp / đổ bất cứ thứ gì đang được viết /dev/nullkhông?

Trên Debian, hoặc FreeBSD, nếu có vấn đề, mọi giải pháp cụ thể khác của HĐH cũng được hoan nghênh.


3
Có thể, nhưng như các câu trả lời và nhận xét mô tả nó / rất / nhiều không phải là một ý tưởng tốt.
Shadur

2
@Shadur: Có thể có những giải pháp tồi nhưng điều đó không làm cho ý tưởng đó không thú vị hoặc một ý tưởng tồi.
jlliagre

1
Thật vậy, tôi chỉ tìm thấy câu hỏi này bởi vì tôi đang xem xét phân tích nội dung từ nhiều người bị bắt /dev/nullcó thể xuất hiện. Tôi sẽ không muốn tự mình nghiên cứu, nhưng tôi rất thích đọc kết quả. (Về cơ bản rất có thể sẽ có một số vấn đề đạo đức trong việc "xem qua thùng rác của mọi người", nhưng dù sao thì khái niệm này rất thú vị.)
beporter

Câu trả lời:


12

Làm /dev/nullmột cái ống có tên là cách dễ nhất. Được cảnh báo rằng một số chương trình ( sshdví dụ) sẽ hành động bất thường hoặc không thực thi khi họ phát hiện ra rằng đó không phải là một tệp đặc biệt (hoặc họ có thể đọc từ đó /dev/null, hy vọng nó sẽ quay trở lại 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

Điều này sẽ hoạt động theo tất cả các bản phân phối Linux và tất cả các BSD chính.


1
Một điều cần lưu ý là nếu tailthất bại, thì rất nhiều chương trình có thể thất bại vì bộ đệm của đường ống đã đầy.
Arcege

4
Các chương trình đọc từ /dev/nullsẽ không thích điều này.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles - Thật vậy, do đó lưu ý của tôi.
Chris Down

3
@Ali Vâng. No magiclà một nguyên tắc chỉ đạo trong triết lý UNIX.
phihag

4
Ahem /dev/null ma thuật, mknod /dev/null c 1 3là công thức ma thuật để gọi nó. (Và bạn cần siêu năng lực cho trận đấu đó)
Stéphane Gimenez

6

Tôi đã từng phát hiện ra cách cứng / dev / null không được một file dev đặc biệt. Cách đây rất lâu, / dev / null trên hệ thống Ultrix tại nơi làm việc đã bị xóa, vì vậy lần sau khi một chương trình được chuyển hướng đến / dev / null, cuối cùng nó đã trở thành một tệp bình thường chứa đầy đầu ra từ chương trình đó. (Tôi nghĩ đó là 'không có tập tin hoặc thư mục như vậy', điều đó có nghĩa là khi chúng tôi đang cố gắng tìm hiểu chuyện gì đang xảy ra, chúng tôi sẽ làm cat /dev/nullvà được cho biết no such file or directoryđiều đó làm chúng tôi bối rối.)

Vì vậy, đề nghị của tôi sẽ là thay thế nó bằng một đường ống có tên, và sau đó gắn một chương trình vào đường ống sẽ đọc nó và theo dõi nó.


4
Rất nhiều chương trình cũng dựa vào việc /dev/nullluôn trả về 0 byte khi đọc ( cat /dev/null > foo). Có /dev/nullmột tập tin thường xuyên với nội dung, sẽ phá vỡ kỳ vọng này.
Arcege

1
Vâng, đó là cách chúng tôi phát hiện ra nó. Các chương trình đang mong đợi không có đầu vào và nhận được yêu tinh của nó, cộng với / dev / đã được lấp đầy.
Paul Tomblin

1

Tôi nghĩ về một ý tưởng trong đó / dev / null có thể là một liên kết tượng trưng đến một bộ mô tả tệp nhưng với cơ chế thêm mã để xác định thao tác được đọc hoặc ghi và sau đó nếu nó được đọc, thì nó thực sự nên đọc từ / dev / factnull được tạo riêng biệt với mknod và nếu nó được ghi thì hãy ghi lại chương trình gọi và cố gắng đăng nhập / đếm để phân tích các chương trình sử dụng / dev / null để viết. Điều này sẽ tốn rất nhiều về hiệu suất, tôi cho rằng mặc dù. Tôi đoán nó không thực tế vì hầu hết các chương trình shell hoặc mã đều sử dụng chuyển hướng. Có thể inotify có thể được sử dụng để theo dõi việc sử dụng / dev / null? hoặc viết lại mã kernel xử lý các thiết bị 1: 3, một lần nữa biên dịch và cài đặt lại, có thể thử nghiệm.


2
Vẫn còn một số vấn đề, tôi đã thử làm một cái gì đó như thế này (không phải trong kernel, nhưng trong suốt bằng cách cho phép đọc từ một tệp khác và kiểm soát /dev/nulltừ một daemon), và sshdvẫn phàn nàn và sẽ không bắt đầu.
Chris Xuống

hmm..tìm kiếm / dev / null kiểm soát từ một daemon. Tôi nghĩ rằng hầu hết các chương trình chỉ muốn sử dụng / dev / null như một tệp khác để lại tầm quan trọng và ngữ nghĩa của / dev / null cho hệ thống.
Nikhil Mulley

Chà, sshd(ít nhất, như được đóng gói cho Debian Squeeze) phàn nàn sshd: cannot create /dev/nullnếu đó là bất cứ điều gì ngoài việc thực hiện phổ biến nhất.
Chris Down
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.