Post

[Linux] Redirection과 cat & tee을 활용한 Text File 생성법

Linux Text File 생성 방법

Linux Text File을 생성할 때 보통 vim 에디터를 사용하거나

echo "hello world" > text.txt와 같이 Redirection을 간단하게 활용했다.

여러 Linux 환경의 솔루션을 설치할 때 tee 명령어을 사용하거나

kubernetesResource manifest yaml 생성 시, EOF를 활용하는 경우가 많아

아래와 같이 Text File 생성 방법을 정리해보았다.


Redirection

리다이렉션(Redirection)은 Linux에서 명령어의 표준 입력(stdin), 표준 출력(stdout), 표준 에러(stderr)을

다른 파일이나 명령어로 보내는 기능을 말한다.

표준 입력, 표준 출력 그리고 표준 에러는 기본적으로 아래와 같다.

  • 표준 입력(stdin, 0) → 키보드에서 입력
  • 표준 출력(stdout, 1) → 터미널 화면으로 출력
  • 표준 오류(stderr, 2) → 터미널 화면으로 출력

즉, Redirection을 사용하면 출력을 파일에 저장하거나, 다른 명령어의 입력으로 전달할 수 있다.


1. 출력 Redirection(>, >>)을 활용한 Text File 생성

Redirection을 활용하면 표준 출력(stdout)을 파일에 저장할 수 있다.

출력 Redirection 명령어는 아래 두 가지이다.


> : 출력 내용을 새 파일로 저장(덮어쓰기)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# `echo`를 활용한 파일 생성 
$> echo "Hello, Linux"
Hello, Linux

$> echo "Hello, Linux" > file.txt

$> cat file.txt
Hello, Linux

# `echo` 명령어는 여러 줄 작성이 안 됨
$> echo "Hello, Linux\nI am Kimjayhyun" > file.txt

$> cat file.txt
Hello, Linux\nI am Kimjayhyun

# 권장
$> printf "Hello, Linux\nI am Kimjayhyun" > file.txt

$> cat file.txt
Hello, Linux
I am Kimjayhyun

# `-e` 옵션 사용
$> echo -e "Hello, Linux\nI am Kimjayhyun" > file.txt

$> cat file.txt
Hello, Linux
I am Kimjayhyun

file.txt가 존재하면 덮어쓰기하고, 없으면 새로 생성한다.

덮어쓰기이므로 기존 내용이 삭제되어 주의가 필요하다.

>> : 출력 내용을 기존 파일에 추가

1
echo "추가된 내용" >> file.txt

만약 file.txt가 없다면 생성하고 내용을 작성한다.

기존 file.txt의 내용을 유지하면서 새 내용을 추가할 수 있다.


cat & 출력 Redirection

cat 명령어를 활용하면 터미널에서 텍스트 파일을 간편하게 작성할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$> cat > file.txt
Hello, World!
This is a new file.
Ctrl + D  # 입력 종료 (EOF: End Of File)

$> cat file.txt
Hello, World!
This is a new file.

$> cat >> file.txt
And this is a new line
Ctrl + D # 입력 종료 (EOF)

$> cat file.txt
Hello, World!
This is a new file.
And this is a new line

2. 입력 Redirection(<<, <<<)

입력 Redirection을 활용하면 텍스트를 명령어의 stdin으로 전달할 수 있다.

아래는 입력 Redirection의 종류이다.

  • <: 파일의 내용을 명령어에 입력으로 제공한다.
  • << (here-document): 여러 줄의 텍스트를 직접 명령어의 입력으로 전달한다.
  • <<< (here-string): 단일 문자열을 명령어에 입력으로 전달한다.

이를 활용하여 Text File을 생성할 수 있다.

<< (here-document): 멀티라인 입력하여 파일 생성

1
2
3
4
5
6
7
$> cat << EOF
> Hello Linux
> I am Kimjayhyun
> EOF

Hello Linux
I am Kimjayhyun

EOF 전까지 입력을 받아 cat에 전달하여 stdout에 출력이 된다.

이 때, EOF라는 문자열 대신 다른 문자열도 사용가능하다.

1
2
3
4
5
6
7
$> cat << TEST
> Hello Linux
> I am Kimjayhyun
> TEST

Hello Linux
I am Kimjayhyun

출력 Redirection을 활용하면 Ctrl + D를 입력하지 않아도 Text File을 생성할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$> cat << EOF > file.txt
> Hello Linux
> I am Kimjayhyun
> EOF

$> cat file.txt
Hello Linux
I am Kimjayhyun

# 순서를 바꾸어도 됨
$> cat >> file.txt << EOF 
> New Line
> EOF

$> cat file.txt
Hello Linux
I am Kimjayhyun
New Line

tee

tee 명령어는 파이프라인을 활용하여 표준 입력으로 전달된 데이터를

표준 출력과 하나 이상의 파일에 동시에 기록하는 데 사용된다.

즉 명령어의 중간 결과를 파일에 저장하면서도

파이프라인을 통해 다음 명령어로 데이터를 전달할 수 있다.

사용 예시

파이프라인 명령어인 |를 활용하여 tee 명령어를 사용하면 된다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 파이프라인의 중간 결과를 저장할 수 있음
$> ls -l | tee file.txt | grep file
-rw-r--r--. 1 jhkim jhkim  0  2월 23 17:12 file.txt

$> cat file.txt
합계 0
drwxr-xr-x. 3 jhkim jhkim 31  1월 26 15:08 code
drwxr-xr-x. 4 jhkim jhkim 62  2월 21 10:47 docker
-rw-r--r--. 1 jhkim jhkim  0  2월 23 17:12 file.txt
drwxr-xr-x. 4 jhkim jhkim 53  2월 15 12:14 kubernetes
drwxr-xr-x. 3 jhkim jhkim 60  2월 23 02:54 solutions

# `a` : 파일에 내용 추가
$> cat << EOF | tee -a file.txt
> This is a new line
> EOF
This is a new line

$> cat file.txt
합계 0
drwxr-xr-x. 3 jhkim jhkim 31  1월 26 15:08 code
drwxr-xr-x. 4 jhkim jhkim 62  2월 21 10:47 docker
-rw-r--r--. 1 jhkim jhkim  0  2월 23 17:09 file.txt
drwxr-xr-x. 4 jhkim jhkim 53  2월 15 12:14 kubernetes
drwxr-xr-x. 3 jhkim jhkim 60  2월 23 02:54 solutions
This is a new line

위와 같이 내가 Text File에 입력한 Text를 확인할 수 있으면서,

명령어의 중간 결과를 파일에 저장할 수 있다.


마치며…

결국 Linux Shell을 잘 사용하기 위해서는 RedirectionPipe Line이 핵심인 것 같다.

RedirectionPipe Linetee, cat이라는 도구를 활용해서

Text File을 생성하는 방법에 대해 정리해보았다.

This post is licensed under CC BY 4.0 by the author.