Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 1

Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 1

Baris perintah bash memberikan kekuatan yang hampir tak terbatas ketika datang untuk mengeksekusi hampir semua yang ingin Anda lakukan. Apakah itu memproses satu set file, mengedit satu set dokumen, menangani data besar, mengelola sistem atau mengotomatiskan rutin, bash dapat melakukan semuanya. Seri ini, di mana hari ini kami menyajikan bagian pertama, pasti akan mempersenjatai Anda dengan alat dan metode yang Anda butuhkan untuk menjadi pengguna bash yang jauh lebih mahir. Bahkan pengguna yang sudah maju kemungkinan akan mengambil sesuatu yang baru dan menarik. Menikmati!

Dalam tutorial ini Anda akan belajar:

  • Tips, trik, dan metode baris perintah bash yang bermanfaat
  • Cara berinteraksi dengan baris perintah bash secara canggih
  • Cara mempertajam keterampilan bash Anda secara keseluruhan dan menjadi pengguna bash yang lebih mahir
Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 1

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 Berbagai utilitas yang termasuk dalam shell bash secara default, atau dapat diinstal menggunakan sudo apt-get menginstal nama alat (Di mana nama alat mewakili alat yang ingin Anda instal)
Konvensi # - mensyaratkan Linux -Commands untuk dieksekusi dengan hak istimewa root baik secara langsung sebagai pengguna root atau dengan menggunakan sudo memerintah
$-mensyaratkan Linux-Commands untuk dieksekusi sebagai pengguna reguler yang tidak istimewa

Contoh 1: Lihat proses apa yang mengakses file tertentu

Apakah Anda ingin tahu proses apa yang mengakses file yang diberikan? Mudah dilakukan dengan menggunakan Fuser perintah Bash Built-in:

$ fuser -a/usr/bin/gnome-kalkulator/usr/bin/gnome-kalkulator: 619672e 
$ ps -ef | GREP 619672 | grep -v grep ABC 619672 3136 0 13:13 ? 00:00:01 Gnome-Calculator 


Seperti yang bisa kita lihat, file /USR/BIN/GNOME-Calculator (biner), saat ini sedang digunakan oleh proses dengan ID 619672. Memeriksa ID proses itu menggunakan ps, Kami segera mencari tahu pengguna itu ABC Memulai kalkulator dan melakukannya pada 13:13.

Itu e dibalik Pid (ID proses) adalah untuk menunjukkan bahwa ini adalah yang dapat dijalankan dijalankan. Ada berbagai kualifikasi lainnya, dan Anda dapat menggunakan fuser pria untuk melihat mereka. Alat fuser ini bisa menjadi kuat, terutama saat digunakan dalam kombinasi dengan lsof (sebuah ls file terbuka):

Katakanlah kami men -debug komputer jarak jauh untuk pengguna yang bekerja dengan desktop Ubuntu standar. Pengguna memulai kalkulator, dan sekarang seluruh layarnya di Frozen. Kami sekarang ingin membunuh semua proses yang terkait dengan cara apa pun dengan layar yang terkunci, tanpa memulai kembali server, agar seberapa signifikan proses tersebut.

# lsof | GREP Calculator | grep "berbagi" | head -N1 XDG-deskt 3111 ABC MEM Reg 253,1 3009 12327296/usr/share/locale-langpack/en_au/lc_messages/gnome-kalkulator.mo 
# fuser -a/usr/share/locale-langpack/en_au/lc_messages/gnome-calculator.mo/usr/share/locale-langpack/en_au/lc_messages/gnome-calculator.MO: 3111m 3136m 619672m 1577230m 
# ps -ef | grep -e "3111 | 3136 | 619672 | 1577230" | grep -v grep ABC 3111 2779 0 Agustus03 ? 00:00:11/USR/LIBEXEC/XDG-DESKTOP-PORTAL-GTK ABC 3136 2779 5 AUG03 ? 03:08:03/usr/bin/gnome-shell ABC 619672 3136 0 13:13 ? 00:00:01 GNOME-Calculator ABC 1577230 2779 0 Agustus04 ? 00:03:15/usr/bin/nautilus-layanan aplikasi 

Pertama, kami menemukan semua file terbuka yang digunakan oleh kalkulator menggunakan lsof. Agar output tetap singkat, kami hanya mencantumkan hasil teratas untuk satu file bersama. Selanjutnya kami menggunakan Fuser untuk mencari tahu proses mana yang menggunakan file itu. Ini memberi kami pids. Akhirnya kami mencari menggunakan atau (|) berbasis grep untuk menemukan nama proses yang sebenarnya. Kita dapat melihat bahwa saat kalkulator dimulai pada 13:13, proses lainnya telah berjalan lebih lama.

