mengapa menghapus bash history tidak cukup?

14

Dulu saya berpikir menghapus riwayat bash saya sudah cukup untuk menghapus riwayat bash saya, tetapi kemarin kucing saya mengacaukan di sisi kanan keyboard saya dan ketika saya kembali ke komputer saya melihat sesuatu yang saya ketik sebulan yang lalu, kemudian saya mulai tekan semua tombol seperti orang gila mencari apa yang bisa memicu itu. Ternyata tombol UPARROW menunjukkan riwayat bash saya bahkan setelah menghapus .bash_history.

Bagaimana saya bisa menghapus riwayat bash saya secara nyata?

bunden
sumber
8
.bash_history ditimpa setiap kali Anda menutup bash shell. Jadi jika Anda memulai bash, hapus .bash_history, dan log off, Anda tidak akan mencapai apa-apa.
Shadur
14
Kucing Anda layak mendapat hadiah besar. Anda telah menggunakan bash untuk berapa lama tanpa menemukannya memiliki pengingatan dan pengeditan baris perintah? Apakah Anda mengetik ulang setiap baris perintah dari awal setiap kali atau sesuatu? Itu akan membuat shell sangat tidak menyenangkan untuk digunakan.
cas
@ bisa sepuluh tahun. Sekarang setelah Anda mengatakannya, saya menekan Uparrow untuk mengulangi perintah, tetapi saya memahaminya sebagai semacam memori 'jangka pendek' yang panjangnya tidak lebih dari beberapa baris. Saya tidak diperingatkan bahwa menghapus .bash_history tidak akan menghapus riwayat bash.
bunden
Menghapus ~/.bash_historybenar-benar menghapus ~/.bash_history.... tetapi (kecuali jika Anda mengambil langkah-langkah untuk mencegahnya, seperti menghapus riwayat dalam memori dengan menjalankan history -ctepat sebelum Anda logout atau pengaturan HISTFILE=/dev/nullatau hanya unsetitu) bash hanya akan menyimpan riwayat saat ini lagi ketika keluar . BTW, HISTSIZEenv var memberi tahu bash berapa banyak baris histori yang harus disimpan dalam memori, dan HISTFILESIZEmemberitahu bash jumlah maksimum garis histori untuk disimpan. kedua ini dapat diatur dalam, misalnya, Anda ~/.bashrc. PS: kucing Anda pantas mendapat hadiah ke-2 karena mengajarkan Anda pelajaran yang berharga :)
cas
@cas Saya pikir menghapus .bash_history harus menghapus riwayat bash. Tampaknya intuitif bagi saya. Apa yang tampaknya tidak intuitif adalah sejarah -c, sejarah -w, variabel yang tidak disetel .. itu gila dari perspektif pengalaman pengguna.
bunden

Jawaban:

24

Dalam beberapa kasus (beberapa versi bash), melakukan:

$ history -c; history -w

Atau sederhananya

$ history -cw

Akan menghapus riwayat dalam memori (atas dan bawah panah akan memiliki perintah ke daftar) dan kemudian menulis bahwa pada $HISTFILEberkas (jika $HISTFILEakan dipotong oleh contoh pesta berjalan).

Terkadang bash memilih untuk tidak memotong $HISTFILEfile bahkan dengan histappendopsi tidak disetel dan $HISFILEZIZEdiatur ke 0.

Dalam kasus seperti itu, opsi nuklir selalu berfungsi:

history -c; >$HISTFILE

Yang menghapus daftar riwayat perintah yang direkam dalam memori dan semua perintah yang sebelumnya direkam ke file. Itu akan memastikan bahwa shell yang berjalan tidak memiliki histori yang direkam baik di memori atau disk, namun, instance bash yang sedang berjalan (ketika histori aktif) dapat memiliki salinan lengkap perintah yang dibaca dari $HISTFILEkapan bash dimulai (atau ketika a history -rdijalankan) .

Jika juga diperlukan bahwa tidak ada yang lain (tidak ada perintah baru) dari sesi ini akan ditulis ke file histori, maka, unset HISTFILEakan mencegah logging tersebut.

Ishak
sumber
1
Mengedit HISTFILE dan melakukan history -c && history -rakan mengganti riwayat Anda saat ini dengan riwayat yang dimodifikasi secara manual. Dalam beberapa kasus, itu mungkin lebih baik daripada membuang semua sejarah.
Mikko Rantalainen
9

bashmemiliki riwayat sesi dalam memori yang dituliskan ke file jika variabel shell HISTFILEdiatur ke nama file saat bashkeluar.

Jika Anda menghapus file yang ditunjuk oleh HISTFILE, setel variabel itu, dan keluar bash, maka sesi shell itu tidak akan meninggalkan riwayat persisten.

Gagal HISTFILEmenghapus variabel, tetapi menghapus file hanya akan mengosongkan riwayat persisten, tetapi riwayat sesi saat ini akan disimpan ketika shell keluar.

Kusalananda
sumber
3
A history -c; history -wakan menghapus memori dan riwayat file. Membatalkan pengaturan HISTFILE hanya diperlukan jika tidak ada perintah lebih lanjut harus dicatat ke histori (tidak persis apa yang diminta IMhO).
Isaac
-1

"Bagaimana saya bisa menghapus riwayat pesta saya nyata?"

Keluar dari bash, mulai shell yang berbeda, hapus file histori bash.

atau

logout, masuk ke akun lain yang memiliki izin menulis pada file histori, hapus file histori.

pengguna
sumber
-2

Sambil meninggalkan shell, lakukan semuanya sekaligus, seperti

echo "" > ~/.bash_history && history -c && exit
pengguna853069
sumber
@roaima, Anda benar sekali, terima kasih. Dikoreksi.
user853069