개발자 / 오픈소스

How To : 리눅스에서 명령 사용 요약하기

Sandra Henry-Stocker | Network World 2020.07.21
리눅스 시스템에서 사용하는 명령을 요약해 보기 위해서는 얼마간의 명령과 함께 각 명령을 연결하는 몇 가지 파이프만 있으면 된다. 히스토리 버퍼에 최근 1,000개 또는 2,000개의 명령어를 보존한다면 명령 요약 작업이 지루해질 수도 있다. 이번 기사에서는 명령 사용을 요약하고 가장 자주 사용된 명령을 일목요연하게 볼 수 있는 편리한 방법을 제공한다.
 
ⓒ Getty Images Bank

일단 일반적인 명령 히스토리에 표시되는 내용은 다음과 같다는 점을 염두에 두자. 명령 시퀀스 번호 다음에 명령이 표시되고, 그 뒤에 인수가 따라온다.

   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을 입력해 편리하게 명령을 다시 실행할 수도 있다.

사용한 명령(예를 들어 viecho)의 요약을 준비하려면 먼저 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 
 Tags 리눅스 명령

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.