Bila Anda sering menggunakan baris perintah Linux, menggunakan perintah riwayat secara efektif dapat menjadi peningkatan produktivitas yang besar.
Di Linux, ada perintah yang sangat berguna untuk menunjukkan kepada Anda semua perintah terakhir yang baru saja digunakan. Perintahnya disebut history
.
Stempel Waktu Tampilan
Biasanya ketika Anda mengetik history
di baris perintah, secara default Anda melihat nomor diikuti oleh perintah yang Anda gunakan baru-baru ini. Untuk tujuan audit, mungkin bermanfaat untuk menampilkan cap waktu bersama dengan perintah seperti yang ditunjukkan di bawah ini.
Untuk mengaktifkan stempel waktu di history
output perintah, Anda harus mengkonfigurasi HISTTIMEFORMAT
Variabel bash.
export HISTTIMEFORMAT="%F %T "
history | more
1 2020-06-25 19:02:39 systemctl restart network
2 2020-06-25 19:02:43 exit
3 2020-06-25 19:02:47 id
4 2020-06-25 19:02:56 cat /etc/hosts
Menelusuri Riwayat Perintah
Ini mungkin fitur history
yang paling sering Anda gunakan perintah . Saat Anda telah menjalankan perintah yang sangat panjang, Anda cukup menelusuri riwayat menggunakan kata kunci dan menjalankan kembali perintah yang sama tanpa harus mengetiknya sepenuhnya.
- Tekan
Control+R
dan ketik kata kunci. - Tekan enter saat Anda melihat perintah Anda, yang akan menjalankan perintah dari riwayat.
Dalam contoh berikut, saya mencari host
, yang menampilkan perintah sebelumnya cat /etc/hosts
di histori yang berisi kata host
.
(reverse-i-search)`host': cat /etc/hosts
cat /etc/hosts
#<ip-address> <hostname.domain.org> <hostname>
127.0.0.1 localhost.localdomain localhost server1
::1 localhost.localdomain localhost server1
Terkadang Anda ingin mengedit perintah dari riwayat sebelum menjalankannya. Misalnya, Anda dapat mencari systemctl
, yang akan menampilkan systemctl restart network
dari riwayat perintah, pilih perintah ini (menekan ESC
key) dan ubah restart
untuk stop
.
Kemudian jalankan kembali dengan hanya menekan Enter
.
(reverse-i-search)`systemctl': systemctl stop network
systemctl stop network
Ulangi Perintah Terakhir yang Dieksekusi
Terkadang Anda mungkin mengulangi perintah sebelumnya karena berbagai alasan. Berikut ini adalah 4 cara berbeda untuk mengulang perintah yang terakhir dieksekusi.
- Gunakan
up arrow
untuk melihat perintah sebelumnya dan tekan enter untuk menjalankannya. - Ketik
!!
dan tekan enter dari baris perintah - Ketik
!-1
dan tekan enter dari baris perintah. - Tekan
Control+P
akan menampilkan perintah sebelumnya, tekan enter untuk menjalankannya.
Jalankan Perintah Tertentu
Pada contoh berikut, jika Anda ingin mengulang perintah #4, Anda dapat melakukan !4
seperti yang ditunjukkan di bawah ini.
history | more
systemctl restart network
exit
id
cat /etc/hosts
!4
cat /etc/hosts
#<ip-address> <hostname.domain.org> <hostname>
127.0.0.1 localhost.localdomain localhost server1
::1 localhost.localdomain localhost server1
Jalankan Perintah Sebelumnya yang Dimulai dengan Kata Tertentu
Ketik !
diikuti dengan beberapa huruf awal dari perintah yang ingin Anda jalankan kembali. Pada contoh berikut, ketikkan !ps
dan enter, jalankan perintah sebelumnya dimulai dengan ps
, yaitu ps aux | grep yp
.
!ps
ps aux | grep yp
root 16947 0.0 0.1 36516 1264 ? Sl 13:10 0:00 ypbind
root 17503 0.0 0.0 4124 740 pts/0 S+ 19:19 0:00 grep yp
Batasi Jumlah Item Riwayat
Ini dikendalikan oleh HISTSIZE
dan HISTFILESIZE
variabel shell Bash bawaan. Tambahkan dua baris berikut ke ~/.bashrc
. Anda file dan logout lalu login kembali.
HISTSIZE=1500
HISTFILESIZE=1500
Hasilnya, sekarang history
diatur untuk menyimpan 1500 perintah.
Ubah Nama File Riwayat
Secara default, history
disimpan di ~/.bash_history
berkas.
Tambahkan baris berikut ke .bash_profile
file dan login kembali ke shell Bash, untuk menyimpan perintah history di .my_commandline
file alih-alih .bash_history
berkas.
HISTFILE=/root/.my_commandline
Ini digunakan saat Anda ingin melacak perintah yang dijalankan dari terminal berbeda menggunakan nama file riwayat yang berbeda.
Hilangkan Entri Berulang Berkelanjutan dari Riwayat
Pada contoh berikut pwd
diketik tiga kali, ketika Anda melakukan sejarah, Anda dapat melihat semua 3 kejadian terus menerus itu. Untuk menghilangkan duplikat, setel HISTCONTROL
untuk ignoredups
seperti yang ditunjukkan di bawah ini.
history | tail -4
44 pwd
45 pwd
46 pwd
47 history | tail -4
export HISTCONTROL=ignoredups
history | tail -3
56 export HISTCONTROL=ignoredups
57 pwd
58 history | tail -4
Hapus Duplikat di Seluruh Sejarah
ignoredups
ditunjukkan di atas menghapus duplikat hanya jika itu adalah perintah berurutan. Untuk menghilangkan duplikat di seluruh riwayat, setel HISTCONTROL
untuk erasedups
seperti yang ditunjukkan di bawah ini.
export HISTCONTROL=erasedups
pwd
systemctl restart network
history | tail -3
38 pwd
39 systemctl restart network
40 history | tail -3
ls -l
systemctl restart network
history | tail -6
35 export HISTCONTROL=erasedups
36 pwd
37 history | tail -3
38 ls -l
39 systemctl restart network
40 history | tail -6
Paksa Histori untuk Tidak Mengingat Perintah Tertentu
Saat Anda menjalankan perintah, Anda dapat menginstruksikan history
untuk mengabaikan perintah dengan menyetel HISTCONTROL
ke ignorespace
dan ketik spasi di depan perintah seperti yang ditunjukkan di bawah ini.
Saya dapat melihat banyak sysadmin junior bersemangat tentang ini, karena mereka dapat menyembunyikan perintah dari riwayat. Adalah baik untuk memahami bagaimana ignorespace
bekerja. Namun, sebagai praktik terbaik, jangan menyembunyikan apa pun dari sejarah dengan sengaja.
export HISTCONTROL=ignorespace
ls -ltr
pwd
systemctl restart network #Note that there is a space at the beginning of service, to ignore this command from history
history | tail -3
67 ls -l
68 pwd
69 history | tail -3
Hapus Semua Riwayat Sebelumnya
Terkadang Anda mungkin ingin menghapus semua history
sebelumnya , tetapi ingin membuat sejarah terus bergerak maju.
history -c
Pengganti Kata dari Perintah Sejarah
Saat Anda menelusuri history
, Anda mungkin ingin menjalankan perintah yang berbeda tetapi menggunakan parameter yang sama dari perintah yang baru saja Anda telusuri.
Pada contoh di bawah, !!:$
di sebelah vi
perintah mendapatkan argumen dari perintah sebelumnya ke perintah saat ini.
ls nginx.conf
nginx.conf
vi !!:$
vi nginx.conf
Pada contoh di bawah, !^
di sebelah perintah vi mendapatkan argumen pertama dari perintah sebelumnya (yaitu cp
perintah) ke perintah saat ini (yaitu vi
perintah).
cp nginx.conf nginx.conf.bak
vi !^
vi nginx.conf
Gantikan Argumen Tertentu untuk Perintah Tertentu
Pada contoh di bawah, !cp:2
mencari perintah sebelumnya dalam sejarah yang dimulai dengan cp dan mengambil argumen kedua dari cp dan menggantikannya dengan perintah ls -l seperti yang ditunjukkan di bawah ini.
cp ~/longname.txt /really/a/very/long/path/long-filename.txt
ls -l !cp:2
ls -l /really/a/very/long/path/long-filename.txt
Pada contoh di bawah, !cp:$
mencari perintah sebelumnya dalam sejarah yang dimulai dengan cp dan mengambil argumen terakhir (dalam hal ini, yang juga merupakan argumen kedua seperti yang ditunjukkan di atas) dari cp dan menggantikannya dengan perintah ls -l seperti yang ditunjukkan di bawah ini.
ls -l !cp:$
ls -l /really/a/very/long/path/long-filename.txt
Nonaktifkan Penggunaan Riwayat
Jika Anda ingin menonaktifkan history
semuanya bersama-sama dan tidak ingin Bash shell mengingat perintah yang Anda ketik, atur HISTSIZE
ke 0 seperti yang ditunjukkan di bawah ini.
export HISTSIZE=0
Abaikan Perintah Tertentu dari Riwayat
Terkadang Anda mungkin tidak ingin mengacaukan riwayat Anda dengan perintah dasar seperti pwd
dan ls
. Gunakan HISTIGNORE
untuk menentukan semua perintah yang ingin Anda abaikan dari riwayat.
Harap perhatikan bahwa menambahkan ls
ke HISTIGNORE
hanya mengabaikan ls
dan bukan ls -l
. Jadi, Anda harus memberikan perintah yang tepat yang ingin Anda abaikan dari riwayat.
export HISTIGNORE="pwd:ls:ls -ltr:"
pwd
ls
ls -l
systemctl restart network
history | tail -3
79 export HISTIGNORE="pwd:ls:ls -l:"
80 systemctl restart network
81 history
[Note that history did not record pwd, ls and ls -l]
Untuk mengetahui lebih lanjut tentang history
perintah di Linux, lihat halaman manualnya.