이 글은 Linux 팁 & 트릭 시리즈의 일부로, Linux에서 가장 많이 사용되는 cat 명령어와 그 반대 기능을 수행하는 tac 명령어(파일 내용을 역순으로 출력)의 기본적인 사용법을 실전 예제와 함께 자세히 설명합니다.
함께 읽기: Linux에서 유용한 'cat' 명령어 13가지 예제
Linux에서 cat 명령어의 기본 사용법
cat 명령어는 Concatenate(연결하다)의 약자로, *nix 계열 시스템에서 가장 널리 쓰이는 명령어 중 하나입니다. 가장 기본적인 용도는 파일을 읽어 stdout(표준 출력)으로 내보내는 것입니다. 즉, 터미널 화면에 파일의 내용을 그대로 출력하는 기능입니다.
# cat file.txt
또한 cat 명령어는 여러 개의 파일을 한꺼번에 읽어 결합된 결과를 화면에 출력할 수도 있습니다. 아래 예제를 참고하세요.
# cat file1.txt file2.txt file3.txt
Linux 리다이렉션 연산자인 ">"를 사용하면 여러 파일을 하나의 파일로 합칠 수도 있습니다.
# cat file1.txt file2.txt file3.txt > file-all.txt
추가 리다이렉션 연산자(>>)를 활용하면 새로운 파일의 내용을 기존 file-all.txt 파일의 맨 아래에 덧붙일 수 있습니다.
# cat file4.txt >> file-all.txt
cat 명령어는 파일의 내용을 새 파일로 복사하는 용도로도 사용할 수 있으며, 이때 새 파일의 이름은 임의로 지정할 수 있습니다. 예를 들어 현재 위치의 파일을 /tmp/ 디렉터리로 복사해 보겠습니다.
# cat file1.txt > /tmp/file1.txt
파일을 /tmp/ 디렉터리로 복사하면서 동시에 이름을 변경할 수도 있습니다.
# cat file1.txt > /tmp/newfile.cfg
다소 생소하지만, cat 명령어로 아래와 같은 문법을 사용해 새 파일을 생성할 수도 있습니다. 파일 작성을 마친 후 CTRL+D 키를 누르면 저장하고 종료됩니다.
# cat > new_file.txt
빈 줄을 포함하여 파일의 모든 출력 라인에 번호를 붙이려면 -n 옵션을 사용합니다.
# cat -n file-all.txt
반대로 빈 줄을 제외한 실제 내용이 있는 라인에만 번호를 표시하려면 -b 옵션을 사용합니다.
# cat -b file-all.txt
Linux cat 명령어에 대해 더 알고 싶으신가요? 그렇다면 'Linux에서 유용한 cat 명령어 13가지 예제' 관련 글도 확인해 보세요.
Linux에서 tac 명령어 활용법 익히기
반면, *nix 시스템에서 상대적으로 덜 알려져 있고 사용 빈도도 낮은 명령어가 바로 tac입니다. tac은 말그대로 cat 명령어의 반대 버전(철자도 거꾸로 되어 있습니다)으로, 파일의 각 라인을 맨 아래 줄부터 시작하여 맨 위 줄까지 역순으로 표준 출력에 출력합니다.
# tac file-all.txt
이 명령어의 가장 중요한 옵션 중 하나는 -s 스위치입니다. 이 옵션을 사용하면 파일 내용을 특정 문자열이나 키워드를 기준으로 분리하여 처리할 수 있습니다.
# tac file-all.txt --separator "two"
tac 명령어의 또 다른 중요한 활용처는 로그 파일 디버깅입니다. 로그 내용의 시간 순서를 뒤집어 최신 로그부터 확인할 때 매우 유용합니다.
$ tac /var/log/auth.log 마지막 라인들만 표시하려면 $ tail /var/log/auth.log | tac
실행 결과 예시
tecmint@tecmint ~ $ tac /var/log/auth.log pr 6 16:09:01 tecmint CRON[17714]: pam_unix(cron:session): session closed for user root Apr 6 16:09:01 tecmint CRON[17714]: pam_unix(cron:session): session opened for user root by (uid=0) Apr 6 16:05:01 tecmint CRON[17582]: pam_unix(cron:session): session closed for user root Apr 6 16:05:01 tecmint CRON[17583]: pam_unix(cron:session): session closed for user root Apr 6 16:05:01 tecmint CRON[17583]: pam_unix(cron:session): session opened for user root by (uid=0) Apr 6 16:05:01 tecmint CRON[17582]: pam_unix(cron:session): session opened for user root by (uid=0) Apr 6 16:00:01 tecmint CRON[17434]: pam_unix(cron:session): session closed for user root ....
tecmint@tecmint ~ $ tail /var/log/auth.log | tac Apr 6 16:09:01 tecmint CRON[17714]: pam_unix(cron:session): session closed for user root Apr 6 16:09:01 tecmint CRON[17714]: pam_unix(cron:session): session opened for user root by (uid=0) Apr 6 16:05:01 tecmint CRON[17582]: pam_unix(cron:session): session closed for user root Apr 6 16:05:01 tecmint CRON[17583]: pam_unix(cron:session): session closed for user root Apr 6 16:05:01 tecmint CRON[17583]: pam_unix(cron:session): session opened for user root by (uid=0) Apr 6 16:05:01 tecmint CRON[17582]: pam_unix(cron:session): session opened for user root by (uid=0) Apr 6 16:00:01 tecmint CRON[17434]: pam_unix(cron:session): session closed for user root Apr 6 16:00:01 tecmint CRON[17434]: pam_unix(cron:session): session opened for user root by (uid=0) Apr 6 15:55:02 tecmint CRON[17194]: pam_unix(cron:session): session closed for user root Apr 6 15:55:01 tecmint CRON[17195]: pam_unix(cron:session): session closed for user root ...
cat 명령어와 마찬가지로 tac도 텍스트 파일을 다루는 데 탁월한 성능을 발휘합니다. 다만 바이너리 파일이나, 첫 번째 줄이 실행 프로그램을 지정하는 스크립트 파일 같은 다른 유형의 파일에는 사용하지 않는 것이 좋습니다.