Bagaimana saya bisa menghapus baris tertentu dari history
database?
linux
bash
history
command-history
w0rldart
sumber
sumber
vim ~/.bash_history
) dengan spasi; perintah yang dimulai dengan spasi biasanya tidak dicatat (lihat$HISTCONTROL
).Anda dapat menghapus dari file histori menggunakan commandline dalam dua langkah:
history -d <line_number>
menghapus baris yang ditentukan dari riwayat di memori.history -w
menulis riwayat memori saat ini ke~/.bash_history
file.Dua langkah bersama-sama menghilangkan garis permanen dari dalam memori sejarah dan dari Bash_history file juga.
sumber
history -w
dari riwayat?<line_number>
hanyahistory | grep [unwanted_content]
untuk mendapatkan daftar dengan semua baris yang berisi[unwanted_content]
(seperti kata sandi).Untuk mencegah perintah agar tidak ditambahkan ke riwayat, pastikan bahwa variabel lingkungan
HISTCONTROL
berisi nilai yang dipisahkan dengan titik duanyaignorespace
, misalnya (tambahkan misalnya ke.bashrc
):Ini akan mencegah perintah apa pun dengan ruang terkemuka ditambahkan ke histori. Anda kemudian dapat menghapus riwayat sepenuhnya dengan menjalankan
sumber
Pertama-tama, jika perintah yang akan Anda keluarkan sensitif, tidak aman, atau Anda hanya tidak membutuhkannya mengacaukan sejarah Anda, yang terbaik / tercepat untuk mencegahnya memasukkan sejarah di tempat pertama. Pastikan itu
$HISTCONTROL
mengandungignorespace
:Kemudian, lanjutkan perintah apa pun yang tidak Anda inginkan dalam riwayat Anda dengan spasi:
Jika Anda secara tidak sengaja memasukkan perintah yang tidak diinginkan ke dalam riwayat, asalkan sesi bash Anda masih terbuka, perintah tersebut belum menyentuh disk. Untuk menghapus perintah sebelumnya dalam riwayat, terbitkan:
Perhatikan ruang terdepan; perintah ini membutuhkan
ignorespace
, jika tidak, itu hanya akan menghapus sendiri!Jika Anda ingin menghapus beberapa perintah terakhir, temukan nomor riwayat terakhir dan pertama:
Dalam hal ini 602 dan 599. Kemudian terbitkan:
(Tanpa
ignorespace
, itu akan menjadi 603..599.)Jika Anda tidak ingin riwayat apa pun dari sesi Anda saat ini mengenai disk, keluar menggunakan:
Pendekatan sejauh ini adalah untuk tidak membiarkan item sejarah sensitif ditulis ke disk untuk keamanan tambahan, karena dalam teori data yang dihapus dari media non-volatile masih dapat dipulihkan.
Namun, jika perintah yang ingin Anda hapus berasal dari sesi sebelumnya, mereka sudah ditambahkan pada saat
$HISTFILE
keluar. Memanipulasi sejarah dengan perintah di atas masih akan hanya menambahkan item baru yang tersisa ke$HISTFILE
, pada saat keluar . Untuk menimpa para$HISTFILE
dengan pandangan sesi saat ini dari seluruh sejarah, sekarang , masalah:Tentu saja untuk item histori yang sudah ada di disk, alternatif untuk mengedit histori dengan
history -d
perintah yang kemudian dikeluarkanhistory -w
, adalah mengedit$HISTFILE
dengan editor teks.sumber
$HISTFILE
, saat keluar ." Sebenarnya, ini tidak sepenuhnya benar. Tampaknya hanya menambahkan item baru yang tersisa yang 'menonjol' dari panjang sejarah asli. Misalnya, jika saya menghapus 5 item asli dan menambahkan 15 item baru, hanya 10 item baru ditambahkan, sedangkan saya berharap semua 15 item baru ditambahkan. Saya pikir ini adalah bug karena saya tidak dapat melihat bagaimana ini merupakan fungsi yang diinginkan.Beberapa teknik:
Cegah agar informasi sensitif tidak disimpan dalam file histori
Jika Anda memasukkan beberapa kata sandi pada baris perintah, maka sadari bahwa semua perintah dicatat, Anda bisa:
Keluar paksa dari sesi saat ini tanpa menyimpan riwayat:
Ini akan menghapus semua riwayat saat ini.
Ketik ↑ (up arrow)sesi bash terbuka hingga informasi sensitif ditampilkan, kemudian gunakan penekanan tombol pengeditan seperti Ctrl+ Wuntuk menghapus info sensitif, dan kemudian ↓ (down arrow) sampai baris kosong baru diminta, sebelum mengetik Enter.
Hapus informasi sensitif dari file riwayat
Jika Anda menyadari bahwa informasi sensitif sudah disimpan, dan Anda ingin menghapusnya, tetapi tidak seluruh riwayat Anda:
sed
Perintah sederhana dapat melakukan pekerjaan:tetapi, saat Anda mengetik ini, Anda membuat garis riwayat lain yang berisi pola pencarian (info sensitif) yang Anda coba hapus. Jadi kamu bisa:
Ini akan berjalan
head -n1
dengan input dari terminal. Akan terlihat bahwa terminal Anda digantung (tidak akan ada prompt); cukup ketik informasi yang ingin Anda hapus dari file. Ini adalah trik untuk membiarkan Anda memasukkan (bagian dari) perintah tanpa benar-benar mengetiknya ke dalam baris perintah, sehingga membuatnya tidak memenuhi syarat untuk dimasukkan dalam catatan sejarah. Kemudiansed
akan menggunakan teks yang Anda ketikkan untuk mencari.bash_history
dan menghapus semua baris yang berisi info sensitif. Catatan: jika pola informasi sensitif Anda berisi garis miring, Anda harus menghindarinya dengan garis miring terbalik, atau ubahsed
perintah untuk menggunakan sintaks ini untuk menentukan pembatas yang tidak muncul dalam pola:Cara lain bisa dengan menghapus hanya informasi sensitif, tetapi tetap memegang perintah yang berisi informasi. Untuk ini, Anda cukup mengganti informasi sensitif dengan teks pengganti pilihan Anda:
Hapus informasi sensitif dari file apa pun di pohon tertentu
Akhirnya, untuk memastikan bahwa ini tidak akan tetap di file lain yang dilupakan:
akan mendaftar semua file terkait.
akan mengganti semua kemunculan info sensitif di semua file di pohon direktori yang di-root di
.
. Catatan: meskipun perintah ini digunakanxargs -0
, ia tidak akan menangani file dengan baris baru dalam namanya.sumber
Temukan baris yang ingin Anda hapus dengan menekan ↑ (up arrow)sampai muncul, lalu tekan Ctrl+ U. Itu harus menghapus garis.
Jika Anda menggunakan
history
perintah, Anda dapat melihat baris telah diganti dengan tanda bintang.sumber
*
.Jika Anda perlu menghapus beberapa baris secara bersamaan saya biasanya menggunakan ini:
Jika Anda perlu menghapus perintah terakhir yang dapat Anda gunakan:
sumber
history | grep <string>
masih menunjukkan semua baris yang diklaimnya dihapus ...history | grep XYZ | grep -v grep | tac | awk '{print "history -d", $1}'
Jika Anda perlu menghapus serangkaian garis dari riwayat, fungsi bash berikut dapat menghemat waktu Anda:
Fungsi biasanya ditambahkan ke
$HOME/.bashrc
. Untuk menggunakan fungsi imediatelly, Anda harus meminta file dibaca lagi oleh shell Anda yang berjalan (. $HOME/.bashrc
). Kemudian untuk menghapus mis perintah 200-210 dari riwayat:(Catatan: Pertanyaan ini adalah salah satu hasil pencarian teratas jika Anda mencari menghapus serangkaian perintah dari sejarah bash. Jadi, sementara pertanyaan di atas lebih dari apa yang ditanyakan, itu bisa berguna bagi beberapa pembaca.)
sumber
for
pernyataan:for n in $(seq "$2" "$1")
lebih disukai oleh sebagian orang, dan, jikaseq
tidak berhasil, cobafor ((n="$2"; n>="$1"; n--))
.59 adalah nomor baris. Tidak bisa lebih manis dari ini :)
sumber
Coba saja ini,
ini akan menampilkan id sejarah dan perintah, mis
menggunakan,
Di sini 211 adalah id sejarah. Sekarang periksa ini menggunakan
sumber
Saya tahu ini sudah lama sejak pertanyaan ini ditanyakan dan dijawab, tetapi saya akan menunjukkan kepada Anda metode saya untuk membersihkan file riwayat saya dan keluar pada saat yang sama.
Saya berlari :
history -w && nano "${HISTFILE}" && history -c && exit
Apa yang dilakukannya sederhana:
history -w
: menulis sejarah dalam cache"${HISTFILE}"
nano "${HISTFILE}"
: izinkan saya untuk mengedit"${HISTFILE}"
Anda dapat menggunakan skrip sed atau apa pun yang Anda ingin bersihkan"${HISTFILE}"
history -c
: hapus riwayat cache sehingga perintah terakhir ini tidak ditambahkan.exit
: logout saya tambahkan riwayat cache ... tapi kosong;)Setelah perintah itu, Anda akan keluar dengan file histori bersih. Masuk untuk memeriksa riwayat Anda;)
Saya harap ini akan membantu seseorang.
sumber
Anda juga dapat mengedit file histori secara langsung, misalnya
nano .bash_history
jika Anda berada di bash shell?sumber