여행을 개발하다

[Linux] 리눅스의 log & 명령어 본문

운영체제/Linux

[Linux] 리눅스의 log & 명령어

yhtragramming 2020. 5. 7. 20:50

 

 

 

IT 세계에서 로그(log)를 남기고 확인하는 것은 매우 중요하다. 왜냐하면 시스템 동작의 발자취로, 오류와 같은 예상치 못한 상황에 적시에 대응할 수 있도록 이정표를 제공하는 데이터가 되기 때문이다. 프로그래밍 언어에서도 로그를 남김으로써 parameter가 제대로 넘어오는지, 그곳에서 어떤 예외사항이 발생했는지를 찾아나갈 수 있다. OS에서도 예외는 아니다. 리눅스에서도 여러 종류의 로그가 제공되며, 사용자가 실시간으로 확인할 수 있다.

 

이번 포스팅에서는 리눅스의 로그는 어떤 종류가 있고, 어떻게 확인하는지 관련된 파일과 명령어에 대해 이야기하고자 한다(이는 리눅스 마스터 자격시험의 단골 문제이기도 하다...).

 

모든 것이 '파일화'되어 있다는 리눅스의 특징 때문에 로그도 파일로 관리된다. 그래서 로그를 조회하는 명령어도 해당 파일의 내용을 그대로 읽어오는 경우가 대부분이다. 다만, 보안상 binary 형식으로 되어 있는 것도 있고, 권한 때문에 root 사용자 외 열람 불가한 log도 있다.

 

리눅스의 로그는 '/var/log' 디렉터리에서 관리된다. 해당 디렉터리로 들어가면 수많은 종류의 로그파일을 살펴볼 수 있다. 단, 권한에 따라 볼 수 있는 파일의 종류가 다르다는 것.

root@ubuntu:/var/log# ls -trl
total 1696
drwx------  2 speech-dispatcher root              4096 Apr 23  2018 speech-dispatcher
drwx--x--x  2 root              gdm               4096 Feb 19  2019 gdm3
drwxr-xr-x  2 root              root              4096 Jan 24 03:47 dist-upgrade
-rw-r--r--  1 root              root             56751 Feb  3 10:22 bootstrap.log
drwxr-xr-x  3 root              root              4096 Feb  3 10:24 hp
-rw-r--r--  1 root              root              5873 Mar 14 23:31 fontconfig.log
drwxrwxr-x  2 root              root              4096 Mar 14 23:32 installer
drwxr-sr-x+ 3 root              systemd-journal   4096 Mar 14 23:32 journal
..........

 

그럼 본격적으로 어떤 로그가 있는지 알아본다.

 

출처 & 참고 : 리눅스 마스터 1급 정복하기, 북스홀릭 (정성재, 배유미 공저)

 

1. /var/log/messages (시스템의 표준 메시지 기록)

- 시스템에서 발생하는 표준 메시지가 기록되는 파일이다.

- root 사용자만 열람할 수 있다.

- 날짜 및 시간, 메시지가 발생한 호스트명, 메시지를 발생한 내부 시스템이나 응용 프로그램의 이름, 발생된 메시지가 ':'으로 구분되어 기록된다.

