Linux/Unix Örneklerinde Giriş Çıkış Yönlendirmesi

⚡ Akıllı Özet

Linux ve Unix'te yönlendirme, bir komutun girdiyi okuduğu veya çıktıyı gönderdiği yeri değiştirir, yani yer değiştirir.ping Büyüktür işareti, küçüktür işareti ve ekleme operatörü gibi operatörler kullanan dosyalar veya cihazlar için klavye ve ekran.

  • 🔀 yönlendirme: Yönlendirme, bir komutun standart giriş veya çıkışını klavye ve ekrandan bir dosyaya veya cihaza değiştirir.
  • ➡️ Çıktı: > operatörü çıktıyı bir dosyaya yazarken, >> operatörü mevcut bir dosyayı silmeden ona ekleme yapar.
  • ⬅️ Giriş: < operatörü, bir komutun standart girdisi olarak klavye yerine bir dosya besler.
  • 🔢 Dosya tanımlayıcıları: Açılan her dosyaya bir numara atanır: 0 standart giriş (stdin), 1 standart çıkış (stdout) ve 2 standart hata (stderr).
  • ⚠️ Hata yönlendirmesi: 2> seçeneğini kullanmak, hata mesajlarını ayrı bir dosyaya gönderir, böylece normal çıktıyı kirletmezler.
  • 🔗 Birleştirilmiş akışlar: 2>&1 sözdizimi, standart hata çıktısını standart çıktı ile aynı hedefe yönlendirir.
  • 🤖 Yapay zekâ yardımı: Yapay zekâ asistanları ve GitHub Copilot, yönlendirme komutları ve kabuk komut dosyaları oluşturabilir ve açıklayabilir.

Linux ve Unix'te Giriş/Çıkış Yönlendirmesi (Örneklerle)

Yönlendirme, en kullanışlı özelliklerinden biridir. Linux Unix kabuğu da bu özelliği destekler çünkü bir komutun girdisini nereden okuyacağına ve çıktısını nereye göndereceğine karar vermenizi sağlar. Bu sayfa, örneklerle birlikte çıktı, girdi ve hata yönlendirmesini açıklamaktadır.

Yönlendirme Nedir?

Yönlendirme, Linux'ta bir komut çalıştırılırken standart giriş ve çıkış aygıtlarını değiştirmenize olanak tanıyan bir özelliktir. Herhangi bir işlemin temel iş akışı şu şekildedir: Linux komutu Yani bir girdi alır ve bir çıktı verir.

  • Standart giriş (stdin) cihazı klavyedir.
  • Standart çıkış (stdout) cihazı ekrandır.

Yönlendirme ile yukarıdaki standart giriş ve çıkış değiştirilebilir.

Çıkış Yönlendirme

Aşağıdaki grafik, çıktı yönlendirme örneklerinin başlangıcını göstermektedir.

Çıktı yönlendirme bölümü başlık grafiği

'>' sembolü çıktı (STDOUT) yönlendirmesi için kullanılır.

Örnek:

ls -al > listings

Burada `ls -al` komutunun çıktısı ekranınız yerine "listings" dosyasına yönlendiriliyor. Aşağıdaki ekran görüntüsü sonucu göstermektedir.

Terminalde `ls -al` komutunun çıktısı, `listings` dosyasına yönlendirilmiş olarak gösteriliyor.

Not: Komut çıktısını bir dosyaya yönlendirirken doğru dosya adını kullanın. Aynı ada sahip bir dosya zaten varsa, yönlendirilen komut içeriğini siler ve ardından üzerine yazar.

Eğer bir dosyanın üzerine yazılmasını istemiyor ancak mevcut bir dosyaya daha fazla içerik eklemek istiyorsanız, '>>' operatörünü kullanın. Aşağıdaki ekran görüntüsü, '>>' ile eklenmiş içeriği göstermektedir.

Terminalde, çift büyüktür operatörü kullanılarak mevcut bir dosyaya eklenen komut çıktısı gösteriliyor.

Standart çıktıyı yalnızca dosyalara değil, cihazlara da yönlendirebilirsiniz.

$ cat music.mp3 > /dev/audio

