Contoh Petua dan Trik Perintah Bash Berguna - Bahagian 1

Contoh Petua dan Trik Perintah Bash Berguna - Bahagian 1

Talian Perintah Bash menyediakan kuasa yang hampir tidak terbatas ketika melaksanakan hampir apa sahaja yang anda mahu lakukan. Sama ada ia memproses satu set fail, mengedit satu set dokumen, mengendalikan data besar, menguruskan sistem atau mengautomasikan rutin, bash boleh melakukan semuanya. Siri ini, yang hari ini kami membentangkan bahagian pertama, pasti akan membekalkan anda dengan alat dan kaedah yang anda perlukan untuk menjadi pengguna bash yang lebih mahir. Malah pengguna yang sudah maju mungkin akan mengambil sesuatu yang baru dan menarik. Nikmati!

Dalam tutorial ini anda akan belajar:

  • Petua, cara dan kaedah baris perintah bash berguna
  • Cara berinteraksi dengan baris perintah bash dengan cara yang lebih maju
  • Cara Mengasah Kemahiran Bash Anda secara keseluruhan dan menjadi pengguna bash yang lebih mahir
Contoh Petua dan Trik Perintah Bash Berguna - Bahagian 1

Keperluan perisian dan konvensyen yang digunakan

Keperluan Perisian dan Konvensyen Talian Perintah Linux
Kategori Keperluan, konvensyen atau versi perisian yang digunakan
Sistem Pengedaran linux-bebas
Perisian Baris perintah bash, sistem berasaskan linux
Yang lain Pelbagai utiliti yang sama ada termasuk dalam shell bash secara lalai, atau boleh dipasang menggunakan sudo apt-get pemasangan nama alat (di mana nama alat mewakili alat yang anda ingin pasang)
Konvensyen # - Memerlukan komando linux yang diberikan untuk dilaksanakan dengan keistimewaan akar sama ada secara langsung sebagai pengguna root atau dengan menggunakan sudo perintah
$-memerlukan komando Linux yang diberikan sebagai pengguna yang tidak berkadar biasa

Contoh 1: Lihat proses apa yang mengakses fail tertentu

Adakah anda ingin mengetahui apa proses mengakses fail yang diberikan? Sangat mudah untuk melakukannya dengan menggunakan perintah perintah terbina dalam bash:

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


Seperti yang dapat kita lihat, failnya /usr/bin/gnome-calculator (binari), kini sedang digunakan oleh proses dengan ID 619672. Memeriksa ID proses itu menggunakan ps, Kami segera mengetahui pengguna itu ABC memulakan kalkulator dan melakukannya pada jam 13:13.

The e di belakang Pid (ID Proses) adalah untuk menunjukkan bahawa ini adalah jalan yang boleh dilaksanakan. Terdapat pelbagai kelayakan lain, dan anda boleh menggunakan Man Fuser untuk melihat mereka. Alat fuser ini boleh menjadi kuat, terutamanya apabila digunakan dalam kombinasi dengan lsof (An ls fail terbuka):

Katakan kami menyahpepijat komputer jauh untuk pengguna yang bekerja dengan desktop Ubuntu standard. Pengguna memulakan kalkulator, dan kini seluruh skrinnya di Frozen. Kami mahu membunuh semua proses yang berkaitan dengan sekarang ke skrin terkunci, tanpa memulakan semula pelayan, mengikut betapa pentingnya proses tersebut.

# lsof | GREP Calculator | grep "kongsi" | HEAD -N1 XDG-DESKT 3111 ABC MEM Reg 253,1 3009 12327296/usr/share/locale-langpack/en_au/lc_messages/gnome-calculator.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 Ogos03 ? 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 Ogos04 ? 00:03:15/usr/bin/nautilus-perkhidmatan-perkhidmatan 

Pertama, kami mendapati semua fail terbuka yang digunakan oleh kalkulator menggunakan lsof. Untuk memastikan output pendek, kami hanya menyenaraikan hasil teratas untuk satu fail yang dikongsi bersama. Seterusnya kami menggunakan Fuser untuk mengetahui proses mana yang menggunakan fail itu. Ini memberi kami PID. Akhirnya kami mencari menggunakan atau (|) berasaskan grep untuk mencari nama proses sebenar. Kita dapat melihat bahawa walaupun kalkulator dimulakan pada jam 13:13, proses lain telah berjalan lebih lama.

