HISTSIZE mi HISTFILESIZE mi?


174

Farkı nedir HISTSIZEvs. HISTFILESIZE?

Bas geçmişini varsayılan 500 satırın ötesine uzatmak için kullanılırlar.

Burada ve diğer forumlarda neden ikisine de ihtiyaç duyulduğuna dair netlik eksikliği var gibi görünüyor. ( Örnek 1 , Örnek 2 , Örnek 3 ).

Yanıtlar:


289

Kısa cevap:

HISTSIZE bash oturumunuz devam ederken geçmiş listesinde bellekte depolanan satır veya komut sayısıdır.

HISTFILESIZE (a) bir oturumun başlangıç ​​zamanında geçmiş dosyasında izin verilen satırların veya komutların sayısıdır ve (b) gelecekteki oturumlarda kullanılmak üzere bash oturumunuzun sonunda geçmiş dosyasında depolanır.

file: Diskte - ve list: bellekte arasındaki farklara dikkat edin .

Uzun cevap:

Yukarıdaki tüm bilgiler + bazı örnekler:

Örnek 1 : HISTFILESIZE=10veHISTSIZE=10

  1. Oturumunuza başlarsınız.
  2. HISTFILE dosyanız (bash komut geçmişinizi saklayan dosya), HISTFILESIZE = 10 satır içerecek şekilde kısaltılmıştır.
  3. 50 satır yazıyorsunuz.
  4. 50 komutunuzun sonunda, geçmiş listenizde yalnızca boyutu 41 ile 50 arasında olan komutlar bulunur; boyutu HISTSIZE = 10 olarak belirlenir.
  5. Oturumunu bitirdin.
  6. histappendEtkinleştirilmediğini varsayarsak , 41 ile 50 arasındaki komutlar artık başlangıcında tuttuğu 10 komutu ve yeni yazılan 10 komutu içeren HISTFILE klasörünüze kaydedilir.
  7. HISTFILE dosyanız HISTFILESIZE = 10 satır içerecek şekilde kesildi.
  8. Artık geçmişinizde 10 komut var - son oturumda yeni yazdığınız son 10 komut.
  9. Yeni bir oturum başlattığınızda, HISTFILESIZE = 10'luk bir HISTFILE ile 1'den başlarsınız.

Örnek 2 : HISTFILESIZE=10veHISTSIZE=5

  1. Oturumunuza başlarsınız.
  2. HISTFILE dosyanız (bash komut geçmişinizi saklayan dosya), en fazla HISTFILESIZE = 10 satır içerecek şekilde kısaltılmıştır.
  3. 50 satır yazıyorsunuz.
  4. 50 komutunuzun sonunda, geçmiş listenizde yalnızca boyutu 46 ile 50 arasında olan komutlar bulunur; boyutu HISTSIZE = 5 olarak belirlenir.
  5. Oturumunu bitirdin.
  6. histappendEtkinleştirilmediğini varsayarsak , 46 ile 50 arasındaki komutlar artık başlangıcında tuttuğu 10 komutu ve yeni yazılan 5 komutu içeren HISTFILE klasörünüze kaydedilir.
  7. HISTFILE dosyanız HISTFILESIZE = 10 satır içerecek şekilde kesildi.
  8. Artık geçmişinizde 10 komut var - önceki bir oturumdan 5 ve son bitirdiğiniz oturumda az önce yazdığınız son 5 komut.
  9. Yeni bir oturum başlattığınızda, HISTFILESIZE = 10'luk bir HISTFILE ile 1'den başlarsınız.

Örnek 3 : HISTFILESIZE=5veHISTSIZE=10

  1. Oturumunuza başlarsınız.
  2. HISTFILE dosyanız (bash komut geçmişinizi saklayan dosya), en fazla HISTFILESIZE = 5 satır içerecek şekilde kısaltılmıştır.
  3. 50 satır yazıyorsunuz.
  4. 50 komutunuzun sonunda, geçmiş listenizde yalnızca boyutu 41 ile 50 arasında olan komutlar bulunur; boyutu HISTSIZE = 10 olarak belirlenir.
  5. Oturumunu bitirdin.
  6. histappendEtkinleştirildiği varsayılırsa , 41 ile 50 arasındaki komutlar artık başlangıcında tuttuğu 5 komutu ve yeni yazılan 10 komutu içeren HISTFILE klasörünüze kaydedilir.
  7. HISTFILE dosyanız HISTFILESIZE = 5 satır içerecek şekilde kesildi.
  8. Artık geçmişinizde 5 komut var - son oturumda yeni yazdığınız son 5 komut.
  9. Yeni bir oturum başlattığınızda, 1. adımda HISTFILESIZE = 5 HISTFILE ile başlıyorsunuz.

Alınan bilgiler elixir_sinari :

Komutları yazarken geçmiş "dosya" güncellenmez. Komutlar bir "listede" ayrı olarak saklanır (geçmiş komutuyla erişilir). Saklanan bu komutların sayısı HISTSIZE değeri ile kontrol edilir. Kabuk (etkileşimli) çıktığında, son "HISTSIZE" satırı bu "listeden" $ HISTFILE dosyasına kopyalanır / eklenir. HISTFILESIZE ayarlanırsa, bu işlemden sonra $ HISTFILE dosyasında yalnızca $ HISTFILESIZE satırının (en son) bulunması sağlanır. Ve kabuk başladığında, "list" $ HISTFILE değerinden maksimum $ HISTSIZE komutuna kadar başlatılır.

