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

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

내 파일의 내용을 어떻게 수정하나요 bash_history? 기록이 지속되는 기간을 제어하는 ​​값이나 변수는 무엇입니까? 내 BASH 기록을 더 효과적으로 제어하기 위해 변경할 수 있는 다른 항목이 있나요?

답변1

기록 크기를 제어하는 ​​두 가지 변수가 있습니다.

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

그리고

HISTSIZE 명령 기록에 기억할 명령 수입니다(아래 "기록" 참조). 값이 0이면 명령이 기록 목록에 저장되지 않습니다. 0보다 작은 값을 사용하면 각 명령이 기록 목록에 제한 없이 저장됩니다. 쉘은 시작 파일을 읽은 후 기본값을 500으로 설정합니다.

이 두 변수를 사용하면 기록의 동작을 제어할 수 있습니다. 기본적으로 HISTSIZE이는 현재 세션 동안 저장된 명령 수이자 HISTFILESIZE세션 전반에 걸쳐 기억된 명령 수입니다. 예를 들면 다음과 같습니다.

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

위 예에서는 HISTSIZE설정이 10이므로 history10개의 명령 목록이 반환됩니다. 하지만 로그아웃했다가 다시 로그인하면 설정이 5이므로 history5개의 명령만 반환됩니다 . HISTFILESIZE이는 세션을 종료하면 HISTFILESIZE기록 줄이 기록 파일에 저장되기 때문입니다( ~/.bash_history기본적으로는 HISTFILE). 즉, 해당 라인에 도달할 HISTFILE때까지 명령이 추가되며 $HISTFILESIZE, 이후 추가되는 각 라인은 파일의 첫 번째 명령이 제거된다는 의미입니다.

파일에서 ~/.profile(또는 ~/.bash_profile파일이 존재하는 경우) 이러한 변수의 값을 설정할 수 있습니다. ~/.bashrc이미 설정되어 있으므로 첫 번째 위치 에 설정하지 마세요.거기엔 장사가 없어둘째, 이로 인해 로그인 쉘과 비로그인 쉘에서 서로 다른 동작이 발생하게 되므로 이로 인해다른 문제.

기록 동작을 미세 조정할 수 있는 기타 유용한 변수는 다음과 같습니다.

  • HISTIGNORE: 이 기능을 사용하면 별로 관심이 없는 일반적으로 사용되는 특정 명령을 무시할 수 있습니다. 예를 들어 다음을 설정할 수 있습니다.

    export HISTIGNORE="pwd:df:du"
    

    pwddf이렇게 하면 , 또는로 시작하는 모든 명령이 du무시되고 기록에 저장되지 않습니다.

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

  • HISTTIMEFORMAT: 기록 파일의 시간 형식을 설정할 수 있습니다. 자세한 내용은 Pandya의 답변을 참조하거나 읽어보세요 man bash.


추가 미세 조정을 위해서는 다음이 필요합니다.

  • 배쉬 histappend옵션. shopt -s histappend이 명령을 실행하거나 이 명령을 ~/.bashrc.if 이 옵션이 설정된 경우 추가하면 됩니다.

    쉘이 종료되면 파일을 덮어쓰는 대신 HISTFILE 변수 값으로 명명된 파일에 기록 목록이 추가됩니다.

    이는 서로 다른 세션의 기록을 결합할 수 있으므로 매우 유용합니다(예: 서로 다른 터미널 고려).

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

    • history -a: 마지막 명령을 자동으로 기록 파일에 기록합니다.

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

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

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

    이를 결합하면 새로운 터미널을 열 때마다 다른 쉘 세션의 기록을 즉시 가져올 수 있습니다. 결과적으로 모든 터미널/셸 세션은 공통 기록을 갖게 됩니다.

답변2

기록 파일의 기본 크기는 500줄입니다. .bash_history 파일이 500줄에 도달하면 FIFO와 같은 새로운 줄을 위한 공간을 확보하기 위해 이전 항목이 제거됩니다. HISTFILESIZE변수 값(기본값은 500)을 변경하여 이 설정을 변경할 수 있습니다 .

.bashrc에 를 추가하면 HISTFILESIZE=10000기록 파일이 보유할 수 있는 줄 수가 10,000개로 늘어나 내용의 수명이 연장됩니다.

