logo

Cos'è /Dev/Null in Linux?

Se hai imparato la programmazione della shell, potresti già esserti imbattuto in qualcosa come /dev/null. In questo articolo capiremo cos’è e come si usa. Cominciamo col capire cos'è /dev.

Cos'è /dev?

Nel file system Linux, tutto è un file o una directory. Anche i dispositivi sono accessibili come file. Le partizioni del disco rigido, la pen drive, gli altoparlanti, per tutti questi esiste un file da cui è possibile accedervi. Ora, per capire come si accede ai dispositivi come file, pensiamola in questo modo: cosa facciamo con un file? Leggiamo i dati da esso e vi scriviamo dati. Un dispositivo come un altoparlante può immettere dati per produrre suoni, un disco rigido può essere utilizzato per leggere e scrivere dati, una stampante riceve l'input per stampare file, ecc. File e dispositivi sono simili in questo modo



/dev è una directory che memorizza tutti i dispositivi fisici e virtuali di un sistema Linux. I dispositivi fisici sono facili da comprendere, sono dispositivi tangibili come pen drive, altoparlanti, stampanti, ecc. Un sistema Linux ha anche dispositivi virtuali che fungono da dispositivo ma non rappresentano alcun dispositivo fisico.

Cos'è /dev/null?

È un dispositivo virtuale, che ha una proprietà speciale: tutti i dati scritti su /dev/null svaniscono o scompaiono. Per questa sua caratteristica viene chiamato anche bitbucket o blackhole. Vediamo una dimostrazione.

Reindirizzare l'output su /dev/null

In questa demo puoi vedere che abbiamo aggiunto alcuni dati, ma che i dati non sono stati archiviati. Questa particolare caratteristica di /dev/null ha alcuni casi d'uso. Vediamoli.



Utilizzo di /dev/null

Poiché scarta qualsiasi cosa scritta su di esso, puoi spostare i file in /dev/null per eliminarli. Ma questo non è un caso d’uso ampiamente utilizzato. Viene utilizzato principalmente per scartare l'output standard e l'errore standard da un output.

Cosa sono l'output standard e l'errore standard?

L'output di un comando Linux contiene due flussi di dati: standard output (stdout) e standard error (stderr0), mentre lo standard output è l'output normale se il comando non presenta errori, l'errore standard è l'errore generato dal comando. L'output può contenere sia l'output standard che l'input standard. Esempio di stdout e stderr:

Eseguiamo il seguente script di shell



# /bin/sh ls apt update>

Il primo comando è stato eseguito correttamente, ma il secondo ha generato un errore. Poiché stdout e stderr sono due flussi di dati separati, possono essere gestiti separatamente.

Come accedere a stderr e stdout?

Stdout e stderr sono flussi di dati, entrambi trattati come un file in Linux. Se desideri eseguire qualsiasi azione su questi, utilizza un descrittore di file che identifica in modo univoco il flusso di file. Il descrittore di file per stdout è 1 e per stderr è 2.

sorriso più bello

Per accedervi separatamente, vediamo il comando seguente che viene eseguito sullo stesso file di script utilizzato nell'esempio precedente.

./script.sh 1>stdout.txt>>

In questo, puoi vedere che l'output contiene errori standard ma l'output standard non è stato visualizzato. Questo perché il flusso stdout è stato inviato al file stdout.txt e puoi vedere che il file stdout.txt contiene l'output standard.

Durante la scrittura di uno script di shell, potremmo voler eliminare l'errore standard dall'output. Qualunque flusso si voglia sopprimere dall'output, quel flusso di dati può essere scritto in /dev/null. Potresti scrivere quei dati in un altro file, proprio come nell'esempio sopra, ma se non ti servono quei dati, perché dovresti sprecare memoria su di essi, è meglio scartarli completamente. Vediamo il seguente esempio

./script.sh 2>/dev/null>

E proprio così, abbiamo rimosso lo stderr dall'output. Se desideri eliminare l'output completo, puoi utilizzare il comando seguente

command>/dev/null 2>&1>

Il comando &> reindirizza l'output del descrittore di file menzionato a sinistra (nel comando precedente, l'output di 2) al flusso del descrittore di file menzionato sul lato destro. Quindi, l'output di stderr (2) viene reindirizzato a stdout(1), che a sua volta viene scritto in /dev/null e quindi viene distrutto.

Cancellazione sicura dei file

'/dev/null' trova utilità nell'eliminazione sicura dei file. Reindirizzando '/dev/null' a un file, puoi sovrascrivere efficacemente il suo contenuto con byte null, rendendo difficile il recupero di dati significativi.

Per esempio:

cat /dev/null>file_sensibile>

Questo comando sostituisce il contenuto di 'sensitive_file' con byte nulli, garantendone l'eliminazione sicura.

Pulizia dei file di registro

I file di registro possono accumulare dati considerevoli nel tempo. Per cancellare i file di registro senza interrompere i servizi in esecuzione, puoi reindirizzare il loro contenuto a '/dev/null'.

Per esempio:

cat /dev/null>/var/log/syslog>

Questo comando svuota il file 'syslog' reindirizzandone il contenuto su '/dev/null', ripulendo efficacemente il registro senza eliminare il file stesso.

Suggerimenti e trucchi:

  • Reindirizzare l'output standard a '/dev/null': 'command> /dev/null'
  • Reindirizzamento dell'errore standard a '/dev/null': 'comando 2> /dev/null'
  • Reindirizzamento sia dell'output che dell'errore su '/dev/null': 'command>/dev/null 2>&1'

Conclusione

In questo articolo abbiamo discusso che '/dev/null' in Linux è un buco nero virtuale in cui i dati scompaiono quando vengono scritti al suo interno. Viene comunemente utilizzato per eliminare output ed errori, rendendo l'esecuzione dei comandi più pulita. Può anche essere utilizzato per l'eliminazione sicura dei file e la pulizia dei file di registro. Comprenderne le funzionalità consente operazioni efficienti da riga di comando in Linux.