때때로 히스토리 명령은 .bash_history에 저장되지 않습니다 명령을 실행했지만 오늘이 명령을 검색하려고

어제 CentOS 7에서 많은 명령을 실행했지만 오늘이 명령을 검색하려고 할 때 레코드가 없습니다. 파일을 열었을 때 .bash_history어제 발행 한 명령을 찾지 못했지만 며칠 전에 이전 명령을 많이 발견했습니다. 최근 명령이 저장되지 않은 이유는 무엇입니까? 히스토리 기능을 늘리려면 어떻게해야합니까?



답변

히스토리 항목이 표시되지 않는 가장 큰 원인은 HISTFILE아무것도 설정 하지 않거나 HISTSIZE0 으로 설정 하는 것이 아니라 동일한 시스템에 두 번 로그인 한 후 두 번째 bash 인스턴스 (아무것도 또는 전혀 수행하지 않은)로 종료하는 것입니다. 많이 했어 기본적으로 Bash는 내역을 병합하지 않으며 두 번째 Bash 종료 .bash_history는 첫 번째 Bash 종료에 의해 그렇게 멋지게 업데이트 된 것을 덮어 씁니다 .

이를 방지하기 위해 덮어 쓰기 대신 내역 파일에 추가 할 수 있습니다. histappend쉘 옵션을 사용할 수 있습니다 .

histappend shell 옵션이 활성화 된 경우 (아래의 SHELL BUILTIN COMMANDS 아래에서 shopt 설명 참조) 행이 내역 파일에 추가되고, 그렇지 않으면 내역 파일을 덮어 씁니다.

더 많은 세부 사항 이 답변 사용하는 방법을 포함하여 HISTSIZE, HISTFILESIZEHISTCONTROL, 중복 등을 크기를 제어 할


답변

히스토리 크기를 수정하려면 두 개의 BASH 변수 HISTSIZE를 사용하십시오 HISTFILESIZE(보통로 설정 .bashrc).

BASH 매뉴얼 페이지의 설명 :

HISTSIZE
명령 기록에서 기억 해야하는 명령의 수입니다 (아래 기록 참조). 값이 0이면 명령이 기록 목록에 저장되지 않습니다. 0보다 작은 숫자 값은 모든 명령이 기록 목록에 저장됩니다 (제한 없음). 셸은 시작 파일을 읽은 후 기본값을 500으로 설정합니다.

HISTFILESIZE
히스토리 파일에 포함 된 최대 행 수. 이 변수에 값이 할당되면 필요한 경우 기록 파일은 가장 오래된 항목을 제거하여 해당 줄 수를 초과하지 않도록 잘라냅니다. 쉘이 종료 될 때 기록 파일도이 크기로 잘립니다. 값이 0이면 히스토리 파일이 0으로 잘립니다. 숫자가 아닌 값과 0보다 작은 숫자 값은 잘림을 금지합니다. 쉘은 시작 파일을 읽은 후 기본값을 HISTSIZE 값으로 설정합니다.

예를 들어 .bashrc파일에 다음 설정이 있습니다.

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
HISTFILESIZE=2000


답변

이 일이 있었지만 해결책이 여기에 나열되지 않았습니다. 원인은 단순한 복사 + 붙여 넣기 문제였습니다. 다른 문서에서 명령을 복사하고 클립 보드에 여분의 공백이있었습니다. 어떤 이유로 우분투는 명령을 기록 파일에 저장하지 않았습니다.

여기에 이미지 설명을 입력하십시오

위의 이미지는 클립 보드 형태의 google docs 명령이었습니다. 이 명령은 실행되었지만 내 기록에서 생략되었습니다. 방금 돌아가서 공백없이 명령을 선택한 다음 bash 기록에 나타납니다.


답변

HISTCONTROL환경 변수가 ignorespace또는로 설정되어 있지 않은지 확인하십시오 ignoreboth.

$ echo $HISTCONTROL
ignoredups  #this is ok

파일 ~/.bash_profile또는 ~/.profile파일 에서 값을 설정하여 수정할 수 있습니다 .

HISTCONTROL=ignoredups

에서 bash매뉴얼 페이지

히스 트롤

히스토리 목록에서 명령이 저장되는 방법을 제어하는 ​​콜론으로 구분 된 값 목록.

값 목록에가 포함되어 있으면 ignorespace공백 문자로 시작하는 행이 기록 목록에 저장되지 않습니다.

값을 지정 ignoredups하면 이전 기록 항목과 일치하는 행이 저장되지 않습니다.

의 값은 및의 ignoreboth약어입니다 .ignorespaceignoredups

값을 지정 erasedups하면 해당 행을 저장하기 전에 현재 행과 일치하는 모든 이전 행이 기록 목록에서 제거됩니다.

위 목록에없는 값은 무시됩니다.

경우 HISTCONTROL 해제, 또는 유효한 값을 포함하지 않는 모든 라인의 값 쉘 기록 목록에 저장됩니다 파서, 주제별로 읽을 HISTIGNORE. 여러 줄 복합 명령의 두 번째 및 그 이후 줄은 테스트되지 않으며의 값에 관계없이 기록에 추가됩니다 HISTCONTROL.


답변