답변:
Bash는 명령이 실행되는 동안 내부적으로 명령 목록을 메모리에 유지합니다. 그들은 .bash_history
출구에 기록됩니다 :
대화식 쉘이 종료되면 마지막 $ HISTSIZE 행이 히스토리 목록에서 $ HISTFILE로 이름이 지정된 파일로 복사됩니다.
명령 기록을 강제로 작성하려면 다음 history -a
명령을 사용할 수 있습니다 .
새 히스토리 라인 (현재 Bash 세션 시작 이후 입력 된 히스토리 라인)을 히스토리 파일에 추가하십시오.
-w
옵션 도 있습니다 :
현재 히스토리를 히스토리 파일에 기록하십시오.
이력을 정확히 어떻게 사용하는지에 따라 더 적합 할 수 있습니다.
항상 즉시 작성되도록하려면 해당 명령을 PROMPT_COMMAND
변수에 넣을 수 있습니다 .
export PROMPT_COMMAND='history -a'
(답변은 아니지만 의견을 추가 할 수 없습니다)
당신이 확인하는 경우 .bash_history
당신은 단지 특정 명령을 삭제 원하기 때문에 (예를 들어 투명에 암호를 포함), 직접하여 메모리에서 항목을 삭제할 수 있습니다 history -d <entry_id>
.
예를 들어 다음과 같은 출력을 가정하십시오.
$ history
926 ll
927 cd ..
928 export --password=super_secret
929 ll
그리고 당신은 export
라인을 제거하기를 원한다면 , 당신은 단순히 다음을 통해 그것을 달성 할 수 있습니다 :
history -d 928
세션이 활성화되어있는 동안 명령은 메모리 (RAM)에 저장됩니다. 쉘을 닫 자마자 .bash_history
종료 하기 전에 명령 목록이 작성됩니다 .
따라서에 현재 세션의 기록이 표시되지 않습니다 .bash_history
.
bash
종료시 업데이트 되므로 재부팅하지 않습니다 (특히 원하는대로 터미널을 열고 닫을 수있는 그래픽 환경에서).
다음과 같은 경우 기록은 메모리 (기본적으로)에만 유지됩니다.
H
in echo "$-"
)가 설정됩니다.0
및*
(또는 다른 매우 제한적인 패턴) 는 아닙니다 .위의 방법 중 하나라도 실패하면 메모리에 기록이 저장되지 않으므로 기록이 디스크에 기록되거나 기록되지 않습니다.
다음과 같은 경우 메모리의 기록이 디스크에 기록됩니다.
그러나 쉘이 종료되거나 명령 history -a
(추가) 또는 history -w
(쓰기)가 실행될 때만 가능합니다 .
디스크에 즉시 쓰기를 트리거하려면 변수를 사용할 수 있습니다.
PROMPT_COMMAND='history -a'
하는 것입니다 기록 파일에 기록 라인. 이것들은 현재 bash 세션이 시작된 이후에 입력되었지만 아직 기록 파일에 추가되지 않은 기록 라인입니다.append
new
또는:
PROMPT_COMMAND='history -w'
하려면 덮어 메모리에서 목록과 HISTFILE에서 역사를.
따라서 메모리의 기록에서 명령을 제거 할 수 있습니다.
$ history 5
6359 ls
6360 cd ..
6361 comand --private-password='^%^&$@#)!@*'
6362 top
6363 set +o | less
$ history -d 6361
$ history 5
6359 ls
6360 cd ..
6361 top
6362 set +o | less
$ history -w
그리고 마지막 명령으로 디스크에 씁니다.
history -w # with `shopt -u histappend` unset
.bash_history
실수로 파일이 루트에 의해 소유되면 작업이 중지됩니다. 이 경우 소유권을 확인하고sudo
필요한 경우 소유권을 수정하는 데 사용하십시오.