Yanıtlar:
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:
HISTSIZE
veya HISTFILESIZE
0 olarak ayarlandıhistory-size
0 olarak ayarlandı> "$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/secure
CentOS / RHEL üzerine) ve eğer varsa, herhangi bir işlem muhasebe ve / veya denetim yazılımı yüklemiş olabilirsiniz.
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.txt
her 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_history
ile 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.
>.bash_history
. Belki birisi hesabınızdaydı ve izlerini saklamaya çalıştı. (Sisteminize bağlı olarak)last
aracılığıyla arama yaparak olağandışı oturum açma sürelerini kontrol edin/var/log/auth.log
.