Selanjutnya, kita bisa mengeluarkan, misalnya, a Bunuh -9 619672 dan periksa apakah ini menyelesaikan masalah. Jika tidak, kami dapat mengambil proses 1577230 (Manajer File Nautilus Bersama), Proses 3136 (cangkang menyeluruh), atau akhirnya memproses 3111, Meskipun itu kemungkinan akan membunuh sebagian besar pengalaman desktop pengguna dan mungkin tidak mudah untuk memulai kembali.

Contoh 2: Debugging skrip Anda

Jadi Anda menulis skrip yang bagus, dengan banyak kode kompleks, lalu jalankan ... dan lihat kesalahan dalam output, yang pada pandangan pertama tidak masuk akal. Bahkan setelah debugging untuk sementara waktu, Anda masih terjebak pada apa yang terjadi saat skrip sedang dieksekusi.

bash -x untuk menyelamatkan! bash -x memungkinkan seseorang untuk mengeksekusi a tes.SH skrip dan lihat dengan tepat apa yang terjadi:

#!/bin/bash var1 = "halo linuxconfig.pembaca org!"Var2 =" ------------------------------ "echo $ var1 echo $ var2 
Menyalin

Eksekusi:

$ bash -x ./tes.sh + var1 = "hello linuxconfig.pembaca org!" + Var2 = ------------------------------ + echo hello linuxconfig.pembaca org '!'Halo LinuxConfig.pembaca org! + gema ------------------------------ ------------------------------ 

Seperti yang Anda lihat, bash -x Perintah menunjukkan kepada kita apa yang terjadi, langkah demi langkah. Anda juga dapat mengirim output perintah ini ke file dengan mudah dengan menambahkan 2> & 1 | tee my_output.catatan ke perintah:

$ bash -x ./tes.SH 2> & 1 | tee my_output.log… output yang sama… $ cat my_output.log + var1 = "halo linuxconfig.pembaca org!" + Var2 = ------------------------------ + echo hello linuxconfig.pembaca org '!'Halo LinuxConfig.pembaca org! + gema ------------------------------ ------------------------------ 


Itu 2> & 1 akan mengirim Stderr (Output Kesalahan Standar: Setiap kesalahan yang terlihat selama eksekusi) stdout (Output Standar: Didefinisikan secara longgar di sini sebagai output yang biasanya Anda lihat di terminal) dan tangkap semua output dari bash -x. Itu tee Perintah akan menangkap semua output dari stdout, dan tulis ke file yang ditunjukkan. Jika Anda ingin menambahkan file (dan tidak mulai lagi dengan file kosong) yang dapat Anda gunakan tee -a Dimana -A Opsi akan memastikan file ditambahkan ke.

Contoh 3: gotcha umum: sh -x != bash -x

Contoh terakhir menunjukkan kepada kita cara menggunakan bash -x, Tapi bisakah kita juga menggunakan sh -x? Kecenderungan untuk beberapa pengguna bash yang lebih baru mungkin berjalan sh -x, Tapi ini adalah kesalahan pemula; SH adalah cangkang yang jauh lebih terbatas. Sementara pesta berdasarkan pada SH, Ini memiliki lebih banyak ekstensi. Jadi, jika Anda menggunakan sh -x Untuk men -debug skrip Anda, Anda akan melihat kesalahan aneh. Ingin melihat contohnya?

#!/bin/bash test = "abc" if [["$ test" == * "b" *]]; lalu gema "Ya, di sana!"Fi 
Menyalin

Eksekusi:

$ ./tes.SH ya, di sana! 
$ bash -x ./tes.sh + test = abc + [[abc == * \ b *]] + echo 'ya, di sana!'Ya, di sana! 
$ sh -x ./tes.tes + test = abc + [[abc == * b *]] ./tes: 4: [[: tidak ditemukan 

Di sini Anda dapat melihat skrip tes kecil tes.SH yang saat dieksekusi cek apakah surat tertentu (B) muncul dalam string input tertentu (sebagaimana didefinisikan oleh TES variabel). Script bekerja dengan baik, dan saat kami menggunakan bash -x kita dapat melihat informasi yang disajikan, termasuk output, terlihat benar.

Selanjutnya, gunakan sh -x Segalanya menjadi salah secara signifikan; itu SH Shell tidak dapat menafsirkan [ dan gagal keduanya di sh -x output dan juga dalam eksekusi skrip itu sendiri. Ini karena sintaks IF lanjutan diimplementasikan pesta tidak ada di SH.

Contoh 4: uniq atau tidak unik - itulah pertanyaannya!

Pernahkah Anda ingin mengurutkan file dan hanya mencantumkan entri unik? Sekilas ini tampaknya merupakan latihan yang mudah menggunakan perintah bash yang disertakan uniq:

$ input CAT.txt 1 2 2 3 3 3 
$ input CAT.txt | Uniq 1 2 3 

Namun, jika kami sedikit memodifikasi file input kami, kami mengalami masalah keunikan:

$ input CAT.txt 3 1 2 3 2 3 3 3 
$ input CAT.txt | Uniq 3 1 2 3 2 3 


hal ini dikarenakan uniq secara default akan Filter garis pencocokan yang berdekatan, dengan garis yang cocok digabungkan ke kejadian pertama sebagai uniq manual mengklarifikasi. Atau dengan kata lain, hanya baris yang persis sama dengan yang sebelumnya akan dihapus.

Dalam contoh ini dapat dilihat dengan tiga yang terakhir 3 Garis -garis terkondensasi menjadi satu 'unik' 3. Ini kemungkinan hanya dapat digunakan dalam jumlah terbatas dan kasus penggunaan spesifik.

Namun kita bisa mengubah uniq sedikit lebih jauh untuk memberi kita hanya entri yang benar -benar unik dengan menggunakan -u parameter:

$ input CAT.txt # perhatikan bahwa simbol ' #' ditambahkan setelah eksekusi, untuk mengklarifikasi sesuatu (baca di bawah) 3 # 1 # 2 # 3 # 2 # 3 3 3 
$ input CAT.txt | uniq -u 3 1 2 3 2 

Masih terlihat sedikit membingungkan, benar? Perhatikan baik -baik input dan output dan Anda dapat melihat bagaimana hanya baris secara individual unik (seperti yang ditandai oleh # dalam contoh di atas setelah eksekusi) adalah output.

Tiga terakhir 3 Baris bukan output karena tidak unik Dengan demikian. Metode keunikan ini lagi akan memiliki penerapan yang terbatas dalam skenario dunia nyata, meskipun mungkin ada beberapa contoh di mana ia berguna.

Kita bisa mendapatkan solusi yang lebih cocok untuk keunikan dengan menggunakan alat bawaan yang sedikit berbeda; menyortir:

$ input CAT.txt 1 2 2 3 3 3 
$ input CAT.txt | urut -u 1 2 3 
TAHUKAH KAMU?
Anda dapat menghilangkan kucing Perintah dalam contoh di atas dan berikan file untuk uniq atau menyortir untuk membaca dari langsung? Contoh:Sortir -U input.txt

Besar! Ini dapat digunakan dalam banyak skrip di mana kami ingin daftar entri unik yang benar. Manfaat tambahannya adalah bahwa daftar tersebut diurutkan dengan baik pada saat yang sama (meskipun kami mungkin lebih suka menggunakan -N opsi untuk mengurutkan juga untuk mengurutkan urutan numerik sesuai dengan nilai numerik string).

Kesimpulan

Ada banyak kegembiraan dalam menggunakan bash sebagai baris perintah linux pilihan Anda. Dalam tutorial ini, kami menjelajahi sejumlah tip dan trik baris perintah bash yang bermanfaat. Ini adalah kickoff dari seri yang penuh dengan contoh baris perintah bash yang, jika Anda mengikuti, akan membantu Anda menjadi lebih maju di dan dengan baris perintah dan shell bash dan shell!

Beri tahu kami pemikiran Anda dan bagikan beberapa tips, trik, dan gotcha keren Anda sendiri di bawah ini!

  • Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 1
  • Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 2
  • Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 3
  • Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 4
  • Contoh dan trik Contoh Tip Baris Bash Berguna - Bagian 5

Tutorial Linux Terkait:

  • Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 3
  • Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 2
  • Contoh dan trik Contoh Tips Baris Bash Berguna - Bagian 4
  • Pengantar Otomatisasi Linux, Alat dan Teknik
  • Ubuntu 20.04 trik dan hal -hal yang mungkin tidak Anda ketahui
  • Contoh dan trik Contoh Tip Baris Bash Berguna - Bagian 5
  • Manipulasi data besar untuk kesenangan dan keuntungan bagian 1
  • Tip dan trik baris perintah BASH
  • Ubuntu 20.04 Panduan
  • Loop bersarang dalam skrip bash