상세 컨텐츠

본문 제목

여러 terminal 의 shell history 모두 저장하기

IT : Ubuntu

by 휀스 2015. 3. 19. 15:50

본문

일반적으로 사용하는 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 모두 저장하기에 대한 글 이였습니다.

관련글 더보기