Cos'è / dev / null e come può aiutarti?

Se abbiamo già alcune nozioni sull'albero delle directory GNU / Linux, dovremmo almeno avere familiarità con / dev / reference, che è effettivamente dove tutti i file relativi dispositivi hardware.

Se guardiamo nella directory / dev / vedremo un "file" chiamato nullo, ma se vogliamo aprirlo per vederne il contenuto, il sistema ci dirà che non è possibile poiché non è un contenuto ordinario. Ho allegato la parola file perché, come tutti sapete per Linux, tutto (hardware e software) è rappresentato come un file.

Questo è il contributo di Daniel Durante, divenuto così uno dei vincitori del nostro concorso settimanale: «Condividi ciò che sai su Linux«. Congratulazioni Daniel!

A quale dispositivo corrisponde / dev / null?

Per scopi pratici, immagina un bidone della spazzatura, un pozzo senza fondo o uno spazio esterno in cui gettare qualsiasi cosa senza la possibilità di recuperarla (non importa quanto ci provino i ragazzi della NASA).

Ma se ho già comandi come rm, perché voglio qualcosa di nuovo che elimino?

Perché il modo in cui funzionano entrambi i "buchi neri" è completamente diverso: come si esegue l'override dell'output standard di un errore in un comando all'interno di uno script di shell in fase di esecuzione? È qui che entra in gioco / dev / null.

Vediamolo con un esempio.

Abbiamo creato un file chiamato test contenente la stringa "Hello World". Se vogliamo rappresentare il contenuto di quel file sulla riga di comando, potremmo farlo nel modo seguente:

utente @ laptop: ~ $ cat test
Ciao mondo

Se il file non esistesse o fosse denominato come test (con una 's' alla fine), avremmo ricevuto il seguente errore nella console:

utente @ laptop: ~ $ cat tests
cat: tests: il file o la directory non esiste

Cosa potremmo fare per evitare il messaggio di errore? Bene, reindirizza semplicemente l'output del comando, in caso di errore, a un "cestino della spazzatura", cioè a / dev / null

Come lo specifichiamo in caso di errore? Qui è dove entrano i valori di input, output e errore standard per un programma: STDIN, STDOUT e STDERR (che possono essere sostituiti rispettivamente con 0, 1 e 2). In questo modo, se mettiamo ...

user @ laptop: ~ $ cat test 2> / dev / null
utente @ laptop: ~ $

… Vedremo che il messaggio di errore non verrà prodotto sulla console.

Devi stare attento perché la sintassi è essenziale: tra i caratteri 2 e> non deve esserci spazio. Altrimenti, darebbe quanto segue:

user @ laptop: ~ $ cat test 2> / dev / null
cat: tests: il file o la directory non esiste
cat: 2: il file o la directory non esiste

Al contrario, uno spazio tra> e / dev / null non influirà negativamente sul risultato.

Potremmo anche utilizzare il reindirizzamento degli errori, ad esempio, per acquisire gli errori in un file di registro come segue:

user @ laptop: ~ $ cat tests 2> err.log

Un altro caso interessante sarebbe la raccolta dei risultati in un altro file fino a quando non si verifica un errore, per il quale metteremmo:

user @ laptop: ~ $ cat test 1> output_result 2> err.log

Infine, vale la pena inserire l'espressione «> / dev / null 2> & 1» in cui vengono combinati lo standard output e l'output dell'errore, reindirizzandoli in modo che in nessun caso si ottenga l'informazione di output.


Lascia un tuo commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati con *

*

*

  1. Responsabile dei dati: Miguel Ángel Gatón
  2. Scopo dei dati: controllo SPAM, gestione commenti.
  3. Legittimazione: il tuo consenso
  4. Comunicazione dei dati: I dati non saranno oggetto di comunicazione a terzi se non per obbligo di legge.
  5. Archiviazione dati: database ospitato da Occentus Networks (UE)
  6. Diritti: in qualsiasi momento puoi limitare, recuperare ed eliminare le tue informazioni.

  1.   Guido Ignazio Ignazio suddetto

    Ah, ma manca una delle utility più utilizzate di / dev / null, ovvero lo svuotamento dei file: $ cat / dev / null> file.log In questo modo, il file file.log sarà vuoto. Aggiungilo!

    1.    Edward H. suddetto

      Era proprio la spiegazione che stava cercando.
      Appoggio la mozione per aggiungerla =)

      Saludos!

  2.   Pablo suddetto

    Ciao, prima di tutto l'articolo è molto buono! il secondo vorrei contribuire qualcosa con questo link sull'argomento cron job in php da Cpanel e il terzo complimenti per il blog!

  3.   Pablo suddetto

    Bell'articolo su dev / null, che peccato penso di aver commentato per errore nel posto sbagliato prima! chiedo scusa

  4.   anonimo suddetto

    grazie buon contributo

  5.   Gers suddetto

    Saluti, ricevo un attacco nullo. Uso andrirc e ottengo un privato dal mio nickname con la parola Null. 2 secondi dopo la chiusura del programma ho letto e da quello che vedo questo può essere fatto solo dalla Shell, non da qualcuno esterno. Ho provato a ignorarmi / ignorare -lrpcntikd e Niente mi sorprende, il comando continua ad arrivare. Se hai un modo per provare a bloccarlo, lo apprezzerei. Saluti

  6.   Sofia martinez suddetto

    Cosa succede se durante l'esecuzione della frase il simbolo> non viene posizionato?

    Qualcuno potrebbe guidarmi per favore?

  7.   zero suddetto

    Buongiorno, ho installato Debian netinst in ACER Extensa 5620Z – 32 bit Una volta terminata l'installazione da USB e rimossa la pendrive in modo che si avvii dall'hard disk (non reinstallare dalla penna) ma al momento dell'avvio il sistema mi chiede:
    accesso debian: xxxxxxxx (ok)
    Password: xxxxxxxxx (ok)
    zero@debian:~$ ???? cos'è questo? Cosa devo mettere lì?

    Senza questo comando non posso procedere con l'avvio del sistema.
    Mi potete aiutare? Non so come dovrei continuare.
    Grazie mille. Cordiali saluti.