Jika Anda merasa nyaman dengan pengalihan output dan input, penjelasannya sangat mudah.
Command1 | Command2
melakukan hal yang sama dengan
Command1 > tempfile
Command2 < tempfile
tapi tanpa tempfile
. Output dari Command1
terhubung langsung ke input Command2
dan transfer terjadi di dalam memori.
Berikut ini sedikit disederhanakan untuk membantu pengguna baru.
Yah, pertama-tama, perlu memahami konsep input standar dan output standar.
Di Linux dan sistem operasi serupa UNIX lainnya, setiap proses memiliki input standar (stdin
) dan output standar (stdout
). Situasi biasanya adalah stdin
adalah keyboard Anda dan stdout
adalah layar atau jendela terminal Anda.
Jadi saat Anda menjalankan ls
, itu akan membuang outputnya ke stdout
. Jika Anda tidak melakukan apa-apa lagi, itu akan masuk ke layar atau jendela terminal Anda, dan Anda akan melihatnya.
Sekarang, beberapa perintah Linux berinteraksi dengan pengguna, dan menggunakan stdin
untuk melakukan itu, editor teks Anda menjadi salah satunya. Bunyinya dari stdin
untuk menerima penekanan tombol Anda, melakukan sesuatu, lalu menulis sesuatu ke stdout
.
Namun, ada juga perintah non-interaktif atau "filter" yang TIDAK bekerja secara interaktif, tetapi menginginkan banyak data. Perintah ini akan mengambil semuanya stdin
telah, lakukan sesuatu padanya, lalu lemparkan ke stdout
Mari kita lihat perintah lain bernama du
- singkatan dari penggunaan disk. du /usr
, misalnya, akan dicetak (ke stdout
seperti perintah Linux lainnya) daftar setiap file di direktori itu dan ukurannya:
# du /usr
2312 /usr/games
124 /usr/lib/tc
692 /usr/lib/rygel-1.0
400 /usr/lib/apt/methods
40 /usr/lib/apt/solvers
444 /usr/lib/apt
6772 /usr/lib/gnash
Seperti yang bisa langsung Anda ketahui, itu tidak disortir, dan Anda mungkin ingin mengurutkannya berdasarkan ukuran.
sort
adalah salah satu perintah "filter" yang akan mengambil banyak hal dari stdin
dan urutkan.
Jadi, jika kita melakukan ini:
# du /usr | sort -nr
kami mendapatkan ini, yang sedikit lebih baik:
4213348 /usr
2070308 /usr/lib
1747764 /usr/share
583668 /usr/lib/vmware
501700 /usr/share/locale
366476 /usr/lib/x86_64-linux-gnu
318660 /usr/lib/libreoffice
295388 /usr/lib/vmware/modules
290376 /usr/lib/vmware/modules/binary
279056 /usr/lib/libreoffice/program
216980 /usr/share/icons
Dan sekarang Anda dapat melihat bahwa "pipa" menghubungkan stdout
dari satu perintah ke stdin
dari yang lain. Biasanya Anda akan menggunakannya dalam situasi seperti ini di mana Anda ingin memfilter, mengurutkan, atau memanipulasi output dari suatu perintah. Mereka dapat diturunkan jika Anda ingin memproses keluaran melalui beberapa perintah jenis filter.
Jika Anda mengetik sort
dengan sendirinya, masih akan mencoba membaca dari stdin
. Sejak stdin
terhubung ke keyboard Anda, itu akan menunggu Anda untuk mengetik, dan memproses sesuatu sampai Anda menekan Control-D. Itu tidak akan meminta Anda karena itu tidak benar-benar dimaksudkan untuk digunakan secara interaktif.
Suatu program dapat mengetahui apakah stdin
interaktif atau tidak, sehingga beberapa program mungkin bertindak berbeda jika Anda menerbitkannya sendiri atau di akhir pipa.
Juga, menyalurkan program yang hanya bekerja secara interaktif, seperti vi
, akan membuat Anda mengalami waktu yang buruk.
Pipa berbeda dari pengalihan karena data diacak dari satu perintah ke perintah berikutnya tanpa disimpan di mana pun. Jadi, Pada contoh di atas, du
keluaran tidak disimpan di mana pun. Sebagian besar waktu Anda tidak menginginkan ini dengan pipa karena alasan menggunakan pipa adalah untuk memproses output dari perintah dengan cara tertentu - tetapi, ada perintah tee
yang memungkinkan Anda memiliki kue dan memakannya juga, itu akan menyalin apa yang diterimanya dari stdin
ke stdout
dan file pilihan Anda. Anda juga dapat melakukannya dari bash
dengan beberapa sintaks misterius yang melibatkan ampersand dan tanda kurung yang tidak saya ketahui.
Sungguh jika Anda ingin tahu apa yang dilakukan pipa dan perbedaan antara> dan |, buka direktori dengan banyak file, dan
dari terminal ls
vs ls | more
(atau melakukannya dari Windows dengan DIR dan DIR | MORE)
Jika Anda menggunakan> more Anda akan melihatnya membuat file bernama 'more' daripada mengirimkan output ls ke perintah 'more'. Jadi jika seseorang melakukan>lebih, itu mungkin kesalahan, seseorang tidak akan melakukan>lebih banyak yang akan Anda lakukan>file1. More adalah perintah yang terkenal.
$ grep a
$ file kucing1 | grep aabc
grep dengan 2 parameter berupa file pola grep. grep dengan satu parameter adalah pola grep. Dan Anda dapat mengirimkannya file dengan mem-pipe konten file ke sana, atau dengan menggunakan <. Jika menggunakan <, Anda menulis nama perintah terlebih dahulu, kemudian nama file setelahnya jadi perintah
Juga banyak perintah yang menggunakan file sebagai input sehingga grep file1 akan berfungsi, seperti halnya cat file1 | grep a, dan grep a
Saya sedang mengerjakan pipa (|) dan> di DOS bahkan 15 tahun yang lalu.
Untuk meringkas bagaimana | berbeda dari