일반적으로 사용하는 Ubuntu 의 bash 의 기본 세팅은 모든 terminal 의 history를 저장하지 못하도록 되어 있습니다.
여러 창의 띄워놓고 작업을 해야 하는 경우 history가 저장되지 않아 system 에 어떤 순서로 명령어가 실행되어 작업 되었는지 알 수없어 낭패를 보게 되는 일이 종종 있었습니다.
이런 문제를 해결하기 위해서는 bash 파일의 기본 설정이 들어있는 문서인 bashrc 파일을 수정하면 됩니다.
위치 : ~/.bashrc
수정내용
export HISTCONTROL=ignoredups:erasedups
shopt -s histappend
export PROMPT_COMMAND="${PROMPT_COMMAND:+$PROMPT_COMMAND$'\n'}history -a; history -c; history -r"
이 파일의 내용은 첫 라인은 명령어가 중복저장되는 것을 막고, 두번째 라인은 history를 추가하는 옵션, 마지막 라인은 history를 저장하고 다시 load 하는 옵션입니다.
이 파일의 내용에 아래 첨부된 내용을 추가하고 다시 아래 명령을 실행하면 이후 생성되는 모든 terminal 창에서 실행하는 명령어들이 history file 안에 저장되게 됩니다.
$source ~/.bashrc
위 명령어를 실행하지 않는다면 터미널을 껐다가 다시 켜도 동일한 효과를 얻을 수 있습니다.
만약 ~/.bashrc 파일안에 동일한 명령이 있다면 해당 명령어 대신 위 명령을 넣으면 됩니다. 보통은 history를 저장하고 있으므로 shopt -s histappend 명령은 들어있고 HISTCONTROL 부분은 새로운 내용으로 대체해 주면 됩니다.
이렇게 수정을 하고 난 후 ~/.bash_history 파일의 내용을 보면
수정 전.
ls
ll
cd ..
ls
cd log
ls
수정 후
#1426493230
cd ../../
#1426493236
cd core/
#1426493238
vi Makefile
#1426493697
grep -rn OUT_DIR *
의 형태로 변경 된 것을 확인 할 수 있습니다.
history 명령에 대한 결과는
1944 ls
1945 ll
1946 cd ..
1947 ls
1948 cd log
1949 ls
1950 ll
형식으로 저장 되던 것이 아래와 같이 실행시간까지 저장되는 것을 확인 할 수 있습니다.
9984 16/03/15 17:07:18 vi Makefile
9985 16/03/15 17:14:57 grep -rn OUT_DIR *
9986 16/03/15 17:18:36 vi Makefile
9987 19/03/15 15:42:55 cat .bash_history
9988 19/03/15 15:46:45 cd
9989 19/03/15 15:46:48 history
시간을 확인할 수 있기 때문에 여러개의 terminal 에서 어떤 명령으로 어떻게 system 에 영향을 미쳤는지 파악이 가능합니다.
이상 여러 terminal 의 shell history 모두 저장하기에 대한 글 이였습니다.
Shell script 실행시 script 내부에서 python return 값 받기 (0) | 2015.03.23 |
---|---|
samba folder 공유를 위해 /etc/fstab 수정 후 바로 mount 하는 방법 (0) | 2015.03.20 |
크롬 메모리 사용량 줄이기 (Chrome memory 줄이기) (0) | 2015.02.10 |
fastboot devices 나 adb devices 에서 no permission error 발생할 때 처리방법 (0) | 2015.01.16 |
shell command 에서 string 검사하기 string search (0) | 2015.01.09 |