Linux Complex Bash One-Liner Contoh

Linux Complex Bash One-Liner Contoh

Bash One-Liners dapat mengurangi beban kerja, mengotomatiskan sesuatu dengan cepat dan menempatkan kekuatan kontrol sistem tertinggi di tangan Anda. Seiring waktu, Anda kemungkinan akan belajar menulis satu kalimat yang lebih kompleks dan beberapa hal yang akhirnya Anda tulis sebagai seorang profesional berpengalaman akan hampir tidak dapat dilewati oleh seorang pemula. Yang mengatakan, komando bash dan bahasa pengembangan sangat terstruktur - dan relatif mudah dimengerti - begitu Anda tahu tentang masuk dan keluar. Ini benar -benar seperti menjadi mahir dalam bahasa asing.

Dalam tutorial ini Anda akan belajar:

  • Cara Menulis Perintah dan Skrip One-Liner Bash yang lebih canggih
  • Pahami cara menggabungkan berbagai perintah menjadi skrip satu-liner
  • Pahami bagaimana kode keluar dari satu perintah dapat memengaruhi perintah lain saat menggunakan && Dan ||
  • Pahami bagaimana input dari perintah dapat dimodifikasi dan kemudian digunakan oleh perintah berikutnya
  • Penggunaan dan kehidupan nyata seperti contoh-contoh One-Liners bash yang lebih canggih
Linux Complex Bash One-Liner Contoh

Persyaratan dan konvensi perangkat lunak yang digunakan

Persyaratan Perangkat Lunak dan Konvensi Baris Perintah Linux
Kategori Persyaratan, konvensi atau versi perangkat lunak yang digunakan
Sistem Distribusi Linux-independen
Perangkat lunak Baris perintah bash, sistem berbasis Linux
Lainnya Utilitas apa pun yang tidak termasuk dalam shell bash secara default dapat diinstal menggunakan sudo apt-get install-name utilitas (atau instalasi yum untuk sistem berbasis redhat)
Konvensi # - mengharuskan Linux -Commands untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$-mengharuskan Linux-Commands untuk dieksekusi sebagai pengguna biasa

Contoh 1: Kontrol proses

Mari kita mulai dengan contoh bagaimana mengakhiri proses tertentu dalam Bash dengan cara yang mudah diikuti:

$ sleep 3600 & [1] 1792341 $ ps -ef | Grep 'Sleep' Roel 1792441 1701839 0 12:59 poin/13 00:00:00 Tidur 3600 Roel 1792452 1701839 0 12:59 poin/13 00:00:00 GREP - -Color = Auto Tidur Auto 


Pertama kami mengatur perintah tidur, selama 3600 detik (satu jam), dan kami kemudian menemukan proses itu dalam daftar proses. Hebat, tapi kami memiliki yang sebenarnya grep Perintah sebagai baris tambahan dalam output daftar proses. Mari kita filter dan juga mengekstrak ID proses selanjutnya alih -alih output informasi proses lengkap:

$ ps -ef | grep 'tidur' | grep -v grep roel 1792441 1701839 0 12:59 poin/13 00:00:00 tidur 3600 $ ps -ef | grep 'tidur' | grep -v grep | awk 'cetak $ 2' 1792441 

Dalam perintah pertama, kami memfilter grep aktif. Dalam perintah kedua kami mengambil satu langkah lebih jauh dengan mencetak kolom kedua $ 2 (di dalam AWK) dengan menggunakan AWK memerintah. Kami sekarang dapat menggunakan mengambil satu langkah lebih jauh dan sebenarnya membunuh proses itu. Katakanlah kita melakukannya dengan sinyal 9 yang sangat merusak proses Linux (Sigkill):

$ ps -ef | grep 'tidur' | grep -v grep | awk 'cetak $ 2' | xargs membunuh -9 [1]+ membunuh tidur 3600 

Dan kita bisa melihat proses kita terbunuh dengan benar. Sedangkan ini adalah contoh yang lebih sederhana, itu melibatkan 6 perintah yang berbeda: ps, grep, grep lagi, AWK, xargs Dan membunuh. Anda dapat melihat bagaimana bash one-liner dapat dengan cepat membangun kompleksitas dengan berbagai cara dan pada berbagai tingkat kompleksitas dan kemampuan pemrosesan data.

Dan, untuk mempelajari lebih lanjut tentang xargs, silakan lihat artikel kami xargs untuk pemula dengan contoh dan multi -berulir xargs dengan contoh.

