웹사이트 검색

Bash 셸에서 Linux "역사 명령"의 강력한 기능


우리는 일상 업무에서 명령의 기록을 확인하거나 사용자가 실행한 명령에 대한 정보를 얻기 위해 history 명령을 자주 사용합니다. 이번 포스팅에서는 Bash 쉘에서 사용자가 실행한 명령을 추출하기 위해 히스토리 명령을 효과적으로 사용하는 방법을 살펴보겠습니다. 이는 감사 목적으로 사용하거나 날짜시간에 어떤 명령이 실행되는지 알아내는 데 유용할 수 있습니다.

기본적으로 날짜타임스탬프기록 명령을 실행하는 동안 표시되지 않습니다. 그러나 bash 쉘은 사용자 명령 기록을 편집하기 위한 CLI 도구를 제공합니다. 몇 가지 유용한 팁과 요령, 그리고 history 명령의 강력한 기능을 살펴보겠습니다.

1. Linux에서 마지막/모든 실행된 명령 나열

터미널에서 간단한 history 명령을 실행하면 마지막으로 실행된 명령의 전체 목록이 줄 번호와 함께 표시됩니다.

[narad@tecmint ~]$ history

    1  PS1='\e[1;35m[\u@\h \w]$ \e[m '
    2  PS1="\e[0;32m[\u@\h \W]$ \e[m "
    3  PS1="\u@\h:\w [\j]$ "
    4  ping google.com
    5  echo $PS1
    6   tail -f /var/log/messages
    7  tail -f /var/log/messages
    8  exit
    9  clear
   10  history
   11  clear
   12  history

2. 날짜 및 타임스탬프와 함께 모든 명령 나열

명령에 대해 날짜타임스탬프를 찾는 방법은 무엇입니까? 변수가 포함된 'export' 명령을 사용하면 명령이 실행될 때 해당 타임스탬프와 함께 기록 명령이 표시됩니다.

[narad@tecmint ~]$ export HISTTIMEFORMAT='%F %T  '

      1  2013-06-09 10:40:12   cat /etc/issue
      2  2013-06-09 10:40:12   clear
      3  2013-06-09 10:40:12   find /etc -name *.conf
      4  2013-06-09 10:40:12   clear
      5  2013-06-09 10:40:12   history
      6  2013-06-09 10:40:12   PS1='\e[1;35m[\u@\h \w]$ \e[m '
      7  2013-06-09 10:40:12   PS1="\e[0;32m[\u@\h \W]$ \e[m "
      8  2013-06-09 10:40:12   PS1="\u@\h:\w [\j]$ "
      9  2013-06-09 10:40:12   ping google.com
     10  2013-06-09 10:40:12   echo $PS1
HISTTIMEFORMAT 변수의 의미
%F Equivalent to %Y - %m - %d
%T Replaced by the time ( %H : %M : %S )

3. 히스토리의 필터 명령

보시다시피 위 출력에서 동일한 명령이 여러 번 반복되고 있습니다. 기록에서 단순 명령이나 비파괴 명령을 필터링하는 방법은 무엇입니까? HISTIGNORE='ls -l:pwd:date:'에 명령을 지정하여 다음 '내보내기' 명령을 사용하면 시스템에 저장되지 않으며 기록 명령에 표시되지 않습니다.

[narad@tecmint ~]$ export HISTIGNORE='ls -l:pwd:date:'

4. 기록에서 중복 명령 무시

아래 명령을 사용하면 사용자가 입력한 중복 명령을 무시하는 데 도움이 됩니다. 사용자가 Bash 프롬프트에서 동일한 명령을 여러 번 실행하는 경우 기록에 단일 항목만 표시됩니다.

[narad@tecmint ~]$ export HISTCONTROL=ignoredups

5. 내보내기 명령 설정 해제

즉시 내보내기 명령을 설정 해제합니다. export 명령으로 내보낸 명령이 무엇이든 변수를 하나씩 사용하여 unset 내보내기 명령을 실행합니다.

[narad@tecmint ~]$ unset export HISTCONTROL

6. 내보내기 명령을 영구적으로 저장

내보내기 명령을 영구적으로 저장하려면 .bash_profile에 다음과 같이 입력하세요.

[narad@tecmint ~]$ vi .bash_profile

.bash_profile

Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

User specific environment and startup programs

export HISTCONTROL=ignoredups

PATH=$PATH:$HOME/bin
export PATH

7. 특정 사용자가 실행한 명령 나열

