Berikut ini sedikit disederhanakan untuk membantu pengguna baru.
Pertama-tama, perlu memahami konsep input standar dan output standar.
Di Linux dan sistem operasi mirip UNIX lainnya, setiap proses memiliki input standar ( stdin
) dan output standar ( stdout
). Situasi yang biasa adalah itu stdin
adalah keyboard Anda dan stdout
merupakan layar atau jendela terminal Anda.
Jadi ketika Anda menjalankan ls
, itu akan membuang outputnya stdout
. Jika Anda tidak melakukan apa pun, itu akan pergi ke layar atau jendela terminal Anda, dan Anda akan melihatnya.
Sekarang, beberapa perintah Linux berinteraksi dengan pengguna, dan gunakan stdin
untuk melakukan itu, editor teks Anda menjadi salah satunya. Bunyinya dari stdin
menerima menerima penekanan tombol Anda, melakukan hal-hal, dan kemudian menulis hal-hal untuk stdout
.
Namun, ada juga perintah non-interaktif atau "filter" yang TIDAK bekerja secara interaktif, tetapi menginginkan banyak data. Perintah-perintah ini akan mengambil semua yang stdin
dimiliki, melakukan sesuatu untuk itu, dan kemudian melemparkannya kestdout
Mari kita lihat perintah lain yang disebut du
- singkatan untuk penggunaan disk. du /usr
, misalnya, akan mencetak (untuk stdout
menyukai perintah Linux lainnya) daftar setiap file dalam 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 dapat Anda katakan langsung dari kelelawar, itu tidak diurutkan, dan Anda mungkin ingin itu diurutkan berdasarkan ukuran.
sort
adalah salah satu dari perintah "filter" yang akan mengambil banyak hal dari stdin
dan mengurutkannya.
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 perintah stdout
dari satu ke yang stdin
lainnya. Biasanya Anda akan menggunakannya dalam situasi seperti ini di mana Anda ingin memfilter, mengurutkan atau memanipulasi output dari suatu perintah. Mereka dapat di-cascade jika Anda ingin memproses output melalui beberapa perintah tipe filter.
Jika Anda mengetik sort
sendiri, ia masih akan mencoba membaca stdin
. Karena stdin
terhubung ke keyboard Anda, itu akan menunggu Anda untuk mengetik, dan memproses semuanya sampai Anda menekan Control-D. Ini tidak akan meminta Anda karena itu tidak dimaksudkan untuk digunakan secara interaktif.
Adalah mungkin bagi suatu program untuk mengetahui apakah stdin
itu interaktif atau tidak, sehingga beberapa program mungkin bertindak berbeda jika Anda mengeluarkannya sendiri atau di ujung pipa.
Juga, mem-pip sebuah program yang hanya berfungsi secara interaktif, seperti vi
, akan mengakibatkan Anda mengalami kesulitan.
Pipa berbeda dari pengalihan karena data diacak dari satu perintah ke perintah berikutnya tanpa disimpan di mana pun. Jadi, dalam contoh di atas, du
output tidak disimpan di mana pun. Sebagian besar waktu Anda tidak ingin ini dengan pipa karena alasan untuk menggunakan pipa adalah untuk memproses output dari suatu perintah - tetapi, ada perintah tee
yang memungkinkan Anda memiliki kue dan memakannya juga, itu akan salin apa yang diterimanya dari stdin
keduanya stdout
dan file pilihan Anda. Anda juga dapat melakukan ini bash
dengan sintaksis misterius yang melibatkan ampersand dan tanda kurung yang tidak saya ketahui.
|
adalah bahwa ia tidak menggunakan nama, output dari perintah l-hand diteruskan langsung ke input untuk perintah di sisi-r pipa.