GNU/Linux >> Belajar Linux >  >> Linux

Perintah bash bang:Trik yang harus diketahui untuk baris perintah Linux

Selalu lupa untuk mengeluarkan sudo sebelum perintah? Pernah harus mengulang seluruh perintah karena Anda salah ketik? Pernahkah Anda berpikir akan menyenangkan memiliki pintasan untuk mengulangi perintah Anda sebelumnya? Jika ini terdengar seperti Anda, saya punya sesuatu untuk dibagikan. Pada artikel ini, saya akan menunjukkan cara menggunakan bash bang (! ) perintah, yang memudahkan untuk mengulang perintah dan memperbaiki kesalahan.

Dasar-dasar pengulangan perintah

Bash menyediakan akses ke daftar perintah yang Anda keluarkan sebelumnya, yang dikenal sebagai riwayat perintah Anda. Nilai HISTSIZE variabel menetapkan jumlah perintah yang disimpan dalam daftar riwayat Anda. Secara default, nilai ini adalah 500. Perintah yang dikeluarkan sebelumnya ini (dikenal sebagai daftar riwayat Anda) disimpan dalam file riwayat Anda. Lokasi defaultnya adalah ~/.bash_history , dan lokasi ini disimpan dalam variabel shell HISTFILE .

Di bawah tenda, perintah bang (!) memperkenalkan perintah dari daftar riwayat bash Anda ke dalam aliran input. Fitur ini memudahkan untuk mengulang perintah, mengganti teks, memanipulasi argumen, dan memperbaiki kesalahan ketik pada perintah sebelumnya dengan cepat.

Contoh pengulangan perintah

Berikut adalah beberapa contoh yang dapat Anda lakukan dengan bash bang.

Ulangi perintah terakhir yang cocok dengan awal string

Bang (! ) diikuti oleh karakter (atau string) pertama yang cocok dengan perintah yang ingin Anda jalankan akan mengulangi contoh terbaru dari perintah tersebut:

$ ls
dir  dir1  dir2  file  file1  file2  hello.txt

$ !l
ls 
dir  dir1  dir2  file  file1  file2  hello.txt

$ !ls
ls 
dir  dir1  dir2  file  file1  file2  hello.txt

Ulangi perintah terakhir yang cocok di mana saja dalam string

!?<string> format melakukan hal yang sama seperti di atas, tetapi <string> tidak harus di awal perintah:

$ cat hello.txt 
Hello world ..!
$ !?hello.txt
cat hello.txt 
Hello world ..!

Ulangi perintah n dari riwayat Anda

Mengulangi perintah n dari riwayat bash Anda (menghitung mundur dari atas) semudah menggunakan bang dengan nomor yang dimaksud:

!10

Ulangi perintah ke-n dari entri riwayat terakhir Anda

Mengulangi perintah n dari riwayat bash Anda (menghitung dari bawah) semudah menggunakan bang dengan minus dan nomor yang dimaksud:

!-10

Ulangi perintah terakhir

Jika ada satu perintah bang yang saya gunakan sepanjang waktu, itu adalah !! . Bang-bang (!! ) perintah mengulangi perintah terakhir dari daftar riwayat, berperilaku sama seperti !-1 :

$ cat hello.txt 
Hello world ..!
$ !!
cat hello.txt 
Hello world ..!

Bang-bang (!! ) berguna ketika Anda perlu mengulang perintah sebelumnya, atau jika Anda perlu mengawali sudo , atau keluaran pipa:

$ yum update
Loaded plugins: priorities, update-motd, upgrade-helper
You need to be root to perform this command.
$ sudo !!
sudo yum update
Loaded plugins: priorities, update-motd, upgrade-helper
$ ls
dir  dir1  dir2  file  file1  file2  hello.txt
$ !! | grep file
ls | grep file
file
file1
file2
$ 

Ulangi tetapi ganti string

Seringkali saya mengeluarkan perintah panjang dan menerbitkannya kembali dengan sakelar yang berbeda. Atau, saya perlu mengeluarkan ulang perintah karena ada kesalahan ketik pada perintah saya sebelumnya. Substitusi string memungkinkan saya melakukan ini tanpa mengetik ulang seluruh perintah yang panjang.

Ada dua cara untuk mencapai hasil ini. Salah satunya dengan menggunakan:

!!:s^<old>^<new>

Struktur ini menggantikan string untuk perintah sebelumnya:

$ ls /etc/httpd/conf.d
autoindex.conf  notrace.conf  php.conf  php-conf.7.2  README  userdir.conf  welcome.conf
$ !!:s^conf.d^conf
ls /etc/httpd/conf
httpd.conf  magic

Anda bahkan dapat melakukan hal yang sama dengan !<string>:s^<old>^<new> :

$ !l:s^conf^conf.d
ls /etc/httpd/conf.d
autoindex.conf  notrace.conf  php.conf  php-conf.7.2  README  userdir.conf  welcome.conf

Opsi ini berguna ketika Anda perlu melakukan substitusi string untuk perintah yang bukan yang terbaru.

Cara lain untuk mencapai hasil ini adalah melalui struktur ^<old>^<new> . Format ini menggantikan string untuk perintah terbaru, mirip dengan !!:s^<old>^<new> :

