Pengantar Pipa Bernama di Bash Shell
- 680
- 43
- Dwayne Hackett
Di Linux dan sistem operasi berbasis UNIX, pipa sangat berguna karena mereka adalah cara sederhana untuk mencapai IPC (Komunikasi antar proses). Saat kami menghubungkan dua proses dalam pipa, output yang pertama digunakan sebagai input yang kedua. Untuk membangun pipa yang disebut "anonim", yang harus kita lakukan adalah menggunakan |
operator. Pipa anonim, atau tidak disebutkan namanya bertahan selama proses mereka terhubung. Namun, ada jenis pipa lain yang dapat kita gunakan: a Fifo, atau bernama pipa. Dalam artikel ini kita akan melihat bagaimana bernama pipa bekerja dan dalam apa yang berbeda dari pipa standar.
Dalam tutorial ini Anda akan belajar:
- Apa itu pipa bernama
- Cara membuat pipa bernama
- Bagaimana mengenali pipa bernama
- Bagaimana Bernama Pipa Bekerja
- Cara menghapus pipa bernama
Persyaratan dan konvensi perangkat lunak yang digunakan
Kategori | Persyaratan, konvensi atau versi perangkat lunak yang digunakan |
---|---|
Sistem | Distribusi Independen |
Perangkat lunak | Utilitas yang digunakan dalam tutorial ini tersedia secara default |
Lainnya | Root Izin untuk melakukan tugas administratif |
Konvensi | # - mensyaratkan Linux -Commands untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah$-mensyaratkan Linux-Commands untuk dieksekusi sebagai pengguna reguler yang tidak istimewa |
Pengingat cepat tentang cara kerja pipa
Dalam tutorial sebelumnya, kami sudah melihat bagaimana pipa bekerja dan apa yang dapat digunakan dalam pengenalan pengalihan shell, tapi mari kita buat rekap cepat. Pada skrip kami atau dalam sesi shell interaktif kami, kami dapat menggunakan operator pipa (|
) Untuk menghubungkan dua proses bersama -sama, sehingga output standar (stdout) dari proses di sisi kiri pipa digunakan sebagai input standar (stdin) dari proses di sisi kanannya. Berikut adalah demonstrasi yang cepat dan sepele:
$ echo "goot" | tr 't "d' good
Dalam contoh di atas, output dari gema
Perintah digunakan sebagai input standar dari tr
satu. Bagi Anda yang tidak tahu, tr
Perintah dapat digunakan untuk menerjemahkan atau menghapus karakter: Di sini kami menggunakannya untuk mengganti semua kejadian T
karakter dengan D
satu. Hasil dari dua perintah yang disatukan dalam apa yang disebut a pipa, adalah string "bagus".
Apa yang kami gunakan dalam contoh di atas, disebut Pipa yang tidak disebutkan namanya. Jenis pipa seperti itu hanya ada sampai perintah dieksekusi, dan tidak dapat diakses sesudahnya. Jika kami ingin membangun pipa dan dapat merujuknya setelah digunakan
kita harus menggunakan apa yang dipanggil bernama pipa, Mari kita lihat apa adanya, dan bagaimana mereka bekerja.
Apa itu pipa bernama?
Pada sistem operasi berbasis UNIX seperti Linux, a bernama pipa, atau Fifo (pertama, pertama-keluar), adalah jenis file "khusus" yang digunakan untuk membuat koneksi antara proses. Tidak seperti pipa "standar", pipa bernama diakses sebagai bagian dari sistem file, sama seperti jenis file lainnya. Setelah dibuat, pipa bernama, memang akan muncul sebagai file standar; Namun, itu akan selalu tampak kosong, karena tidak akan digunakan untuk "menyimpan" informasi. Data yang akan melewati pipa akan dikelola langsung oleh kernel: Fifo File Will hanya digunakan sebagai referensi.
Membuat pipa bernama
Untuk membuat a bernama pipa, Dalam sistem operasi berbasis Linux modern, yang harus kita lakukan hanyalah menggunakan mkfifo
memerintah. Dalam penggunaannya yang paling mendasar, yang harus kita lewati sebagai argumen pada program ini adalah nama yang ingin kita gunakan untuk Fifo mengajukan. Untuk
contoh, untuk membuat pipa bernama bernama pipa0
, Kami akan menjalankan:
$ mkfifo pipa0
Jika diinginkan, pipa bernama juga dapat dibuat dengan a set izin tertentu menggunakan -M
opsi (pendek untuk --mode
) dari mkfifo
memerintah. Opsi tersebut menerima Bit izin file Sebagai argumen, misalnya, untuk membuat bernama
pipa dengan 644
izin, kami akan menjalankan:
$ mkfifo -m 644 pipa0
Mari kita lihat file yang dibuat sebagai hasil dari menjalankan perintah di atas:
$ ls -l pipa0 prw-r-r--. 1 EGDOC EGDOC 0 Des 15 Des 11:55 PIPE0
Di sini kami menjalankan ls
Perintah dengan -l
opsi, sehingga format daftar panjang digunakan. Dalam output perintah kita dapat melihat bahwa huruf pertama yang muncul sebelum bit izin adalah a P
: Ini menunjukkan itu
File itu memang pipa bernama.
Menggunakan pipa bernama
Kami tahu bagaimana pipa "standar" bekerja: output standar dari proses di sebelah kiri pipa |
digunakan sebagai input standar yang ada di sebelah kanannya. Bernama pipa bekerja dengan cara yang sama. Mari kita tunjukkan. Hal pertama yang kami inginkan
lakukan adalah menulis sesuatu ke pipa yang disebutkan. Untuk melakukan itu, kita dapat menggunakan pengalihan sederhana; Kami membuka emulator terminal baru dan kami menjalankan perintah berikut:
$ echo "pesan input"> pipa0
Sesuatu yang tampaknya tidak terduga terjadi segera setelah kita tekan enter: perintah itu tampak hang. Ini karena bagaimana bernama Pipes Work: agar data dilewatkan melalui pipa bernama, Fifo file harus dibuka di kedua ujungnya, oleh proses yang menulis kepadanya, dan setidaknya oleh orang yang ingin membaca darinya.
Dalam hal ini, karena tidak ada yang "membaca" dari pipa dan "mengkonsumsi" kontennya, kami mengatakan bahwa pipa itu diblokir. Untuk menunjukkan ini, mari kita buka emulator terminal lain dan gunakan kucing
Perintah untuk "membaca" dari pipa bernama:
$ CAT PIPE0 Pesan Input
Seperti yang Anda lihat, pesan yang kami tulis ke pipa bernama telah dicetak di layar dan di terminal yang kami gunakan untuk menulis ke pipa, semuanya kembali normal (perintah tidak digantung lagi, dan prompt shell muncul lagi). Seperti yang dapat Anda lihat di klip di bawah ini, hal yang sama terjadi jika kami pertama kali membuka pipa untuk membaca, dan tidak ada yang menulis untuk itu:
Sekali lagi, tidak ada yang benar -benar ditulis di pipa0
file, dan begitu konten pipa bernama "dikonsumsi" pipa dibersihkan. Salah satu keuntungan dari pipa bernama daripada pipa standar adalah bahwa penulis dan proses pembaca tidak harus dimulai pada saat yang sama.
Menghapus pipa bernama
Karena pipa bernama hanyalah sebuah file, untuk menghapus satu, dengan asumsi kami memiliki izin yang tepat untuk melakukan tindakan, kami dapat menggunakan rm
memerintah. Untuk menghapus pipa yang kami buat di contoh sebelumnya, karena itu kami akan menjalankan:
$ rm pipa0
Kesimpulan
Dalam artikel ini kami belajar caranya bernama pipa Bekerja di Linux. Kami melihat bagaimana mereka diakses sebagai bagian dari sistem file, karena mereka tampak seperti file lainnya. Kami melihat cara membuat pipa bernama menggunakan mkfifo perintah, apa
adalah kekhasan mereka, dan contoh penggunaannya. Akhirnya, kami melihat cara menghapus pipa bernama.
Tutorial Linux Terkait:
- Menangani input pengguna dalam skrip bash
- Hal -hal yang harus diinstal pada ubuntu 20.04
- Pengantar Otomatisasi Linux, Alat dan Teknik
- Cara mengatur vsftpd di debian
- Cara meluncurkan proses eksternal dengan Python dan…
- Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
- Menguasai loop skrip bash
- BASH SCRIPT: Operator unary diharapkan
- Cara menyebarkan sinyal untuk proses anak dari pesta ..
- Sistem Linux Hung? Cara melarikan diri ke baris perintah dan…