`cat` komutu `music` dosyasını okur.mp3 ve çıktıyı ses aygıtı olan /dev/audio'ya gönderir. Bilgisayarınızdaki ses yapılandırması doğruysa, bu komut müzik dosyasını oynatır.mp3.

Giriş yönlendirmesi

Aşağıdaki grafik, girdi yönlendirmesini tanıtmaktadır.

Giriş yönlendirme bölümü başlık grafiği

'<' sembolü, giriş (STDIN) yönlendirmesi için kullanılır.

Örnek: Linux'taki mail programı, terminalden e-posta göndermenize yardımcı olabilir.

E-postanın içeriğini standart giriş aygıtı olan klavyeyi kullanarak yazabilirsiniz. Ancak e-postaya dosya eklemek isterseniz, aşağıdaki formatta giriş yönlendirme operatörünü kullanabilirsiniz.

mail -s "Subject" to-address < Filename

Aşağıdaki ekran görüntüsü, mail komutunun girdi olarak bir dosya okuduğunu göstermektedir.

Giriş yönlendirmesi kullanarak e-postaya dosya eklemek için posta komutu

Bu işlem dosyayı e-postaya ekler ve dosya alıcıya gönderilir.

Yukarıdaki örnekler basitti. Şimdi dosya tanımlayıcılarından yararlanan bazı gelişmiş yönlendirme tekniklerine bakalım.

fileto Descriptveya (FD)

Linux ve Unix'te her şey bir dosyadır. Normal dosyalar, dizinler ve hatta aygıtlar bile dosyadır. Her dosyanın dosya tanımlayıcısı (FD) adı verilen ilişkili bir numarası vardır.

Aşağıdaki diyagram standart akışları ve dosya tanımlayıcılarını göstermektedir.

Standart giriş, çıkış ve hata akışlarının ve dosya tanımlayıcılarının diyagramı.

Ekranınızda da bir dosya tanımlayıcısı bulunur. Bir program çalıştırıldığında, çıktı ekranın dosya tanımlayıcısına gönderilir ve program çıktısını monitörünüzde görürsünüz. Çıktı yazıcının dosya tanımlayıcısına gönderilseydi, program çıktısı yazdırılırdı.

Hata Yönlendirme

Terminalde bir program veya komut çalıştırdığınızda, her zaman üç dosya açık olur: standart giriş, standart çıkış ve standart hata.

Bu dosyalar, bir program çalıştırıldığında her zaman mevcuttur. Daha önce açıklandığı gibi, bu dosyaların her biriyle bir dosya tanımlayıcısı ilişkilidir.

fileto fileto Descriptor
Standart Giriş STDIN'i 0
Standart Çıkış STDOUT 1
Standart Hata STDERR 2

Varsayılan olarak, hata akışı ekranda görüntülenir. Hata yönlendirme, hataları ekran dışında bir dosyaya yönlendirir.

Neden Hata Yönlendirme?

Hata yönlendirme, Unix ve Linux'un en popüler özelliklerinden biridir.

Sık sık Unix kullananlar, birçok komutun çok sayıda hata verdiğini bilirler. Örneğin, dosya ararken genellikle şu hata mesajı alınır: izin Reddedilen hatalar genellikle belirli bir dosyayı arayan kişiye yardımcı olmaz. Kabuk komut dosyalarını çalıştırırken, hata mesajlarının normal program çıktısını karmaşıklaştırmasını genellikle istemezsiniz.

Çözüm, hata mesajlarını bir dosyaya yönlendirmektir.

Örnek 1

$ myprogram 2>errorsfile

Aşağıdaki ekran görüntüsü, terminalde bu komutun nasıl çalıştığını göstermektedir.

Programımın çalıştırıldığı terminalde standart hata mesajı errorsfile dosyasına yönlendiriliyor.

Yukarıda, myprogram adlı bir programı çalıştırıyoruz. Standart hata için dosya tanımlayıcısı 2'dir. "2>" kullanarak, hata çıktısını "errorsfile" adlı bir dosyaya yönlendiriyoruz. Böylece, program çıktısı hatalarla dolu olmuyor.

Örnek 2

İşte find ifadesini kullanan başka bir örnek.

find . -name 'my*' 2>error.log

`find` komutunu kullanarak, mevcut dizin olan "." dizininde adı "my" ile başlayan bir dosyayı arıyoruz ve herhangi bir hatayı `error.log` dosyasına gönderiyoruz.

