Berikut adalah perintah yang mengurutkan file dalam folder dengan urutan terbalik
ls | sort -r
Apa yang dilakukan |
simbol dalam perintah itu?
Apa yang saya benar-benar cari di sini adalah penjelasan pipa untuk pemula Linux tingkat tinggi (mudah dimengerti). Saya melihat pertanyaan lain tentang pipa di sini pada Superuser, tetapi tidak ada yang memunculkan jawaban yang menjelaskan secara sederhana apa yang mereka lakukan dan bagaimana mereka berbeda dari pengalihan ( simbol >
atau <
).
linux
command-line
bash
pipe
ccalvert
sumber
sumber
|
adalah bahwa ia tidak menggunakan nama, output dari perintah l-hand diteruskan langsung ke input untuk perintah di sisi-r pipa.ls -1r
(Perhatikan argumen nomor satu) harus menghasilkan hasil yang mirip denganls | sort -r
.cat /somefile | grep cool
. Ini akan mengambil output dari somefile dan membuatnya tersedia untuk grep, dan kemudian grep akan mencetak semua baris dengan kata cool di dalamnya.Jawaban:
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 itustdin
adalah keyboard Anda danstdout
merupakan layar atau jendela terminal Anda.Jadi ketika Anda menjalankan
ls
, itu akan membuang outputnyastdout
. 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 daristdin
menerima menerima penekanan tombol Anda, melakukan hal-hal, dan kemudian menulis hal-hal untukstdout
.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 (untukstdout
menyukai perintah Linux lainnya) daftar setiap file dalam direktori itu dan ukurannya: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 daristdin
dan mengurutkannya.Jadi, jika kita melakukan ini:
# du /usr | sort -nr
kami mendapatkan ini, yang sedikit lebih baik:
Dan sekarang Anda dapat melihat bahwa "pipa" menghubungkan perintah
stdout
dari satu ke yangstdin
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 membacastdin
. Karenastdin
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 perintahtee
yang memungkinkan Anda memiliki kue dan memakannya juga, itu akan salin apa yang diterimanya daristdin
keduanyastdout
dan file pilihan Anda. Anda juga dapat melakukan inibash
dengan sintaksis misterius yang melibatkan ampersand dan tanda kurung yang tidak saya ketahui.sumber
stdin
danstdout
berbeda di bawah Windows daripada di Linux, meskipun mungkin tidak terlalu banyak dari sudut pandang Windowscmd.exe
atau Powershell.GetStdHandle()
. Ini juga mudah untuk mengarahkan aliran standar proses [anak] yang dihasilkan dengan .NET, yang saya percaya memetakan fungsi-fungsi Win32 (tapi saya tidak 100% yakin akan hal itu - saya bukan pengembang Win32).STARTUPINFO
struct untukCreateProcess()
.Jika Anda merasa nyaman dengan pengalihan output dan input, penjelasannya sangat mudah.
melakukan hal yang sama dengan
tapi tanpa
tempfile
. Output dariCommand1
terhubung langsung ke inputCommand2
dan transfer terjadi dalam memori.sumber
CreateFile
atauWriteFile
panggilan untuk mendukung klaim Anda. / edit: Itu untuk bagian Windows, tentu saja.Benar-benar jika Anda ingin tahu apa yang dilakukan pipa dan perbedaan antara> dan |, lalu buka direktori dengan banyak file, dan
dari terminal
ls
vsls | more
(atau melakukan itu dari Windows dengan DIR dan DIR | MORE)Jika Anda menggunakan lebih banyak, Anda akan melihatnya membuat file yang disebut 'lebih' daripada mengirim output ls ke perintah 'lebih'. Jadi jika seseorang melakukan lebih dari itu mungkin kesalahan, seseorang tidak akan melakukan lebih> Anda akan melakukan> file1. Lebih banyak adalah perintah yang terkenal.
<Like the> juga untuk menautkan perintah dan file, bukan perintah ke perintah. Tetapi ketika> mengirimkan output dari sebuah perintah ke file, <mengirimkan file sebagai input ke sebuah perintah. Saya jarang menggunakan <karena saya biasanya menggunakan cat file1 | untuk mengirim output file ke perintah.
$ grep a <file1 abc
$ cat file1 | grep a abc
grep dengan 2 parameter berupa file pola grep. grep dengan satu parameter adalah pola grep. Dan Anda dapat mengirimnya file dengan memiparkan konten file ke sana, atau dengan menggunakan <. Jika menggunakan <, Anda menulis nama perintah terlebih dahulu, kemudian nama file setelah jadi perintah <file. Jika menggunakan | untuk mem-pipe konten file, Anda menggunakan cat file1 | perintah.
Juga banyak perintah mengambil file sebagai input tetap jadi grep file1 akan berfungsi, sama seperti cat file1 | grep a, dan grep a <file1.
Saya melakukan pipe (|) dan> di DOS bahkan 15 tahun yang lalu.
Untuk meringkas caranya | berbeda dari <dan> - Pipa berada di antara 2 perintah. <dan> duduk di antara perintah dan file. > Adalah keluaran ke file. <Adalah input dari file.
sumber
Karakter pipa (
|
) menghubungkan output dari satu program ke input yang lain.Dalam contoh ini
echo
mencetak katahello
, danwc -c
menghitung karakter inputnya:sumber
Untuk memahami ini, cobalah sendiri:
Sekarang Anda menggantung dengan kursor, dan itu tidak melakukan apa-apa. Apa yang terjadi jika Anda mengetikkan beberapa data?
Masih tidak ada apa-apa, kan? Sekarang tekan ctrl + D
Jadi apa yang dilakukan adalah, dibutuhkan input (apa yang Anda ketikkan), lakukan sesuatu dengannya (macam) dan berikan kembali sebagai output. The
ls
perintah tidak mengambil input, hanya menghasilkan output. Simbol pipa mengambil output darils
, dan mengumpankannya sebagai input kesort
perintah.>
tidak mengumpankan output ke program, tetapi menyimpan output sebagai file.<
menggunakan file sebagai input.sumber