답변:
여러 개의 bash 인스턴스를 동시에 닫을 때 기록이 지워질 수있는 알려진 경쟁 조건이 있습니다. 이것은 bash 실행 기록 파일이 기록 될 때 사용 된 잠금이 없기 때문에 발생합니다.
Chet Ramey (현재 배쉬 관리자)는 이 문제의 조건을 잘 요약 했습니다.
현재 (bash-4.3-devel) 코드는 오류가 없다고 가정하면 (lib / readline / histfile.c : history_do_write ()) 다음과 같이 작동합니다.
- 이름 바꾸기 (Histfile, histfile ~)
- O_CREAT | O_TRUNC로 파일 열기
- 모든 히스토리 데이터를 보유 할만큼 큰 malloc 버퍼
- 한 번의 write (2) 호출로 모든 히스토리 항목 쓰기
- 파일 닫기
- 연결 해제 (히스 파일 ~)
bash-4.2 코드는 히스토리 파일을 백업하지 않는다는 점을 제외하고 동일한 방식으로 작동합니다. 구성에서와 같이 histappend가 설정되지 않았다고 가정 할 때 각 쉘은 종료 될 때 동일한 작업을 수행합니다.
히스토리 파일이 길이가 0이되는 몇 가지 방법이 있습니다. malloc이 실패하거나 쓰기가 실패 할 수 있습니다. bash-4.2에서는 그 시점에서 잘린 기록 파일에 대한 작업을 수행하기에 너무 늦었습니다. bash-4.3에서는 이전 기록 파일이 복원됩니다.
bug-bash 의이 메일 링리스트 스레드 에는 문제점, 가능한 해결책 및이를 둘러싼 우려 사항에 대한 적절한 설명이 포함되어 있습니다.
다른 가능성도 있습니다 :
HISTSIZE
또는 HISTFILESIZE
은 0으로 설정되었습니다.history-size
은 0으로 설정되었습니다> "$HISTFILE"
또는 이와 유사한 것)후자의 경우 다른 사람이 귀하의 계정에 액세스하지 않았고 자신의 트랙을 원치 않는 방식으로 숨기려고하는지 확인하고 싶을 수 있습니다. 한 번 봐 가지고 last
, /var/log/auth
(또는 /var/log/secure
CentOS는 / RHEL에)을, 당신이 그것을있는 경우, 모든 프로세스는 회계 및 / 또는 감사 소프트웨어는 당신이 설치되어 있습니다.
실수로 bash 기록을 삭제 한 방법 :
나는 첫 번째 원칙에서 내 자신의 대체 터미널 readline 스크립트를 굴려왔다 : https://tiswww.cwru.edu/php/chet/readline/rluserman.html
그런 다음 터미널에서 테스트합니다. GNU Readline에는 히스토리 크기 및 히스토리 보존 명령이 내장되어 있으므로 hist 크기를 기본값으로 지정할 수 있으므로 모든 히스토리가 사라집니다.
메모리에 남은 경우 히스토리 복구 :
다시 부팅하기 전에 또는 터미널을 열어 놓기 전에 열어 놓은 경우 메모리에서 기록을 찾을 수 있습니다. history | cut -c 8- > histback_user1.txt
열려있는 모든 터미널과 모든 사용자에 대해 실행하십시오 . 그 확장 된 역사를 가진 파일을 생성하는 경우, 당신은 대체 할 수 있습니다 ~/.bash_history
로 histback_user1.txt
. 또한 최근에 시스템에 로그인 한 모든 사용자의 이력과 루트 이력을 확인하십시오. 여러 상황에서 실수로 bash 기록을 지우는 것은 쉽습니다. 따라서 기록 손실을 방지하려면 매일 백업 스크립트가 필요합니다.
>.bash_history
. 어쩌면 누군가 귀하의 계정에 있고 그의 흔적을 숨기려고 시도했을 수 있습니다. 를last
통해 검색/var/log/auth.log
하여 시스템에 따라 비정상적인 로그인 시간을 확인하십시오 (시스템에 따라 다름).