BIST HISTSIZE 대 HISTFILESIZE?


174

의 차이 무엇입니까 HISTSIZE대는 HISTFILESIZE?

bash 기록을 기본 500 줄 이상으로 확장하는 데 사용됩니다.

여기와 다른 포럼에서 왜 둘 다 필요한지에 대한 명확성이 부족한 것 같습니다. (실시 예 1 , 실시 예 2 , 실시 예 3 ).

답변:


289

짧은 답변:

HISTSIZE bash 세션이 진행되는 동안 히스토리 목록의 메모리에 저장되는 행 또는 명령 수입니다.

HISTFILESIZE (a) 세션 시작시 히스토리 파일에 허용되고 (b) 이후 세션에서 사용하기 위해 bash 세션 종료시 히스토리 파일에 저장되는 행 또는 명령의 수입니다.

file: on disk-와 list: in memory 의 차이점을 확인 하십시오 .

긴 대답 :

위의 모든 정보와 몇 가지 예 :

실시 예 1 : HISTFILESIZE=10HISTSIZE=10

  1. 세션을 시작합니다.
  2. HISTFILE (bash 명령 기록을 저장하는 파일)은 HISTFILESIZE = 10 줄을 포함하도록 잘립니다.
  3. 50 줄을 씁니다.
  4. 50 개의 명령이 끝날 때 명령 41-50 만 히스토리 목록에 있으며 크기는 HISTSIZE = 10에 의해 결정됩니다.
  5. 당신은 당신의 세션을 종료합니다.
  6. histappend활성화되어 있지 않다고 가정하면 명령 41에서 50까지는 HISTFILE에 저장됩니다. 이제 HISTFILE에 10 개의 명령과 10 개의 새로 작성된 명령이 있습니다.
  7. HISTFILESIZE = 10 줄을 포함하도록 HISTFILE이 잘립니다.
  8. 이제 내역에 10 개의 명령이 있습니다. 방금 완료 한 세션에서 방금 입력 한 마지막 10 개입니다.
  9. 새 세션을 시작할 때 HISTFILE HISTFILESIZE = 10으로 1에서 다시 시작합니다.

실시 예 2 : HISTFILESIZE=10HISTSIZE=5

  1. 세션을 시작합니다.
  2. HISTFILE (bash 명령 기록을 저장하는 파일)은 최대 HISTFILESIZE = 10 줄을 포함하도록 잘립니다.
  3. 50 줄을 씁니다.
  4. 50 개의 명령이 끝나면 명령 46-50 만 히스토리 목록에 있으며 크기는 HISTSIZE = 5에 의해 결정됩니다.
  5. 당신은 당신의 세션을 종료합니다.
  6. histappend활성화되어 있지 않다고 가정하면 명령 46 ~ 50은 HISTFILE에 저장되며, 이제 처음에는 10 개의 명령과 5 개의 새로 작성된 명령이 있습니다.
  7. HISTFILESIZE = 10 줄을 포함하도록 HISTFILE이 잘립니다.
  8. 이제 기록에 10 개의 명령이 있습니다. 이전 세션의 5 개와 방금 완료 한 세션에서 방금 입력 한 마지막 5 개가 있습니다.
  9. 새 세션을 시작할 때 HISTFILE HISTFILESIZE = 10으로 1에서 다시 시작합니다.

실시 예 3 : HISTFILESIZE=5HISTSIZE=10

  1. 세션을 시작합니다.
  2. HISTFILE (bash 명령 기록을 저장하는 파일)은 최대 HISTFILESIZE = 5 줄을 포함하도록 잘립니다.
  3. 50 줄을 씁니다.
  4. 50 개의 명령이 끝날 때 명령 41-50 만 히스토리 목록에 있으며 크기는 HISTSIZE = 10에 의해 결정됩니다.
  5. 당신은 당신의 세션을 종료합니다.
  6. histappend사용 불가능한 것으로 가정하면 명령 41-50이 HISTFILE에 저장되며 이제 HISTFILE에 5 개의 명령과 새로 작성된 10 개의 명령이 있습니다.
  7. HISTFILESIZE = 5 줄을 포함하도록 HISTFILE이 잘립니다.
  8. 이제 기록에 5 개의 명령이 있습니다. 방금 완료 한 세션에서 마지막으로 입력 한 5 개의 명령입니다.
  9. 새 세션을 시작할 때 1 단계에서 HISTFILE HISTFILESIZE = 5로 다시 시작하십시오.

elixir_sinari의 정보 :

