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를 사용하세요.

여러 파일을 하나로 섞어 역순 처리하나요?

일반적으로 각 파일을 인수 순서대로 읽고 파일별 레코드를 역순으로 출력합니다.

관련 글과 공식 문서

같은 카테고리의 다른 글
Linux / 명령어 / chgrp - 파일 소유 그룹 변경

Linux / 명령어 / chgrp - 파일 소유 그룹 변경

Linux chgrp 명령어의 기본 문법과 실제 사용 예제를 설명합니다. 주요 옵션과 결과를 해석할 때 주의할 점을 확인할 수 있습니다.

Linux 강좌 / 파일 비교하기 - diff와 cmp의 차이와 실습

Linux 강좌 / 파일 비교하기 - diff와 cmp의 차이와 실습

diff와 cmp로 두 파일의 차이를 확인하고 unified diff를 읽는 법을 익힙니다. 내용이 다른 경우와 명령 실행 오류의 종료 상태도 구별합니다.

Linux / 명령어 / gzip - 파일을 gzip 형식으로 압축하기

Linux / 명령어 / gzip - 파일을 gzip 형식으로 압축하기

Linux gzip 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / scp - SSH로 로컬·원격 파일 복사

Linux / 명령어 / scp - SSH로 로컬·원격 파일 복사

Linux scp 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux / 명령어 / unzip - ZIP 파일 목록 확인과 안전한 압축 해제

Linux / 명령어 / unzip - ZIP 파일 목록 확인과 안전한 압축 해제

Linux unzip 명령어의 용도와 기본 문법을 알아봅니다. 파일 처리 예제, 주요 옵션과 원본 보존·덮어쓰기 주의점을 설명합니다.

Linux / 명령어 / mv - 파일 이동과 이름 변경

Linux / 명령어 / mv - 파일 이동과 이름 변경

Linux mv 명령어로 파일과 디렉터리를 이동하거나 이름을 변경하는 방법을 설명합니다. 덮어쓰기 방지, 파일 시스템 간 이동과 안전한 자동화 방법도 정리합니다.

Linux / 명령어 / tail - 파일의 마지막 내용과 로그 실시간 확인

Linux / 명령어 / tail - 파일의 마지막 내용과 로그 실시간 확인

Linux tail 명령어로 파일의 마지막 행과 바이트를 확인하고 새로 추가되는 로그를 추적하는 방법을 설명합니다. -n, -f, -F 차이와 로그 로테이션, 필터링 및 여러 파일 모니터링 예제를 정리합니다.

Linux / 명령어 / ss - 열린 포트와 소켓 연결 상태 확인

Linux / 명령어 / ss - 열린 포트와 소켓 연결 상태 확인

Linux ss 명령어의 기능과 기본 문법을 설명합니다. 실제 사용 예제, 주요 옵션과 작업 전 확인할 점을 알아봅니다.

Linux 강좌 / 파일 내용 읽기 - cat, less, more, head, tail

Linux 강좌 / 파일 내용 읽기 - cat, less, more, head, tail

cat, less, more, head, tail로 리눅스 파일 내용을 읽는 방법을 비교합니다. 짧은 파일과 긴 파일, 앞·뒤 일부를 확인할 때의 선택 기준과 실습 결과를 설명합니다.

Linux 강좌 / 하드 링크와 심볼릭 링크 이해하기 - 차이와 생성 실습

Linux 강좌 / 하드 링크와 심볼릭 링크 이해하기 - 차이와 생성 실습

하드 링크와 심볼릭 링크의 구조적 차이를 inode와 경로로 설명하고, 링크를 직접 만들어 이름 변경 후 동작까지 확인합니다.