새 시스템을 설정할 때 이전 시스템의 bash 기록 파일을 사용하시겠습니까?

새 시스템을 설정할 때 이전 시스템의 bash 기록 파일을 사용하시겠습니까?

나는 내 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"

또한 정기적으로 기록 파일을 백업하고 몇 가지 스크립트와 별칭을 사용하여 기록을 검색합니다. 심지어 수년 전의 기록도 마찬가지입니다. 가끔 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나중에 재설정할 수 있습니까? 쉘이 마지막에 변수를 확인하는지 또는 초기 값을 사용하는지에 따라 다름) 쉘이 종료될 때 추가되지 않습니다.

관련 정보