- STDIN (0) - Standart giriş
- STDOUT (1) - Standart çıktı
- STDERR (2) - Standart hata
“Pipe” hileleri ile çalışacağımız zaman, “pipe” bir komutun STDOUT'unu alıp bir sonraki komutun STDIN'ine iletecektir.
"Pipe" komutunu günlük kullanımınıza dahil etmenin en yaygın yollarından bazılarına göz atalım.
Boru komutu
Temel kullanım
Canlı bir örnekle “boru”nun çalışma yöntemini detaylandırmak daha iyidir, değil mi?? Başlayalım. Aşağıdaki komut, Arch ve tüm Arch tabanlı dağıtımlar için varsayılan paket yöneticisi olan “pacman”a, sistemde kurulu tüm paketleri yazdırmasını söyleyecektir.
pacman -Qqe
Bu gerçekten UZUN bir paket listesi. Sadece birkaç bileşeni toplamaya ne dersiniz?? "grep" kullanabiliriz. Ama nasıl? Çıktıyı geçici bir dosyaya boşaltmanın bir yolu, istenen çıktıyı "grep" ve dosyayı silmek olabilir. Bu görev dizisi, kendi başına bir komut dosyasına dönüştürülebilir. Ama biz sadece çok büyük şeyler için senaryo yazarız. Bu görev için “boru”nun gücünü çağıralım!
pacman -Qqe | grep
Harika, değil mi? “|” işareti “boru” komutuna yapılan çağrıdır. STDOUT'u sol bölümden alır ve sağ bölümün STDIN'ine besler.
Yukarıda bahsedilen örnekte, “pipe” komutu aslında “grep” bölümünün sonunda çıktıyı geçti. İşte nasıl oynanır.
pacman -Qqe > ~/Desktop/pacman_package.Txtgrep python ~/Desktop/pacman_package.Txt
Çoklu borulama
Temel olarak, “pipe” komutunun gelişmiş kullanımında özel bir şey yoktur. Nasıl kullanılacağı tamamen size kalmış.
Örneğin, birden fazla boruyu istifleyerek başlayalım.
pacman -Qqe | grep p | grep t | grep py
pacman komut çıktısı, bir dizi borulama yoluyla "grep" ile daha fazla filtrelenir.
Bazen bir dosyanın içeriğiyle çalışırken, dosya gerçekten çok büyük olabilir. İstediğimiz girişin doğru yerini bulmak zor olabilir. 1 ve 2 rakamlarını içeren tüm girişleri arayalım.
kedi demosu.metin | grep -n 1 | grep -n 2
Dosya ve dizin listesini değiştirme
İçinde TONLARCA dosya bulunan bir dizinle uğraşırken ne yapmalısınız?? Tüm listede gezinmek oldukça can sıkıcı. Tabii, neden boru ile daha katlanılabilir hale getirmiyorsunuz?? Bu örnekte, “/usr/bin” klasöründeki tüm dosyaların listesini kontrol edelim.
ls -l
Burada “ls” tüm dosyaları ve bilgilerini yazdırır. Ardından, “pipe” bununla çalışmak için onu “daha fazla”ya iletir. Bilmiyorsanız, "daha fazlası", metinleri tek seferde tek bir ekran görünümüne dönüştüren bir araçtır. Ancak, eski bir araçtır ve resmi belgelere göre “daha az” daha çok tavsiye edilir.
ls -l /usr/bin | Daha az
Sıralama çıktısı
Metin girişini alacak ve bunları sıralayacak yerleşik bir "sıralama" aracı vardır. Gerçekten dağınık bir şeyle çalışıyorsanız, bu araç gerçek bir mücevherdir. Örneğin, bu dosyayı rastgele dizelerle doldurdum.
kedi demosu.Txt
Sadece "sıralamak" için borulayın.
kedi demosu.metin | çeşit
Bu daha iyi!
Belirli bir desenin eşleşmelerini yazdırma
ls -l | bulmak ./ -type f -name "*.txt" -exec grep 00110011 \;
Bu oldukça çarpık bir komut, değil mi?? İlk başta, “ls” dizindeki tüm dosyaların listesini verir. "Bul" aracı çıktıyı alır, ".robots.txt” dosyalarını açar ve “00110011” aramak için “grep”i çağırır. Bu komut, dizindeki her bir metin dosyasını TXT uzantılı kontrol edecek ve eşleşmeleri arayacaktır.
Belirli bir aralığın dosya içeriğini yazdır
Büyük bir dosyayla çalışırken, belirli bir aralığın içeriğini kontrol etme ihtiyacına sahip olmak yaygındır. Bunu akıllıca bir "kedi", "kafa", "kuyruk" ve tabii ki "boru" kombinasyonuyla yapabiliriz. "Kafa" aracı bir içeriğin ilk bölümünün çıktısını verir ve "kuyruk" son kısmın çıktısını verir.
kedikedi
Benzersiz değerler
Yinelenen çıktılarla çalışırken oldukça can sıkıcı olabilir. Bazen, yinelenen giriş ciddi sorunlara neden olabilir. Bu örnekte, bir metin akışına “uniq” yazalım ve onu ayrı bir dosyaya kaydedelim.
Örneğin, burada 2 basamaklı büyük bir sayı listesi içeren bir metin dosyası var. Burada kesinlikle yinelenen içerikler var, değil mi??
kedi kopyası.metin | çeşit
Şimdi filtreleme işlemini gerçekleştirelim.
kedi kopyası.metin | sıralama | benzersiz > benzersiz.Txt
çıktıyı kontrol et.
benzersiz yarasa.Txt
Daha iyi görünüyor!
Hata boruları
Bu ilginç bir borulama yöntemidir. Bu yöntem, STDERR'yi STDOUT'a yönlendirmek ve borulamaya devam etmek için kullanılır. Bu, “|&” sembolü ile gösterilir (tırnak işaretleri olmadan). Örneğin, bir hata oluşturalım ve çıktıyı başka bir araca gönderelim. Bu örnekte, rastgele bir komut yazdım ve hatayı "grep" e ilettim.
adsfds |& grep n
Son düşünceler
"Boru"nun kendisi doğası gereği oldukça basit olsa da, çalışma şekli, yöntemi sonsuz şekillerde kullanmanın çok yönlü bir yolunu sunar. Bash komut dosyasıyla ilgileniyorsanız, bu çok daha kullanışlıdır. Bazen, sadece çılgınca şeyler yapabilirsin! Bash komut dosyası oluşturma hakkında daha fazla bilgi edinin.