cat은 파일을 순차적으로 읽고, 표준 출력에 쓰는 표준 유닉스 유틸리티입니다. rm 이름은 파일을 연결하는(catenate) 기능에서 파생됩니다.
History
cat은 유닉스의 초기 버전, 예를 들어, 버전 1 유닉스의 일부였었고, 단일 파일을 화면에 복사하기 위한 PDP-7와 Multics 유틸리티, pr을 대체했습니다.
GNU coreutils에 번들된 cat 버전은 Torbjorn Granlund와 Richard Stallman에 의해 작성되었습니다.
Usage
단일 유닉스 사양은 해당 인수에 주어진 순서대로 파일을 읽고 그것들의 내용을 같은 순서로 표준 출력에 쓰는 cat의 연산을 정의합니다. 그 사양은 버퍼링되지 않은 출력에 대해 하나의 옵션 플래그, u를 지원하도록 요구하며, 각 바이트는 그것을 읽은 후에 기록된다는 의미입니다. GNU 핵심 유틸리티를 사용하는 시스템과 같은 일부 운영 시스템은 기본적으로 이것을 수행하고 플래그를 무시합니다.
만약 입력 파일 이름 중 하나가 단일 하이픈 (-)으로 지정돠면, cat은 시퀀스의 해당 지점에서 표준 입력을 읽습니다. 만약 파일이 지정되지 않으면, cat은 오직 표준 입력에서 읽습니다.
명령-구문은 다음입니다:
cat [options] [file_names]
Options
일부 cat 옵션의 예제:[4]
- -b (GNU: --number-nonblank), 비어 있지 않은 출력 줄의 숫자
- -e는 -v를 의미하지만 역시 줄-의-끝 문자로 $를 표시합니다 (GNU only: -E와 같지만, -v를 암시하지 않음)
- -n (GNU: --number), 모든 출력 줄의 숫자
- -s (GNU: --squeeze-blank), 여러 개의 인접한 빈 줄을 쥐어짜기
- -t는 -v를 의미하지만, 역시 탭을 ^I로 표시합니다 (GNU: -T와 같지만, -v를 의미하지 않음)
- -u는 표준 출력에 대해 버퍼되지 않은 I/O를 사용합니다. POSIX는 이 옵션 없이 행위를 지정하지 않습니다.
- -v (GNU: --show-nonprinting), 탭과 줄의 끝 문자를 제외하고 비-인쇄 문자를 표시합니다.
Use cases
cat은 입력 스트림에서 일반 텍스트 또는 이진 데이터를 예상하는 프로그램에 파일을 파이프하기 위해 사용할 수 있습니다. cat은 연결하고 출력할 때 텍스트가 아닌 바이트를 파괴하지 않습니다. 이를테면, 두 가지 주요 사용 사례는 텍스트 파일과 특정 형식과 호환되는 이진 파일 유형입니다.
텍스트 연결은 ASCII와 같은 같은 레거시 인코딩을 사용하는 텍스트 파일로 제한됩니다. cat은 바이트 순서 표시를 가지는 유니코드 텍스트 파일 또는 서로 다른 텍스트 인코딩을 사용하는 파일을 연결하는 방법을 제공하지 않습니다.
많은 구조화된 이진 데이터 집합에 대해, 결합된 결과 파일이 유효하지 않을 수 있습니다; 예를 들어, 만약 파일이 고유한 머리글 또는 바닥글을 가지면, 결과는 이것들을 허위로 복제할 것입니다. 어쨌든, 일부 멀티미디어 디지털 컨테이너 형식에 대해, 결과 파일이 유효하고, 따라서 cat은 파일을 추가하는 효과적인 수단을 제공합니다. 비디오 스트림은 cat이 문제 없이 연결할 수 있는 파일의 중요한 예제, 예를 들어, MPEG 프로그램 스트림 (MPEG-1와 MPEG-2) 및 DV (디지털 비디오)가 될 것이며, 이것들은 근본적으로 단순한 패킷 스트림입니다.
Examples
Command | Explanation |
cat file1.txt | 파일의 내용을 표시합니다 |
cat file1.txt file2.txt | 두 개의 텍스트 파일을 연결하고 결과를 터미널에 표시합니다 |
cat file1.txt file2.txt > newcombinedfile.txt | 두 개의 텍스트 파일을 연결하고 그것들을 새로운 파일에 씁니다 |
cat >newfile.txt | newfile.txt라는 파일을 생성합니다. 원하는 입력을 타이핑하고 CTRL+D를 눌러 완료하십시오. 텍스트는 newfile.txt 파일에 있을 것입니다. |
cat -n file1.txt file2.txt > newnumberedfile.txt | -n 옵션과 함께 cat의 일부 구현은 줄에 번호를 매길 수도 있습니다. |
cat file1.txt > file2.txt | file1.txt의 내용을 file2.txt에 복사합니다 |
cat file1.txt >> file2.txt | file1.txt의 내용을 file2.txt에 덧붙입니다 |
cat file1.txt file2.txt file3.txt | sort > test4 | 파일을 연결하고, 전체 줄의 집합을 정렬하고, 출력을 새로 생성된 파일에 씁니다. |
cat file1.txt file2.txt | less | file1과 file2를 입력으로 연결하여 "less" 프로그램을 실행합니다. |
command | cat | TTY에 직접 쓸 때 "명령" 특수 동작 (예를 들어, 페이징)을 취소합니다 (아래 UUOC 참조). |
Unix culture
Jargon file definition
전문 용어 파일 버전 4.4.7은 이것을 cat의 정의로 나열합니다:
- 전체 파일을 일시 중지 없이 화면이나 다른 출력 싱크에 분출합니다 (동의어, 폭발).
- 확장에 의해, 준비되지 않은 대상에 대량의 데이터를 덤프하거나 신중하게 탐색할 의도가 없습니다. 사용법: 어리석은 것으로 여겨집니다. 드문 외부 유닉스 사이트. dd, BLT도 참조하십시오.
유닉스 팬 사이에서, cat(1)은 사용자-인터페이스 설계의 훌륭한 예제로 여겨지는데, 왜냐하면 그것은 파일 사이의 공백 또는 헤더와 같은 장황한 내용 전달 없이 파일 내용을 넘겨주고, 그것은 텍스트 줄로 구성될 필요가 없지만, 임의의 종류의 데이터와 함께 작동하기 때문입니다.
유닉스 비평가들 사이에서, cat(1)은 나쁜 사용자-인터페이스 설계의 정식의 예제로 여겨지는데, 왜냐하면 그것의 끔찍할 정도로 불분명한 이름 때문입니다. 두 개 이상의 파일을 연결하는 것보다 단일 파일을 표준 출력으로 내보내는 것이 훨씬 더 자주 사용됩니다. 이전 작업에 대한 이름 cat은 LISP의 cdr만큼 직관적이지 않습니다.
Useless use of cat
cat의 쓸모없는 사용 (UUOC)은 사용자에게 편의 기능만 제공하는 명령줄 구성에 대한 공통적인 유닉스 전문 용어입니다. 컴퓨팅에서, 정의의 두 번째 의미에서 "남용(abuse)"이라는 단어는 언어 구성의 과도하거나 불필요한 사용을 폄하하기 위해 사용됩니다; 따라서 cat의 남용은 때때로 "cat abuse"라고 불립니다. 공통적인 cat 남용의 예제는 다음과 같습니다:
cat filename | command arg1 arg2 argn
이것은 다음 형식 중 하나로 stdin 대신에 리다이렉션을 사용하여 다시-쓰일 수 있습니다 (첫 번째 형식이 더 전통적입니다):
command arg1 arg2 argn < filename
<filename command arg1 arg2 argn
다른 이점 외에도, 입력 리다이렉션 형식은 명령을 파일에 대해 임의 접근을 수행하도록 허용하지만, cat 예제는 그렇지 않습니다. 리다이렉션 형식은 명령이 완전히 접근할 수 있는 stdin 파일 디스크립터로 파일을 열지만, cat 형식은 단순히 데이터를 바이트 스트림으로 제공하기 때문입니다.
cat이 필요하지 않은 또 다른 공통적인 경우는 명령이 기본적으로 stdin에서 작동하지만, 파일 이름이 인수로 제공되면 파일에서 읽는 경우입니다. 이것은 많은 공통적인 명령의 경우입니다; 다음 예제
cat "$file" | grep "$pattern"
cat "$file" | less
는 대신 다음으로 쓰일 수 있습니다:
grep "$pattern" "$file"
less "$file"
단일 파일에 대한 cat의 공통적인 대화식 사용은 파일의 내용을 표준 출력으로 출력하는 것입니다. 어쨌든, 출력이 파이프되거나 리다이렉션되면, cat은 필요하지 않습니다.
UUOC로 작성된 cat은 가독성을 위해 여전히 선호될 수 있는데, 왜냐하면 파이프 스트림을 왼쪽에서 오른쪽으로 읽는 것이 개념화하기 더 쉬울 수 있기 때문입니다. 역시, "<" 대신 (종종 키보드에서 인접한) 리다이렉션 기호 ">"를 잘못 사용하면 파일 내용이 영구적으로 삭제, 다른 말로 clobbering될 수 있고, 이것을 피하는 한 가지 방법은 파이프와 함께 cat를 사용하는 것입니다. 비교:
command < in | command2 > out
<in command | command2 > out
위의 것과 비교:
cat in | command | command2 > out
tac
tac은 파일을 마지막 줄부터 시작하여 줄 단위로 보는 것을 허용하는 리눅스 명령입니다. (tac은 각 개별 줄의 내용을 뒤집지 않고, 오직 라인이 표시되는 순서를 뒤집습니다.) 그것은 cat과 아날로그에 의해 이름-지어졌습니다.
Usage:
Usage: tac [OPTION]... [FILE]...
Write each FILE to standard output, last line first.
With no FILE, or when FILE is -, read standard input.
Mandatory arguments to long options are mandatory for short options too.
-b, --before attach the separator before instead of after
-r, --regex interpret the separator as a regular expression
-s, --separator=STRING use STRING as the separator instead of newline
--help display this help and exit
--version output version information and exit
External links
- cat: concatenate and print files – Commands & Utilities Reference, The Single UNIX Specification, Issue 7 from The Open Group
- UNIX Style, or cat -v Considered Harmful - A paper by Rob Pike on proper Unix command design using cat as an example.
- cat(1) original manual page in the First Edition of Unix.
- cat(1): concatenate and write files – GNU Coreutils reference
- cat(1): concatenate and print files – OpenBSD General Commands Manual
- cat(1) – FreeBSD General Commands Manual
- cat(1) – Plan 9 Programmer's Manual, Volume 1
- tac(1): concatenate and write files in reverse – GNU Coreutils reference