Örnek 3: Daha karmaşık bir örneğe bakalım.

Sunucu yöneticileri sıklıkla dizinleri listeler ve hem hata hem de standart çıktıyı daha sonra işlenebilecek bir dosyaya kaydeder. İşte komut.

ls Documents ABC> dirlist 2>&1

Aşağıdaki diyagram, her iki akışın da tek bir dosyada nasıl yakalandığını göstermektedir.

Standart çıktı ve standart hatanın her ikisinin de dirlist dosyasına yönlendirildiği şematik gösterim.

İşte:

  • 2>&1 ifadesi, STDERR'in STDOUT ile aynı hedefe (yani dosya dizin listesine) yönlendirildiği anlamına gelir.
  • Hata çıktısı standart çıktıya yönlendirilir ve bu da dirlist dosyasına yönlendirilir. Dolayısıyla, her iki akış da dirlist dosyasına yazılır.

Aşağıdaki diyagram, girdi, çıktı ve hata yönlendirmesinin nasıl bir araya geldiğini özetlemektedir.

Linux ve Unix sistemlerinde girdi, çıktı ve hata yönlendirmesini özetleyen diyagram.

SSS

A boru (|) işareti, bir komutun çıktısını doğrudan başka bir komutun girdisi olarak gönderir. Yönlendirme ise bir komutu bir dosyaya veya aygıta bağlar, çıktıyı ona yazar veya girdiyi ondan okur. Borular komutları birleştirir; yönlendirme ise bir komutu bir dosyayla birleştirir.

> operatörü, bir komutun çıktısını dosyaya yazar ve mevcut içeriği değiştirir. >> operatörü ise çıktıyı dosyanın sonuna ekler.ping Zaten var olanı değiştirin. Bir dosyaya ekleme yapmak istediğinizde, üzerine yazmak yerine >> işaretini kullanın.

/dev/null, içine yazılan her şeyi yok sayan özel bir dosyadır. Bir komuta 2>/dev/null eklemek, hata mesajlarını bu dosyaya yönlendirir ve sessizce yok sayarak ekranda yalnızca normal çıktının görünmesini sağlar. İstenmeyen hata karmaşasını gizlemenin yaygın bir yoludur.

`tee` komutu, standart girdiden veri okur ve verileri hem ekrana hem de bir veya daha fazla dosyaya aynı anda yazar; örneğin `ls -al | tee listing.txt`. Bu komut, çıktıyı ekranda görüntülerken aynı zamanda bir dosyaya kaydetmenizi sağlar.

Here Document, << operatörünü kullanarak bir komuta girdi olarak birden fazla satırlık metin besler ve seçtiğiniz bir işaret kelimesinde sonlandırır. Bu, e-posta gövdesi gibi çok satırlı girdileri ayrı bir dosya kullanmadan iletmek için shell komut dosyalarında kullanışlıdır.

Çıktıyı yönlendirdikten sonra 2>&1 sözdizimini kullanın, örneğin `command > file 2>&1` şeklinde; böylece standart hata, standart çıktıyı takip ederek dosyaya yazılır. Modern Bash'te kısaltılmış `&> file` komutu aynı işlevi görür. Sıra önemlidir: 2>&1'i çıktı yönlendirmesinden sonra yerleştirin.

Yapay zekâ asistanları, sade bir İngilizce isteği doğru yönlendirme komutuna dönüştürebilir, 2>&1 veya &> gibi operatörlerin ne işe yaradığını açıklayabilir ve çalıştırmadan önce hataları işaretleyebilir. Makine öğrenimi araçları ayrıca, manuel incelemenin gözden kaçıracağı anormallikleri ortaya çıkarmak için yönlendirilen günlük ve hata dosyalarını tarar.

Evet. GitHub Yardımcı Pilotu Hedefi açıklayan kısa bir yorumdan yola çıkarak girdi, çıktı ve hataları yönlendiren komutlar ve komut dosyaları oluşturabilir ve siz yazarken bunları tamamlayabilir. RevDosyalarınıza karşı önerilen komutları, özellikle de mevcut verilerin üzerine yazan ">" işaretli komutları inceleyin.

Bu yazıyı şu şekilde özetleyin: