stdout ve stderr'yi Dosyaya yönlendir

Redirect Stdout Stderr File



Herhangi bir komut çıktısını bir dosyaya yönlendirdiğinizde, hata mesajlarının terminal penceresinde yazdırıldığını fark edeceksiniz. Bash gibi herhangi bir Linux kabuğunda yürütülen herhangi bir komut, üç normal G/Ç akışı kullanır. Her akışı temsil etmek için sayısal bir dosya tanımlayıcısı kullanılır.

  • Standart giriş akışı (stdin): 0
  • Standart çıktı akışı (stdout): 1
  • Standart hata akışı (stderr): 2

Bu yazıda, stdout ve stderr'i dosyaya yönlendirmenin altında gelen bilgileri kavrayacağız.







Standart çıktı (stdout):

Linux tabanlı her işletim sistemi, yürütülen komut için varsayılan bir yer olduğuna dair bir kanaate sahiptir. Herkes bu kavramı stdout veya standart çıktı olarak kulağa daha kolay gelmesi için atıfta bulunur. Bash veya Zsh kabuğunuz sürekli olarak varsayılan çıktı konumunu arıyor. Kabuk yeni çıktı algıladığında, onu görmeniz için terminal ekranında görüntüler. Aksi takdirde, çıktıyı varsayılan konumuna gönderir.



Standart hata (stderr):

Standart hata veya stderr, standart giriş ve çıkışa benzer, ancak hata mesajlarını depolamak için kullanılır. Standart hata, bir terminal kullanılarak komut satırına veya bir dosyaya yönlendirilebilir. Mesajları ayrı bir günlük dosyasına kaydetmek veya saklamak veya hata mesajlarını gizlemek istiyorsanız, stderr'yi yeniden yönlendirmek size yardımcı olacaktır. Şimdi stdout ve stderr yönlendirmesinin pratik tarafına geçelim.



stdout ve stderr'yi bir dosyaya yönlendirmek:

Yeniden yönlendirme, bir program çıktısını yakalama ve onu başka bir komut veya dosyaya girdi olarak gönderme yöntemidir. G/Ç akışları, n> operatörünü kullanıma sokarak yeniden yönlendirilebilir; burada n, dosya tanımlayıcı numarasıdır. Stdout'u yeniden yönlendirmek için 1> kullanıyoruz ve stderr için operatör olarak 2> ekleniyor.





Yönlendirilen çıktıyı mevcut dizinimizde saklamak için sample.txt adında bir dosya oluşturduk.



(Komut > dosya), yalnızca standart çıktıyı terminalde gösterilen standart hatayla yeniden yönlendiren klasik yeniden yönlendirme operatörü olarak kabul edilir. Stderr'i yeniden yönlendirmek için farklı seçenekler de göstereceğiz.

Dosyaları ayırmak için stderr ve stdout'u yeniden yönlendirme:

Aşağıda, stdout ve stderr'yi ayrı dosyalara yeniden yönlendirmek için komut sözdizimi verilmiştir.

emretmek >dışarı2>hata

Aşağıda verilen komut, çıktıyı out dosyasına ve hata mesajlarını da hata dosyasına yönlendirecektir.

$kediörnek.txt>dışarı2>hata

stderr'i stdout'a yönlendirme:

Her şeyi tek bir dosyada saklamak için stderr'yi bir programın standart çıktısıyla yeniden yönlendirmek yaygın bir uygulamadır. İşte stderr'i stdout'a yönlendirmek için komut sözdizimi:

emretmek >dışarı2> &1$ls >örnek dosya.txt2> &1

$kediörnek dosya.txt

> çıkış yönlendirmeleri stdout'u samplefile.txt'ye yönlendirir ve 2>&1 stderr'i stdout'un geçerli konumuna yönlendirir.

Önce stderr stdout'a yönlendirilirse, stdout'u bir dosyaya yeniden yönlendirmek için aşağıda verilen komutu kullanın.

emretmek 2> &1 > dosya$ls -e 2> &1 >örnek dosya.txt

$kediörnek dosya.txt

&>, 2>&1'in gerçekleştirdiği aynı işlevsellik için de kullanılır.

emretmek &> dosya$ls &>örnek dosya.txt

$kediörnek dosya.txt

stdout ve stderr'yi tek bir dosyaya yönlendirme:

Tüm kabuklar bu form yeniden yönlendirmesini desteklemez, ancak bash ve Zsh bunu destekler. Stdout ve stderr, aşağıdaki sözdizimi kullanılarak yeniden yönlendirilebilir.

emretmek &>dışarı$kediörnek.txt&>dışarı

Makalenin bir sonraki bölümünde, stdout ve stderr yönlendirmesi için ayrı örneği inceleyeceğiz.

stdout'u bir dosyaya yönlendirme:

Standart çıktı, dosya tanımlayıcı numaraları listesinde 1 ile temsil edilir. Herhangi bir dosya tanıtıcı numarası olmayan yeniden yönlendirme komutu için terminal, değerini 1 olarak ayarlar. Stdout'u bir dosyaya yeniden yönlendirmek için sözdizimi aşağıdaki gibidir:

emretmek > dosya

ls -al komutunun standart çıktısını depolamak için sample.file dosyasını kullanıyoruz.

$ls -e >örnek.txt

$kediörnek.txt

emretmek 1> dosya$ls 1>örnek.txt

$kediörnek.txt

stderr'yi bir dosyaya yönlendirmek:

stderr'yi bir dosyaya yönlendirmek için 2> operatörünü kullanın.

emretmek 2> dosya $ls -e 2>örnek.txt

stderr ve stdout için yürütmeyi tek bir yeniden yönlendirme komutunda birleştirebiliriz.

emretmek 2>hata.txt1>çıktı.txt

Aşağıda verilen örnekte, hata mesajları error.txt dosyasında saklanacaktır, burada output.txt standart ls komutu çıktısına sahip olacaktır.

$ls 2>hata.txt1>çıktı.txt

$kediçıktı.txt

Çözüm:

G/Ç akışları için yeniden yönlendirme kavramına ve dosya tanımlayıcılarına sahip olmak, bir Linux terminalinde çalışırken çok değerlidir. Bu yazıda, stdout ve stderr dahil olmak üzere normal I/O akışlarından bahsettik. Bu gönderinin ilk bölümü size yeniden yönlendirme, G/Ç akışları ve sayısal dosya tanımlayıcı hakkında ayrıntılı bilgiler sunar. Ardından, çeşitli stdout ve stderr yeniden yönlendirme biçimlerinin pratik örneğini gördünüz.