Bash tarihimin beklenmedik bir şekilde silinmesine ne sebep olabilir?


16

Bugün bash tarihimin tamamen temizlendiğini fark ettim. Dosyayı ne yürüttüm history -cne de sildim .bash_history. .bash_historyDosyayı silmenin yanı sıra history -c, bash geçmişi nasıl temizlenebilir?


2
Örneğin olabilirdi >.bash_history. Belki birisi hesabınızdaydı ve izlerini saklamaya çalıştı. (Sisteminize bağlı olarak) lastaracılığıyla arama yaparak olağandışı oturum açma sürelerini kontrol edin /var/log/auth.log.
ott--

Yanıtlar:


17

Birden çok bash örneğini aynı anda kapatırken, tarihin temizlenmesine neden olabilecek bilinen bir yarış durumu vardır. Bunun nedeni, bash geçmişi dosyası yazılırken kullanılan kilitleme olmamasıdır.

Chet Ramey (mevcut bash bakıcısı) bu sorun için koşulların iyi bir özetini verdi :

Geçerli (bash-4.3-devel) kodu, hiçbir hata kabul etmeyerek böyle çalışır (lib / readline / histfile.c: history_do_write ()):

  • yeniden adlandır (histfile, histfile ~)
  • O_CREAT | O_TRUNC ile dosyayı aç
  • malloc buffer, tüm geçmiş verilerini tutacak kadar büyük
  • tüm geçmiş girişlerini tek bir yazma (2) çağrısında yazın
  • dosyayı kapat
  • bağlantıyı kaldır (histfile ~)

Bash-4.2 kodu, geçmiş dosyasını yedeklememesi dışında aynı şekilde çalışır. Her mermi, yapılandırmanızdaki gibi histapend'in ayarlanmadığı varsayılarak, çıkışta aynı şeyi yapar.

Geçmiş dosyasının sıfır uzunluğa ulaşmasının birkaç yolu vardır: malloc başarısız olabilir veya yazma başarısız olabilir. Bash-4.2'de, o noktada kesilmiş geçmiş dosyası hakkında herhangi bir şey yapmak için çok geç. Bash-4.3 sürümünde, önceki geçmiş dosyası geri yüklenir.

Bug-bash'ın bu posta listesi iş parçacığı , sorunları, olası çözümleri ve bunu çevreleyen endişeleri iyi bir şekilde tartışıyor.

Başka olasılıklar da var:

  • Bir noktada, sizin HISTSIZEveya HISTFILESIZE0 olarak ayarlandı
  • Bir noktada, okuma satırınız history-size0 olarak ayarlandı
  • Birisi, kasıtlı veya kasıtsız olarak, bash tarihini sildi (üzerinden > "$HISTFILE"veya benzeri)

İkinci durumda, birisinin hesabınıza erişmediğini ve izlerini kaba bir şekilde gizlemeye çalıştığını kontrol etmek isteyebilirsiniz. Bir göz atın last, /var/log/auth(ya da /var/log/secureCentOS / RHEL üzerine) ve eğer varsa, herhangi bir işlem muhasebe ve / veya denetim yazılımı yüklemiş olabilirsiniz.


1

Bash geçmişimi yanlışlıkla nasıl sildim:

Kendi alternatif terminal okuma satırı betiğimi ilk prensiplerden alıyordum: https://tiswww.cwru.edu/php/chet/readline/rluserman.html

ve daha sonra bir terminalde test edin. GNU Readline'ın bir geçmiş boyutu ve geçmiş koruma talimatları vardır, bu nedenle geçmiş boyutu varsayılan olarak ayarlanabilir ve böylece tüm geçmişiniz uçurulur.

Bellekte kalırsa geçmişin kurtarılması:

Yeniden başlatmadan önce yakalarsanız veya bir terminal temizlemeden önce açık bırakılırsa, geçmişinizi bellekte bulabilirsiniz. Run history | cut -c 8- > histback_user1.txther panelde açık ve her kullanıcı için ayrıldı. Bu genişletilmiş bir geçmişi olan bir dosyayı üretirse, o zaman yerini alabilir ~/.bash_historyile histback_user1.txt. Ayrıca sisteme yakın zamanda giriş yapmış olan tüm kullanıcıların geçmişini ve kök geçmişini kontrol edin. Birçok durumda bash geçmişini yanlışlıkla temizlemek kolaydır, bu nedenle geçmişin kaybından emin olmak istemiyorsanız, günlük bir yedekleme komut dosyasına ihtiyacınız vardır.


Teşekkürler . Ne oldu bilmiyorum, ama geçmişim dün sıfırlandı ve şimdiye kadar fark etmedim. Ama şanslıyım, açık bir terminal penceresi yoktu, ama 10 (!). Artık her şey yolunda.
Marc.2377
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.