Menghapus histori dari ~ / .bash_history

8

Saya punya beberapa pertanyaan tentang terminal atau sejarah baris perintah yang disimpan di ~/.bash_history.

  1. Saya dapat melihat file di terminal dengan historyperintah tetapi jika saya mencoba membukanya dengan gedit bash_historyfile itu benar-benar kosong. Mengapa?

  2. Saya telah menemukan cara menghapus sejumlah baris dalam file dari terminal dengan baris kode ini:

    for i in {1..N}; do history -d N; done

    di mana N adalah jumlah baris (atau perintah) yang ingin Anda hapus, tetapi sekarang file histori menunjukkan perintah terakhir ini dan itu tidak terlalu pintar jika Anda mencoba untuk menutupi barang-barang Anda. Jadi pertanyaannya adalah: Bagaimana saya bisa memberikan baris kode terakhir dan memastikan ini tidak direkam?

IDK
sumber
Untuk catatan selanjutnya, jika Anda memulai perintah apa pun dengan spasi, perintah itu tidak akan disimpan dalam riwayat Anda.
Paddy Landau

Jawaban:

18
  1. Anda hanya lupa titik sebelumnya, perintah untuk membuka file riwayat terminal (bash) Anda

    gedit ~/.bash_history

    File ini hanya diperbarui ketika Anda menutup terminal.

  2. Untuk menghapus 10 baris terakhir dari file ini dan tidak merekam perintah ini sendiri, buka terminal baru dan jalankan rantai perintah berikut:

    sed -n -e :a -e '1,10!{P;N;D;};N;ba' ~/.bash_history && history -c && exit

    atau

    for i in {1..10}; do sed -i '$d' ~/.bash_history; done && history -c && exit

    atau

    head -n -10 ~/.bash_history > ~/.b_h_2 && mv ~/.b_h_2 ~/.bash_history && history -c && exit

    sedatau headmasing - masing menghapus garis yang dipilih dari ~/.bash_history, history -cmembersihkan sejarah terminal dan exitmenutupnya.

pencuci mulut
sumber
Alternatif yang lebih pendek dan mudah-mudahan lebih cepat dari for+ sed: di head -n -Nmana huruf besar Nadalah jumlah baris yang akan dihapus. stackoverflow.com/a/13380679/711006
Melebius
2
@Melebius Terlihat menjanjikan, tetapi bagaimana Anda mengarahkan output ke file input yang menimpanya? head -n -N testfile > testfilehanya membersihkan file! Saya menambahkan solusi, namun tentu saja tidak lebih pendek.
hidangan penutup
Anda benar, saya lupa itu headtidak bisa bekerja di tempat seperti sed. Saya terutama mencari satu sedperintah menggantikan forloop Anda . Ada beberapa opsi pada halaman yang saya tautkan tetapi mereka tidak terlihat dimengerti sebagai kode Anda.
Melebius
@Melebius Lihat sed1line.txt untuk itu - saya menambahkannya di atas, itu tidak terlalu pendek tetapi harus lebih cepat.
hidangan penutup
4

File bash_history adalah file tersembunyi, dimulai dengan titik. Yang perlu Anda lakukan

gedit ~/.bash_history

Ini akan membuka file di gedit.

George Udosen
sumber
1

Jika Anda ingin menghapus hanya bagian-bagian tertentu dari log perintah Anda, maka metode di atas baik-baik saja. Jika Anda ingin menghentikan perintah logging untuk sesi bash tertentu, maka keluarkan perintah itu

unset HISTFILE

Agar lebih drastis, jika Anda tidak ingin perintah Anda dicatat , maka Anda bisa melakukannya

rm ~/.bash_history
ln -s /dev/null ~/.bash_history

Perhatikan bahwa metode pertama hanya akan berlaku untuk satu sesi tunggal, sedangkan metode kedua akan menghentikan pendataan perintah untuk semua sesi mendatang.

Mukesh Sai Kumar
sumber
1

Saya menyadari ini sudah memiliki jawaban yang diterima, tetapi ini adalah bagaimana saya telah melakukannya sejak tahun 80-an. Ini cara yang bagus untuk menyembunyikan jejak Anda dan ini merupakan pendekatan multi fase. Sebagian besar yang tidak diperhatikan kecuali seseorang benar-benar memperhatikan. Inilah cara melakukannya.

Buka terminal / shell / sesi dan lakukan:

 chmod 444 ~/.bash_history

keluar dari shell, buka terminal / shell / sesi dan lakukan: Berikut adalah beberapa cara kreatif untuk menghapus riwayat secara permanen

1:

 vi ~/.bash_history
 9999999 dd
 <esc>wq!

2 (buat riwayat palsu)

 sudo echo "which ls" > ~/.bash_history
 sudo echo "cd ~/;ls" >> ~/.bash_history

maka untuk ukuran yang baik:

 chmod 444 ~/.bash_history

keluar dari shell

buka shell baru dan ketik

 history

apa yang membuatnya kurang terlihat adalah jika seseorang melakukan ls -ratl, ~ / .bash_history akhirnya akan menghilang dalam deretan daftar direktori. Itu tidak akan muncul sebagai tautan yang akan menarik perhatian yang tidak perlu. Kebanyakan orang tidak melakukan -a pada root mereka, yang berguna ketika emulasi diinginkan.

Kelemahan dari pendekatan ini adalah Anda kehilangan kemampuan untuk kembali dan mengambil riwayat Anda. file ~ / .bash_history yang sebenarnya juga bisa berakhir di bagian atas daftar direktori, karena mungkin berakhir dengan tanggal modifikasi yang sangat lama dari waktu ke waktu, yang dengan sendirinya dapat mengarah pada penemuan bahwa ada sesuatu yang salah.

Div
sumber
jika Anda gunakan 9999999 dduntuk menghapus semua baris dalam file itu :%d, :1,$datau dGbekerja lebih baik
phuclv
0

1) Jalankan sh; ini memunculkan subkulit abu, yang tidak mencatat sejarah sama sekali. Edit dari sana

2) Tambahkan baris HISTCONTROL=ignorebothke .bashrc, dan lakukan exec bashuntuk secara permanen mengganti shell saat ini dengan yang diinisialisasi ulang, kemudian lakukan semua perintah yang tidak ingin Anda login dengan ruang terdepan.

Joshua
sumber
0

karena saya belum bisa berkomentar, akan menambahkan komentar saya sebagai jawaban:

man history akan menjawab semuanya.

jawaban untuk # 1 adalah bahwa sejarah ada di memori. history -auntuk menyimpan ke file segera. history -wjuga akan menyimpan tetapi mungkin mengacaukan sesi lainnya.

jawab # 2 history -a:, gedit, hapus baris yang Anda inginkan,history -r

gcb
sumber
0

Riwayat tidak disimpan sampai Anda keluar dari shell. Coba keluar dari shell dan kemudian lihat .bash_history lagi. Sejarah perintah harus ada di sana.

Penguntit Petir
sumber
Diedit seperti yang disarankan Cukup bagus sekarang?
The Lightning Stalker