의 차이 무엇입니까 HISTSIZE
대는 HISTFILESIZE
?
bash 기록을 기본 500 줄 이상으로 확장하는 데 사용됩니다.
여기와 다른 포럼에서 왜 둘 다 필요한지에 대한 명확성이 부족한 것 같습니다. (실시 예 1 , 실시 예 2 , 실시 예 3 ).
답변
짧은 답변:
HISTSIZE
bash 세션이 진행되는 동안 히스토리 목록의 메모리에 저장되는 행 또는 명령 수입니다.
HISTFILESIZE
(a) 세션 시작시 히스토리 파일에 허용되고 (b) 이후 세션에서 사용하기 위해 bash 세션 종료시 히스토리 파일에 저장되는 행 또는 명령의 수입니다.
file
: on disk-와 list
: in memory 의 차이점을 확인 하십시오 .
긴 대답 :
위의 모든 정보와 몇 가지 예 :
실시 예 1 :
HISTFILESIZE=10
및HISTSIZE=10
- 세션을 시작합니다.
- HISTFILE (bash 명령 기록을 저장하는 파일)은 HISTFILESIZE = 10 줄을 포함하도록 잘립니다.
- 50 줄을 씁니다.
- 50 개의 명령이 끝날 때 명령 41-50 만 히스토리 목록에 있으며 크기는 HISTSIZE = 10에 의해 결정됩니다.
- 당신은 당신의 세션을 종료합니다.
histappend
활성화되어 있지 않다고 가정하면 명령 41에서 50까지는 HISTFILE에 저장됩니다. 이제 HISTFILE에 10 개의 명령과 10 개의 새로 작성된 명령이 있습니다.- HISTFILESIZE = 10 줄을 포함하도록 HISTFILE이 잘립니다.
- 이제 내역에 10 개의 명령이 있습니다. 방금 완료 한 세션에서 방금 입력 한 마지막 10 개입니다.
- 새 세션을 시작할 때 HISTFILE HISTFILESIZE = 10으로 1에서 다시 시작합니다.
실시 예 2 :
HISTFILESIZE=10
및HISTSIZE=5
- 세션을 시작합니다.
- HISTFILE (bash 명령 기록을 저장하는 파일)은 최대 HISTFILESIZE = 10 줄을 포함하도록 잘립니다.
- 50 줄을 씁니다.
- 50 개의 명령이 끝나면 명령 46-50 만 히스토리 목록에 있으며 크기는 HISTSIZE = 5에 의해 결정됩니다.
- 당신은 당신의 세션을 종료합니다.
histappend
활성화되어 있지 않다고 가정하면 명령 46 ~ 50은 HISTFILE에 저장되며, 이제 처음에는 10 개의 명령과 5 개의 새로 작성된 명령이 있습니다.- HISTFILESIZE = 10 줄을 포함하도록 HISTFILE이 잘립니다.
- 이제 기록에 10 개의 명령이 있습니다. 이전 세션의 5 개와 방금 완료 한 세션에서 방금 입력 한 마지막 5 개가 있습니다.
- 새 세션을 시작할 때 HISTFILE HISTFILESIZE = 10으로 1에서 다시 시작합니다.
실시 예 3 :
HISTFILESIZE=5
및HISTSIZE=10
- 세션을 시작합니다.
- HISTFILE (bash 명령 기록을 저장하는 파일)은 최대 HISTFILESIZE = 5 줄을 포함하도록 잘립니다.
- 50 줄을 씁니다.
- 50 개의 명령이 끝날 때 명령 41-50 만 히스토리 목록에 있으며 크기는 HISTSIZE = 10에 의해 결정됩니다.
- 당신은 당신의 세션을 종료합니다.
histappend
사용 불가능한 것으로 가정하면 명령 41-50이 HISTFILE에 저장되며 이제 HISTFILE에 5 개의 명령과 새로 작성된 10 개의 명령이 있습니다.- HISTFILESIZE = 5 줄을 포함하도록 HISTFILE이 잘립니다.
- 이제 기록에 5 개의 명령이 있습니다. 방금 완료 한 세션에서 마지막으로 입력 한 5 개의 명령입니다.
- 새 세션을 시작할 때 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