본문 바로가기
프로그래밍/Linux

[Linux] Bash 쉘 명령어 - 리디렉션(Redirection)

by HI_Ai 2023. 8. 30.
반응형

리디렉션은 쉘에서 표준 입출력 스트림을 다른 방향으로 전환하는 기능입니다. Bash 쉘에서는 기본적으로 세 가지 주요 스트림이 있습니다

표준 입력 (stdin): 기본적으로 키보드 입력을 받습니다.
표준 출력 (stdout): 기본적으로 화면에 출력됩니다.
표준 오류 출력 (stderr): 오류 메시지가 출력될 때 기본적으로 화면에 출력됩니다.


리디렉션을 사용하면 이러한 스트림을 파일이나 다른 스트림으로 변경할 수 있습니다.

 


1. 표준 출력 리디렉션 (Standard Output Redirection)

 

 

표준 출력은 일반적으로 실행된 명령어의 결과나 출력을 화면에 보여주는 스트림입니다. 리디렉션을 사용하면 이 출력을 화면 대신 다른 곳(대부분 파일)으로 전송할 수 있습니다.

 

>: 표준 출력을 파일로 리디렉트하기

이 리디렉션 연산자는 표준 출력을 지정된 파일로 리디렉트합니다. 만약 지정된 파일이 이미 존재한다면, 그 파일의 내용은 덮어쓰기 됩니다.

echo "I'm hungry" > file.txt

이 명령은 "I'm hungry"라는 텍스트를 file.txt에 저장합니다. 만약 file.txt가 이미 있다면, 그 내용은 사라지고 "I'm hungry"만 남게 됩니다.

 

 

>>: 표준 출력을 파일에 추가하기

이 리디렉션 연산자는 표준 출력을 지정된 파일의 끝에 추가합니다. 이는 파일의 기존 내용을 보존하는 동시에 새로운 출력을 추가할 때 유용합니다.

echo "Hello again!" >> file.txt

이 명령은 file.txt의 마지막에 "Hello again!"라는 텍스트를 추가합니다.

 


표준 출력을 다른 명령어로 리디렉트하기 : 파이프 (|)

파이프는 한 명령어의 표준 출력을 다른 명령어의 표준 입력으로 전달합니다. 이는 두 명령어를 연결하여 하나의 명령어의 출력을 다른 명령어의 입력으로 사용할 때 유용합니다.

cat file.txt | grep "banana"

이 명령은 file.txt의 내용 중 "banana"라는 문자열을 포함하는 줄을 검색하여 출력합니다.

 


2. 표준 입력 리디렉션 (Standard Input Redirection)

표준 입력은 일반적으로 키보드를 통해 데이터를 입력받는 스트림입니다. 그러나 리디렉션을 사용하면 파일이나 다른 명령어의 출력을 표준 입력처럼 사용할 수 있습니다.


<: 파일로부터 표준 입력 받기

이 리디렉션 연산자는 파일의 내용을 명령어의 표준 입력으로 사용합니다.

sort < file.txt

이 명령은 file.txt의 내용을 정렬한 결과를 출력합니다. 여기서 sort 명령어는 표준 입력을 기반으로 동작하며, < 연산자를 통해 file.txt의 내용이 표준 입력처럼 사용됩니다.

<<: Here Document

Here Document는 스크립트나 터미널에서 직접 여러 줄의 텍스트를 입력받을 때 사용합니다. << 뒤에 나오는 문자열은 텍스트의 끝을 나타내는 delimiter로 작동합니다.

cat << END

This is a text.
It continues here.
And ends here.
END

위의 명령은 END로 시작되는 Here Document 내의 텍스트를 cat 명령으로 출력합니다.

 

표준 입력을 다른 명령어로부터 받기: 파이프 (|)

앞서 언급한 파이프 (|)는 표준 출력 리디렉션뿐만 아니라 표준 입력 리디렉션으로도 사용될 수 있습니다. 한 명령어의 출력을 다른 명령어의 입력으로 전달합니다.

echo "banana" | wc -w

이 명령은 "banana"의 단어 수를 출력합니다. 여기서 echo 명령어의 출력이 wc -w의 입력으로 전달됩니다.

 

 


 

3. 표준 오류 리디렉션 (Standard Error Redirection)

프로그램이나 명령어는 때때로 오류 메시지나 경고를 출력해야 할 때가 있습니다. 이러한 출력은 표준 출력이 아닌 표준 오류 스트림을 통해 전달됩니다. Bash에서는 표준 출력과 마찬가지로 표준 오류 출력도 리디렉션할 수 있습니다.


2>: 표준 오류를 파일로 리디렉트

>를 사용하여 표준 출력을 파일로 리디렉트하는 것과 유사하게, 2>를 사용하여 표준 오류를 파일로 리디렉트 할 수 있습니다.

ls non_existent_directory 2> error.txt

위의 명령은 존재하지 않는 디렉토리를 ls로 조회하려고 시도하므로 오류 메시지가 생성됩니다. 2>를 사용하면 이 오류 메시지가 error.txt 파일에 저장됩니다.

 

2>&1: 표준 오류를 표준 출력으로 리디렉트

때로는 표준 출력과 표준 오류 모두를 하나의 파일에 리디렉트하고 싶을 수 있습니다. 이럴 때는 2>&1을 사용하여 표준 오류를 표준 출력으로 리디렉트할 수 있습니다.

ls non_existent_directory > all_output.txt 2>&1

이 명령은 표준 출력과 표준 오류 모두를 all_output.txt 파일에 저장합니다.

 

&>: 표준 출력 및 표준 오류를 함께 리디렉트

Bash에서는 &> 연산자를 사용하여 표준 출력과 표준 오류를 동시에 한 파일로 리디렉트할 수도 있습니다.

ls non_existent_directory &> combined_output.txt

위의 명령은 표준 출력과 표준 오류를 모두 combined_output.txt 파일에 저장합니다.

 

반응형