Halihazırda GNU / Linux dizin ağacına dair bazı fikirlere sahipsek, en azından / dev / referansına aşina olmalıyız, bu da etkin bir şekilde ilgili tüm dosyaların donanım aygıtları.
Dizine bakarsak / Dev / adlı bir "dosya" göreceğiz boşama içeriğini görmek için açmak istersek, sistem bize bunun sıradan bir içerik olmadığı için mümkün olmadığını söyleyecektir. Dosyayı ekledim çünkü hepinizin Linux için bildiği gibi her şey (donanım ve yazılım) bir dosya olarak temsil ediliyor. |
/ Dev / null hangi aygıta karşılık gelir?
Pratik amaçlar için, bir çöp tenekesini, dipsiz bir çukuru veya onu kurtarma olasılığı olmadan herhangi bir şeyi atabileceğiniz bir uzay hayal edin (NASA'daki adamlar ne kadar uğraşırsa uğraşsın).
Ama zaten rm gibi komutlarım varsa, sildiğim yeni bir şeyi neden istiyorum?
Çünkü her iki "kara deliğin" çalışma şekli tamamen farklıdır: çalışma zamanında bir kabuk komut dosyası içindeki bir komuttaki bir hatanın standart çıktısını geçersiz kılmaya nasıl devam edersiniz? / Dev / null burada devreye girer.
Bir örnekle görelim.
"Merhaba Dünya" dizesini içeren test adında bir dosya oluşturduk. Bu dosyanın içeriğini komut satırında temsil etmek istiyorsak, bunu şu şekilde yapabiliriz:
kullanıcı @ laptop: ~ $ kedi testi
Selam Dünya
Dosya yoksa veya test olarak adlandırılmışsa (sonunda 's' ile), konsolda aşağıdaki hatayı alırız:
kullanıcı @ laptop: ~ $ kedi testleri
cat: testler: Dosya veya dizin mevcut değil
Hata mesajından kaçınmak için ne yapabiliriz? Pekala, hata durumunda komutun çıktısını bir "çöp kutusuna", yani / dev / null'a yönlendirin.
Hata durumunda olmasını nasıl belirleyebiliriz? Bu, bir program için standart giriş, çıkış ve hata değerlerinin girdiği yerdir: STDIN, STDOUT ve STDERR (sırasıyla 0, 1 ve 2 yerine kullanılabilir). Bu şekilde koyarsak ...
user @ laptop: ~ $ cat testleri 2> / dev / null
kullanıcı @ dizüstü bilgisayar: ~ $
… Konsolda hata mesajının üretilmeyeceğini göreceğiz.
Sözdizimi çok önemli olduğu için dikkatli olmalısınız: 2 ve> karakterleri arasında boşluk olmamalıdır. Aksi takdirde, aşağıdakileri verir:
user @ laptop: ~ $ cat testleri 2> / dev / null
cat: testler: Dosya veya dizin mevcut değil
cat: 2: Dosya veya dizin mevcut değil
Bunun aksine,> ve / dev / null arasındaki boşluk sonucu olumsuz etkilemeyecektir.
Örneğin, bir günlük dosyasındaki hataları aşağıdaki gibi yakalamak için hata yeniden yönlendirmeyi de kullanabiliriz:
user @ laptop: ~ $ cat testleri 2> err.log
Bir başka ilginç durum da, bir hata oluşmadığı sürece sonuçların başka bir dosyada toplanması olabilir, bunun için şunu koyacağız:
user @ laptop: ~ $ cat test 1> output_result 2> err.log
Son olarak, standart çıktının ve hata çıktısının birleştirildiği «> / dev / null 2> & 1» ifadesini koymak ve bunları hiçbir durumda çıktı bilgisinin elde edilmemesi için yeniden yönlendirmek mümkündür.
8 yorum, sizinkini bırakın
Ah, ama / dev / null'un sahip olduğu en çok kullanılan yardımcı programlardan biri eksik, bu da dosyaları boşaltıyor: $ cat / dev / null> file.log Bu şekilde, file.log dosyası boş olacaktır. Ekle!
Tam da aradığı açıklama buydu.
Eklemek için hareketi destekliyorum =)
Saludos!
Merhaba, her şeyden önce makale çok güzel! İkincisi, konuyla ilgili bu bağlantıyla bir katkıda bulunmak istiyorum Cpanel'den php'de cron işi ve blog için üçüncü tebrikler!
Dev / null hakkında güzel bir makale, daha önce yanlışlıkla yanlış yerde yorum yaptığımı düşünüyorum! Özür dilerim
teşekkür ederim iyi katkı
Selamlar, sıfır saldırı alıyorum. Andrirc kullanıyorum ve takma adımdan Null kelimesiyle bir özel alıyorum. 2 saniye sonra program kapanır ve benim gördüğüm kadarıyla bu sadece Shell tarafından yapılabilir, harici biri tarafından yapılamaz. Kendimi görmezden gelmeye / -lrpcntikd'i görmezden gelmeye çalıştım ve hiçbir şey beni şaşırtmıyor, komut gelmeye devam ediyor. Engellemeyi denemenin bir yolu varsa, minnettar olurum. Şerefe
Cümle yürütülürken> sembolü yerleştirilmezse ne olur?
Biri bana rehberlik edebilir mi lütfen?
Günaydın, Debian netinst'i ACER Extensa 5620Z – 32 bit'e kurdum.USB'den kurulum bittiğinde ve pendrive, sabit diskten (kalemden yeniden yüklemeyin) önyükleme yapacak şekilde çıkarıldıktan sonra, ancak önyükleme anında bana sorduğu sistem:
debian girişi: xxxxxxxx (tamam)
Şifre: xxxxxxx (tamam)
nil@debian:~$ ???? Bu nedir? Oraya ne koymalıyım?
Bu komut olmadan sistem önyüklemesine devam edemem.
Bana yardımcı olabilir misiniz? Nasıl devam etmem gerektiğini bilmiyorum.
Çok teşekkürler. Saygılarımla.