우리는 주로 被称为daemons或services的长시간 실행 중인 background Linux processes과 함께 일하며, 일반적인 예로 Secure Shell (sshd), Network Manager (networkd), Volume Manager (LVM), Cron 등이 있을 수 있습니다.
이러한 서비스의 로그를 debug하기 위해서 지속적으로 모니터링해야 합니다. 그러나 이러한 서비스들은 많은 로그를 생성하며, 대부분의 경우 이러한 로그를 확인하는 것이 번거롭습니다. 이러한 상황에서 우리는 tail 명령어을 사용할 수 있습니다.
tail 명령어는 head 명령어과 유사하게 파일을 읽고 여러 파일의 마지막 10行(내용)을 표준 출력으로 보여줍니다.
이 실제 가이드를 통해 tail 명령어에 대해 배울 수 있습니다. 이 가이드를 마치면 Linux 명령어 줄 사용자는 tail 명령어를 有效的으로 사용할 수 있습니다.
목차
tail 명령어 사YNtax
tail 명령어의 사YNtax는 其他Linux 명령어과 유사합니다:
$ tail [OPTIONS] [FILE-1] [FILE-2] ...
1. Linux에서 파일의 마지막 10行을 인쇄하는 方法
기본적으로, tail 명령어는 주어진 파일의 마지막 10 行을 인쇄합니다.
$ tail /var/log/secure Apr 2 14:17:24 TecMint sshd[201178]: Disconnected from user tecmint 192.168.0.162 port 59774 Apr 2 14:17:24 TecMint sshd[201165]: pam_unix(sshd:session): session closed for user tecmint Apr 2 14:29:12 TecMint sshd[201366]: Accepted password for tecmint from 192.168.0.162 port 56378 ssh2 Apr 2 14:29:12 TecMint systemd[201371]: pam_unix(systemd-user:session): session opened for user tecmint(uid=1002) by (uid=0) Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session opened for user tecmint(uid=1002) by (uid=0) Apr 2 14:29:12 TecMint sshd[201382]: Received disconnect from 192.168.0.162 port 56378:11: disconnected by user Apr 2 14:29:12 TecMint sshd[201382]: Disconnected from user tecmint 192.168.0.162 port 56378 Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
이곳에서, 우리는 상기 명령어가 /var/log/secure 파일의 마지막 열 行을 보여주고 있음을 확인할 수 있습니다.
2. Linux에서 파일의 마지막 N行을 인쇄하는 方法
이전 예에서, 명령어는 주어진 파일의 마지막 10行을 인쇄합니다. 그러나, -n
옵션을 사용할 수 있습니다.
이 옵션은 화면에 인쇄되는 行의 수를 제한하는 것을 도와줍니다.
$ tail -n 3 /var/log/secure Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
이 예에서, 우리는 이제 명령어가 10行의 대신에 3行만 보여주고 있음을 확인할 수 있습니다.
3. Linux에서 파일의 처음 N行을 무시하는 方法
여기에서는 주어진 파일로부터 시작 지점을 제어할 수있는 (+)
기호와 -n
옵션을 함께 사용할 수 있습니다.
이를 이해하기 위해 출력을 5번째 줄부터 시작하는 +5
값을 사용해 보겠습니다:
$ tail -n +5 /var/log/secure Apr 2 14:17:24 TecMint sshd[201178]: Disconnected from user tecmint 192.168.0.162 port 59774 Apr 2 14:17:24 TecMint sshd[201165]: pam_unix(sshd:session): session closed for user tecmint Apr 2 14:29:12 TecMint sshd[201366]: Accepted password for tecmint from 192.168.0.162 port 56378 ssh2 Apr 2 14:29:12 TecMint systemd[201371]: pam_unix(systemd-user:session): session opened for user tecmint(uid=1002) by (uid=0) Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session opened for user tecmint(uid=1002) by (uid=0) Apr 2 14:29:12 TecMint sshd[201382]: Received disconnect from 192.168.0.162 port 56378:11: disconnected by user Apr 2 14:29:12 TecMint sshd[201382]: Disconnected from user tecmint 192.168.0.162 port 56378 Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
4. 파일의 마지막 N개 문자 표시
줄과 마찬가지로, 다음과 같이 -c
옵션을 사용하여 파일의 마지막 N
개 문자를 표시하는 명령을 사용할 수도 있습니다:
$ tail -c 7 /var/log/secure (uid=0)
이 예에서는 주어진 파일의 마지막 일곱 개의 ASCII 문자를 표시하는 명령을 볼 수 있습니다.
5. 파일의 처음 N개 문자 제거
마찬가지로, -c
옵션과 함께 첫 번째 N
문자를 건너 뛰는 데에도 (+)
기호를 사용할 수 있습니다. 그래서 아래 명령을 사용하여 파일의 첫 번째 줄을 건너 뛰어 보겠습니다:
$ tail -c +5 /var/log/secure Apr 2 03:02:59 TecMint sudo[162801]: root : TTY=pts/2 ; PWD=/root ; USER=root ; COMMAND=/bin/dnf install R Apr 2 03:02:59 TecMint sudo[162801]: pam_unix(sudo:session): session opened for user root(uid=0) by root(uid=0) Apr 2 03:03:02 TecMint sudo[162801]: pam_unix(sudo:session): session closed for user root Apr 2 03:11:17 TecMint groupadd[163602]: group added to /etc/group: name=avahi, GID=70 Apr 2 03:11:18 TecMint groupadd[163602]: group added to /etc/gshadow: name=avahi Apr 2 03:11:18 TecMint groupadd[163602]: new group: name=avahi, GID=70 Apr 2 03:11:19 TecMint useradd[163610]: new user: name=avahi, UID=70, GID=70, home=/var/run/avahi-daemon, shell=/sbin/nologin, from=none Apr 2 03:13:41 TecMint groupadd[163704]: group added to /etc/group: name=colord, GID=986 Apr 2 03:13:41 TecMint groupadd[163704]: group added to /etc/gshadow: name=colord
여기에서는 명령이 첫 번째 줄을 제외한 모든 줄을 표시하는 것을 볼 수 있습니다.
6. 헤더에 파일 이름 표시
여러 파일을 작업할 때 유용한 표시 헤더로 현재 파일 이름을 표시하도록 tail 명령에 지시할 수 있습니다.
그러므로, 표시 헤더를 사용하려면 -v
옵션을 사용하십시오.
$ tail -n 3 -v /var/log/secure ==>/var/log/secure <== Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
위의 출력에서, `==>> /var/log/secure <==
`는 표시 헤더를 represent한다.
7. 다양한 파일에 대해 파일 이름을 헤더로 보여주기
어떤 파일 처리 명령어와 마찬가지로 tail 명령어에도 다양한 파일을 사용할 수 있다. 이러한 경우, 표시 헤더는 파일 내용을 분리하기 위해 사용된다.
$ tail -n 3 -v /var/log/secure /var/log/secure-20230402 ==> /var/log/secure <== Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0) ==> /var/log/secure-20230402 <== Mar 31 03:50:53 TecMint groupadd[156163]: new group: name=docker, GID=987 Mar 31 04:46:11 TecMint sshd[159403]: Accepted password for root from 192.168.0.162 port 46480 ssh2 Mar 31 04:46:11 TecMint sshd[159403]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
위의 출력에서는 각 파일의 표시 헤더를 볼 수 있다.
8. 파일 표시 헤더 사용 중지하기
이전 예에서는 다양한 파일에 대해 표시 헤더를 사용하는 것을 보았다. 然而, -q
옵션을 사용하여 이러한 기본 行为을 suppress할 수 있다.
$ tail -q -n 3 /var/log/secure /var/log/secure-20230402 Apr 2 14:29:12 TecMint sshd[201366]: pam_unix(sshd:session): session closed for user tecmint Apr 2 15:12:55 TecMint sshd[202049]: Accepted password for root from 192.168.0.162 port 53334 ssh2 Apr 2 15:12:55 TecMint sshd[202049]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0) Mar 31 03:50:53 TecMint groupadd[156163]: new group: name=docker, GID=987 Mar 31 04:46:11 TecMint sshd[159403]: Accepted password for root from 192.168.0.162 port 46480 ssh2 Mar 31 04:46:11 TecMint sshd[159403]: pam_unix(sshd:session): session opened for user root(uid=0) by (uid=0)
이곳에서는 이제 명령어가 표시 헤더없이 파일 내용을 하나 씩 다음에 표시하는 것을 볼 수 있다.
9. 파일의 변화를 지속적으로 모니터링하는 方法
到目前为止, tail 명령어는 필요한 行 또는 문자 수를 처리한 후에 끝난다. 그러나 때때로 새로 생성된 로그를 보기를 원한다.
이러한 경우에는 명령어에 -f
옵션을 사용하여 파일의 변화를 실시간으로 모니터링할 수 있다.
이를 이해하기 위해서는 첫 번째 终端에 아래 명령어를 실행하자.
$ tail -f /var/log/messages Apr 2 15:13:28 TecMint NetworkManager[741]: [1680462808.8441] policy: set-hostname: current hostname was changed outside NetworkManager: 'TecMint' Apr 2 15:13:28 TecMint systemd[1]: Starting Network Manager Script Dispatcher Service... Apr 2 15:13:28 TecMint systemd[1]: Started Network Manager Script Dispatcher Service. Apr 2 15:13:37 TecMint arpwatch[11001]: rename arp.dat -> arp.dat-: Operation not permitted Apr 2 15:13:38 TecMint systemd[1]: NetworkManager-dispatcher.service: Deactivated successfully. Apr 2 15:13:58 TecMint systemd[1]: systemd-hostnamed.service: Deactivated successfully. Apr 2 15:18:03 TecMint systemd[1]: Starting dnf makecache... Apr 2 15:18:03 TecMint dnf[202235]: Metadata cache refreshed recently. Apr 2 15:18:03 TecMint systemd[1]: dnf-makecache.service: Deactivated successfully. Apr 2 15:18:03 TecMint systemd[1]: Finished dnf makecache.
여기에서는 명령어가 마지막 열을 표시한 후에 무한히 기다리고 있음을 볼 수 있습니다.
다음으로 다른 터미널을 열고 몇 가지 텍스트를 numbers-2.txt 파일에 추가합시다:
$ echo "View Logs in Real-Time" >> /var/log/messages
이제 새로 추가된 텍스트를 보기 위해 첫 번째 터미널로 전환해 봅시다:
$ tail -f /var/log/messages Apr 2 15:13:28 TecMint NetworkManager[741]: [1680462808.8441] policy: set-hostname: current hostname was changed outside NetworkManager: 'TecMint' Apr 2 15:13:28 TecMint systemd[1]: Starting Network Manager Script Dispatcher Service... Apr 2 15:13:28 TecMint systemd[1]: Started Network Manager Script Dispatcher Service. Apr 2 15:13:37 TecMint arpwatch[11001]: rename arp.dat -> arp.dat-: Operation not permitted Apr 2 15:13:38 TecMint systemd[1]: NetworkManager-dispatcher.service: Deactivated successfully. Apr 2 15:13:58 TecMint systemd[1]: systemd-hostnamed.service: Deactivated successfully. Apr 2 15:18:03 TecMint systemd[1]: Starting dnf makecache... Apr 2 15:18:03 TecMint dnf[202235]: Metadata cache refreshed recently. Apr 2 15:18:03 TecMint systemd[1]: dnf-makecache.service: Deactivated successfully. Apr 2 15:18:03 TecMint systemd[1]: Finished dnf makecache. View Logs in Real-Time
여기에서는 tail 명령어가 새로 추가된 텍스트를 표시합니다.
Linux에서 tail 명령어의 다른 좋은 예를 알고 계신가요? 아래 댓글에서 의견을 알려주세요.