[bash] BIST HISTSIZE 대 HISTFILESIZE?

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

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

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



답변

짧은 답변:

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가 설정되지 않은 경우


답변

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


답변