.Bash_history dosyasının içeriği ne kadar sürer?


11

Dosyamın içeriğini nasıl değiştirebilirim bash_history? Tarihin ne kadar sürdüğünü hangi değerler veya değişkenler kontrol eder? BASH geçmişimin daha iyi kontrolünü sağlamak için değiştirebileceğim başka şeyler var mı?



2
Bu dosyanın zamanla kontrol edildiğine inanmıyorum, daha ziyade dosyanın nihai boyutu. Buraya bakın: Bash içindeki geçmiş listesinin boyutunu 5000'den fazla satıra ayarlamanın bir yolu var mı? . Böylece env. değişkenler HISTSIZEve HISTFILESIZEtek kumanda korunur ne kadar tarih kontrol etmek zorunda olduğunu yüzeyleri vardır.
slm

Yanıtlar:


12

Geçmiş boyutunu kontrol eden iki değişken vardır:

HISTFILESIZE Geçmiş dosyasında bulunan maksimum satır sayısı. Bu değişkene bir değer atandığında, gerekirse en eski girişleri kaldırarak bu sayıdan daha fazla satır içermeyecek şekilde geçmiş dosyası kesilir. Geçmiş dosyası, bir kabuk çıktığında yazıldıktan sonra da bu boyuta kısaltılır. Değer 0 ise, geçmiş dosyası sıfır boyutuna kesilir. Sayısal olmayan değerler ve sıfırdan küçük sayısal değerler kesmeyi engeller. Kabuk, başlangıç ​​dosyalarını okuduktan sonra varsayılan değeri HISTSIZE değerine ayarlar.

ve

