Monitorare ciò che viene inviato a / dev / null?


19

Solo per divertimento:
c'è un modo per monitorare / catturare / scaricare qualunque cosa venga scritta /dev/null?

Su Debian o FreeBSD, se è importante, sono benvenute anche altre soluzioni specifiche del sistema operativo.


3
Possibile, ma come descrivono le risposte e i commenti non è una buona idea.
Shadur,

2
@Shadur: potrebbero esserci soluzioni sbagliate, ma ciò non rende l'idea poco interessante o cattiva.
jlliagre,

1
In effetti, ho appena trovato questa domanda perché stavo considerando quale /dev/nullpotrebbe essere un'analisi del contenuto di molte immagini catturate . Non vorrei fare la ricerca da solo, ma mi piacerebbe leggere i risultati. (Probabilmente ci sarebbero alcune questioni etiche nel "guardare attraverso la spazzatura della gente" essenzialmente, ma il concetto è comunque interessante.)
Beporter

Risposte:


12

Creare /dev/nulluna pipa con nome è probabilmente il modo più semplice. Tieni presente che alcuni programmi ( sshdad esempio) agiranno in modo anomalo o non verranno eseguiti quando scoprono che non è un file speciale (o potrebbero leggere /dev/null, aspettandosi che ritornino 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

Questo dovrebbe funzionare con tutte le distribuzioni Linux e tutti i principali BSD.


1
Una cosa da notare è che se tailfallisce, molti programmi potrebbero fallire perché il buffer della pipe è pieno.
Arcege,

4
Ai programmi che leggono /dev/nullnon piacerà questo.
Gilles 'SO- smetti di essere malvagio' il

@Gilles - Anzi, da qui la mia nota.
Chris Down,

3
@Ali Sì. No magicè un principio guida nella filosofia UNIX.
phihag,

4
Ahem /dev/null è magico, mknod /dev/null c 1 3è la formula magica per invocarlo. (E hai bisogno di superpoteri per quello ...)
Stéphane Gimenez,

6

Una volta ho scoperto che / dev / null non deve essere un file dev speciale. Molto tempo fa il / dev / null su un sistema Ultrix al lavoro veniva cancellato, quindi la volta successiva che un programma veniva reindirizzato su / dev / null, finiva per essere un normale file pieno dell'output di quel programma. (Penso che non fosse "nessun file o directory", il che significava che quando stavamo cercando di capire cosa stesse succedendo, facevamo cat /dev/nulle ci veniva detto no such file or directoryche ci confondeva l'inferno.)

Quindi il mio suggerimento sarebbe di sostituirlo con una pipe denominata, e quindi collegare un programma alla pipe che lo leggesse e lo monitorasse.


4
Molti programmi si affidano anche alla /dev/nullrestituzione di 0 byte su read ( cat /dev/null > foo). Avere /dev/nullun file normale con contenuti, spezzerebbe questa aspettativa.
Arcege,

1
Sì, è così che l'abbiamo scoperto. I programmi non si aspettavano alcun input e ne ottenevano gobs, più / dev / si stava riempiendo.
Paul Tomblin,

1

Penso a un'idea in cui / dev / null può essere un collegamento simbolico a un descrittore di file ma con il meccanismo di aggiunta del codice per determinare l'operazione viene letta o scritta e quindi se viene letta, dovrebbe effettivamente leggere da / dev / actualnull creato separatamente mknod e, se è write, prendi nota del programma che richiama e prova a registrare / contare per analizzare i programmi che usano / dev / null per scrivere. Questo, però, costerà molto in termini di prestazioni. Immagino che non sia pratico poiché la maggior parte dei programmi di shell o del codice usa comunque il reindirizzamento. Può essere inotify potrebbe essere usato per monitorare l'utilizzo di / dev / null? o riscrivi il codice del kernel che gestisce i dispositivi 1: 3, ancora una volta compilare e reinstallare, sperimentabile.


2
Ci sono ancora alcuni problemi, ho provato a fare qualcosa del genere (non nel kernel, ma in modo trasparente permettendo di leggere da un altro file e controllando /dev/nullda un demone), e sshdancora mi sono lamentato e non si avviava.
Chris Down,

hmm..interessante su / dev / null che controlla da un demone. Penso che la maggior parte dei programmi vorrebbe usare / dev / null come solo un altro file lasciando l'importanza e la semantica di / dev / null al sistema.
Nikhil Mulley,

Bene, sshd(almeno, come impacchettato per Debian Squeeze) si lamenta sshd: cannot create /dev/nullse non è altro che l'implementazione più comune.
Chris Down,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.