Home » OS » 리눅스 » 리눅스 tail 명령어를 알아봅시다.

리눅스 tail 명령어를 알아봅시다.

리눅스 tail 명령어는 파일의 끝 n개의 줄을 보는 데 씁니다. head 명령어와는 반대되는 역할을 한다고 소개한 적이 있는데요. 이 글에서 알아보겠습니다.


명령어에 대한 설명

man tail을 입력해서, 리눅스 tail 명령어를 어떻게 사용하는지 보도록 하겠습니다.

[그림 1] tail 에 대한 설명

파일들의 끝 부분을 출력하기 위해 쓰입니다. 몇 가지 옵션들을 보겠습니다.

[그림 2] -n 옵션

-n 옵션을 봅시다. 이는 몇 개의 줄을 출력할 것인지를 나타냅니다. tail의 경우, 디폴트로 마지막 10개의 줄을 출력하는데요. NUM을 주면, 마지막 NUM개의 줄을 출력합니다. +NUM과 같이 앞에 +를 줄 수도 있는데요. 이 경우, NUM번째 줄부터 출력하게 됩니다.

[그림 3] -f 옵션

-f 옵션은, 파일이 커짐에 따라, 덧붙여지는 데이터를 출력합니다. 특히 로그 파일은 쌓이는 특성이 있기 때문에, -f 옵션과 잘 어울립니다. 이것도 한 번 써 보면서 이해해 보도록 하겠습니다.


명령어 사용해 보기

몇 가지 옵션들을 설명했으니, 직접 사용해 보도록 하겠습니다. 먼저, 1.txt는 1부터 11까지 한 줄에 하나씩 있는 파일입니다.

tail 1.txt를 입력해 봅시다. 그러면, 마지막 10개의 줄을 가지고 옵니다. 그러면, 1, 2, … , 11을 출력하는 것이 아니라, 2, … , 11을 출력하게 됩니다.

이제 -n 3 옵션을 줘 봅시다. 그러면, 끝에서 10개의 줄을 출력하는 것이 아니라, 3개의 줄을 출력하게 됩니다. 9, 10, 11이 출력되겠지요. 만약에 1.txt의 3번째 줄부터 끝까지 출력하고 싶으면 어떻게 하면 될까요? -n 3 대신에 -n +3을 넣으면 됩니다.

앞에 +를 넣으면, NUM번째 줄부터 끝까지 출력하기 때문입니다.

-n +3을 넣었습니다. 그랬더니, 3번째 줄에 있는 3부터, 맨 마지막 줄에 있는 11까지 출력되었음을 볼 수 있습니다. 여기서 질문. 파일의 s번째 줄부터 e번째 줄까지 출력하고 싶습니다. 이 때에는 어떻게 해야 할까요?

  • 먼저, 맨 앞부터 e개의 줄을 불러옵니다. head 명령어로 충분히 할 수 있습니다.
  • 이 결과의 s번째 줄부터 출력합니다. tail -n +NUM 옵션으로 할 수 있습니다.

이것을 코드로 옮겨볼까요? 1.txt의 3번째 줄부터 5번째 줄까지 출력해야 한다고 해 봅시다.

e의 값이 5이지요? 따라서, head 명령어로 5개의 명령어를 불러옵니다.

  • 이 결과를 tail의 입력으로 받으려면 piping 처리를 해야 합니다.
  • 결과 셋에서 3번째 줄부터 불러오려면 tail -n +3을 입력하면 됩니다.

이 두 명령어를 piping 처리하면, 3번째 줄부터 5번째 줄까지 출력하게 됩니다.


파일 관찰하기

파일의 변화를 관찰하기 위해, -f 옵션을 쓴다고 했습니다.

tail -f 1.txt를 입력해 보겠습니다. 그러면, 1.txt의 마지막 10개의 줄이 나오고, 입력이 멈춰 있습니다. 현재 tail 명령어를 수행한 세션을 1번 세션이라 해 보겠습니다. 다른 세션을 열어서, 1.txt에 내용을 append 해 보겠습니다.

1.txt에 echo 1의 결과를 append 시킵니다. 이 명령어를 실행한 세션을 2번 세션이라 하겠습니다.

다시, 1번 세션을 보면, 1이 추가되었음을 볼 수 있습니다. 로그 파일은 append 되는 속성이 있기 때문에, -f 옵션으로 변화를 관찰할 수 있습니다.

Leave a Comment

7 + 12 =