neden bash geçmişini silmek yeterli değil?


15

Bash geçmişimi silmenin bash geçmişimi temizlemek için yeterli olduğunu düşünürdüm, ama dün kedim klavyemin sağ tarafını karıştırıyordu ve bilgisayarıma geri döndüğümde bir ay önce yazdığım bir şey gördüm, sonra başladım onu tetikleyebilecek şeyleri bulmak için deli gibi tüm tuşlara basın. UPARROW anahtarı çıkıyor .bash_history sildikten sonra bile bash geçmişimi gösteriyor.

Bash geçmişimi gerçek anlamda nasıl silebilirim?


8
Bir bash kabuğunu her kapatışınızda .bash_history üzerine yazılır. Yani bash'ı başlatırsanız, .bash_history öğesini siler ve oturumu kapatırsanız, hiçbir şey başaramazsınız.
Shadur

14
Kediniz büyük bir ödülü hak ediyor. Ne kadar zamandır komut satırı geri çağırma ve düzenleme olduğunu keşfetmeden bash kullanıyorsunuz ? Her komut satırını her seferinde sıfırdan yeniden yazıyor musunuz? Bu, kabuğun kullanımını çok tatsız hale getirir.
cas

@cas on yıl. Artık komutları tekrarlamak için Uparrow'a bastığımı söylüyorsunuz, ancak bunu birkaç satırdan daha uzun olmayan bir tür 'kısa süreli' bellek olarak anladım. .Bash_history'yi silmenin bash geçmişini silmeyeceği konusunda uyarılmadım.
bunden

Silme işlemi ~/.bash_historygerçekten silinir ~/.bash_history.... ancak (bunu önlemek için önlem almazsanız, history -coturumdan çıkmadan veya ayarlamadan HISTFILE=/dev/nullveya çalıştırmadan hemen önce çalışarak bellek içi geçmişini temizlemek gibi unset) bash, çıkarken geçerli geçmişini tekrar kaydeder . BTV, HISTSIZEenv var bash'a kaç tarih satırının bellekte tutulacağını HISTFILESIZEsöyler ve bash'a kaydedilecek maksimum tarih satırı sayısını söyler. bunların ikisi de ayarlanabilir ~/.bashrc. Not: kediniz size değerli bir ders vermek için 2. bir ödülü hak ediyor :)
cas

@cas .bash_history'nin silinmesinin bash geçmişini silmesi gerektiğini düşünüyorum. Bana sezgisel geliyor. Sezgisel görünmeyen şey tarih -c, geçmiş -w, değişken olmayan değişkenlerdir .. bu kullanıcı deneyimi perspektifinden çıldırır.
bunden

Yanıtlar:


26

Bazı durumlarda (bazı bash sürümleri) aşağıdakileri yaparak:

$ history -c; history -w

Ya da sadece

$ history -cw

Bellekte geçmişini temizlemek Will (yukarı ve aşağı ok listeye hiçbir komutları olacaktır) ve daha sonra yazma o kadar $HISTFILEdosya (eğer $HISTFILEçalışan bash örneği tarafından kesiliyorsa).

Bazen tercih bash değil kesmek $HISTFILEbile dosyayı histappendseçeneği unset ve $HISFILEZIZE0'a seti.

Bu gibi durumlarda, nuke seçeneği her zaman çalışır:

history -c; >$HISTFILE

Bu, hafızaya kaydedilmiş komutların geçmiş listesini ve daha önce dosyaya kaydedilmiş tüm komutları temizler. Bu, çalışan kabuğun bellekte veya diskte kayıtlı bir geçmişinin bulunmamasını sağlar, ancak diğer çalışan bash örneklerinin (geçmişin etkin olduğu) $HISTFILEbash başlatıldığında (veya a history -ryürütüldüğünde) okunan komutların tam bir kopyası olabilir. .

O ise ayrıca geçmiş dosyasına yazılır olacağını mevcut oturumun başka hiçbir şeyin (yeni komutlar) gerekli, o zaman, unset HISTFILEböyle bir günlüğü önleyecektir.


1
HISTFILE öğesini düzenlemek ve yapmak history -c && history -r, mevcut geçmişinizi manuel olarak değiştirilmiş geçmişle değiştirir. Bazı durumlarda, bu tüm tarihi atmaktan daha iyi olabilir.
Mikko Rantalainen

9

bashkabuk değişkeni HISTFILE, bashçıkış değiştiğinde bir dosya adına ayarlandığında dosyaya yazılan bir oturum geçmişine sahiptir .

HISTFILEİle gösterilen dosyayı silerseniz, bu değişkenin ayarını kaldırır ve çıkarsanız bash, o kabuk oturumu kalıcı bir geçmiş bırakmaz.

Unset başarısız HISTFILEdeğişken ama sadece kalıcı tarihini boşaltmak istiyorum dosya silme, ancak mevcut oturumun tarihinin zaman kabuk kaydedilmemesi olacaktır.


3
A history -c; history -whem bellek hem de dosya geçmişini temizler. HISTFILE öğesinin ayarının kaldırılması yalnızca geçmişe başka komutların kaydedilmemesi gerektiğinde gereklidir (IMhO sorulanın tam olarak değil).
Isaac

-1

"Bash geçmişimi gerçek anlamda nasıl silebilirim?"

Bash'den çıkın, farklı bir kabuk başlatın, bash geçmiş dosyasını silin.

veya

oturumu kapatın, geçmiş dosyasına yazma izni olan farklı bir hesaba giriş yapın, geçmiş dosyasını silin.


-2

Kabuğu terk ederken, hepsini bir kerede yapın,

echo "" > ~/.bash_history && history -c && exit

@roaima, kesinlikle haklısın, teşekkürler. Düzeltildi.
user853069
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.