$ cd /etc/httpd/conf.d
/etc/httpd/conf.d 
/etc/httpd/conf.d $ ^conf.d^conf
cd /etc/httpd/conf
/etc/httpd/conf $ 

Ulangi argumen perintah

Seringkali, kita menggunakan argumen yang sama dari perintah sebelumnya. Jika Anda memiliki argumen yang panjang, Anda mungkin ingin mengulanginya dengan perintah berikutnya. Mari kita lihat beberapa perintah bash bang yang dapat melakukan ini untuk kita.

Pertama, format !:n mengulangi argumen n dari perintah sebelumnya, dengan 0 menjadi perintah itu sendiri:

~/project $ ls -a -l 
total 32
drwxrwxr-x  7 user user 4096 Sep  9 20:30 .
drwx------ 16 user user 4096 Sep  9 20:10 ..
drwxrwxr-x  2 user user 4096 Sep  9 16:02 dir
drwxrwxr-x  2 user user 4096 Sep  9 16:02 dir1
drwxrwxr-x  2 user user 4096 Sep  9 16:02 dir2
drwxrwxr-x  2 user user 4096 Sep  9 20:30 dir3
-rw-rw-r--  1 user user    0 Sep  9 16:02 file
-rw-rw-r--  1 user user    0 Sep  5 16:07 .file
-rw-rw-r--  1 user user    0 Sep  9 16:01 file1
-rw-rw-r--  1 user user    0 Sep  9 16:01 file2
-rw-rw-r--  1 user user   16 Sep  9 16:03 hello.txt
drwxrwxr-x  2 user user 4096 Sep  5 16:08 .hidden_dir
-rw-rw-r--  1 user user    0 Sep  5 16:08 .hidden_file
~/project $ ls !:1
ls -a
.  ..  dir  dir1  dir2  dir3  file  .file  file1  file2  hello.txt  .hidden_dir  .hidden_file

Kedua, !!:$ mengulangi argumen terakhir dari perintah sebelumnya. Anda dapat mempersingkat perintah ini menjadi !$ dan $_ :

project $ mkdir dir3
project $ cd !$
cd dir3
project/dir3 $ 

Anda mungkin bertanya, "Bagaimana jika saya ingin menggunakan teknik ini dengan perintah yang saya keluarkan sebelumnya, tetapi bukan yang terbaru?" Anda dapat melakukannya dengan perintah bang, menggunakan:

!<command you've issued previously >:$ 

$ mkdir -p hello/test1/test2
$ ls !mkdir:$
ls hello/test1/test2

atau:

!<command you've issued previously >:n

$ ls !mk:2
ls hello/test1/test2

Terkadang Anda mungkin ingin mencetak perintah, tetapi tidak ingin dieksekusi. Anda dapat menyelesaikan tugas ini dengan !:p :

~/project $ cat hello.txt 
Hello world ..!
~/project $ !:p
cat hello.txt 
~/project $ 

Bahkan, Anda dapat mencetak perintah apa pun dalam daftar riwayat Anda tanpa menjalankannya. Cukup keluarkan salah satu dari yang berikut:

$ !<command>:p

$ !mkdir:p
mkdir -p hello/test1/test2

$ !<string>:p

$ !su:p
sudo yum check-update
$ !mk:p
mkdir -p hello/test1/test2

Memanggil perintah dengan reverse-i-search

Sebagai sysadmin, Anda mungkin mengeluarkan ratusan perintah setiap hari. Anda mungkin mengalami kesulitan mengingat beberapa perintah atau mengingat bagian dari satu. Berikut adalah opsi lain untuk menemukan yang Anda butuhkan.

(reverse-i-search)`<search string>’: <output> (reverse-i-search)`yu': sudo yum check-update
(reverse-i-search)`cd': cd /etc

CTRL+R mengaktifkan reverse-i-search , yang menyediakan area pencarian yang bagus, memberi Anda cara yang lebih mudah untuk menavigasi melalui riwayat Anda.

Kesimpulan

Ini adalah bash bang yang berguna (! ) perintah yang harus diketahui oleh setiap sysadmin. Perintah ini menghemat banyak waktu dan memberi Anda kemampuan untuk memperbaiki kesalahan perintah dengan cepat. Baca lebih lanjut tentang bash di halaman manualnya, dengan perintah man bash .

[Ingin mencoba Red Hat Enterprise Linux? Unduh sekarang secara gratis.]


Linux
  1. 8 tips untuk baris perintah Linux

  2. Miliki sapi di baris perintah Linux

  3. Masukkan diri Anda ke dalam baris perintah Linux

  1. Kiat bash untuk sehari-hari di baris perintah

  2. Yoda – Asisten Pribadi Baris Perintah Untuk Sistem Linux Anda

  3. Dasar-dasar baris Perintah Linux – Menjalankan perintah dari baris perintah

  1. 4 Alat penurunan harga untuk baris perintah Linux

  2. Kiat untuk membuat daftar file dengan ls di baris perintah Linux

  3. 8 perintah Linux virsh untuk mengelola VM pada baris perintah