Seterusnya, kita boleh mengeluarkan, sebagai contoh, a Bunuh -9 619672 dan periksa sama ada ini menyelesaikan masalah. Jika tidak, kita mungkin mengambil proses 1577230 (Pengurus Fail Nautilus yang dikongsi), Proses 3136 (shell yang menyeluruh), atau akhirnya memproses 3111, Walaupun itu mungkin akan membunuh sebahagian besar pengalaman desktop pengguna dan mungkin tidak mudah dimulakan semula.

Contoh 2: Menyahpepijat skrip anda

Oleh itu, anda menulis skrip yang hebat, dengan banyak kod kompleks, kemudian jalankannya ... dan lihat ralat dalam output, yang pada pandangan pertama tidak masuk akal. Walaupun selepas menyahpepijat sebentar, anda masih terjebak pada apa yang berlaku semasa skrip sedang dijalankan.

bash -x untuk menyelamatkan! bash -x membolehkan seseorang melaksanakan a ujian.sh Skrip dan lihat dengan tepat apa yang berlaku:

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

Pelaksanaan:

$ bash -x ./ujian.sh + var1 = "hello linuxconfig.pembaca org!" + Var2 = ------------------------------ + echo hello linuxconfig.pembaca org!'Hello Linuxconfig.pembaca org! + echo ------------------------------ ------------------------------ 

Seperti yang anda lihat, bash -x Perintah menunjukkan kepada kita apa yang berlaku, langkah demi langkah. Anda juga boleh menghantar output arahan ini ke fail dengan mudah dengan menambahkan 2> & 1 | tee my_output.log ke perintah:

$ bash -x ./ujian.sh 2> & 1 | tee my_output.log ... output yang sama ... $ Cat my_output.log + var1 = "hello linuxconfig.pembaca org!" + Var2 = ------------------------------ + echo hello linuxconfig.pembaca org!'Hello Linuxconfig.pembaca org! + echo ------------------------------ ------------------------------ 


The 2> & 1 akan menghantar stderr (output ralat standard: Sebarang kesilapan yang dilihat semasa pelaksanaan) hingga stdout (output standard: ditakrifkan secara longgar di sini sebagai output yang biasanya anda lihat di terminal) dan menangkap semua output dari bash -x. The tee Perintah akan menangkap semua output dari stdout, dan tuliskannya ke fail yang ditunjukkan. Sekiranya anda mahu menambah fail (dan tidak mula lagi dengan fail kosong), anda boleh menggunakan tee -a Dimanakah -a pilihan akan memastikan fail dilampirkan ke.

Contoh 3: Gotcha biasa: sh -x != bash -x

Contoh terakhir menunjukkan cara menggunakan bash -x, Tetapi bolehkah kita juga menggunakan sh -x? Kecenderungan untuk beberapa pengguna bash yang lebih baru mungkin berjalan sh -x, Tetapi ini adalah kesilapan baru; sh adalah cangkang yang lebih terhad. Sementara bash berdasarkan sh, ia mempunyai banyak lagi sambungan. Oleh itu, jika anda menggunakan sh -x Untuk menyahpepijat skrip anda, anda akan melihat kesilapan yang ganjil. Mahu melihat contoh?

#!/bin/bash test = "abc" if [["$ test" == * "b" *]]; Kemudian echo "ya, di sana!"Fi 
Salinan

Pelaksanaan:

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

Di sini anda dapat melihat skrip ujian kecil ujian.sh yang mana apabila dilaksanakan cek jika huruf tertentu (b) muncul dalam rentetan input tertentu (seperti yang ditakrifkan oleh Ujian berubah). Skrip berfungsi hebat, dan ketika kita menggunakan bash -x Kita dapat melihat maklumat yang dibentangkan, termasuk output, kelihatan betul.

