[Linux] history - 이전 명령어 실행 방법
- Operating System/Linux
- 2020. 8. 31.
리눅스는 이전에 실행했었던 명령들을 기억합니다. 그리고 이전에 실행했던 명령어들을 확인해 볼수 있고 그 명령어를 다시 실행할 수 있습니다. 이 명령어는 바로 'history'라고 합니다. 이 history라는 명령어에 대해 알아보겠습니다.
■ history 명령어
1. history 명령어 사용해보기
[root@hostname /home/user]# history
1 ls -al
2 hostnamectl set-hostname hostname
3 cd /usr/local
4 reboot
5 /var/log
6 cat /etc/passwd
7 su - username
8 passwd username
9 ls -al
10 ifconfig -a
11 yum install net-tools
12 yum update
13 poweroff
14 /etc/init.d/mysqld start
15 mysqladmin -u root password 'password'
16 vi /etc/my.cnf
17 pwd
18 ls -al
19 cd ~
간단히 프롬프트에 'history'라는 명령어를 입력합니다. 그러면 실행되었던 명령어들이 출력됩니다. 실행했던 명령어들의 갯수는 기본적으로 1000개 입니다.
2. 최근 명령어 갯수 제한으로 출력
shell > history 5
548 ifconfig -a
549 ls -al
550 /etc/init.d/mysqld start
551 ls -al
552 mysql -uroot -p
최근 실행했던 명령어 5개만 출력합니다. 위의 숫자를 변경하면 그만큼의 이전 명령어를 출력합니다.
3. 명령어 검색하기
shell > history | grep -i mysql
58 cp mysql80-community-release-el7-3.noarch.rpm /root/
60 yum install mysql80-community-release-el7-3.noarch.rpm
61 sudo yum-config-manager --enable mysql57-community
62 yum-config-manager --enable mysql57-community
64 sudo yum-config-manager --enable mysql57-community
65 yum list | grep -i mysql
66 yum-config-manager --enable mysql57-community
67 yum list | grep -i mysql
68 yum-config-manager --disable mysql80-community
69 yum list | grep -i mysql
73 cd mysql-8.0.19
수행했던 명령어중에서 필요한 항목들만 추출합니다.
4. history 명령어중 특정 행의 명령어 다시 수행.
shell > history | grep -i HISTSIZE
554 echo $HISTSIZE
shell> !554
echo $HISTSIZE
1000
특정 행 번호를 알아낸 후 !숫자를 입력하면 실행했던 명령 그대로 다시 수행합니다.
5. 수행했던 명령어를 파일로 출력하기.
shell > history -w CommandHistory.txt
shell > cat CommandHistory.txt
1 history
2 cat .bash_history
3 exit
4 cat .bash_history
5 cd 123
6 cd asdf
7 mkdir 1111
8 mkdir 2222
9 cd asdfa
10 cd 1111/
11 cd ~
12 history
13 cat .bash_history
14 exit
15 cat .bash_history
16 cd zxcvzxvc
17 cd aa
■ history 아키텍쳐
1. history에 대해 알아보기
위에서 얘기했듯이 사용자가 입력했던 명령어에 대해 사용 후 버려지는게 아니라 그 명령어들이 저장되게 됩니다. 그리고 그 명령어들은 추후 다시 사용되거나 확인하는 용도로 사용됩니다.
history 명령을 통하여 이전 명령어들이 나온다는 것은 특정 어느 공간에 저장된다는 얘기입니다. 보통 2곳을 이용하게 됩니다.
: 메모리
사용자 명령어를 먼저 메모리 버퍼에 입력를 해두게 됩니다.
: .bash_history
메모리에 저장되었던 명령어 히스토리를 사용자 홈 디렉토리의 .bash_history파일에 저장합니다..
2. history 내용 저장 갯수
위에서 history 명령어는 1000개가 기억이 된다고 했습니다. 이에 대한 확인방법은 다음과 같습니다.
shell> echo $HISTSIZE
1000
3. hisotry 저장 순서 및 아키텍쳐
명령어를 수행하면 위에서 얘기했듯이 메모리에 명령어가 먼저 저장이 됩니다. 이를 확인해보면 다음과 같습니다.
먼저 임의의 명령어를 여러번 수행합니다.
shell > history
1 history
2 cat .bash_history
3 exit
4 cat .bash_history
5 cd 123
6 cd asdf
7 mkdir 1111
8 mkdir 2222
9 cd asdfa
10 cd 1111/
11 cd ~
12 history
shell> cat .bash_history
history
cat .bash_history
exit
위에서 .bash_history가 이전에 수행했던 명령어들을 저장한다고 했습니다. 하지만 비교를 해보면 같지가 않습니다. 즉 명령어를 수행한다고 해서 바로 파일에 저장되는것이 아닙니다. 수행되었던 명령어들은 바로 log out(log off)시 저장이 됩니다.
로그아웃 후 다시 접속해보면...
shell> cat .bash_history
history
cat .bash_history
exit
cat .bash_history
cd 123
cd asdf
mkdir 1111
mkdir 2222
cd asdfa
cd 1111/
cd ~
history
cat .bash_history
exit
보시는바와 같이 이전에 수행했던 명령어들이 .bash_history에 저장되는것을 확인해볼 수 있습니다.
4. 메모리상의 수행내역 삭제.
shell > history -c
수행했던 명령어들을 .bash_history상에 저장되지 않게 하려면 메모리에 저장되어 있는 명령어들을 삭제해야 한다. 이렇게 하면 로그아웃을 하더라도 메모리에 명령어들이 남아있지 않기 때문에 .bash_history파일에도 기록이 되지 않는다.
■ 터미널 출력 방법
history는 단순히 라인넘버와 명령어만을 출력한다. 그러나 해당명령어가 언제 수행이 되었는지 궁금할수도 있다. 다음과 같은 환경변수를 이용해서 설정한다.
홈 디렉토리의 .bash_profile안에 다음을 입력한다.
export HISTTIMEFORMAT="%F %T "
모든 사용자 계정에, 그리고 영구적으로 하고 싶다면 다음의 파일에 입력한다.
shell > vi /etc/profile
맨아래에 다음과 같이 입력한다.
# History Command Execute Time
export HISTTIMEFORMAT="%F %T "
출력 형식은 다음과 같다.
shell> history
1 2020-09-02 23:09:09 history
2 2020-09-02 23:09:09 cat .bash_history
3 2020-09-02 23:09:09 exit
4 2020-09-02 23:09:09 cat .bash_history
5 2020-09-02 23:09:09 cd 123
6 2020-09-02 23:09:09 cd asdf
7 2020-09-02 23:09:09 mkdir 1111
8 2020-09-02 23:09:09 mkdir 2222
9 2020-09-02 23:09:09 cd asdfa
10 2020-09-02 23:09:09 cd 1111/
11 2020-09-02 23:09:09 cd ~
12 2020-09-02 23:09:09 history
13 2020-09-02 23:09:09 cat .bash_history
14 2020-09-02 23:09:09 exit
15 2020-09-02 23:09:09 cat .bash_history
16 2020-09-02 23:09:09 cd zxcvzxvc
17 2020-09-02 23:09:09 cd aa
18 2020-09-02 23:09:09 cd cc
19 2020-09-02 23:09:09 history -w 1234.txt
20 2020-09-02 23:09:09 vi 1234.txt
21 2020-09-02 23:09:09 ls -al
22 2020-09-02 23:09:09 exit
'Operating System > Linux' 카테고리의 다른 글
[Shell Script] Environment[Shebang-ENV] (0) | 2020.11.29 |
---|---|
[Linux] CentOS, RHEL - EPEL (0) | 2020.09.15 |
[Linux] grep, egrep, fgrep (0) | 2020.05.17 |
[Linux] 특정 디렉토리의 파일 대소문자 변환 (0) | 2020.05.06 |
[Linux] VNC 설정 (0) | 2020.05.02 |