명령을 입력 할 때 기록 "파일"이 업데이트되지 않습니다. 명령은 "목록"에 별도로 저장됩니다 (히스토리 명령으로 액세스). 이러한 저장된 명령의 수는 HISTSIZE 값으로 제어됩니다. 쉘 (대화식)이 종료되면 마지막 $ HISTSIZE 행이 해당 "목록"에서 $ HISTFILE에 복사 / 추가됩니다. HISTFILESIZE가 설정되면이 조작 후에 $ HISTFILESIZE 행 (최신) 만 $ HISTFILE에 존재하는지 확인합니다. 쉘이 시작되면 "list"는 $ HISTFILE에서 최대 $ HISTSIZE 명령까지 초기화됩니다.

그리고 man bash페이지에서 :

HISTSIZE 변수의 값은 히스토리 목록에 저장할 명령 수로 사용됩니다. 마지막 HISTSIZE 명령의 텍스트 (기본값 500)가 저장됩니다. (...)

시작시 히스토리는 변수 HISTFILE (기본값 ~ / .bash_history)로 이름이 지정된 파일에서 초기화됩니다. HISTFILESIZE 값으로 지정된 파일은 필요한 경우 HISTFILESIZE 값으로 지정된 행 수를 초과하지 않도록 잘립니다. (...) 대화식 쉘이 종료되면 마지막 $ HISTSIZE 행이 히스토리 목록에서 $ HISTFILE로 복사됩니다. histappend shell 옵션이 활성화 된 경우 (아래의 SHELL BUILTIN COMMANDS 아래에서 shopt 설명 참조) 행이 내역 파일에 추가되고, 그렇지 않으면 내역 파일을 덮어 씁니다. HISTFILE을 설정하지 않았거나 기록 파일을 쓸 수없는 경우 기록이 저장되지 않습니다. (...) 히스토리를 저장 한 후 히스토리 파일은 HISTFILESIZE 줄을 초과하지 않도록 잘립니다. HISTFILESIZE가 설정되지 않은 경우


27
+1이 답변은 매우 철저합니다! 그래도 조금 너무 많이 생각합니다. 대부분의 사람들은 그 끝에 도달하지 못할 것입니다. 나는 당신이 그것을 요약하는 것을 고려해야한다고 생각합니다
slezica

22
@ slezica 귀하의 의견의 두 번째 부분에 동의하지 않습니다. 일부 사람들이 너무 느려서 몇 줄을 읽지 못한다는 사실은 다른 사람들에게 유용한 정보를 제거하는 것을 정당화해서는 안됩니다.
Bastien

1
@Bastien은 글 머리 기호 파서라고 가정하면이를 읽는 데 어려움이 없습니다.
Pithikos

6
내 하드 드라이브는 1TB이고 크게 비어 있으며 유휴 CPU 사이클과 RAM의 덩어리가 있으며 가능한 한 많은 bash 기록을 저장하고 싶습니다. 따라서 그 바보 같은 명령을 찾아야 할 때 2 년 안에 뛰지 않으면 내 bash 기록에 있다는 것을 알고 있습니다. 좀 더 구체적으로 만들기 위해 최대 50MB의 bash 기록을 예로 들어 보겠습니다. 어떤 값을 추천 하시겠습니까?
CivFan

2
@ 매튜 죄송합니다, 몰라요!
arturomp

6

arturomp가 말한 것을 기반으로하고 좀 더 명확하게하기 위해 노력합니다.

2000 년의 오랜 역사를 가지고 있다고 가정 해 봅시다.

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

당신은 당신이 보여주는 것을 줄일 수 있습니다 HISTSIZE

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

아무리 많은 명령을 입력하더라도 마지막 5 개만 기록됩니다.

~$ 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

마지막 5 개 명령 만 기록되었으므로 첫 번째 명령 ( "ABC")이 기록에 없다는 것을 분명히 알 수 있습니다.

이제 전체 히스토리가 파일 ( .bash_history)에 저장 되며이 파일이. 파일로 가져 오는 시간을 변경할 수 있습니다 HISTFILESIZE. 예를 들어 2033 HISTFILESIZE내 경우에는 다음과 같이됩니다.

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

3
모든 동시 터미널의 모든 히스토리를 bash 히스토리에 영원히 저장하려면 어떤 값을 권장 합니까? 즉, 항상 모든 것을 저장하고 아무것도 삭제하지 마십시오.
CivFan

10
@CivFan : 설정 HISTSIZE=-1HISTFILESIZE=-1.
M. Dudley

2
이것은 틀렸다. -1로 설정하면 모든 것이 지워집니다.
Brendan Byrd

3
@BrendanByrd bash매뉴얼 페이지는 말합니다 : Non-numeric values and numeric values less than zero inhibit truncation그러나 나는 내 역사를
잃고

3
@SebMa 설정을 HISTSIZE='INFINITY'및로 변경했습니다 HISTFILESIZE='ANDBEYOND'. 숫자가 아니므로 모든 것을 저장합니다. 팁 고마워!
코너
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.