Contoh 2: Bersenang -senang dengan kesuksesan dan kegagalan!

$ echo '0'> a && echo '1'> b && echo '2'> c && ls doNotexist || ls a && ls b && ls c && ls d && ls e ls: tidak dapat mengakses 'doNotexist': tidak ada file atau direktori seperti itu b c ls: tidak dapat mengakses 'd': tidak ada file atau direktori seperti itu 


Garis yang kompleks! Namun begitu Anda tahu cara membacanya, atau mungkin Anda sudah melakukannya, itu menjadi sangat mudah dibaca. Mari kita tunjukkan pernyataan ini untuk menjadi valid dengan memecah perintah dalam potongan ukuran gigitan yang lebih kecil yang lebih mudah dipahami dan diikuti:

$ echo '0'> a && echo '1'> b && echo '2'> c 

Semua set perintah ini sama dengan yang berikut dengan satu peringatan kecil:

$ echo '0'> A $ echo '1'> b $ echo '2'> C 

Jadi apa bedanya (dan peringatan kecil)?

Bahwa dalam seri perintah terakhir ini, setiap perintah akan dieksekusi, tidak peduli apa hasil dari perintah sebelumnya. Urutan sebelumnya (menggunakan &&) hanya akan melanjutkan ke yang kedua gema jika Hasil dari perintah pertama adalah 0 (Saya.e. Sukses - dalam Bash Success dalam suatu perintah ditunjukkan oleh 0 dan kegagalan dengan 1 atau lebih tinggi sebagai kode keluar).

Dengan demikian, urutan perintah menggunakan && juga bisa ditulis sebagai berikut;

$ echo '0'> a $ if [$ ? -eq 0]; lalu gema '1'> b; fi $ if [$ ? -eq 0]; lalu gema '2'> C; fi 

Itu $ ? (atau $? Sintaks Singkat) Variabel selalu berisi hasil dari perintah terakhir, i.e. kode keluar (0, 1 atau lebih tinggi) dihasilkan oleh perintah terakhir.

Seperti yang bisa kita lihat, penciptaan satu baris echo '0'> a && echo '1'> b && echo '2'> c Tentunya lebih mudah pada mata dan pemahaman sekarang, dan itu pasti mengurangi kompleksitas kode yang sesuai dan pencocokan yang ditampilkan tepat di atas.

Mari selanjutnya hanya mengambil satu perintah lagi:

$ echo '0'> a && echo '1'> b && echo '2'> c && ls doNotexist ls: Can't Access 'DoNotexist': Tidak ada file atau direktori seperti itu 

Ini sekarang dibaca jauh lebih mudah, benar?

Kami baru saja menambahkan perintah lain yaitu LS tidak tidak menguntungkan asalkan perintah sebelum itu (dan dalam hal ini seluruh baris karena semua perintah bergabung && Dalam pengaturan seperti rantai, di mana perintah yang salah akan merusak rantai dan menghentikan eksekusi rantai secara penuh) telah berhasil. Karena semua perintah berhasil, ls dieksekusi, dan kesalahan dihasilkan sebagai hasil dari hal yang sama karena file, yah, benar -benar tidak ada 🙂

Jadi apa yang akan terjadi jika kita bergabung dengan yang lain && pada akhirnya? Akankah rantai perintah berakhir seperti yang kami katakan? Mari kita tweak sedikit perintah:

$ echo '0'> a && echo '1'> b && echo '2'> c && ls doNotexist && echo 'pasti tidak' ls: tidak dapat mengakses 'tidak ada tidak ada file atau direktori atau direktori seperti itu 


Dan, tentunya tidak mengeksekusi. Mari kita perkenalkan perintah kami berikutnya dalam rantai kami dari contoh aslinya:

$ echo '0'> a && echo '1'> b && echo '2'> c && ls doNotexist || LS A LS: Tidak dapat mengakses 'DoNotexist': Tidak ada file atau direktori seperti itu 

Dapatkah Anda melihat apa yang terjadi? Di sini kita memiliki simbol sintaks baru yaitu || yang berbeda dari && dalam hal itu hanya dieksekusi jika ada hasil yang tidak nol dalam perintah sebelumnya. Perhatikan bahwa keduanya || Dan && berlaku hanya untuk perintah terakhir, dan bukan rantai perintah, meskipun orang bisa menganggapnya sebagai rantai secara keseluruhan.