HISTSIZE Komut geçmişinde hatırlanması gereken komut sayısı (aşağıdaki TARİH'e bakın). Değer 0 ise, komutlar geçmiş listesine kaydedilmez. Sıfırdan küçük sayısal değerler her komutun geçmiş listesine kaydedilmesine neden olur (sınır yoktur). Kabuk, başlangıç ​​dosyalarını okuduktan sonra varsayılan değeri 500 olarak ayarlar.

Bu iki değişken, geçmişinizin davranışını kontrol etmenizi sağlar. Temel olarak, HISTSIZEgeçerli oturumunuz sırasında kaydedilen komut HISTFILESIZEsayısı ve oturumlar arasında hatırlanacak komut sayısıdır. Yani mesela:

$ echo $HISTSIZE 
10
$ echo $HISTFILESIZE 
5
$ history | wc
     10      29     173

Yukarıdaki örnekte, HISTSIZE10 olarak ayarlandığından history, 10 komutun bir listesini döndürür. Ancak, oturumu kapatıp yeniden oturum açarsanız, history5 HISTFILESIZEolarak ayarlandığından yalnızca 5 komut döndürür . Bunun nedeni, oturumunuzdan çıktıktan sonra HISTFILESIZEgeçmişinizin satırlarının geçmiş dosyanıza kaydedilmesidir ( ~/.bash_historyvarsayılan olarak HISTFILE). Başka bir deyişle, komutlar , bu noktaya HISTFILEulaşana kadar eklenir, eklenen $HISTFILESIZEher satır, dosyanın ilk komutunun kaldırılacağı anlamına gelir.

Bu değişkenlerin değerlerini ~/.profile(veya ~/.bash_profilebu dosya varsa) içinde ayarlayabilirsiniz . Bunları ~/.bashrcilk önce ayarlamayın, çünkü orada hiçbir iş ayarlanmamıştır ve ikincisi, girişte diğer sorunlara yol açabilecek giriş dışı kabuklara karşı farklı davranışlara sahip olmanıza neden olacaktır .

Geçmişinizin davranışına ince ayar yapmanıza izin veren diğer faydalı değişkenler şunlardır:

  • HISTIGNORE: Bu, nadiren ilgilenilen bazı ortak komutları görmezden gelmenizi sağlar. Örneğin, şunları ayarlayabilirsiniz:

    export HISTIGNORE="pwd:df:du"

    Bu herhangi bir komut ile başlayan neden olur pwd, dfya da dugöz ardı edilecek ve geçmişine kaydedilmediğini.

  • HISTCONTROL: Bu, tarihin nasıl çalışacağını seçmenizi sağlar. Şahsen, HISTCONTROL=ignoredupsyinelenen komutları yalnızca bir kez kaydetmesine neden olana ayarladım . Diğer seçenekler, ignorespaceboşlukla başlayan erasedupsve geçerli satırla eşleşen tüm önceki satırların bu satır kaydedilmeden geçmiş listesinden kaldırılmasına neden olan komutları yok saymaktır . ignorebothignorespace ve ignoredups için kısayol.

  • HISTTIMEFORMAT: Bu, geçmiş dosyasının saat biçimini ayarlamanızı sağlar. Ayrıntılar için Pandya'nın cevabına bakın veya okuyun man bash.


Daha fazla ince ayar için şunlara sahipsiniz:

  • histappendBash seçeneği. Bu, shopt -s histappendo komutu çalıştırarak veya cihazınıza ekleyerek ayarlanabilir ~/.bashrc. Bu seçenek belirlenirse

    geçmiş listesi, kabuk çıkarken dosyanın üzerine yazmak yerine HISTFILE değişkeninin değeri ile adlandırılan dosyaya eklenir.

    Bu, farklı oturumların geçmişlerini birleştirmenize izin verdiği için çok kullanışlıdır (örneğin farklı terminaller düşünün).

  • historyKomut iki yararlı seçenekleri vardır:

    • history -a : son komutun geçmiş dosyasına otomatik olarak yazılmasına neden olur

    • history -r : geçmiş dosyasını geçerli oturuma aktarır.

    Örneğin, bu iki komutu, PROMPT_COMMAND(kabuğunuz her istemi gösterdiğinde yürütülür, böylece yeni bir kabuk başlattığınızda ve içinde çalıştırdığınız her komuttan sonra yürütülür) öğesine ekleyebilirsiniz :

    export PROMPT_COMMAND='history -a;history -r;'

    Birlikte, açtığınız herhangi bir yeni terminalin diğer kabuk oturumlarının geçmişini hemen içe aktarmasını sağlarlar. Sonuç, tüm terminaller / kabuk oturumlarında ortak bir geçmiştir.


2

Geçmiş dosyasının varsayılan boyutu 500 satırdır. .Bash_history dosyası 500 satıra ulaştığında, FIFO'da olduğu gibi daha yeni satırlara yer açmak için ilk girişler elenir. Bunu, HISTFILESIZEvarsayılan olarak 500 değerine sahip olan değişkenin değerini değiştirerek değiştirebilirsiniz .

A HISTFILESIZE=10000.bashrc dosyasına koymak , geçmiş dosyasının alabileceği satır sayısını 10000'e yükselterek içeriğinin ömrünü uzatır.


2
not: HISTSIZElimitini yükseltirseniz , değiştirmeyi HISTFILEde düşünün . Çalıştırırsanız , çıkışta bash --norc HISTSIZEkısaltılmış olarak varsayılan değere geri döner HISTFILE.
llua

Teşekkürler @llua. Benzer şekilde, sisteminiz /etc/bash.bashrcbir HISTFILESIZE(veya belki de HISTSIZE; hangisini kontrol etmedim) ayarlarsa, Bash .bash_historyokuduğu noktada kesilir /etc/bash.bashrc(veya en azından yeni sınırınız kendi Bash init dosyalarınızda ayarlanmadan önce). Bundan kaçınmak için , Bash'in kısaldığı dosyaya HISTFILEdeğil, gerçek geçmişiniz oraya gidecek şekilde kendiniz ayarlayın .bash_history.
Chris Povirk

(Ama bunu yapmayın export, bunu yapmak herhangi bir çocuk mermisi için görünür hale gelecektir, bu da bunun yerine .bash_history
kısaltmak isteyebilir

0

Oku man bashilgili kaplı fazla ayrıntı için bash tarihinin gibi:

HISTCONTROL
       Komutların geçmiş listesine nasıl kaydedileceğini kontrol eden iki nokta üst üste işaretli değerler listesi.
       Değerler listesi yoksayma içeriyorsa, boşluk karakteriyle başlayan satırlar
       geçmiş listesine kaydedilmedi. Yoksayılanların değeri, öncekiyle eşleşen satırlara neden olur
       kaydedilmeyecek geçmiş girişi. İgnoreboth değeri, ignorespace ve
       ignoredups. Silinmiş değer, geçerli satırla eşleşen tüm önceki satırların
       bu satır kaydedilmeden geçmiş listesinden kaldırılabilir. Yukarıda olmayan herhangi bir değer
       listesi yok sayılır. HISTCONTROL ayarlanmamışsa veya geçerli bir değer içermiyorsa, tüm satırlar
       kabuk ayrıştırıcı tarafından okunan HISTIG değerine bağlı olarak geçmiş listesine kaydedilir
       NORE. Çok satırlı bir bileşik komutunun ikinci ve sonraki satırları test edilmez,
       ve HISTCONTROL'ün değerine bakılmaksızın tarihe eklenir.
HISTFILE
       Komut geçmişinin kaydedildiği dosyanın adı (aşağıdaki TARİH'e bakın). Varsayılan
       değeri ~ / .bash_history şeklindedir. Ayarlanmazsa, bir kabuk çıktığında komut geçmişi kaydedilmez.
HISTFILESIZE
       Geçmiş dosyasında bulunan maksimum satır sayısı. Bu değişken atandığında
       bir değer, geçmiş dosyasının gerekirse bu sayıyı aşmayacak şekilde kısaltılır
       en eski girişleri kaldırarak. Geçmiş dosyası da bu boyuta kısaltıldı
       bir kabuk çıkınca yazdıktan sonra. Değer 0 ise, geçmiş dosyası kısaltılır
       sıfır boyut. Sayısal olmayan değerler ve sıfırdan küçük sayısal değerler kesmeyi engeller. 
       shell, başlangıç ​​dosyalarını okuduktan sonra varsayılan değeri HISTSIZE değerine ayarlar.
HISTIGNORE
       Hangi komut satırlarının kaydedilmesi gerektiğine karar vermek için iki nokta üst üste işaretli kalıp listesi
       Geçmiş listesi. Her desen satırın başına sabitlenir ve eşleşmelidir
       tam satır (örtük `` * '' eklenmez). Her desen hatta karşı test edilir
       HISTCONTROL tarafından belirtilen kontroller yapıldıktan sonra. Normal kabuğa ek olarak
       desen eşleme karakterleri, `& 'önceki geçmiş satırıyla eşleşir. '&' kaçabilir
       ters eğik çizgi kullanma; bir eşleşme girişiminden önce ters eğik çizgi kaldırılır. İkinci ve
       çok satırlı bir bileşik komutunun sonraki satırları test edilmez ve
       HISTIGNORE'un değerinden bağımsız olarak tarih.
HISTSIZE
       Komut geçmişinde hatırlanması gereken komut sayısı (aşağıdaki TARİH'e bakın). Eğer
       değeri 0 ise, komutlar geçmiş listesine kaydedilmez. Sıfırdan küçük sayısal değerler
       her komutun geçmiş listesine kaydedilmesine neden olur (sınır yoktur). Deniz kabuğu
       başlangıç ​​dosyalarını okuduktan sonra varsayılan değeri 500 olarak ayarlar.
HISTTIMEFORMAT
       Bu değişken null değil olarak ayarlanırsa, değeri strftime (3) için bir biçim dizesi olarak kullanılır
       geçmiş tarafından görüntülenen her geçmiş girişiyle ilişkili zaman damgasını yazdırmak için
       yerleşik. Bu değişken ayarlanırsa, zaman damgaları geçmiş dosyasına yazılabilir, böylece
       mermi oturumları boyunca korunmalıdır. Bu, ayırt etmek için geçmiş yorum karakterini kullanır
       diğer tarih satırlarından gelen guish zaman damgalarını.

Özellikle HISTFILESIZEve HISTSIZEsize yardım ediyor olabilirsiniz.

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.