일단 일반적인 명령 히스토리에 표시되는 내용은 다음과 같다는 점을 염두에 두자. 명령 시퀀스 번호 다음에 명령이 표시되고, 그 뒤에 인수가 따라온다.
91 sudo apt-get install ccrypt
^
+-- command
HISTSIZE 설정을 따르는 히스토리 명령은 보존되는 명령의 수를 결정한다. 500개나 1,000개 또는 이보다 많을 수 있다. 현재 보존되는 명령의 수가 마음에 들지 않는다면 .bashrc 또는 다른 시작 파일에서 HISTSIZE 설정을 추가하거나 바꾸면 된다.
$ echo $HISTSIZE
1000
$ history | wc -l
1000
$ grep HISTSIZE ~/.bashrc
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
HISTSIZE=1000
많은 수의 명령을 저장할 때 가장 큰 이점 가운데 하나는 명령을 일일이 기억하거나 다시 입력할 필요 없이 예전에 사용했던 명령을 손쉽게 다시 실행할 수 있다는 것이다. 또한 현재 진행 중인 작업에서 거쳐온 과정을 간편하게 되돌아보는 데도 유용하다. history 명령만 단독으로 사용하면 다음과 같은 내용이 표시된다. 가장 오래된 명령이 가장 위에 나온다.
$ history
7 vi tasks
8 alias
9 echo $HISTTIMEFORMAT
10 history
11 date
…
가장 최근 명령을 보려면 기록된 명령의 맨 아래로 가야 한다.
$ history | tail -4
1007 echo $HISTSIZE
1008 history | wc -l
1009 history
1010 history | tail -4
tail 명령을 사용해 .bash_history 파일의 맨 아래를 보는 방법도 있지만 history 명령이 전반적으로 더 유용하고, 번호가 함께 표시되므로 예를 들어 !1010을 입력해 편리하게 명령을 다시 실행할 수도 있다.
사용한 명령(예를 들어 vi 및 echo)의 요약을 준비하려면 먼저 awk를 사용해 히스토리에 저장된 나머지 각 명령에서 이 정보를 분리해야 한다.
$ history | awk '{print $2}'
vi
alias
echo
history
date
…
히스토리의 명령 목록을 sort 명령으로 전달해 알파벳 순서로 명령을 묶는다면 결과는 다음과 같다.
$ history | awk '{print $2}' | sort
7z
7z
alias
apropos
cd
cd
…
그 다음 sort 명령의 출력을 uniq-c로 전달하면 각 명령이 사용된 횟수가 계산된다.
$ history | awk '{print $2}' | sort | uniq -c
2 7z
1 alias
2 apropos
38 cd
21 chmod
…
마지막으로 두 번째 sort 명령을 추가해 명령 그룹 수를 역순으로 정렬하면 가장 많이 사용된 명령이 가장 먼저 표시된다.
$ history | awk '{print $2}' | sort | uniq -c | sort -nr
178 ls
95 vi
63 cd
53 sudo
41 more
…
이렇게 하면 자신이 가장 많이 사용하는 명령이 무엇인지 알 수 있지만, 다음과 같은 설정을 통해 히스토리 파일에 넣지 않도록 의도적으로 생략한 명령은 여기에 포함되지 않는다.
HISTIGNORE="pwd:clear:man:history"
기록이 변경되는 경우
기본 히스토리 형식의 경우 history 명령 출력의 첫 번째 필드는 각 명령의 시퀀스 번호이며, 두 번째 필드는 사용된 명령이다. 이런 이유로 앞서 나온 모든 awk 명령은 $2를 표시하도록 설정됐다.$ alias cmds='history | awk '\''{print $2}'\'' | sort | uniq -c | sort -nr'
명령 히스토리에 날짜와 시간을 추가하는 다음과 같은 설정을 통해 히스토리 항목의 형식을 변경한 경우 설정하는 별칭도 수정해야 한다.
$ echo $HISTTIMEFORMAT
%d/%m/%y %T
이 날짜/시간 정보는 상당히 유용할 수도 있지만 히스토리 항목이 다음과 같이 표시되므로 명령 히스토리의 두 번째가 아닌 네 번째 필드를 사용해 명령 사용을 요약해야 한다.
91 05/07/20 16:37:39 sudo apt-get install ccrypt
^
+-- command
따라서 $2를 $4로 변경한 후 명령 기록을 검토하기 위한 별칭은 다음과 같다.
$ alias cmds='history | awk '\''{print $4}'\'' | sort | uniq -c | sort -nr'
.bashrc 또는 다른 시작 파일에 두 별칭을 저장하려면 $ 기호 앞에 백슬래시를 넣어 배시가 $4의 해석을 시도하지 않도록 해야 한다.
alias cmds='history | awk '\''{print \$2}'\'' | uniq -c | sort -nr'
alias cmds='history | awk '\''{print \$4}'\'' | uniq -c | sort -nr'
히스토리 파일에서 날짜와 시간 정보는 명령 자체와 다른 라인에 저장된다. 따라서 이 정보가 추가되는 경우 배시 히스토리 파일의 라인 수는 2배가 된다(히스토리 명령 출력은 그렇지 않다).
$ wc -l .bash_history
2000 .bash_history
$ history | wc -l
1000
명령 히스토리를 얼만큼 보존할지, 어떤 명령을 기록할지를 직접 정해서 명령 요약을 더 유용하게 활용할 수 있다. editor@itworld.co.kr