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 / 명령어 / awk - 필드별 텍스트 분석과 계산

Linux / 명령어 / awk - 필드별 텍스트 분석과 계산

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

Linux / 리눅스 역사 - 1991년 취미 프로젝트가 세계 인프라가 되기까지

Linux / 리눅스 역사 - 1991년 취미 프로젝트가 세계 인프라가 되기까지

리눅스는 1991년 시작된 커널 프로젝트에서 서버·클라우드·모바일을 떠받치는 기반 기술로 성장했습니다. UNIX와 GNU의 배경부터 배포판과 공동 개발 생태계의 확장까지 핵심 연표로 정리합니다.

Linux / 명령어 / apropos - 설명 키워드로 명령어 검색

Linux / 명령어 / apropos - 설명 키워드로 명령어 검색

apropos 명령어로 이름을 모르는 리눅스 명령과 매뉴얼을 기능 키워드로 찾는 방법을 설명합니다. 정규 표현식, 모든 키워드 일치, 섹션 제한과 검색 결과가 없을 때의 해결 방법을 다룹니다.

Linux / 명령어 / du - 파일과 디렉터리 용량 확인

Linux / 명령어 / du - 파일과 디렉터리 용량 확인

Linux du 명령어로 디렉터리와 파일의 디스크 사용량을 확인하고 큰 항목을 찾는 방법을 설명합니다. apparent size, 파일시스템 경계와 df 결과가 다른 이유도 정리합니다.

Linux / 명령어 / cat - 파일 내용 출력과 결합

Linux / 명령어 / cat - 파일 내용 출력과 결합

Linux cat 명령어로 텍스트 파일을 출력하고 여러 파일을 이어 붙이는 방법을 설명합니다. 줄 번호 표시, 빈 줄 압축, 리디렉션과 큰 파일 처리 시 주의점도 정리합니다.

Linux / 명령어 / pacman - Arch Linux에서 패키지 설치와 전체 시스템 업데이트

Linux / 명령어 / pacman - Arch Linux에서 패키지 설치와 전체 시스템 업데이트

Linux pacman 명령어의 적용 배포판과 기본 작업을 설명합니다. 패키지 조회·설치 예제, 주요 옵션과 시스템 변경 시 주의점을 알아봅니다.

Linux / 명령어 / whoami - 현재 유효 사용자 이름 확인

Linux / 명령어 / whoami - 현재 유효 사용자 이름 확인

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

Linux / Memo

Linux / Memo

리눅스와 관련된 여러 정보를 정리합니다.

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

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

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

Linux / 명령어 / tr - 표준 입력의 문자 치환과 삭제

Linux / 명령어 / tr - 표준 입력의 문자 치환과 삭제

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