yhjeong@ubuntu:/$ sudo cat /var/log/messages 
May  6 16:43:26 ubuntu rsyslogd: [origin software="rsyslogd" swVersion="8.16.0" x-pid="23118" x-info="http://www.rsyslog.com"] start
May  6 16:43:26 ubuntu rsyslogd: rsyslogd's groupid changed to 108
May  6 16:43:26 ubuntu rsyslogd: rsyslogd's userid changed to 104
May  6 16:43:26 ubuntu rsyslogd-2007: action 'action 11' suspended, next retry is Wed May  6 16:43:56 2020 [v8.16.0 try http://www.rsyslog.com/e/2007 ]

 

* Ubuntu에서는 '/var/log/messages' 파일이 안 보이는 경우가 있다. 이때,'/etc/rsyslog.d/50-default.conf ' 파일의 주석 일부를 해제해 준 후, 관련 데몬을 재시작하면 정상적으로 'messages' 로그파일을 열람할 수 있다.

 

vi 편집기를 이용하여, 이 부분의 주석(#)을 제거해 준다.

yhjeong@ubuntu:/$ sudo vi /etc/rsyslog.d/50-default.conf
*.=info;*.=notice;*.=warn;\
...
...
mail,news.none -/var/log/messages
# Some "catch-all" log files.
#
#*.=debug;\
#       auth,authpriv.none;\
#       news.none;mail.none     -/var/log/debug
*.=info;*.=notice;*.=warn;\
        auth,authpriv.none;\
        cron,daemon.none;\
        mail,news.none          -/var/log/messages

 

편집이 완료되면 파일을 저장한 후(esc + wq! 입력), 다음과 같은 명령어로 관련 데몬(Daemon)을 재시작한다.

yhjeong@ubuntu:/$ sudo service rsyslog restart

 

2. /var/log/secure (인증 기반 접속 관련 기록)

- 인증과 관련된 로그가 기록된다.

- 주로 로그인, tcp_wrappers, xinetd 관련 로그가 쌓인다.

 

 

3. /var/log/dmesg (부팅 기록)

- 시스템이 부팅할 때 출력되었던 로그가 기록된다.

- 보통 커널 부트 메시지 로그라고 한다.

 

 

4. /var/log/maillog (메일 관련 기록)

- sendmail과 같은 메일 작업이 기록되는 로그이다.

 

 

5. /var/log/xferlog (FTP 접속 관련 기록)

- FTP 접속과 관련된 작업이 기록되며, 총 14개의 영역으로 구성되어 있다.

 

 

6. /var/log/cron (cron 관련 정보 기록)

- cron 관련 정보가 기록되는 파일이다.

 

7. /var/log/boot.log (부팅 시 동작하는 데몬 정보 기록)

- 부팅 시 발생하는 메시지가 기록되는 파일이다.

- 부팅 시 동작하는 데몬의 정보가 기록된다.

 

8. /var/log/lastlog (사용자의 접속 기록) = lastlog

- telnet이나 ssh를 통해 들어오는 사용자의 마지막 정보가 기록된다.

- 바이너리 파일로 기록되어 있어 바로 열람할 수 없다.

'lastlog' 명령어로 확인 가능하다.

root@ubuntu:/var/log# lastlog 
Username         Port     From             Latest
root                                       **Never logged in**
daemon                                     **Never logged in**
bin                                        **Never logged in**
sys                                        **Never logged in**
sync                                       **Never logged in**
games                                      **Never logged in**
man                                        **Never logged in**
lp                                         **Never logged in**
mail                                       **Never logged in**
news                                       **Never logged in**
uucp                                       **Never logged in**
proxy                                      **Never logged in**
www-data                                   **Never logged in**

 

lastlog 명령어

- 각각의 사용자가 마지막으로 로그인한 정보를 출력해 주는 명령어이다.

- 바이너리 파일인 '/var/log/lastlog' 파일의 내용을 보여주는 명령어이다.

 

* 주요 옵션 *

옵션

설명

-u 사용자명

특정 사용자에 대한 정보만 출력한다.

-t 날짜

오늘부터 지정한 날짜만큼 거슬러 올라가 그 이후에 로그인한 사용자의 정보를 보여준다.

 

9. /var/log/wtmp (사용자의 접속 기록) = last

- telnet이나 ssh를 통해 들어오는 사용자의 마지막 정보가 기록된다.

- 바이너리 파일로 기록되어 있어 바로 열람할 수 없다.

- 'last' 명령어로 확인 가능하다.

root@ubuntu:/var/log# last

wtmp begins Sun May  3 08:25:50 2020

 

last 명령어

- 실질적으로는 '/var/log/wtmp' 파일의 내용을 그대로 보여주는데, 해당 파일은 바이너리 형태이다.

- 이를 열람할 수 있게 해주는 명령어이다.

 

* 주요 옵션 *

옵션

설명

-f 파일명

로그 로테이션 설정이 되어있는 경우, 기본 로그 파일 이외의 다른 로그 파일의 기록을 볼 경우에 사용한다.

-n 숫자

가장 최근부터 해당 숫자 값만큼만 출력한다.

-t YYYYMMDDHHMMSS

지정한 시간 이전에 로그인한 기록을 출력한다.

-R

IP 주소나 호스트명을 출력하지 않는다.

-a

호스트명이나 IP 주소 필드를 맨 마지막에 출력한다. 일반적으로는 '-d' 옵션과 함께 사용된다.

-d

리눅스는 외부에서 접속한 기록을 IP 주소뿐만 아니라, 호스트 이름도 저장한다. 이 옵션을 사용하면 호스트 이름이 존재하는 경우에는 IP 주소를 호스트 이름으로 변환하여 출력한다.

-F

로그인 및 로그아웃 시간을 출력한다.

-i

접속한 호스트의 IP 주소로만 출력한다.

-w

사용자의 전체 이름이나 전체 도메인 이름을 전부 출력해 준다.

 

10. /var/log/btmp (사용자의 접속 실패 기록) = lastb

-'/var/log/wtmp' 파일과는 정반대로, 사용자가 접속에 실패한 경우를 기록한다.

- 바이너리 파일로 기록되어 있어 바로 열람할 수 없다.

'lastb'라는 명령어로 확인한다.

 

lastb명령어

- 실질적으로는 '/var/log/btmp' 파일의 내용을 그대로 보여주는데, 해당 파일은 바이너리 형태이다.

- 이를 열람할 수 있게 해주는 명령어이다.

- root 사용자만 사용 가능하다.

- 기본적인 사용법은 last 명령어와 동일하다.

 

* 주요 옵션 *

옵션

설명

-f 파일명

로그 로테이션 설정이 되어있는 경우, 기본 로그 파일 이외의 다른 로그 파일의 기록을 볼 경우에 사용한다.

-n 숫자

가장 최근부터 해당 숫자 값만큼만 출력한다.

-t YYYYMMDDHHMMSS

지정한 시간 이전에 로그인한 기록을 출력한다.

-R

IP 주소나 호스트명을 출력하지 않는다.

-a

호스트명이나 IP 주소 필드를 맨 마지막에 출력한다. 일반적으로는 '-d' 옵션과 함께 사용된다.

-d

리눅스는 외부에서 접속한 기록을 IP 주소뿐만 아니라, 호스트 이름도 저장한다. 이 옵션을 사용하면 호스트 이름이 존재하는 경우에는 IP 주소를 호스트 이름으로 변환하여 출력한다.

-F

로그인 및 로그아웃 시간을 출력한다.

-i

접속한 호스트의 IP 주소로만 출력한다.

-w

사용자의 전체 이름이나 전체 도메인 이름을 전부 출력해 준다.

지금까지 리눅스의 log 파일 및 명령어에 대해 알아보았다.

 

감사합니다 : )

Comments