Ve man bashsayfadan:

HISTSIZE değişkeninin değeri, bir geçmiş listesine kaydedilecek komut sayısı olarak kullanılır. Son HISTSIZE komutlarının metni (varsayılan 500) kaydedilir. (...)

Başlangıçta geçmiş, HISTFILE değişkeni (varsayılan ~ / .bash_history) tarafından adlandırılan dosyadan başlatılır. HISTFILE değeri olarak adlandırılan dosya, gerekirse HISTFILESIZE değeri tarafından belirtilen satır sayısından fazlasını içermeyecek şekilde kesilir. (...) Etkileşimli bir kabuk çıktığında, son $ HISTSIZE satırı geçmiş listesinden $ HISTFILE klasörüne kopyalanır. Histappend kabuk seçeneği etkinse (aşağıdaki SHELL BUILTIN COMMANDS altındaki shopt açıklamasına bakın), satırlar geçmiş dosyasına eklenir, aksi takdirde geçmiş dosyasının üzerine yazılır. HISTFILE ayarlanmamışsa veya geçmiş dosyası yazılamazsa, geçmiş kaydedilmez. (...) Geçmiş kaydedildikten sonra, geçmiş dosyası HISTFILESIZE satırından fazlasını içermeyecek şekilde kesilir. HISTFILESIZE ayarlanmamışsa,


27
+1 Bu cevap etkileyici bir şekilde ayrıntılı! Yine de biraz fazla, sanırım. Çoğu insan sonuna ulaşmaz. Bence özetlemeyi düşünmelisiniz
slezica

22
@slezica Yorumunuzun ikinci kısmına katılmıyorum: Sonuna ulaştım ve cevaptaki her bilginin yararlı olduğunu söyleyebilirim. Bazı insanların birkaç satırı okuyamayacak kadar tembel olmaları, diğerleri için yararlı bilgilerin kaldırılmasını haklı göstermemelidir.
Bastien

1
@Bastien bir mermi noktası ayrıştırıcısı olduğunuzu varsayarsak, bunu okumakta zorlanmayacaksınız.
Pithikos

6
Bakın, sabit diskim 1 TB ve büyük ölçüde boş ve boş CPU döngüleri ve RAM'im var ve mümkün olduğunca çok bash geçmişini kaydetmek istiyorum - bu yüzden bu aptal komuta bakmam gerektiğinde İki yıl içinde koşma, biliyorum bash tarihimde. Daha somut hale getirmek için, 50 MB'a kadar bash geçmişi diyelim. Hangi değerleri önerirsiniz?
CivFan

2
@ Maalesef üzgünüm, bilmiyorum!
arturomp

6

Arturomp'un söylediklerinin üzerine inşa etmek ve bunu biraz daha netleştirmek için.

2000 yıllık bir geçmişe sahip olduğunuzu varsayarsak ..

~$ history
    1  sdf
    2  fghdfgjf
    3  fghfghdf
   ..  ..
 2027  78
 2028  57
 2029  yu45u

İle gösterdiklerinizi kısabilirsiniz HISTSIZE

~$ HISTSIZE=5
~$ history
 2026  546
 2027  78
 2028  56
 2029  yu45u
 2030  HISTSIZE=5

Şimdi, kaç komut yazdığınız önemli değil, yalnızca son 5 kaydedilecektir.

~$ ABC
~$ GGH
~$ GSDHFG
~$ JFDR
~$ ABSDDS
~$ AHFGHFD
<close terminal>
<open new terminal>
~$ history
    1  sdf
    2  fghdfgjf
    3  fghfghdf
   ..  ..
 2028  56
 2029  yu45u
 2030  HISTSIZE=5
 2031  GGH
 2032  GSDHFG
 2033  JFDR
 2034  ABSDDS
 2035  AHFGHFD

Sadece son 5 komut kaydedildiği için ilk komutumuzun ("ABC") tarihte olmadığını açıkça görebiliyoruz.

Şimdi, toplam geçmiş bir dosyada ( .bash_history) saklanır ve bu dosyanın ne kadar süre alacağını değiştirebilirsiniz HISTFILESIZE. Örneğin a ile 2033 HISTFILESIZE, benim durumumda bu olurdu:

~$ history
    1  fghfghdf
    2  gegege
    3  gege
   ..  ..
 2028  HISTSIZE=5
 2029  GGH
 2030  GSDHFG
 2031  JFDR
 2032  ABSDDS
 2033  AHFGHFD

3
Tüm eşzamanlı terminallerdeki tüm geçmişin bash geçmişine sonsuza kadar kaydedilmesini istersem hangi değerleri önerirsiniz ? Başka bir deyişle, her şeyi her zaman kaydedin ve asla hiçbir şeyi silmeyin.
CivFan

10
@CivFan: Ayarla HISTSIZE=-1ve HISTFILESIZE=-1.
M. Dudley

2
Bu ölü yanlış. -1 olarak ayarlandığında her şey temizlenir.
Brendan Byrd

3
@BrendanByrd bashMan sayfası diyor: Non-numeric values and numeric values less than zero inhibit truncationama sonra bunun doğru olup olmadığını kontrol etme cesaretim yoktu çünkü tarihimi kaybetmek istemiyorum :-)
SebMa

3
@SebMa Ayarlarımı HISTSIZE='INFINITY've olarak değiştirdim HISTFILESIZE='ANDBEYOND'. Sayısal olmadıkları için her şeyi kaydederler. Bahşiş için teşekkürler!
Connor
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.