강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

history (명령어 히스토리및 지난 명령어 재사용)

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

history

리눅스는 각 계정별로 계정사용자가 서버에서 사용했던 명령어들을 기억하고 있다.
즉, 계정사용자가 사용해던 명령어들을 계정사용자의 홈디렉토리에 있는 .bash_history파일에 기록을 하고 있다. 이렇게 저장된 명령어들을 재사용하거나 실행했던 명령어들을 확인하기도 한다.

기본적으로 .bash_history파일에 기록되는 명령어의 갯수는 1000개이며 다음과 같이 확인해보면 된다. 

[root@host1 root]# echo $HISTSIZE
1000
[root@host1 root]#

즉, 쉘변수인 HISTSIZE파일에 기록할 명령어의 숫자를 기록해두고 있다.

그리고 다음은 root의 홈디렉토리에 명령어가 기록되는 .bash_history파일을 확인한 것이다.

[root@host1 root]# pwd
/root
[root@host1 root]#
[root@host1 root]# ls -l .bash_history
-rw-------    1 root     root         5488  9월  9 06:55 .bash_history
[root@host1 root]#

root의 홈디렉토리뿐 아니라 모든 계정의 홈디렉토리에는 .bash_history파일이 존재하며 이 파일에 해당계정사용자가 사용했던 명령어들이 각각 저장된다.


사용예 #1

자, 그럼 이렇게 기록된 명령어들을 재사용하거나 확인하는 방법의 예를 들어 보겠다.

[root@host1 root]# history
    1  ll
    2  ls -al
    3  exit
    4  sync
    5  sync
    6  sycn
    7  sync
    8  ll
    9  halt
   10  df
   11  vi chbad.sh

위의 예와 같이 그냥 아무런 옵션없이 history라고만 하면 그동안 사용했던 명령어들이 화면에 표시 된다. 이렇게 표시되면 너무 많아서 한꺼번에 확인하기가 어렵다.

 

사용예 #2

이번에는 원하는 명령어의 최근 갯수만을 확인하는 방법을 알아보자.

[root@host1 root]# history 5
  461  set HISTSIZE=2000
  462  env
  463  echo $HISTSIZE
  464  history
  465  history 5
[root@host1 root]#

위의 예에서 보는 바와 같이 "history n"이라고 하면 n갯수만큼 최근에 사용했던 명령어들을 보여준다.

 

사용예 #3

이번에는 기록된 모든 명령어중에서 원하는 명령어들만을 확인하는 방법에 대해서 알아보자.

[root@host1 root]# history | grep vi
   11  vi chbad.sh
   17  vi chbad.
   18  vi chbad.log
   33  vi network
   53  vi ifcfg-eth0
   57  vi ifcfg-eth0
   71  vi /etc/hosts
   72  vi /etc/hosts.allow
   73  vi /usr/share/config/kdm/kdmrc
   80  vi gdm.conf
   81  vi /etc/X11/xdm-config

위의 예를 보면 vi를 사용했던 명령어들만을 볼 수 있도록 표시한 것이다. 만약 telnet을 사용했던 기록을 확인하고자 한다면 "history | grep telnet"이라고 하면 된다.

사용예 #4

자, 그럼 이번에는 이렇게 기록된 명령어들을 특정 파일로 출력하는 예를 보자.

[root@host1 root]# history -w commmandlist.txt
[root@host1 root]#
[root@host1 root]# ls -l commmandlist.txt
-rw-------    1 root     root         6205  9월  9 18:07 commmandlist.txt
[root@host1 root]#
[root@host1 root]# cat commmandlist.txt | more
ll
ls -al
exit
sync
sync
sycn
....

 w라는 옵션을 사용하면 지정된 파일에 history의 결과를 모두 저장해준다. 따라서 위의 예에서는 history의 결과가 commandlist.txt라는 파일에 저장이 된 것이다. 그리고 commandlist.txt라는 파일의 내용을 잠깐 확인해 본 것이다.

 

사용예 #5

바로 앞에서 사용해던 명령어를 그대로 실행하는 방법은 다음과 같이 하면 된다.