Seterusnya, gunakan sh -x Perkara -perkara yang berlaku dengan ketara; The sh Shell tidak dapat mentafsir [[ dan gagal dalam kedua -duanya di sh -x output serta dalam pelaksanaan skrip itu sendiri. Ini kerana sintaks jika maju dilaksanakan di bash tidak wujud di sh.

Contoh 4: uniq atau tidak unik - itulah soalannya!

Adakah anda pernah mahu menyusun fail dan hanya menyenaraikan penyertaan yang unik? Pada pandangan pertama ini nampaknya merupakan latihan yang mudah menggunakan perintah bash yang disertakan uniq:

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

Walau bagaimanapun, jika kita mengubah suai fail input kita sedikit, kita menghadapi masalah keunikan:

$ CAT INPUT.TXT 3 1 2 3 2 3 3 3 3 
$ CAT INPUT.txt | uniq 3 1 2 3 2 3 


Ini adalah kerana uniq Secara lalai akan Penapis garis sepadan bersebelahan, dengan garis sepadan digabungkan ke kejadian pertama sebagai uniq manual menjelaskan. Atau dengan kata lain, hanya baris yang sama seperti yang sebelumnya akan dikeluarkan.

Dalam contoh ini dapat dilihat oleh tiga yang terakhir 3 garis dipendekkan menjadi 'unik' tunggal 3. Ini mungkin hanya boleh digunakan dalam jumlah yang terhad dan kes penggunaan tertentu.

Kita boleh tweak uniq sedikit lebih jauh untuk memberi kita hanya entri yang benar -benar unik dengan menggunakan -u parameter:

$ CAT INPUT.TXT # Perhatikan bahawa simbol ' #' telah ditambah selepas pelaksanaan, untuk menjelaskan sesuatu (baca di bawah) 3 # 1 # 2 # 3 # 2 # 3 3 3 3 
$ CAT INPUT.txt | uniq -u 3 1 2 3 2 

Masih kelihatan sedikit mengelirukan, betul? Melihat dengan teliti input dan output dan anda dapat melihat bagaimana garis yang hanya secara individu unik (seperti yang ditandakan oleh # Dalam contoh di atas selepas pelaksanaan) adalah output.

Tiga yang terakhir 3 garis tidak output kerana mereka tidak unik seperti. Kaedah keunikan ini sekali lagi akan mempunyai kebolehgunaan terhad dalam senario dunia sebenar, walaupun mungkin terdapat beberapa contoh di mana ia berguna.

Kita boleh mendapatkan penyelesaian yang lebih sesuai untuk keunikan dengan menggunakan alat terbina dalam bash yang sedikit berbeza; menyusun:

$ CAT INPUT.txt 1 2 2 3 3 3 3 
$ CAT INPUT.txt | sort -u 1 2 3 
ADAKAH KAMU TAHU?
Anda boleh menghilangkan kucing perintah dalam contoh di atas dan berikan fail ke uniq atau menyusun untuk dibaca dari secara langsung? Contoh:Sort -u input.txt

Hebat! Ini boleh digunakan dalam banyak skrip di mana kami ingin senarai sebenar penyertaan unik. Manfaat tambahan ialah senarai itu disusun dengan baik pada masa yang sama (walaupun kita mungkin lebih suka menggunakannya -n Pilihan untuk menyusun juga untuk menyusun susunan berangka mengikut nilai berangka rentetan).

Kesimpulan

Terdapat banyak kegembiraan dalam menggunakan bash sebagai baris arahan Linux pilihan anda. Dalam tutorial ini, kami meneroka beberapa petua dan cara baris perintah bash berguna. Ini adalah kickoff siri yang penuh dengan contoh baris perintah bash yang, jika anda mengikuti, akan membantu anda menjadi lebih maju di dan dengan baris perintah bash dan cangkang!

Marilah kita tahu fikiran anda dan kongsi beberapa petua baris perintah bash anda sendiri, helah dan gotchas di bawah!

  • Contoh Petua dan Trik Perintah Bash Berguna - Bahagian 1
  • Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 2
  • Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 3
  • Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 4
  • Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 5

Tutorial Linux Berkaitan:

  • Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 3
  • Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 2
  • Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 4
  • Pengenalan kepada Automasi, Alat dan Teknik Linux
  • Ubuntu 20.04 Trik dan Perkara yang Anda Tidak Tahu
  • Contoh Tips dan Trik Perintah Bash Berguna - Bahagian 5
  • Manipulasi data besar untuk keseronokan dan keuntungan bahagian 1
  • Petua dan Trik Talian Perintah Bash
  • Ubuntu 20.04 Panduan
  • Gelung bersarang dalam skrip bash