tail 명령어를 여러 옵션과 함께 사용해보자
환경
- Linux 기반 시스템
- Ubuntu 16.04
- Bash shell(/bin/bash)
tail 명령어
tail [OPTION]... [FILE]...
tail
: 파일의 내용을 뒤에서부터 출력해주는 명령어입니다. 파이프를 통해서 받은 입력을 출력하는것도 가능하며 여러가지 옵션과 함께 특정 프로세스나 파일의 로그를 볼 때 주로 사용합니다.- 파일을 변수로 주지만 파일을 사용하지 않으면 표준 입력을 받아서 출력합니다.
tail 명령어 옵션
tail [OPTION]... [FILE]...
-c, –bytes=K
- 뒤에서부터 K bytes만큼 문자를 출력합니다. 해당 옵션과 함께 +K처럼 +를 사용하면 앞에서 K번째의 문자부터 끝까지 출력을 합니다.
-n, –lines=K
- 뒤에서부터 K개의 줄을 출력합니다. 해당 옵션과 함께 +K처럼 +를 사용하면 앞에서 K번째 줄부터 끝까지 출력을 합니다. 기본값은 10으로 해당 옵션을 주지 않으면 하위 10개의 줄을 출력합니다.
-f, –follow[={name|descriptor}]
- 계속해서 파일의 상태를 감시하며 파일에 내용이 뒤에 추가될 때마다 새로 추가된 내용을 보여줍니다. 기본값은 descriptor입니다.
- 기본값이 descriptor이기 때문에 파일의 이름이 변경되면 변경된 이전 파일이 아닌 변경된 이름의 파일에 대해서 내용들을 출력하며 파일 이름이 변경되기 전 파일을 보고 싶다면 아래 나올
-F
옵션 혹은--follow=name --retry
옵션을 사용하면 됩니다.
-q, –quiet, –silent
- 파일의 헤더를 출력하지 않습니다. 상단에 파일 이름을 출력하지 않습니다.
-v, –verbose
- 파일의 헤더를 출력합니다. 상단에 파일 이름이 출력됩니다.
-F
--follow=name --retry
의 옵션과 같습니다.- tail 명령어 실행도중 파일명이 변경 되었더라도 tail 명령어를 실행했을 때 사용한 파일명의 파일 내용을 계속 출력합니다.
–max-unchanged-stats=N
-f or --follow=name
과 함께 쓰이며 파일이 변경되지 않았더라도 N번 후에 파일을 다시 확인합니다.
–pid=PID
-f or --follow
와 함께 쓰이며 옵션으로 준 PID가 종료되면 해당 tail 옵션도 종료합니다. 특정 프로세스의 로그를 남길 때 유용합니다.
–retry
- 파일에 접근할 수 없는 상황이 되었을 때 파일을 읽으려고 꾸준하게 시도하는 옵션으로
--follow=name
와 함께 쓰입니다.
-s, –sleep-interval=N
-f or --follow
와 함께 쓰이며 해당 파일을 확일할 때 N초만큼 sleep상태였다가 파일을 확인합니다.--pid=PID
와 함께 쓰이면 적어도 N초 간격에 한번으로 해당 프로세스를 확인합니다.
예제
예제에 이용할 파일 생성
$ cat << EOF > test.txt
123
456
789
101112
131415
161718
192021
222324
252627
282930
313233
343536
373839
EOF
기본
- 기본 사용법
- 파일 1개
$ tail test.txt
101112
131415
161718
192021
222324
252627
282930
313233
343536
373839
- 파일 2개 이상도 가능합니다.
$ tail test.txt test2.txt
==> test.txt <==
101112
131415
161718
192021
...
==> test2.txt <==
a
a
...
n옵션 예제
- 하위 3개의 줄 출력
$ tail -n 3 test.txt
313233
343536
373839
- 앞에서 3번째의 줄부터 출력
$ tail -n +3 test.txt
789
101112
131415
161718
192021
222324
252627
282930
313233
343536
373839
c옵션 예제
- 하위 3개의 문자 출력
- 3과9 2개의 문자가 나오는건 1 byte의 개행문자(
0a
)가 뒤에 포함되어있기 때문입니다.
$ tail -c 3 test.txt
39
- 앞에서 21번째의 문자부터 출력
$ tail -c +21 test.txt
31415
161718
192021
222324
252627
282930
313233
343536
373839
f옵션 예제
- 파일 입력 전
$ tail -f test.txt
101112
131415
161718
192021
222324
252627
282930
313233
343536
373839
- 파일에 한 줄 추가
$ echo "new line" >> test.txt
- 파일 입력 후 추가된 한 줄
$ tail -f test.txt
101112
131415
161718
192021
222324
252627
282930
313233
343536
373839
new line
- 좌측이 tail 옵션을 진행한 화면이고 우측이 파일에 한 줄을 추가하는 부분으로 한 줄을 추가하면 그 다음 사진처럼 새로운 줄이 추가된게 좌측 tail 명령어 실행화면에 나타난걸 알 수 있습니다.
- 만약 f옵션을 이용해 트래킹하고 있는 파일의 이름이 변경되면 해당 변경된 파일로 file descriptor가 이동하기 때문에 변경된 파일을 추적하게 됩니다.
- tail 명령어를 사용할 때 이용한 파일 이름을 계속 트래킹하고 싶다면
-F
옵션 혹은--follow=name --retry
옵션을 사용하면 됩니다.
q옵션 예제
- q옵션을 이용한 파일명 생략
- q옵션은 아래처럼 여러 파일의 내용을 출력할 때 나오는 헤더를 생략할 때 사용합니다.
$ tail -n 3 test.txt test2.txt
==> test.txt <==
343536
373839
new line
==> test2.txt <==
a
a
a
$ tail -n 3 -v test.txt test2.txt
343536
373839
new line
a
a
a
v옵션 예제
- 파일명(헤더)을 함께 출력하기
$ tail -n 3 -v test.txt
==> test.txt <==
343536
373839
new line
F옵션 예제
- 특정 파일의 이름이 변경되거나 삭제되더라고 해당 이름의 파일을 계속해서 트래킹 하고 싶은 경우
- 중간에 파일에 접근할 수 없는 경우가 되더라도 다시 파일이 생기면 아래처럼 계속 출력을 진행합니다.
$ tail -F test.txt
101112
131415
161718
192021
222324
252627
282930
313233
343536
373839
t
tail: 'test.txt' has become inaccessible: No such file or directory
tail: 'test.txt' has appeared; following new file
t
pid옵션 예제
- pid를 위한 쉘스크립트 작성 및 실행
$ cat << EOF >> pid_test_shell.sh
#!/bin/bash
while true
do
sleep 1
done
EOF
$ chmod +x pid_test_shell.sh
$ ./pid_test_shell.sh &
[1] 8201
- 해당 프로세스가 작동중일 때 tail 명령어를 실행
$ tail -f test.txt --pid 8201
- 아래처럼 해당 프로세스를 없애면 tail 명령어도 함께 종료됩니다.
$ sudo kill -9 8201