답변3

man bash콘텐츠에 대한 자세한 내용을 읽어보세요 .배쉬 역사좋다:

조직 통제
       명령이 기록 목록에 저장되는 방식을 제어하는 ​​콜론으로 구분된 값 목록입니다.
       값 목록에 공백 무시가 포함되어 있으면 공백 문자로 시작하는 줄은 다음과 같습니다.
       기록 목록에 저장되지 않습니다. 무시된 값은 이전 행과 일치하는 행을 생성합니다.
       기록 항목은 저장되지 않습니다. ignoreboth의 값은ignorespace의 약어이며,
       무시당하다. 삭제된 값은 현재 행과 일치하는 모든 이전 행을
       저장하기 전에 기록 목록에서 행을 제거하세요. 위 범위에 속하지 않는 모든 값
       목록은 무시됩니다. HISTControl이 설정되지 않았거나 유효한 값을 포함하지 않는 경우 모든 행은
       쉘 파서가 읽는 내용은 HISTIG 값에 따라 기록 목록에 저장됩니다.
       아니요. 여러 줄 복합 명령의 두 번째 및 후속 줄은 테스트되지 않습니다.
       HISTControl의 값과 관계없이 기록에 추가됩니다.
역사적 문서
       명령 기록이 저장되는 파일 이름입니다(아래 HISTORY 참조). 기본
       값은 ~/.bash_history입니다. 설정하지 않으면 셸 종료 시 명령 기록이 저장되지 않습니다.
기록 파일 크기
       기록 파일에 포함되는 최대 줄 수입니다. 이 변수에 값이 할당되면
       필요한 경우 이 숫자 이하를 포함하도록 기록 파일을 자르는 값입니다.
       가장 오래된 항목을 삭제하여 행 수를 줄입니다. 기록 파일도 이 크기로 잘립니다.
       쉘이 종료된 후에 작성됩니다. 값이 0이면 기록 파일이 잘립니다.
       크기가 0입니다. 숫자가 아닌 값과 0보다 작은 숫자 값은 잘림이 금지됩니다. 이것
       쉘은 시작 파일을 읽은 후 기본값을 HISTSIZE 값으로 설정합니다.
히스틴요
       저장할 명령줄을 결정하는 데 사용되는 콜론으로 구분된 패턴 목록입니다.
       역사 목록. 각 패턴은 줄의 시작 부분에 고정되어 있으며 일치해야 합니다.
       줄을 완성하세요(암시적 "*"가 추가되지 않음). 모든 패턴은 와이어 테스트를 거쳤습니다.
       HISTControl에서 지정한 검사를 적용한 후. 일반 껍질 외에도
       패턴 일치 문자, "&"는 이전 기록 행과 일치합니다. `&'는 이스케이프될 수 있습니다.
       백슬래시가 사용됩니다. 백슬래시는 일치를 시도하기 전에 제거됩니다. 두 번째와
       여러 줄로 구성된 복합 명령의 후속 줄은 테스트되지 않지만 다음에 추가됩니다.
       HISTIGNORE의 가치와 관계없이 기록입니다.
역사적 규모
       명령 기록에 기억해야 할 명령의 개수입니다(아래 "기록" 참조). 만약에
       값이 0이면 명령이 기록 목록에 저장되지 않습니다. 0보다 작은 값
       모든 명령이 기록 목록에 저장됩니다(제한 없음). 껍데기
       시작 파일을 읽은 후 기본값을 500으로 설정합니다.
과거 시간 형식
       이 변수가 설정되고 비어 있지 않은 경우 해당 값은 strftime(3)의 형식 문자열로 사용됩니다.
       기록 표시의 각 기록 항목과 관련된 타임스탬프를 인쇄합니다.
       내장. 이 변수가 설정되면 타임스탬프가 기록 파일에 기록되어
       셸 세션 전체에서 보존됩니다. 이는 역사적 주석 문자를 사용하여 구별합니다.
       다른 기록 레코드에서 타임스탬프를 가져옵니다.

특별한HISTFILESIZE그리고HISTSIZE당신을 찾고 도와주세요.

관련 정보