Apa itu / dev / null dan bagaimana ia dapat menolong anda?

Sekiranya kita sudah memiliki beberapa pengertian tentang pohon direktori GNU / Linux, kita setidaknya harus mengetahui tentang / dev / referensi, yang mana semua fail yang berkaitan dengan peranti perkakasan.

Sekiranya kita melihat di direktori / dev / kita akan melihat "fail" dipanggil sifar, tetapi jika kita ingin membukanya untuk melihat isinya, sistem akan memberitahu kita bahawa itu tidak mungkin kerana itu bukan kandungan biasa. Saya telah melampirkan fail perkataan kerana, seperti yang anda semua ketahui untuk Linux segala-galanya (perkakasan dan perisian) ditunjukkan sebagai fail.

Ini adalah sumbangan dari Daniel Durante, sehingga menjadi salah satu pemenang pertandingan mingguan kami: «Kongsi apa yang anda tahu mengenai Linux«. Tahniah Daniel!

Peranti apa / dev / null sesuai?

Untuk tujuan praktikal, bayangkan tong sampah, lubang tanpa dasar atau ruang luar yang boleh dibuang tanpa membuangnya (tidak kira betapa sukarnya orang NASA mencuba).

Tetapi jika saya sudah mempunyai perintah seperti rm, mengapa saya mahu sesuatu yang baru dihapuskan?

Kerana cara kedua-dua "lubang hitam" berfungsi sama sekali berbeza: bagaimana anda mengatasi output standard dari kesalahan dalam perintah dalam skrip shell pada waktu runtime? Di sinilah / dev / null masuk.

Mari kita lihat dengan contoh.

Kami telah membuat fail yang disebut ujian yang mengandungi rentetan "Hello World". Sekiranya kita ingin mewakili kandungan fail tersebut pada baris perintah, kita dapat melakukannya dengan cara berikut:

pengguna @ komputer riba: ~ $ cat test
Hai dunia

Sekiranya fail tidak ada atau dinamakan sebagai ujian (dengan 's' di akhir), kami akan mendapat ralat berikut di konsol:

pengguna @ komputer riba: ~ $ ujian kucing
kucing: ujian: Fail atau direktori tidak ada

Apa yang boleh kita lakukan untuk mengelakkan mesej ralat? Baiklah, ubah arah output arahan, sekiranya berlaku kesalahan, ke "tong sampah", iaitu ke / dev / null

Bagaimana kita menetapkannya sekiranya berlaku kesalahan? Di sini anda memasukkan nilai input, output, dan ralat standard untuk program: STDIN, STDOUT, dan STDERR (yang masing-masing dapat menggantikan 0, 1, dan 2). Dengan cara ini, jika kita meletakkan ...

pengguna @ komputer riba: ~ $ cat test 2> / dev / null
pengguna @ komputer riba: ~ $

... Kami akan melihat bahawa mesej ralat tidak akan dihasilkan di konsol.

Anda harus berhati-hati kerana sintaksnya penting: antara watak 2 dan> tidak boleh ada ruang. Jika tidak, ia akan memberikan yang berikut:

pengguna @ komputer riba: ~ $ cat test 2> / dev / null
kucing: ujian: Fail atau direktori tidak ada
cat: 2: Fail atau direktori tidak ada

Sebaliknya, jarak antara> dan / dev / null tidak akan memberi kesan negatif terhadap hasilnya.

Kami juga dapat menggunakan pengalihan ralat, misalnya, untuk menangkap kesalahan dalam file log seperti berikut:

pengguna @ komputer riba: ~ $ cat test 2> err.log

Kes lain yang menarik ialah pengumpulan hasil dalam fail lain selagi ralat tidak berlaku, yang mana kami akan meletakkan:

pengguna @ komputer riba: ~ $ cat test 1> output_result 2> err.log

Akhirnya, perlu meletakkan ungkapan "> / dev / null 2> & 1" di mana output standard dan output ralat digabungkan, mengarahkannya sehingga tidak ada maklumat output yang diperoleh.