리디렉션은 쉘에서 표준 입출력 스트림을 다른 방향으로 전환하는 기능입니다. 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 파일에 저장합니다.
'프로그래밍 > Linux' 카테고리의 다른 글
[Linux] 쉘 스크립트(Shell script) 1편 - 기본, 변수와 환경변수, 조건문과 반복문 (0) | 2023.08.31 |
---|---|
[Linux] 리눅스 정규 표현식(Regular Expressions) (0) | 2023.08.31 |
[Linux] 리눅스 패키지 관리 시스템(apt, yum, pacman 등) (0) | 2023.08.30 |
[Linux] 리눅스 기본 조작 명령어 (0) | 2023.08.30 |
[Linux] User Space(사용자 공간)과 Kernel Space(커널 공간) (0) | 2023.08.30 |