.bash_history 파일의 내용은 얼마나 오래 지속됩니까?


11

bash_history파일 내용을 수정하려면 어떻게 합니까? 히스토리 지속 시간을 제어하는 ​​값 또는 변수는 무엇입니까? BASH 기록을보다 세밀하게 제어하기 위해 변경할 수있는 다른 것들이 있습니까?



2
나는이 파일이 시간의 길이에 의해 제어되는 것이 아니라 파일의 궁극적 크기에 의해 제어된다고 생각합니다. 여기를 참조하십시오 : bash의 히스토리 목록의 크기를 5000 줄 이상으로 설정하는 방법이 있습니까? . 그래서 환경. 변수 HISTSIZE와는 HISTFILESIZE유일한 컨트롤이 유지되는 기록 정보의 양은 어느 정도 제어 할 수 있다고 표면입니다.
slm

답변:


12

히스토리 크기를 제어하는 ​​두 가지 변수가 있습니다.

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

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

이 두 변수를 사용하면 히스토리의 동작을 제어 할 수 있습니다. 기본적으로 HISTSIZE현재 세션 중에 저장된 HISTFILESIZE명령 수이며 세션간에 기억되는 명령 수입니다. 예를 들어,

$ echo $HISTSIZE 
10
$ echo $HISTFILESIZE 
5
$ history | wc
     10      29     173

위의 예 HISTSIZE에서 10으로 설정되어 있으므로 10 history개의 명령 목록을 반환합니다. 그러나 로그 아웃했다가 다시 로그인 history하면 5 HISTFILESIZE로 설정되어 있기 때문에 5 개의 명령 만 반환 합니다. 세션을 종료하면 HISTFILESIZE내역 행이 내역 파일에 저장 되기 때문에 ( ~/.bash_history기본적으로 HISTFILE). 다시 말해, 명령은 HISTFILE해당 $HISTFILESIZE지점에 도달 할 때까지 추가되며 , 이후에 추가되는 각 행은 파일의 첫 번째 명령이 제거됨을 의미합니다.

이 변수의 값을 ~/.profile(또는 ~/.bash_profile해당 파일이 존재하는 경우) 설정할 수 있습니다 . 비즈니스에 설정되어 있지~/.bashrc 않기 때문에 첫 번째로 설정하지 마십시오. 두 번째는 로그인과 비 로그인 쉘에서 다른 문제 가 발생할 수 있으므로 다른 동작을 유발할 수 있기 때문입니다 .

히스토리의 동작을 미세 조정할 수있는 다른 유용한 변수는 다음과 같습니다.

  • HISTIGNORE: 관심이 거의없는 특정 명령을 무시할 수 있습니다. 예를 들어 다음을 설정할 수 있습니다.

    export HISTIGNORE="pwd:df:du"

    이로 인해 pwd,로 시작 df하거나 모든 명령 du이 무시되어 기록에 저장되지 않습니다.

  • HISTCONTROL:이 기능을 사용하면 기록이 작동하는 방식을 선택할 수 있습니다. 개인적으로 HISTCONTROL=ignoredups중복 명령을 한 번만 저장 하도록 설정했습니다 . 다른 옵션은 ignorespace공백으로 시작하는 명령을 무시 erasedups하는 것입니다. 그러면 해당 행을 저장하기 전에 현재 행과 일치하는 모든 이전 행이 기록 목록에서 제거됩니다. ignorebothignorespace 및 ignoreups의 줄임말입니다.

  • HISTTIMEFORMAT: 이력 파일의 시간 형식을 설정할 수 있습니다. 자세한 내용은 Pandya의 답변 man bash을 참조하십시오.


추가 미세 조정을 위해 다음이 있습니다.

  • histappendbash는 옵션. 이 shopt -s histappend명령을 실행 하거나에 추가하여 설정할 수 있습니다 ~/.bashrc. 이 옵션이 설정된 경우

    히스토리 목록은 파일을 겹쳐 쓰지 않고 쉘이 종료 될 때 HISTFILE 변수의 값으로 이름이 지정된 파일에 추가됩니다.

    이것은 다른 세션의 히스토리를 결합 할 수 있기 때문에 매우 유용합니다 (예 : 다른 터미널을 생각하십시오).

  • history명령에는 두 가지 유용한 옵션이 있습니다.

    • history -a : 마지막 명령이 내역 파일에 자동으로 기록됩니다

    • history -r : 내역 파일을 현재 세션으로 가져옵니다.

    예를 들어, 다음 두 명령을 사용자에 추가 할 수 있습니다 PROMPT_COMMAND(쉘에 프롬프트가 표시 될 때마다 실행되므로 새 쉘을 시작할 때마다 그리고 명령이 실행될 때마다 실행 됨).

    export PROMPT_COMMAND='history -a;history -r;'

    이들을 결합하면 열려있는 새 터미널이 다른 쉘 세션의 히스토리를 즉시 가져 오게됩니다. 결과는 모든 터미널 / 쉘 세션에서 공통된 히스토리입니다.


2

히스토리 파일의 기본 크기는 500 행입니다. .bash_history 파일이 500 줄에 도달하면 FIFO 에서처럼 새로운 항목을위한 공간을 만들기 위해 초기 항목이 제거됩니다. HISTFILESIZE기본적으로 값이 500 인 변수의 값을 변경하여이를 변경할 수 있습니다 .

HISTFILESIZE=10000.bashrc에 a 를 넣으면 히스토리 파일이 10000까지 보유 할 수있는 행 수가 증가하여 컨텐츠의 수명이 늘어납니다.


2
참고 : HISTSIZE의 한계를 높이면 변경 HISTFILE도 고려하십시오 . 실행 bash --norc HISTSIZE하면 기본값으로 돌아가고 종료시 잘 HISTFILE립니다.
llua

감사합니다, @llua. 마찬가지로 시스템의 /etc/bash.bashrc설정 HISTFILESIZE(또는 어쩌면 HISTSIZE; 어느 것을 확인하지 않은 경우)을 확인하면 Bash는 .bash_history읽은 시점 /etc/bash.bashrc(또는 적어도 새로운 제한이 자신의 Bash 초기화 파일에 설정되기 전에 어느 시점에서)에서 잘리는 것처럼 보입니다 . 이를 피하려면 다시 Bash가 잘라내 HISTFILE.bash_history파일이 아닌 실제 히스토리가 저장되도록 직접 설정하십시오 .
Chris Povirk

(그러나 그렇게하지 마십시오. export자식 쉘에서 보이게 할 수 있기 때문에 대신 잘릴 수 있습니다 .bash_history!)
Chris Povirk

0

읽기 man bash에 대한 덮여 자세한 내용은 bash는 역사 와 같은 :

히스 트롤
       히스토리 목록에서 명령이 저장되는 방법을 제어하는 ​​콜론으로 구분 된 값 목록.
       값 목록에 ignorespace가 포함 된 경우 공백 문자로 시작하는 행은
       기록 목록에 저장되지 않았습니다. ignoreups 값은 이전과 일치하는 행을 유발합니다
       기록 항목이 저장되지 않습니다. ignoreboth의 값은 ignorespace 및
       무시 erasedups 값은 현재 행과 일치하는 모든 이전 행을
       해당 행이 저장되기 전에 기록 목록에서 제거됩니다. 위의 값이 아닌 모든 값
       리스트는 무시됩니다. HISTCONTROL이 설정되어 있지 않거나 유효한 값을 포함하지 않으면 모든 행
       쉘 파서가 읽은 값은 히스토리 값에 따라 히스토리 목록에 저장됩니다.
       아뇨 여러 줄로 된 복합 명령의 두 번째 및 그 이후 줄은 테스트되지 않습니다.
       HISTCONTROL의 값에 관계없이 히스토리에 추가됩니다.
역사
       명령 기록이 저장되는 파일의 이름입니다 (아래 기록 참조). 기본
       값은 ~ / .bash_history입니다. 설정하지 않으면, 쉘이 종료 될 때 명령 히스토리가 저장되지 않습니다.
히스토리 크기
       히스토리 파일에 포함 된 최대 행 수입니다. 이 변수가 할당 된 경우
       필요한 경우, 히스토리 파일은 필요한 경우 해당 숫자 이하를 포함하도록 잘립니다.
       가장 오래된 항목을 제거하여 줄 수 히스토리 파일도이 크기로 잘립니다.
       쉘이 종료 될 때 쓴 후. 값이 0 인 경우 히스토리 파일은
       제로 사이즈. 숫자가 아닌 값과 0보다 작은 숫자 값은 잘림을 금지합니다. 그만큼
       shell은 시작 파일을 읽은 후 기본값을 HISTSIZE 값으로 설정합니다.
히스 티그 노어
       저장할 명령 줄을 결정하는 데 사용되는 콜론으로 구분 된 패턴 목록
       역사 목록. 각 패턴은 줄의 시작 부분에 고정되며 일치해야합니다
       완전한 행 (암시적인`* '는 추가되지 않습니다). 각 패턴은 라인에 대해 테스트됩니다
       HISTCONTROL에 의해 지정된 점검이 적용된 후. 일반 쉘 외에
       패턴 일치 문자,`& '는 이전 히스토리 라인과 일치합니다. `& '는 벗어날 수있다
       백 슬래시 사용; 일치를 시도하기 전에 백 슬래시가 제거됩니다. 두 번째와
       여러 줄로 된 복합 명령의 후속 줄은 테스트되지 않으며
       HISTIGNORE의 가치에 관계없이 역사.
역사
       명령 기록에서 기억해야 할 명령의 수입니다 (아래 기록 참조). 만약
       값이 0이면 명령이 기록 목록에 저장되지 않습니다. 0보다 작은 숫자 값
       모든 명령이 기록 목록에 저장됩니다 (제한 없음). 껍질
       시작 파일을 읽은 후 기본값을 500으로 설정합니다.
HISTTIMEFORMAT
       이 변수가 설정되고 널이 아닌 경우 해당 값은 strftime (3)의 형식 문자열로 사용됩니다.
       이력에 의해 표시된 각 이력 항목과 관련된 타임 스탬프를 인쇄
       내장. 이 변수를 설정하면 타임 스탬프가 기록 파일에 기록되므로
       쉘 세션에서 유지됩니다. 히스토리 주석 문자를 사용하여 구분합니다.
       다른 히스토리 라인에서 타임 스탬프를 제거하십시오.

특히 HISTFILESIZEHISTSIZE이 찾고있는 사람이 당신을하는 데 도움이된다 할 수있다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.