[root@host1 root]# ls -l
합계 44
-rw-r--r--    1 root     root         1452  1월  1  1998 anaconda-ks.cfg
-rw-r--r--    1 root     root           20  1월  1  1998 chbad.log
-rwx------    1 root     root           92  1월  1  1998 chbad.sh
-rw-------    1 root     root         6205  9월  9 18:07 commmandlist.txt
-rw-r--r--    1 root     root        18718  1월  1  1998 install.log
-rw-r--r--    1 root     root          658  1월  1  1998 install.log.syslog
[root@host1 root]#
[root@host1 root]# !!
ls -l
합계 44
-rw-r--r--    1 root     root         1452  1월  1  1998 anaconda-ks.cfg
-rw-r--r--    1 root     root           20  1월  1  1998 chbad.log
-rwx------    1 root     root           92  1월  1  1998 chbad.sh
-rw-------    1 root     root         6205  9월  9 18:07 commmandlist.txt
-rw-r--r--    1 root     root        18718  1월  1  1998 install.log
-rw-r--r--    1 root     root          658  1월  1  1998 install.log.syslog
[root@host1 root]#

즉, 위에서 "ls -l"을 사용한 후에 곧 바로 "!!"을 하면 바로 앞에서 사용해던 명령어인 "ls -l"이 실행한다.

 

사용예 #6

또한, 쉘프롬프트에서 윗쪽화살표키를 한번 누르면 가장 마지막에 사용했던 명령어부터 차례대로 프롬프트에 표시가 된다. 이렇게 원하는 명령어가 표시되었을 경우에 엔터를 입력하여 실행하면 된다. 반대로 아래쪽 화살표키를 입력하면 현재 위치의 명령어의 다음 명령어가 차례대로 표시되며 원하는 명령어가 나타나면 역시 엔터키를 입력하여 실행하면 된다.

 

사용예 #7

다음은 명령어의 번호를 직접 입력하여 재실행하는 방법에 대해서 알아보자.

[root@host1 root]# history
    1  cd
    2  ls -al
    3  exit
    4  sync
    5  sync
    6  sycn
    7  ls -l commmandlist.txt 
    8  ls -l .bash_history
    9  pwd
  10  ls -l .bash_history
[root@host1 root]# !7
ls -l commmandlist.txt
-rw-------    1 root     root         6205  9월  9 18:07 commmandlist.txt
[root@host1 root]#

위의 예와 같이 history라고만 하면 현재까지 사용했던 명령어리스트를 명령어 번호와 함께 표시한다.  이때 재사용하고자하는 명령어가 있다면 "!명령어번호"를 입력하여 재사용하면 된다. 즉, 위에서 "!7"이라고 하면 7번명령어인 "ls -l commmandlist.txt "가 재실행 된 것을 볼 수 있다.

 

사용예 #8

이번에는 최근에 사용했던 명령어중에 지정한 문자와 가장 유사한 최근 명령어를 재실행하는 예를 보자.

[root@host1 root]# history
    1  cd
    2  ls -al
    3  exit
    4  sync
    5  netstat -nr
    6  sycn
    7  ls -l commmandlist.txt 
    8  ls -l .bash_history
    9  pwd
  10  ls -l .bash_history
[root@host1 root]# !net
netstat -nr
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
127.0.0.0       0.0.0.0         255.0.0.0       U         0 0          0 lo
0.0.0.0         192.168.0.1     0.0.0.0         UG        0 0          0 eth0
[root@host1 root]#

위의 예에서 history로 명령어 히스토리를 확인하였다. 그리고 "!문자열"이라고 입력하면 기록된 명령어중에 지정한 "문자열"으로 시작하는 가장 최근의 명령어를 재실행하게 된다. 즉, "!net"으로 입력하게 되면 가장 최근에 실행된 "net"으로 시작하는 명령어가 "netstat -nr"이므로 이를 재실행한 것이다.

 

감사합니다.

저작권 :  수퍼유저코리아 (www.superuser.co.kr),   무단 재배포및 복사를 금합니다

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,043 명
  • 현재 강좌수 :  35,853 개
  • 현재 접속자 :  77 명