Pipes: apa yang perlu Anda ketahui untuk mulai menggunakannya di GNU / Linux

pipa

sebuah pipa atau pipe sebenarnya adalah pipeline yang tersedia untuk UNIX / Linux dan sangat praktis. Tetapi untuk sepenuhnya memahami apa itu pipa, Anda harus tahu bahwa di lingkungan * nix memiliki 3 aliran data bawaan. Itu, bagi yang belum tahu, berarti datanya bisa melakukan perjalanan ke atau dari tiga titik.

Maka Anda akan memahami ini dengan cara yang lebih baik, tetapi yang ingin saya jelaskan kepada Anda sekarang adalah bahwa dengan pipa apa yang dapat Anda lakukan adalah menyalurkan dari salah satu titik tersebut ke titik lainnya. Hal ini memungkinkan untuk membawa keluaran atau hasil yang dilemparkan oleh sebuah program ke masukan dari program lain sehingga ia dapat menggunakannya, dll. Saya akan mencoba menjelaskannya dengan beberapa contoh praktis yang akan membantu Anda memahaminya dengan sangat baik.

Poin-poin yang saya bicarakan atau aliran data, adalah:

  • stdin: sesuai dengan 0 dan merupakan input standar. Umumnya, input data standar pada sistem * nix adalah keyboard. Artinya, yang Anda ketik akan menjadi informasi yang digunakan. Dia memiliki perangkat khusus yang terkait dengannya yaitu / dev / stdin.
  • stdout: diidentifikasi dengan 1, itu adalah keluaran standar. Biasanya ini sesuai dengan monitor atau layar komputer Anda, di mana Anda dapat melihat informasinya. Misalnya, ketika Anda menjalankan perintah ls, daftar konten akan ditampilkan di layar, bukan? Perangkat terkait adalah / dev / stdout.
  • stderr: diidentifikasi dengan 2, itu adalah output kesalahan standar, karena ketika terjadi kesalahan dalam suatu program. Perangkat terkait adalah / dev / stderr.

Dengan pipeline Anda dapat membuat output standar atau stdout dari satu perintah lewat langsung ke input standar lainnya. Artinya, Anda dapat membuat satu program memberi makan yang lain. Alih-alih menggunakan parameter yang dimasukkan keyboard, pipa mengirimkan informasi yang dihasilkan oleh perintah sebelumnya melalui pipa ini yang diwakili oleh |

dengan contohnya Anda akan memahaminya dengan lebih baik. Misalkan Anda ingin membuat daftar isi direktori, tetapi Anda hanya tertarik melihat nama-nama yang cocok dengan kata doc. Jadi Anda bisa menggunakan pipeline untuk menyalurkan output ls ke input grep filter untuk menyuruhnya hanya menampilkan yang cocok dengan pola itu:

ls -l | grep doc

Jadi, alih-alih menunjukkan semua nama, itu hanya menunjukkan kepada Anda yang benar-benar menarik bagi Anda. Anda dapat melakukan hal yang sama dengan konten file. Bayangkan Anda hanya ingin melihat informasi dari proses yang bernama firefox dan tidak semua:

ps aux | grep firefox

Alih-alih menampilkan semua output dari program ps di layar (stdout), yang dilakukannya adalah menyalurkannya ke input filter grep dan hanya menampilkan di output apa yang sesuai dengan pola firefox dalam kasus ini ...

Jika mau, Anda bisa menggunakan berbagai pipa untuk membawa keluaran dari satu perintah ke masukan perintah kedua lainnya, dan keluaran detik itu ke masukan ketiga, dan seterusnya. Sebagai contoh:

cat libro | grep love | more

Seperti yang kamu lihat, kemungkinannya banyak, semua yang dapat Anda bayangkan dan diizinkan. Bahkan hanya menampilkan baris pertama dan terakhir dari sebuah file, menghitung baris yang masuk wc yang berasal dari daftar, dan bahkan mengurutkannya:

cat listado | head
cat listado | tail
cat listado | wc -l
cat listado | sort

Anda juga bisa bekerja dengan kesalahan dengan | & dan misalnya mencari kata peringatan dalam output dari sebuah skrip jika gagal:

./miscript |& grep alerta 

Dan terakhir, ada dua perintah yang terkait erat dengan pipa tee dan xargs dan bahwa mereka dapat memperluas kemungkinan ini lebih jauh. Dalam kasus tee, yang memungkinkan adalah menampilkan hasil dari program sebelumnya pada keluaran standar sehingga Anda dapat melihatnya, dan sebagai tambahan, ia dapat menyalurkannya ke file lain. Contohnya adalah jika Anda membuat daftar isi direktori dan ingin melihat output dari ls -l saat ini dan juga menyimpannya dalam file listing.txt:

ls -l | tee listado.txt

Jika Anda tidak menggunakan tee, Anda tidak akan dapat melihat output di konsol Anda ...

Y xargs bahkan lebih menarik dalam beberapa kasus. Dalam hal ini, ia dapat membuat perintah dari input standar yang diterimanya melalui pipeline. Dengan kata lain, ia mampu menangkap semua yang telah diluncurkan oleh program sebelumnya melalui keluarannya dan yang mencapai xargs melalui pipeline untuk meneruskannya ke perintah lain sebagai argumen.

Masih belum mengerti? Anda akan melihatnya jauh lebih baik dengan sebuah contoh. Bayangkan Anda ingin menghapus semua file thumbs.db dari direktori, disk, atau partisi. Jika ada banyak, mungkin tidak mungkin untuk pergi satu per satu dengan perintah rm untuk menghapusnya secara manual. Tetapi dengan xargs Anda dapat mengotomatiskan semuanya. Dan Anda dapat melakukannya dengan menggunakan find untuk menemukannya, mengirim output melalui input xargs dan ini pada gilirannya akan memberi nama rm sebagai argumen. Oleh karena itu, semua yang terletak akan dihapus secara otomatis:

find ./ -name "thumbs.db" | xargs rm

Misalnya, temukan lokasi /home/name/thumbs.db, /media/test/thumbs.db, dan /tmp/thumbs.db. Nah, xargs akan mengirimkannya ke rm seolah-olah itu adalah argumen. Artinya, seolah-olah kita telah mengeksekusi: rm /home/name/thumbs.db, lalu rm /media/test/thumbs.db dan kemudian rm /tmp/thumbs.db.


tinggalkan Komentar Anda

Alamat email Anda tidak akan dipublikasikan. Bidang yang harus diisi ditandai dengan *

*

*

  1. Bertanggung jawab atas data: AB Internet Networks 2008 SL
  2. Tujuan data: Mengontrol SPAM, manajemen komentar.
  3. Legitimasi: Persetujuan Anda
  4. Komunikasi data: Data tidak akan dikomunikasikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Basis data dihosting oleh Occentus Networks (UE)
  6. Hak: Anda dapat membatasi, memulihkan, dan menghapus informasi Anda kapan saja.

  1.   Jose dijo

    Hebat, informasi ini sangat penting bagi kami pengguna linux

  2.   Daniel dijo

    Sungguh artikel yang bagus, saat ini saya sedang mempelajari pengalihan I / O di buku Baris Perintah Linux. Lebih jelas bagi saya tentang pipa (Pipeline) dan tiga aliran data. Kontribusi dihargai. Salam pembuka.

  3.   01101001b dijo

    Contoh dengan xargs cocok untuk saya seperti sarung tangan. Tepat hari ini saya berurusan dengan detail dari beberapa jalan keluar yang harus saya kirim "sebagian". xargs berjalan pinturita.
    Sangat berterima kasih!