GNU/Linux >> Belajar Linux >  >> Linux

Proses Substitusi Dan Pipa?

Saya bertanya-tanya bagaimana memahami yang berikut ini:

Memiping stdout dari sebuah perintah ke stdin yang lain adalah teknik
yang kuat. Tetapi, bagaimana jika Anda perlu mem-pipe stdout dari beberapa
perintah? Di sinilah proses substitusi masuk.

Dengan kata lain, dapatkah proses substitusi melakukan apa pun yang dapat dilakukan pipa?

Apa yang bisa dilakukan proses substitusi, tetapi pipa tidak?

Jawaban yang Diterima:

Cara yang baik untuk mengetahui perbedaan di antara mereka adalah dengan melakukan sedikit eksperimen pada baris perintah. Terlepas dari kesamaan visual dalam penggunaan < karakter, ia melakukan sesuatu yang sangat berbeda dari pengalihan atau pipa.

Mari gunakan date perintah untuk pengujian.

$ date | cat
Thu Jul 21 12:39:18 EEST 2011

Ini adalah contoh yang tidak berguna tetapi ini menunjukkan bahwa cat menerima keluaran date pada STDIN dan meludahkannya kembali. Hasil yang sama dapat dicapai dengan proses substitusi:

$ cat <(date)
Thu Jul 21 12:40:53 EEST 2011

Namun apa yang baru saja terjadi di balik layar berbeda. Alih-alih diberi aliran STDIN, cat sebenarnya melewati nama file yang perlu dibuka dan dibaca. Anda dapat melihat langkah ini dengan menggunakan echo bukannya cat .

$ echo <(date)
/proc/self/fd/11

Ketika cat menerima nama file, ia membaca konten file untuk kami. Di sisi lain, echo baru saja menunjukkan kepada kami nama file yang diteruskan. Perbedaan ini menjadi lebih jelas jika Anda menambahkan lebih banyak substitusi:

$ cat <(date) <(date) <(date)
Thu Jul 21 12:44:45 EEST 2011
Thu Jul 21 12:44:45 EEST 2011
Thu Jul 21 12:44:45 EEST 2011

$ echo <(date) <(date) <(date)
/proc/self/fd/11 /proc/self/fd/12 /proc/self/fd/13

Dimungkinkan untuk menggabungkan substitusi proses (yang menghasilkan file) dan pengalihan input (yang menghubungkan file ke STDIN):

$ cat < <(date)
Thu Jul 21 12:46:22 EEST 2011

Kelihatannya hampir sama tetapi kali ini cat dilewatkan aliran STDIN alih-alih nama file. Anda dapat melihat ini dengan mencobanya dengan echo:

$ echo < <(date)
<blank>

Karena echo tidak membaca STDIN dan tidak ada argumen yang diteruskan, kami tidak mendapatkan apa-apa.

Pengalihan pipa dan input mendorong konten ke aliran STDIN. Substitusi proses menjalankan perintah, menyimpan outputnya ke file sementara khusus dan kemudian meneruskan nama file itu sebagai pengganti perintah. Perintah apa pun yang Anda gunakan memperlakukannya sebagai nama file. Perhatikan bahwa file yang dibuat bukanlah file biasa tetapi sebuah pipa bernama yang akan dihapus secara otomatis setelah tidak lagi diperlukan.

Terkait:Apakah peristiwa yang difilter di Monitor Proses disimpan di memori atau di disk?
Linux
  1. Menginstal dan mengonfigurasi vsFTPD

  2. Utas dan deskriptor file

  3. unix - kepala DAN ekor file

  1. Bash - Perintah tanggal dan spasi

  2. Simpan keluaran tanggal dan perintah tonton ke file

  3. Mengubah atribut Tanggal Dibuat dan Terakhir Dimodifikasi file ke file lain

  1. `^m` Dan Bagaimana Cara Menghilangkannya?

  2. Superblock, Inode, Dentry, dan File?

  3. Buang memori proses linux ke file