GNU/Linux >> Belajar Linux >  >> Linux

Perintah Sejarah di Linux Dijelaskan Secara Mendalam

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.

  1. Tekan Control+R dan ketik kata kunci.
  2. 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.

  1. Gunakan up arrow untuk melihat perintah sebelumnya dan tekan enter untuk menjalankannya.
  2. Ketik !! dan tekan enter dari baris perintah
  3. Ketik !-1 dan tekan enter dari baris perintah.
  4. 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.


Linux
  1. Cara menggunakan perintah history di Linux

  2. Perintah mv Linux

  3. Linux du perintah

  1. Perintah ip Linux

  2. Perintah cd Linux

  3. Perintah sejarah Linux

  1. Perintah Sejarah di Linux (Riwayat Bash)

  2. Perintah W di Linux

  3. ls Perintah di Linux:17 Contoh yang Berguna Dijelaskan