Jump to content

cat (Unix)

This is a fully translated article. Click here for more information.
From DawoumWiki, the free Mathematics self-learning

cat
Original author(s)Ken Thompson,
Dennis Ritchie
Developer(s)AT&T Bell Laboratories
Initial releaseNovember 3, 1971; 52 years ago (1971-11-03)
Operating systemUnix, Unix-like, Plan 9, Inferno
PlatformCross-platform
TypeCommand

cat은 파일을 순차적으로 읽고, 표준 출력에 쓰는 표준 유닉스 유틸리티입니다. rm 이름은 파일을 연결하는(catenate) 기능에서 파생됩니다.

History

cat은 유닉스의 초기 버전, 예를 들어, 버전 1 유닉스의 일부였었고, 단일 파일을 화면에 복사하기 위한 PDP-7Multics 유틸리티, pr을 대체했습니다.[1]

GNU coreutils에 번들된 cat 버전은 Torbjorn Granlund와 Richard Stallman에 의해 작성되었습니다.[2]

Usage

단일 유닉스 사양은 해당 인수에 주어진 순서대로 파일을 읽고 그것들의 내용을 같은 순서로 표준 출력에 쓰는 cat의 연산을 정의합니다. 그 사양은 버퍼링되지 않은 출력에 대해 하나의 옵션 플래그, u를 지원하도록 요구하며, 각 바이트는 그것을 읽은 후에 기록된다는 의미입니다. GNU 핵심 유틸리티를 사용하는 시스템과 같은 일부 운영 시스템은 기본적으로 이것을 수행하고 플래그를 무시합니다.[3]

만약 입력 파일 이름 중 하나가 단일 하이픈 (-)으로 지정돠면, 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의 정의로 나열합니다:

  1. 전체 파일을 일시 중지 없이 화면이나 다른 출력 싱크에 분출합니다 (동의어, 폭발).
  2. 확장에 의해, 준비되지 않은 대상에 대량의 데이터를 덤프하거나 신중하게 탐색할 의도가 없습니다. 사용법: 어리석은 것으로 여겨집니다. 드문 외부 유닉스 사이트. dd, BLT도 참조하십시오.

유닉스 팬 사이에서, cat(1)사용자-인터페이스 설계의 훌륭한 예제로 여겨지는데, 왜냐하면 그것은 파일 사이의 공백 또는 헤더와 같은 장황한 내용 전달없이 파일 내용을 넘겨주고, 그것은 텍스트 줄로 구성될 필요가 없지만, 임의의 종류의 데이터와 함께 작동하기 때문입니다.

유닉스 비평가들 사이에서, cat(1)은 나쁜 사용자-인터페이스 설계의 정식의 예제로 여겨지는데, 왜냐하면 그것의 끔찍할 정도로 불분명한 이름 때문입니다. 두 개 이상의 파일을 연결하는 것보다 단일 파일을 표준 출력으로 내보내는 것이 훨씬 더 자주 사용됩니다. 이전 작업에 대한 이름 catLISPcdr만큼 직관적이지 않습니다.

Useless use of cat

cat의 쓸모없는 사용 (UUOC)은 사용자에게 편의 기능만 제공하는 명령줄 구성에 대한 공통적인 유닉스 전문 용어입니다.[5] 컴퓨팅에서, 정의의 두 번째 의미에서 "남용(abuse)"이라는[6] 단어는 언어 구성의 과도하거나 불필요한 사용을 폄하하기 위해 사용됩니다; 따라서 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은 가독성을 위해 여전히 선호될 수 있는데, 왜냐하면 파이프 스트림을 왼쪽에서 오른쪽으로 읽는 것이 개념화하기 더 쉬울 수 있기 때문입니다.[7] 역시, "<" 대신 (종종 키보드에서 인접한) 리다이렉션 기호 ">"를 잘못 사용하면 파일 내용이 영구적으로 삭제, 다른 말로 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

See also

  • paste
  • split, a command that splits a file into pieces which cat can then rejoin.
  • zcat
  • less

References

  1. ^ McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.
  2. ^ https://linux.die.net/man/1/cat
  3. ^ GNU Coreutils. "GNU Coreutils manual", GNU, Retrieved on 1 Mars 2017.
  4. ^ OpenBSD manual page and the GNU Core Utiltites version of cat
  5. ^ comp.unix.shell. "Early award example of UUOC (1994)", comp.unix.shell via Google Groups, Retrieved on 1 Mars 2017.
  6. ^ "Merriam Webster's Definition of Abuse". Retrieved 2021-02-25.
  7. ^ Nguyen, Dan. "Stanford Computational Journalism Lab". stanford.edu. Retrieved 2017-10-08.

External links