Anda dapat memikirkannya && sebagai bahasa Inggris yang setara Dan dan, sampai batas tertentu yang umum Dan hadir dalam bahasa pemrograman, tetapi dengan twist bahwa di sini kami memeriksa suatu kondisi sebelum && dan melaksanakan apa yang ada di baliknya asalkan kondisi keluar 0.

Twist lain adalah bahwa sebagian besar bahasa pemrograman akan diperiksa kebenaran sebagai biner 1 Kapan && Sintaks digunakan. Misalnya pertimbangkan kode pseudo; Jika test1_flag && test2_flag maka… yang biasanya akan mengevaluasi Secara keseluruhan benar (dan dengan demikian mengeksekusi Kemudian perintah) Jika bendera biner test1_flag Dan test2_flag adalah 1 atau benar, sedangkan di pesta kebenaran ditunjukkan oleh a 0 (dan tidak 1) keluar status dari perintah terakhir!

Anda bisa memikirkannya || sebagai bahasa Inggris yang setara atau (atau seperti dalam atau jika ini gagal maka lakukan… ). Dalam situasi ini ada hubungan yang lebih kuat dengan bahasa pemrograman umum: Ketika bahasa yang umum diperiksa, misalnya, misalnya Jika test1_flag || test2_flag kalau begitu… , Lalu positif biner test1_flag (Saya.e. nilai 1) atau test2_flag akan menghasilkan kondisi keseluruhan menjadi benar (dan dengan demikian Kemudian Klausa akan dieksekusi). Kami melihat hal yang sama di Bash; Jika kode keluar dari perintah tersebut tidak nol (i.e. 1 atau nilai yang lebih tinggi dalam beberapa kasus), maka perintah di belakang || Klausa akan dieksekusi.

Mari kita sekarang kembali ke perintah asli dan menguraikannya secara lengkap:

$ echo '0'> a && echo '1'> b && echo '2'> c && ls doNotexist || ls a && ls b && ls c && ls d && ls e ls: tidak dapat mengakses 'doNotexist': tidak ada file atau direktori seperti itu b c ls: tidak dapat mengakses 'd': tidak ada file atau direktori seperti itu 

Dapatkah Anda melihat apa yang terjadi? Karena LS tidak tidak menguntungkan Perintah gagal secara internal dan menghasilkan output yang tidak nol (gunakan LS tidak tidak menguntungkan; echo $? dalam bash untuk memverifikasi; outputnya 2), the atau (||) Klausa dipicu dan selanjutnya kami mengeksekusi ls. Bayangkan itu seperti rantai yang mengalir ke arah yang berbeda, tetapi masih merupakan rantai.

Sebagai ls a perintah berhasil, dan diikuti oleh Dan (&&) Klausa, perintah berikutnya dieksekusi dan sebagainya. Perhatikan bahwa eksekusi terjadi ls d, dan output untuk hal yang sama (LS: Tidak dapat mengakses 'D': Tidak ada file atau direktori seperti itu) ditampilkan, tetapi ls e Perintah tidak dieksekusi! Ini diharapkan, seperti && digunakan dan ls d perintah gagal. Karena itu, ls e tidak pernah dieksekusi.

Kesimpulan

Semakin mahir Anda dalam menulis bash one-liner, semakin cepat, lebih baik, lebih sedikit rentan kesalahan dan lebih halus naskah One-Liner Anda akan menjadi, dan semakin sedikit waktu yang akan Anda habiskan untuk menulisnya. Pengembang bahasa bash telah menempatkan semua kendali di tangan Anda. Apa yang akan Anda lakukan dengan kontrol itu hari ini?

Tinggalkan kami pesan di bawah ini dengan kreasi satu-liner paling keren Anda!

Tutorial Linux Terkait:

  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Hal -hal yang harus diinstal pada ubuntu 20.04
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 20.04 FOSSA FOSSA Linux
  • Menguasai loop skrip bash
  • Mengambil halaman web menggunakan wget, curl dan lynx
  • Mint 20: Lebih baik dari Ubuntu dan Microsoft Windows?
  • Ubuntu 20.04 Panduan
  • Loop bersarang dalam skrip bash
  • Manipulasi data besar untuk kesenangan dan keuntungan bagian 1
  • Hal -hal yang harus dilakukan setelah menginstal ubuntu 22.04 Jammy Jellyfish…