나는 내 bash 기록을 좋아합니다. 때로는 매우 긴 명령을 내릴 때도 있고, 명령을 빠르게 재개하기 위해 bash 기록에 의존합니다. 다음과 같이 기록 크기를 늘렸습니다.
HISTSIZE=100000
HISTFILESIZE=200000
내 .bashrc에
나에게도 다음과 같은 별칭이 있습니다.
alias h='history | tail'
alias hg='history | grep'
이를 통해 다음을 수행할 수 있습니다 h
.hg some_text
진짜편리한
내 질문은: 이 기록 파일을 새 컴퓨터로 이동할 수 있습니까? 예를 들어, 최근에 내 컴퓨터가 충돌하여 다시 구축해야 했습니다. 다른 .history 파일을 넣는 데 문제가 있습니까(기존 파일을 대체할 수도 있음)? 이를 교체해야 합니까, 아니면 실제로 문제 없이 두 개의 기록 파일을 함께 추가할 수 있습니까?
답변1
예. 이전 기록 파일을 새 설치에 복사할 수 있습니다. 이전/새 항목과 병합할 수도 있습니다.
- 기록 파일이 설정되지 않은 경우
HISTTIMEFORMAT
명령만 저장됩니다. 설정된 경우 각 명령에는 해시 앞에 타임스탬프가 있습니다.
#1122334455 command1 #1122334459 command2
그러나 예를 들어 발행하는 경우 다음 사항에 유의하십시오.
$ echo 'foo
> bar
> baz' >> some_file
다음과 같이 저장됩니다:
#1122334459
echo 'foo
bar
baz' >> some_file
하지만 history
다음과 같이 표시됩니다.
4 CMD_TIME echo 'foo
5 CUR_TIME bar
6 CUR_TIME baz' >> some_file
명령은 다음과 같습니다.
$ foo | \
bar | \
baz
설정하면 하나로 유지됩니다 shopt -s cmdhist
.
나는 다음과 같이 다양하지만 자주 사용되는 것을 사용합니다.
HISTSIZE=500000
HISTFILESIZE=500000
# Ignore dupes and space commands
HISTCONTROL=ignoreboth
# Save and show timestamps
HISTTIMEFORMAT='%F %T '
# append to the history file, don't overwrite it
shopt -s histappend
# Save and reload the history after each command finishes
# This one I have a function to turn on/off. Effect is that commands are
# accessible in all terminals after execution.
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"
- 더존재하다
shopt
. ($ shopt
현재 설정을 표시하는 데 사용됩니다.) - 더존재하다
history
.
또한 정기적으로 기록 파일을 백업하고 몇 가지 스크립트와 별칭을 사용하여 기록을 검색합니다. 심지어 수년 전의 기록도 마찬가지입니다. 가끔 1년 반 전에 지금 하고 있는 일과 비슷한 일을 했던 기억이 나서 빠르게 그 이력을 찾아볼 수 있다.
타임스탬프의 경우 두 가지 변형을 사용합니다. 일시적으로 "" 로 설정하여 history
타임스탬프가 있는 콘텐츠를 표시하고 타임스탬프가 없는 다른 디스플레이를 표시합니다 .HISTTIMEFORMAT
타임스탬프가 누락된 경우 현재 시간(대략)이 사용됩니다. 타임스탬프가 있으면 기록이 시간별로 정렬됩니다.
그러므로:
.bash_history
(단순화된 타임스탬프)
#timestamp 000012
some command
#timestamp 000002
some other command
$ history
1 13 aug 2013 10:44 some other command
2 13 aug 2013 12:13 some command
그러나 정렬된 기록 파일이 더 효율적이라고 믿을 만한 이유가 있습니다(bash는 섞을 필요가 없습니다).
조회는 Ctrl-R종종 유용합니다. 다른 내용은 다음을 참조하세요.기록을 조작하는 명령,이벤트 표시기,몇 가지 기타 명령등.
답변2
제 생각에는문제없이 파일을 이동할 수도 있고, 추가할 수도 있습니다.
추가 사항:
cd ~
mv .bash_history .bash_history_new
cp /mnt/oldfs/home/olduser/.bash_history ~/
cat .bash_history_new >> .bash_history
문제가 발생하면 다음을 취소할 수 있습니다.
mv .bash_history_new .bash_history
답변3
My는 .bash_history
대개 심볼릭 링크입니다 /dev/null
(즉, 내 기록은 디스크에 저장되지 않습니다). 따라서 쉘을 시작하면 액세스할 기록이 없습니다. 하지만, 기록은 누적됩니다. 즉, bash는 기록 파일이 아닌 메모리에서 이 작업을 수행합니다. 실제로 man bash
(아래)역사):
시작 시 기록은 HISTFILE 변수(기본값 ~/.bash_history)로 명명된 파일에서 초기화됩니다. [...] 기록 파일을 읽을 때 기록 주석 문자로 시작하고 뒤에 숫자가 오는 줄은 이전 기록 줄의 타임스탬프로 해석됩니다. 이러한 타임스탬프는 HISTTIMEFORMAT 변수의 값에 따라 선택적으로 표시될 수 있습니다. 대화형 셸이 종료되면 마지막 $HISTSIZE 줄이 기록 목록에서 $HISTFILE로 복사됩니다.
타임스탬프에 관한 부분은 보시면 히스토리 파일의 형식(일반 텍스트 목록입니다)을 설명하는 데 도움이 되기 때문에 남겨두었습니다. 여기서 중요한 점은 기록 파일이 셸이 처음 시작될 때만 사용된 다음 종료할 때 다시 사용된다는 것입니다(가장 최근 기록을 추가하기 위해).
형식은 타임스탬프가 산재된 명령 목록일 뿐이고 파일에 아무 것도 포함되어 있지 않더라도(예: /dev/null 링크) bash는 잘 작동하므로 파일을 가져오는 데 따른 부정적인 결과는 상상할 수 없습니다. 타임스탬프를 생략하고 콘텐츠를 수동으로 추가할 수도 있습니다. 적어도 시도해 볼 수는 있습니다. 셸에 문제가 있으면 종료하고 이전 기록을 복원하세요.
$HISTFILE
원하는 경우 셸을 시작하기 전에 파일을 교환하거나 내보내어 다양한 목적으로 여러 기록을 사용할 수도 있습니다 . 읽기 전용으로 설정된 경우(또는 $HISTFILE
나중에 재설정할 수 있습니까? 쉘이 마지막에 변수를 확인하는지 또는 초기 값을 사용하는지에 따라 다름) 쉘이 종료될 때 추가되지 않습니다.