Linux에서 tail 명령의 실용적인 예 9개

우리는 주로 被称为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 명령어의 다른 좋은 예를 알고 계신가요? 아래 댓글에서 의견을 알려주세요.

Source:
https://www.tecmint.com/tail-command-linux/