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
Cetak perintah
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.]