특정 사용자가 실행한 명령 내역을 보는 방법입니다. Bash는 '~/.bash_history' 파일에 기록을 보관합니다. 파일을 보거나 열어 명령 기록을 볼 수 있습니다.

[narad@tecmint ~]$ vi .bash_history

cd /tmp/
cd logstalgia-1.0.3/
./configure
sudo passwd root
apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc
./configure
make
apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc++
apt-get install libsdl1.2-dev libsdl-image1.2-dev libpcre3-dev libftgl-dev libpng12-dev libjpeg62-dev make gcc
apt-get install make
mysql -u root -p
apt-get install grsync
apt-get install unison
unison

8. 명령 기록 저장 비활성화

일부 조직에서는 조직의 보안 정책으로 인해 명령 기록을 보관하지 않습니다. 이 경우 사용자의 .bash_profile 파일(숨김 파일)을 편집하여 아래와 같이 입력하면 됩니다.

[narad@tecmint ~]$ vi .bash_profile

.bash_profile

Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

User specific environment and startup programs

PATH=$PATH:$HOME/bin
HISTSIZE=0
export PATH
.bash_profile (END)

아래 명령을 사용하여 파일을 저장하고 변경 사항을 로드합니다.

[narad@tecmint ~]$ source .bash_profile

참고: 시스템이 입력한 명령을 기억하지 못하게 하려면 아래 명령을 실행하면 기록 기록이 즉시 비활성화되거나 중지됩니다.

[narad@tecmint ~]$ export HISTSIZE=0

도움말: 슈퍼유저로 'HISTSIZE'를 검색하고 '/etc/profile' 파일에서 편집하세요. 파일의 변경 사항은 전역적으로 적용됩니다.

9. 명령 기록 삭제 또는 지우기

위쪽아래쪽 화살표를 사용하면 이전에 사용된 명령이 도움이 되거나 짜증날 수 있음을 확인할 수 있습니다. '-c' 옵션을 사용하여 bash 기록 목록에서 모든 항목을 삭제하거나 지웁니다.

[narad@tecmint ~]$ history -c

10. Grep 명령을 사용하여 기록에서 명령 검색

아래와 같이 히스토리 파일을 'grep'에 연결하여 '.bash_history'를 통해 명령을 검색하세요. 예를 들어, 아래 명령은 기록 목록에서 'pwd' 명령을 검색하여 찾습니다.

[narad@tecmint ~]$ history | grep pwd

  113  2013-06-09 10:40:12     pwd
  141  2013-06-09 10:40:12     pwd
  198  2013-06-09 15:46:23     history | grep pwd
  202  2013-06-09 15:47:39     history | grep pwd

11. 마지막으로 실행된 명령 검색

'Ctrl+r' 명령으로 이전에 실행한 명령을 검색합니다. 원하는 명령을 찾았으면 'Enter'를 눌러 동일한 명령을 실행하고, 취소하려면 'esc'를 누르세요.

(reverse-i-search)`source ': source .bash_profile

12. 마지막으로 실행된 명령 불러오기

이전에 사용한 특정 명령을 불러옵니다. 8(!8) 명령을 조합하면 실행한 8 명령을 기억합니다.

[narad@tecmint ~]$ !8

13. 마지막으로 실행된 특정 명령 호출

이전에 사용한 명령(netstat -np | grep 22)을 '!'과 함께 사용하고 그 뒤에 해당 특정 명령의 일부 문자를 입력해 보세요.

[narad@tecmint ~]$ !net
netstat -np | grep 22
(No info could be read for "-p": geteuid()=501 but you should be root.)
tcp        0     68 192.168.50.2:22             192.168.50.1:1857           ESTABLISHED -
tcp        0      0 192.168.50.2:22             192.168.50.1:2516           ESTABLISHED -
unix  2      [ ]         DGRAM                    12284  -                   @/org/freedesktop/hal/udev_event
unix  3      [ ]         STREAM     CONNECTED     14522  -
unix  2      [ ]         DGRAM                    13622  -
unix  3      [ ]         STREAM     CONNECTED     12250  -                   @/var/run/hald/dbus-ujAjOMNa0g
unix  3      [ ]         STREAM     CONNECTED     12249  -
unix  3      [ ]         STREAM     CONNECTED     12228  -                   /var/run/dbus/system_bus_socket
unix  3      [ ]         STREAM     CONNECTED     12227  -

우리는 역사 명령의 힘을 강조하려고 노력해 왔습니다. 그러나 이것이 끝이 아닙니다. 아래 댓글 상자를 통해 히스토리 명령 경험을 공유해 주세요.