Paip: apa yang perlu anda ketahui untuk mula menggunakannya di GNU / Linux

saluran paip

yang paip atau pipe sebenarnya saluran paip yang tersedia untuk UNIX / Linux dan sangat praktikal. Tetapi untuk memahami sepenuhnya apa itu paip, anda harus tahu bahawa dalam persekitaran * nix ia mempunyai 3 aliran data terbina dalam. Itu, bagi mereka yang tidak tahu, ini bermaksud bahawa data boleh bergerak ke atau dari tiga titik.

Maka anda akan memahami perkara ini dengan cara yang lebih baik, tetapi apa yang ingin saya jelaskan kepada anda sekarang adalah bahawa dengan membuat perancangan, apa yang boleh anda lakukan adalah menyalurkan dari salah satu titik ke yang lain. Ini membolehkan mengambil output atau hasil yang dilemparkan oleh program ke arah input yang lain untuk digunakan, dll. Saya akan cuba menerangkannya dengan beberapa contoh praktikal yang akan membantu anda memahaminya dengan baik.

Perkara-perkara yang saya bicarakan atau aliran data, adalah:

  • stdin: sepadan dengan 0 dan merupakan input standard. Secara amnya, input standard untuk sistem * nix adalah papan kekunci. Maksudnya, apa yang anda taipkan adalah maklumat yang digunakan. Dia mempunyai alat khas yang berkaitan dengannya / dev / stdin.
  • stdout: dikenal pasti dengan 1, itu adalah output standard. Biasanya ia sesuai dengan monitor atau skrin komputer anda, di mana anda dapat melihat maklumat tersebut. Sebagai contoh, semasa anda menjalankan perintah ls, senarai kandungan akan dipaparkan di skrin, bukan? Peranti yang berkaitan adalah / dev / stdout.
  • stderr: dikenal pasti dengan 2, itu adalah output ralat standard, kerana apabila ralat berlaku dalam program. Peranti yang berkaitan ialah / dev / stderr.

Dengan paip anda boleh membuat output standard atau keluar dari satu arahan terus ke input standard yang lain. Maksudnya, anda boleh membuat satu program memberi makan yang lain. Daripada menggunakan parameter yang dimasukkan oleh papan kekunci, pipa menyampaikan maklumat yang dihasilkan oleh arahan sebelumnya melalui saluran paip ini yang diwakili oleh |

dengan contohnya anda akan lebih memahami. Katakan anda ingin menyenaraikan kandungan direktori, tetapi anda hanya berminat melihat nama yang sesuai dengan perkataan doc. Oleh itu, anda boleh menggunakan saluran paip untuk memasukkan output ls ke input penyaring grep untuk memaklumkannya hanya memaparkan yang sesuai dengan corak itu:

ls -l | grep doc

Oleh itu, bukannya menunjukkan kepada anda semua nama, ia hanya menunjukkan kepada anda yang benar-benar menarik minat anda. Anda boleh melakukan perkara yang sama dengan kandungan fail. Bayangkan bahawa anda hanya ingin melihat maklumat proses yang bernama firefox dan bukan semua:

ps aux | grep firefox

Daripada menunjukkan semua output program ps di layar (stdout), yang dilakukannya adalah menyalurkannya ke input input grep filter dan hanya menunjukkan dalam output apa yang sesuai dengan corak firefox dalam kes ini ...

Sekiranya anda mahu, anda boleh menggunakan pelbagai paip untuk membawa output dari satu perintah ke input dari perintah kedua yang lain, dan output yang kedua ke input yang ketiga, dan seterusnya. Sebagai contoh:

cat libro | grep love | more

Seperti yang anda lihat kemungkinannya banyak, semua yang anda bayangkan dan dibenarkan. Walaupun hanya menunjukkan baris pertama dan terakhir fail, hitung garis yang memasuki wc yang berasal dari senarai, dan susun juga:

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

Anda juga boleh bekerja dengan ralat dengan | & dan misalnya mencari kata amaran dalam output skrip jika gagal:

./miscript |& grep alerta 

Dan akhirnya, ada dua perintah yang berkait rapat dengan paip yang tee dan xargs dan bahawa mereka dapat memperluaskan kemungkinan kemungkinan ini. Dalam kes tee, apa yang diizinkan adalah menunjukkan hasil program sebelumnya pada output standard sehingga anda dapat melihatnya, dan selain itu, ia dapat memasukkannya ke fail lain. Contohnya ialah jika anda menyenaraikan kandungan direktori dan ingin melihat output ls -l pada masa ini dan juga menyimpannya dalam senarai fail.txt:

ls -l | tee listado.txt

Sekiranya anda tidak menggunakan tee, anda tidak akan dapat melihat output pada konsol anda ...

Y xargs malah lebih menarik dalam beberapa kes. Dalam kes ini, ia dapat membina perintah dari input standard yang diterimanya melalui saluran paip. Dengan kata lain, ia mampu menangkap semua yang telah dilancarkan oleh program sebelumnya melalui outputnya dan yang mencapai xargs melalui saluran paip untuk meneruskannya sebagai perintah lain sebagai argumen.

Masih tidak faham? Anda akan melihatnya lebih baik dengan contoh. Bayangkan anda mahu membuang semua fail thumbs. Db dari direktori, cakera, atau partition. Sekiranya terdapat banyak, mustahil untuk pergi satu persatu dengan perintah rm untuk menghapusnya secara manual. Tetapi dengan xargs anda dapat mengautomasikan semuanya. Dan anda boleh melakukannya dengan mencari untuk mencari mereka, menghantar output melalui input xarg dan ini seterusnya akan memberi nama rm sebagai argumen. Oleh itu, semua yang terletak akan dipadamkan secara automatik:

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

Contohnya, anggap cari locates /home/name/thumbs.db, /media/test/thumbs.db, dan /tmp/thumbs.db. Nah, xargs akan memberikannya kepada rm seolah-olah mereka adalah hujah. Iaitu, seolah-olah kita telah melaksanakan: rm /home/name/thumbs.db, kemudian rm /media/test/thumbs.db dan kemudian rm /tmp/thumbs.db.


Tinggalkan komen anda

Alamat email anda tidak akan disiarkan. Ruangan yang diperlukan ditanda dengan *

*

*

  1. Bertanggungjawab untuk data: AB Internet Networks 2008 SL
  2. Tujuan data: Mengendalikan SPAM, pengurusan komen.
  3. Perundangan: Persetujuan anda
  4. Komunikasi data: Data tidak akan disampaikan kepada pihak ketiga kecuali dengan kewajiban hukum.
  5. Penyimpanan data: Pangkalan data yang dihoskan oleh Occentus Networks (EU)
  6. Hak: Pada bila-bila masa anda boleh menghadkan, memulihkan dan menghapus maklumat anda.

  1.   Jose kata

    Hebat, maklumat ini sangat penting bagi kami pengguna linux

  2.   Daniel kata

    Apa artikel yang bagus, sekarang saya sedang mengkaji pengalihan I / O dalam buku Linux Command Line. Lebih jelas bagi saya mengenai paip (Pipeline) dan ketiga aliran data. Sumbangan dihargai. Salam.

  3.   01101001b kata

    Contoh dengan xargs sesuai untuk saya seperti sarung tangan. Tepat hari ini saya berhadapan dengan sedikit butiran jalan keluar berganda yang harus saya hantarkan "dalam beberapa bahagian." xargs berjalan pinturita.
    Super bersyukur!