Jika Anda membantu seseorang mempelajari konsep pipa pada baris perintah, contoh apa yang akan Anda gunakan? Contoh yang benar-benar muncul adalah sebagai berikut:
cat whatever.txt | less
Saya merasa itu bukan contoh terbaik, yaitu karena hanya ada satu langkah. Apa yang baik, tetapi fundamental, penggunaan |
?
Idealnya contoh yang akan saya presentasikan akan menggunakan program yang memiliki output sendiri yang dapat dijalankan secara independen dan kemudian ditampilkan disalurkan bersama.
command-line
pipe
Matius
sumber
sumber
cat
untuk itu karenaless whatever.txt
berfungsi dengan baik.Jawaban:
Saya akan memandu Anda melalui contoh yang agak rumit, berdasarkan skenario kehidupan nyata.
Masalah
Katakanlah perintah
conky
berhenti merespons pada desktop saya, dan saya ingin membunuhnya secara manual. Saya tahu sedikit tentang Unix, jadi saya tahu apa yang perlu saya lakukan adalah menjalankan perintahkill <PID>
. Untuk mengambil PID, saya bisa menggunakanps
atautop
alat apa pun yang diberikan distribusi Unix saya. Tetapi bagaimana saya bisa melakukan ini dalam satu perintah?Menjawab
PENOLAKAN: Perintah ini hanya berfungsi dalam kasus-kasus tertentu. Jangan menyalin / menempelnya di terminal Anda dan mulai menggunakannya, itu bisa membunuh proses tanpa curiga. Alih-alih belajar bagaimana membangunnya .
Bagaimana itu bekerja
1-
ps aux
Perintah ini akan menampilkan daftar proses yang sedang berjalan dan beberapa info tentangnya. Info yang menarik adalah bahwa ia akan menampilkan PID dari setiap proses di kolom ke-2. Berikut ini kutipan dari output perintah pada kotak saya:
2-
grep conky
Saya hanya tertarik pada satu proses, jadi saya gunakan
grep
untuk menemukan entri yang sesuai dengan program sayaconky
.3 -
grep -v grep
Seperti yang Anda lihat di langkah 2, perintah
ps
menampilkangrep conky
proses dalam daftar (setelah semua itu proses yang berjalan). Untuk memfilternya, saya bisa menjalankangrep -v grep
. Opsi-v
memberi tahugrep
untuk mencocokkan semua baris kecuali yang mengandung pola.NB: Saya ingin tahu cara melakukan langkah 2 dan 3 dalam satu
grep
panggilan.4-
awk '{print $2}'
Sekarang saya telah mengisolasi proses target saya. Saya ingin mengambil PID-nya. Dengan kata lain saya ingin mengambil kata ke-2 dari output. Beruntung bagi saya, sebagian besar (semua?) Unix modern akan menyediakan beberapa versi
awk
, bahasa scripting yang sangat menakjubkan dengan data tabular. Tugas kita menjadi semudahprint $2
.5-
xargs kill
Saya punya PID. Yang saya butuhkan hanyalah meneruskannya
kill
. Untuk melakukan ini, saya akan gunakanxargs
.xargs kill
akan membaca dari input (dalam kasus kami dari pipa), membentuk perintah yang terdiri darikill <items>
(<items>
apa pun itu dibaca dari input), dan kemudian jalankan perintah yang dibuat. Dalam kasus kami ini akan dieksekusikill 1948
. Misi selesai.Kata-kata terakhir
Perhatikan bahwa tergantung pada versi unix yang Anda gunakan, program tertentu mungkin berperilaku sedikit berbeda (misalnya,
ps
mungkin menampilkan PID di kolom $ 3). Jika ada yang salah atau berbeda, baca dokumentasi vendor Anda (atau lebih baik,man
halaman). Juga hati-hati karena pipa panjang bisa berbahaya. Jangan membuat asumsi apa pun terutama ketika menggunakan perintah sepertikill
ataurm
. Sebagai contoh, jika ada pengguna lain bernama 'conky' (atau 'Aconkyous') perintah saya dapat membunuh semua proses yang berjalan juga!Yang saya katakan adalah hati-hati, terutama untuk pipa panjang. Itu selalu lebih baik untuk membangunnya secara interaktif seperti yang kami lakukan di sini, daripada membuat asumsi dan merasa menyesal nanti.
sumber
kill $(pgrep conky)
pkill conky
grep
panggilan.grep [c]onky
adalah apa yang kamu cari.Favorit saya adalah yang ini:
youtube-dl $1 -q -o - | ffmpeg -i - $2
mengunduh video dari url youtube yang diberikan yang dilewati
$1
dan mengeluarkannya sebagai file yang diberikan oleh$2
. Perhatikan bagaimana file diam-diam-q
output ke STDOUT-o -
, disalurkan ke ffmpeg dan digunakan sebagai input oleh-i -
.Khusus untuk pemula linux, ini mungkin contoh praktis mengapa baris perintah dapat bermanfaat dan membuat segalanya lebih mudah daripada menggunakan alat GUI. Saya tidak yakin berapa lama untuk mengunduh video dari youtube dan mengonversi suaranya menjadi mp3. Baris di atas dapat melakukannya dalam beberapa detik.
sumber
youtube-dl --extract-audio --audio-format mp3 -a -
. Masih merupakan contoh yang keren, tetapi ada cara yang lebih mudah untuk melakukannya. (Ini memanggil ffmpeg secara internal.)youtube-dl $1 -q -o - | mplayer -
dalamnya : langsung memutar video di dalam mplayer. Saya menggunakan perintah itu dari laptop saya untuk memberi tahu server saya (yang terhubung ke TV) untuk memutar video. Saya harus menambahkan-display :0.0 -geometry 400x300+1200+200
untuk membiarkan jendela mplayer muncul di layar yang benar.Penggunaan umum (baca: cara saya menggunakannya sebagian besar waktu) adalah ketika, untuk beberapa alasan, saya harus menjalankan beberapa data melalui beberapa alat untuk melakukan tugas pemrosesan yang berbeda.
Jadi saya akan mengatakan itu penggunaan pipa adalah sebagai lem untuk merakit beberapa blok bangunan (alat UNIX yang berbeda) bersama-sama. Seperti kata Ulrich,
sort
danuniq
merupakan bait yang umum.Bergantung pada audiens, jika Anda ingin menyoroti penggunaan pipa ini, Anda dapat, misalnya, mulai dengan: "hei, silabus ini memiliki tautan ke beberapa PDF menarik dengan makalah dan catatan kuliah, tetapi beberapa di antaranya diulang. Dapatkah saya entah bagaimana mengotomatiskan ini? "
Lalu Anda bisa menunjukkan bagaimana
lynx --dump --listonly
mendapatkan daftar tautan, bagaimanagrep
bisa memfilter untuk tautan yang berakhir.pdf
, bagaimanacolrm
ataused
bisa menghilangkan angka-angka yanglynx
dituliskan ke setiap URL, bagaimanasort
danuniq
bisa menghilangkan duplikat, dan akhirnya bagaimanawget -i -
bisa digunakan untuk mengambil kembali file (menggunakan--wait
untuk bersikap lembut di server, tentu saja).Saya khawatir ini adalah contoh yang kompleks. Di sisi lain, ini mungkin membantu menunjukkan kekuatan pipa ketika Anda hanya pipa dan membuat shell menjalankannya sekaligus.
sumber
sort -u
dalam GNU coreutils juga.Saya tidak benar-benar tahu tentang yang baik, tetapi menyalurkan melalui
grep
harus menjadi salah satu kegunaan yang paling umum, mungkin diikuti olehwc -l
. (Ya,grep
memiliki-c
saklar yang kurang dikenal .)Bait umum lainnya adalah
| sort | uniq
, jika hanya karenauniq
membutuhkan inputnya untuk diurutkan.sumber
... | sort -u
jika tersedia!Bukan berarti Anda membutuhkannya untuk contoh ini, tetapi:
... membalik urutan greps mempertahankan pewarnaan, tetapi JAUH kurang efisien. mungkin pada daftar besar, warna tidak masalah.
juga, halaman web ini menyarankan:
https://stackoverflow.com/questions/9375711/more-elegant-ps-aux-grep-v-grep
... tetapi itu tidak akan berfungsi jika Anda mencari satu huruf (seperti proses 'X').
sumber
Saya akhirnya bisa berbagi kekacauan tentang oneliner yang saya buat sekitar satu setengah tahun yang lalu ...
Saya t...
Ini bisa dilakukan jauh lebih baik dengan satu skrip Python, saya yakin.
sumber
Ini adalah hal pertama yang terlintas dalam pikiran saya ...
mysqldump
adalah aplikasi konsol yang mengirimkan data, skema, serta prosedur dan fungsi opsional ke stdout. Biasanya itu akan diarahkan ke file untuk cadangan.mysqldump <options> > mydb.dump
Itu akan memberi Anda skrip sql yang tidak terkompresi. Untuk menghemat ruang, Anda bisa mengompresnya dengan bzip2.
bzip2 mydb.dump
Atau, Anda bisa melakukan keduanya dalam satu langkah:
mysqldump <options> | bzip2 > mydb.dump.bz2
Dalam contoh ini di atas, stdout dari
mysqldump
disalurkan ke bzip2 yang kemudian hasilnya dialihkan ke file.sumber
bzcat mydb.dump.bz2 | mysql <options>
.Berikut adalah contoh yang saya gunakan dalam pekerjaan saya dari banyak pipa dalam satu perintah. Ini menggunakan gawk untuk mencari log permintaan umum MySQL ($ OFILE) dan menemukan semua login yang ditolak. Ini kemudian mengurutkan daftar itu dengan nama, pipa yang daftar ke uniq yang menghitung kejadian, dan kemudian pipa itu mengurutkan untuk terakhir kalinya untuk mengurutkan daftar yang dihitung secara numerik ...
sumber
Pipa bekerja paling baik dengan filter dan penerjemah
Dengan cara ini, data dapat mengalir dari satu program ke program berikutnya dan tidak ada gunanya semua data harus ada di memori sekaligus.
sumber
cat filename | less
adalah penggunaan pipa yang mengerikan karena Anda bisa melakukannyaless filename
Berikut adalah contoh pip yang saya gunakan setiap hari (tetapi mungkin juga contoh buruk):
ls -la | more -c
Scott hoffman dan njsg jawaban adalah contoh yang lebih baik.
sumber
Bagaimana tentang: pencarian pola dan menampilkan pola terakhir yang terjadi?
Menunjukkan bagaimana menggunakan
tail
,sed
dangrep
dalam konteks pipa yang dapat dibangun langkah demi langkah.sumber
jalankan ini di direktori mana saja yang Anda inginkan memiliki analisis diurutkan untuk ukuran folder (lalu gulir ke bawah dengan tombol END):
Sortiert nach Ordnergrösse
sumber
Berikut adalah contoh yang saya gunakan untuk mengatur variabel DISPLAY ketika xauth bukan pilihan ...
Perintah pertama mendapatkan data yang dibutuhkan, yaitu, nama host atau IP. Perintah kedua hanya mendapatkan data itu (bidang terakhir). Akhirnya, perintah terakhir menghapus tanda kurung dari data.
sumber
Command piping dapat Anda gunakan di mana saja Anda merasa bahwa output dari perintah pertama dapat dimasukkan sebagai input untuk selanjutnya.
Contohnya.
cat example txt | grep {some_line} | awk {some_command}
Ini hanya konsep bahwa jika Anda merasa output dari perintah yang Anda jalankan dapat menjadi input dari perintah lain, Anda dapat menyalurkannya.
sumber