안녕하세요. 이번 시간에는 리눅스 history 명령어로 이전에 어떤 명령어를 입력했는지 보는 방법을 알아봅시다.
history 파일들
먼저, 계정의 기준 디렉토리 (루트의 경우 /root)로 가 보도록 하겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/hist_3.png)
ls -a | grep history를 입력해 보겠습니다. 모든 파일 목록을 출력하는데, history 가 포함되어 있는 이름을 가진 파일을 출력하라는 의미입니다. 여기서 주목해야 할 것은
- .bash_history
- .zsh_history
가 있다는 점입니다. bash와 zsh는 쉘 종류입니다. 그리고, 저는 zsh를 사용하고 있습니다. 따라서, 명령어의 저장 기록은 .zsh_history에 저장되어 있습니다. 만약에, bash를 사용한다면 .bash_history에 저장되겠지요.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/hist_9.png)
제 .bash_history 파일을 보면 위와 같습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/hist_1.png)
제 .zsh_history 파일입니다. 여기에는 vi .zsh_history만 남아 있음을 볼 수 있습니다. 여기까지 정리해 봅시다.
- 각 유저별로 history 파일을 저장하고 있는데
- shell 별로 command 실행 기록 또한 저장하고 있다.
- zsh를 쓴다면 .zsh_history를, bash를 쓴다면 .bash_history에 저장된다.
이 정도 기억하시면 이 글을 이해하시는 데 크게 문제가 없을 겁니다.
리눅스 history 명령어
그러면, history 명령이 무엇일까요? 현재 로그인 되어 있는 유저가 현재 쉘에서 어떤 명령어를 실행했는지 알려주는 명령어입니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/hist_2.png)
cho 유저가 명령어를 친 기록을 보겠습니다. vi .zsh_history만 떠 있음을 볼 수 있어요. 이는 cho 폴더에서 본 .zsh_history와 일치합니다. 이제 root로 로그인 해 보겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/hist_4.png)
root로 로그인 해서 보니까, 아까와는 다른 로그가 출력됩니다. 이는 왜 그럴까요? 위에서 설명드렸지만, cho하고 root하고 유저가 다르기 때문이에요. root 폴더에 있는 .zsh_history를 열어볼까요?
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/hist_6.png)
pwd, ls -ail, pwd, cd ~, ls 순서대로 들어갔음을 볼 수 있어요. 아까 cho의 .zsh_history 와는 다르지요? 그러니, history의 결과 또한 다르게 나온 것입니다.
history와 많이 써먹었던 패턴
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/hist_7.png)
먼저 history와 grep 패턴입니다. grep은 특정한 패턴을 찾는 명령어 인데요. 예를 들어 우분투에서 방화벽을 설정할 때에는 ufw를 이용합니다. 그런데 이 명령어를 이전에 쳤는데 까먹었을 때에는 어떻게 해야 할까요?
다시 찾아봐야 할까요? history에 남아 있다면, history | grep ufw 를 하면 간단하게 해결됩니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/hist_8.png)
history와 tail도 의외로 썼던 조합 중 하나입니다. tail은 가장 마지막의 10개 line을 가져옵니다. 가장 마지막에 치면 마지막 line에 추가되게 됩니다. history | tail의 경우, 가장 마지막으로 친 10개의 명령어를 가져옵니다. 실시간으로 쌓이는 로그를 모니터링 할 때에도 tail을 이용하면 좋겠네요.