Linux / 명령어 / tac - 파일을 마지막 줄부터 역순 출력
tac은 파일의 레코드를 마지막부터 첫 번째 순서로 출력합니다. 기본 레코드 구분자는 줄바꿈이므로 로그의 최근 항목을 먼저 훑거나 줄 순서를 뒤집을 때 사용할 수 있습니다.
이 글에서는 tac의 기본 문법과 주요 옵션, 실제 사용 예제, 관련 명령과의 차이, 사용할 때 주의할 점을 설명합니다.
tac 명령어란?
cat의 이름을 거꾸로 쓴 명령으로, 파일의 바이트 자체가 아니라 구분자로 나뉜 레코드 순서를 뒤집습니다. 여러 파일을 지정하면 각 파일을 순서대로 처리하되 각 파일 내부의 레코드가 역순으로 출력됩니다.
기본 문법
tac [옵션] [파일 ...]
옵션과 세부 동작은 구현과 버전에 따라 달라질 수 있습니다. 현재 시스템에서는 tac --help와 man tac으로 설치된 명령의 설명을 확인하세요.
tac 기본 사용법
줄 순서 뒤집기
마지막 줄이 가장 먼저 출력됩니다.
tac events.log
여러 파일 처리하기
각 파일 내부가 역순이 되며 파일 인수의 순서는 유지됩니다.
tac january.log february.log
표준 입력 역순 출력하기
파이프 입력도 처리할 수 있지만 전체 입력을 받아야 첫 레코드를 결정할 수 있습니다.
printf 'one\ntwo\nthree\n' | tac
행 순서가 뒤집히는 결과
tac은 문자가 아니라 행의 순서를 역순으로 출력합니다. 각 행 안의 글자 순서는 그대로입니다.
printf 'first\nsecond\nthird\n' | tac
예시 출력:
third second first
시간 순서대로 쌓이는 로그를 최근 행부터 읽을 때 유용하지만, 타임스탬프 기준 정렬과 같은 작업은 아닙니다.
주요 옵션
| 옵션 | 설명 |
|---|---|
-s STRING |
줄바꿈 대신 사용할 레코드 구분자를 지정합니다. |
-b |
구분자를 다음 레코드의 앞부분에 붙인 것으로 취급합니다. |
-r |
구분자 문자열을 정규 표현식으로 해석합니다. |
--help |
현재 설치된 구현의 도움말을 표시합니다. |
실전 활용 예제
최근 로그부터 훑기
단순 텍스트 로그라면 마지막 기록부터 볼 수 있습니다. 지속적으로 추가되는 로그는 tail -f가 더 적합합니다.
tac application.log | less
구분자가 다른 레코드 뒤집기
GNU tac의 -s로 사용자 정의 구분자를 지정합니다.
tac -s '---' records.txt
조건에 맞는 최근 항목 찾기
역순 출력 후 첫 일치에서 중단하면 전체 결과를 화면에 쏟지 않고 최근 항목을 찾을 수 있습니다.
tac access.log | grep -m 1 'ERROR'
tac와 관련 명령 비교
| 명령 | 주요 역할 | 적합한 상황 |
|---|---|---|
tac |
레코드 순서 역전 | 마지막 줄부터 읽기 |
cat |
원래 순서로 출력 | 출력과 파일 결합 |
tail |
끝부분 일부 출력 | 최근 몇 줄만 확인 |
sort -r |
값 기준 역정렬 | 내용을 기준으로 정렬 |
사용할 때 주의할 점
정렬 명령이 아닙니다
내용의 크기나 시간값을 해석하지 않고 현재 레코드 순서만 뒤집습니다.
큰 스트림은 지연될 수 있습니다
입력의 끝을 알아야 역순 출력을 시작할 수 있으므로 끝나지 않는 스트림에는 맞지 않습니다.
구분자 옵션은 이식성을 확인합니다
-s와 정규 표현식 동작은 GNU 구현을 기준으로 하므로 대상 시스템의 매뉴얼을 확인합니다.
FAQ
tac과 sort -r은 같은가요?
아닙니다. tac은 현재 줄 순서를 뒤집고, sort -r은 각 줄의 값을 비교해 역정렬합니다.
마지막 10줄만 거꾸로 보려면 어떻게 하나요?
tail -n 10 파일 | tac처럼 조합할 수 있습니다.
실시간 로그를 역순으로 볼 수 있나요?
끝나지 않는 입력은 역순 처리가 곤란합니다. 실시간 감시는 tail -f를 사용하세요.
여러 파일을 하나로 섞어 역순 처리하나요?
일반적으로 각 파일을 인수 순서대로 읽고 파일별 레코드를 역순으로 출력합니다.









