Eğer koşarsam history
, en son yürütülen komutlarımı görebiliyorum.
Ama yaparsam tail -f $HISTFILE
veya tail -f ~/.bash_history
listelenmezler.
Dosya kilitlenir mi, geçici bir yer veya benzeri bir şey var mı?
Eğer koşarsam history
, en son yürütülen komutlarımı görebiliyorum.
Ama yaparsam tail -f $HISTFILE
veya tail -f ~/.bash_history
listelenmezler.
Dosya kilitlenir mi, geçici bir yer veya benzeri bir şey var mı?
Yanıtlar:
Bash, komutların listesini çalışırken dahili olarak bellekte tutar. .bash_history
Çıkışta yazılır :
Etkileşimli bir kabuk çıktığında, son $ HISTSIZE satırları geçmiş listesinden $ HISTFILE adlı dosyaya kopyalanır.
Komut geçmişini yazmaya zorlamak istiyorsanız, aşağıdaki komutu kullanabilirsiniz history -a
:
Yeni geçmiş satırlarını (geçerli Bash oturumunun başlangıcından beri girilen tarih satırları) geçmiş dosyasına ekleyin.
Bir -w
seçenek de var:
Geçerli geçmişi tarihçeye yaz.
tarihinizi tam olarak nasıl kullandığınıza bağlı olarak size daha uygun olabilir.
Her zaman derhal yazıldığından emin olmak istiyorsanız, bu komutu PROMPT_COMMAND
değişkeninize ekleyebilirsiniz :
export PROMPT_COMMAND='history -a'
(Cevap değil ama yorum ekleyemiyorum)
Yalnızca .bash_history
belirli bir komutu silmek istediğinizden (örneğin, açık bir şifre içeren) kontrol ediyorsanız, bellekteki girişi doğrudan silebilirsiniz history -d <entry_id>
.
Örneğin, şöyle bir çıktı varsayalım:
$ history
926 ll
927 cd ..
928 export --password=super_secret
929 ll
ve export
çizgiyi temizlemek istiyorsan , bunu basitçe başarabilirsin:
history -d 928
bash çalışma hafızasında tutulur, bash kapandığında veya her komuttan sonra kaydetmek ve bash başladığında veya istek üzerine yüklenmek üzere bash yapılandırılabilir.
Her komuttan sonra kaydetmeyi yapılandırırsanız, aynı anda birden fazla bash çalıştırmanın etkilerini göz önünde bulundurun. (komut satırları serpiştirilecek)
bash
exetable'da saklanmış gibi görünmesini sağlar. "Bu, bellekte saklanır bash
..."
Oturumunuz aktifken komutlar belleğe (RAM) kaydedilir. Kabuğu kapattığınız anda komutlar listesi .bash_history
kapanmadan önce yazılır .
Böylece şu anki oturumun geçmişini göremezsiniz .bash_history
.
bash
yeniden başlatmayı gerektirmeyen sonlandırma üzerine güncellenir (özellikle terminalleri istediğiniz gibi açıp kapatabileceğiniz grafiksel ortamlarda).
Çalışırken, aşağıdaki durumlarda tarihçeyi yalnızca bellekte (varsayılan olarak) tutar:
H
giriş echo "$-"
) ayarlanır.0
ve*
(veya başka bir çok kısıtlayıcı desen).Yukarıdakilerden herhangi biri başarısız olursa, hiçbir tarih bellekte saklanmaz ve sonuç olarak diske tarih yazılmaz veya yazılmaz.
Aşağıdaki durumlarda bellekteki tarih diske yazılır:
Ancak yalnızca kabuk çıktığında veya komutları history -a
(ekleme) veya history -w
(yazma) çalıştırıldığında.
Diske hemen bir yazma tetiklemek için değişkeni kullanabilirsiniz:
PROMPT_COMMAND='history -a'
hangi edecek geçmiş dosyasına tarih hatları. Bunlar, geçerli bash oturumunun başlangıcından beri girilen ancak geçmiş dosyaya henüz eklenmemiş olan tarih çizgileridir.append
new
Veya:
PROMPT_COMMAND='history -w'
To üzerine bellekten listesiyle HISTFILE tarih.
Böylece, hafızada bulunan bir komutu kaldırabilirsiniz:
$ history 5
6359 ls
6360 cd ..
6361 comand --private-password='^%^&$@#)!@*'
6362 top
6363 set +o | less
$ history -d 6361
$ history 5
6359 ls
6360 cd ..
6361 top
6362 set +o | less
$ history -w
Ve son komutla diske yaz:
history -w # with `shopt -u histappend` unset
.bash_history
Dosyanız yanlışlıkla kökündeyse, işler durur. Bu durumda, mülkiyeti kontrol edin vesudo
gerekirse mülkiyeti düzeltmek için kullanın .