Apakah ada cara untuk menjaga agar perintah tidak ditambahkan ke riwayat Anda? Saya memiliki perintah yang ingin saya hindari dari file histori saya, dan saya benar-benar tidak peduli untuk memilikinya di sana ketika saya mencari histori yang tersimpan dalam memori, meskipun itu kurang menjadi perhatian. Apakah ada cara untuk mencegah hal ini, atau apakah saya hanya perlu kembali dan mengedit file histori saya.
pembaruan: Saya tidak menyadari ini mungkin khusus untuk shell. Kulitku zsh
. Anda boleh menjawab untuk kerang lain sehingga orang tahu bagaimana melakukan ini di kerang mereka.
bash
security
zsh
command-history
xenoterracide
sumber
sumber
Jawaban:
Dalam ZSH :
Masukkan pertama
setopt HIST_IGNORE_SPACE
ke~/.zshrc
. Sekarang setelah Anda masuk lagi, Anda bisa mengawali perintah apa pun yang tidak ingin disimpan dalam riwayat dengan aspace
.Dari panduan pengguna , 3 opsi berikut dapat digunakan untuk mengatakan bahwa baris tertentu tidak boleh masuk ke riwayat sama sekali:
sumber
| somecommand
preexec
yang dapat digunakan untuk itu. Jika kembali bukan nol perintah tidak disimpan dalam riwayat.setopt HIST_IGNORE_SPACE
di~/.zshrc
Jika Anda menjalankan perintah berulang kali, Anda mungkin ingin menggunakan fitur abaikan riwayat shell Anda. Katakanlah Anda memiliki secret.server.com yang Anda ssh, file FTP, dll. Bahwa Anda tidak ingin baris yang menyebutkan secret.server.com disimpan:
Di
bash
Anda akan mengatursedangkan pada
zsh
parameter disebutAnda dapat membuat daftar beberapa pola dengan tanda titik dua yang memisahkannya. Perhatikan bahwa setiap pola dicocokkan dengan jalur input penuh , jadi Anda mungkin perlu memasukkan *. Misalnya, berikut ini akan mengecualikan
fortune
dari sejarah, tetapi akan menyimpanfortune -l
:Dengan set HISTIGNORE, tidak ada yang cocok dengan pola daftar Anda akan disimpan ke
.bash_history
/.zsh_history
dan bahkan tombol panah atas, yang biasanya mengingat perintah sebelumnya, tidak akan berfungsi jika cocok dengan pola Anda.sumber
HISTIGNORE="^fortune*"
diabaikanfortune -l
tetapi tetapmyfortune
?Dalam bash, gunakan
HISTCONTROL
variabel.Setel ke
HISTCONTROL=ignorespace
(atauHISTCONTROL=ignoreboth
). Mulai sekarang, ketika Anda memulai garis dengan spasi , itu tidak akan disimpan dalam sejarah. Ini menghindari untuk memasukkan perintah yang tidak boleh diungkapkan dalam beberapa file konfigurasi.Bahkan seperti itu kebetulan lupa untuk menambah ruang dan kemudian ingin kembali. Untuk menghapus entri dalam riwayat, gunakan
history -d <index>
, denganindex
nomor yang ditemukan denganhistory
perintah (kolom pertama).sumber
zsh
?Cara termudah untuk satu kali adalah
di mana
$
mewakili prompt shell awal dan$$
mewakili prompt subshell. Ini berfungsi dalam bash dan zsh; di ksh yang Anda butuhkanHISTFILE=/notwritable
sebagai gantinya. Perhatikan bahwa yang penting adalah nilaiHISTFILE
kapan file histori ditulis, bukan ketika perintah dijalankan. Bash, ksh dan zsh menulis ke file histori ketika mereka keluar (zsh dapat melakukannya lebih sering tergantung pada konfigurasi).Atau, Anda bisa mendapatkan bash atau zsh untuk mengabaikan garis yang cocok dengan pola tertentu (ini sudah dicakup oleh jawaban lain).
Kemungkinan lain di zsh adalah
fc -p
mendorong daftar riwayat saat ini ke tumpukan dan memulai yang baru yang tidak terkait dengan file simpan.fc -P
muncul yang belum disimpan daftar sejarah dari tumpukan dan lupa sama sekali.Ketika sebuah proses sedang berjalan, perintah dan argumennya (dan pada beberapa sistem lingkungannya juga) akan muncul di tabel proses (
ps
output). Root dapat melihat perintah sebelumnya di basis data akuntansi sistem , dan dapat melakukan lebih banyak logging tanpa kendali Anda. Dan mungkin akan ada semua jenis bukti forensik yang dapat menunjukkan kira-kira perintah apa yang Anda jalankan (seperti waktu modifikasi file). Jadi Anda tidak mendapatkan privasi terhadap penyadap yang ditentukan.sumber