프로그램은 입력/출력 스트림을 통해 통신합니다. stdout으로 줄여 쓰는 표준 출력은 프로그램이 보통 정상적인 결과를 내보내는 스트림입니다. 터미널에서 쉘은 처음에 이 스트림을 터미널 화면에 연결합니다.
Text-Fu · 레슨 1
표준 출력 (stdout)
표준 출력이 터미널로 흐르는 방식과 Bash에서 이를 파일로 리디렉션하는 방법을 배웁니다.
표준 출력에 쓰기
echo 명령어는 인자를 stdout에 씁니다.
$ echo Hello World
Hello World
stdout은 파일 디스크립터 1이며 여러 스트림을 리디렉션할 때 이 번호가 유용합니다. 프로그램에는 표준 입력(stdin)과 표준 오류(stderr)도 있으며 다음 강의에서 살펴봅니다.
리디렉션이 없을 때 대화형 터미널에서 echo Hello World는 정상 출력을 보통 어디로 보내나요?
>로 파일 교체하기
Bash는 >를 출력 리디렉션 연산자로 해석합니다. 목적지 파일을 열고 명령어의 stdout을 그 파일에 연결합니다.
$ echo Hello World > peanuts.txt
이제 stdout이 peanuts.txt로 가므로 터미널에 텍스트가 나오지 않습니다. 파일이 없으면 만들고, 있으면 명령어가 쓰기 전에 내용을 잘라내므로 이전 내용이 사라집니다.
결과는 cat으로 확인합니다.
$ cat peanuts.txt
Hello World
notes.txt에 이미 텍스트가 있습니다. echo new > notes.txt를 실행하면 어떻게 되나요?
쉘은 명령어를 실행하기 전에 목적지를 열므로 Enter를 누르기 전에 경로를 확인하세요. 철자가 틀렸거나 의도하지 않은 기존 파일은 명령어가 나중에 실패해도 비워질 수 있습니다.
>>로 파일에 추가하기
파일 내용을 지우지 않고 파일에 내용을 추가하고 싶다면 어떻게 해야 할까요? 이를 위해 >> 연산자를 사용합니다.
$ echo Another line >> peanuts.txt
$ cat peanuts.txt
Hello World
Another line
>와 마찬가지로 >>도 목적지가 없으면 만듭니다. 차이는 기존 파일을 여는 방식으로, >>는 잘라내지 않고 뒤에 추가합니다.
기존 내용을 지우지 않고 status.log 끝에 Finished를 추가하는 명령어는 무엇인가요?
리디렉션은 쉘의 기능
쉘은 >와 >>를 인식해 프로그램에 전달할 인자에서 제거하고, 파일을 열고, 스트림을 연결합니다. 명령어 자체는 평소처럼 stdout에 쓸 뿐입니다.
따라서 같은 리디렉션 구문을 여러 명령어에 사용할 수 있습니다.
$ pwd > current-directory.txt
$ ls -la >> directory-list.txt
pwd > current-directory.txt에서 >를 보통 누가 해석하나요?
표준 스트림 리디렉션은 다음 실습에서 연습해 보세요.
- Linux 에서 입력 및 출력 리디렉션 -
>,>>,2>와 같은 연산자와tee명령어를 사용하여 표준 출력 (stdout), 표준 오류 (stderr), 표준 입력 (stdin) 을 조작하여 명령어 데이터 흐름을 제어하는 연습을 합니다.
레슨 완료
표준 출력 (stdout) 완료
이제 교체와 추가 동작을 혼동하지 않고 명령어의 표준 출력을 리디렉션할 수 있습니다.
stdout이 정상적인 명령 결과를 위한 스트림임을 알 수 있습니다.
>로 파일 내용을 교체할 수 있습니다.기존 내용을 보존하며
>>로 추가할 수 있습니다.쉘이 열기 전에 목적지를 확인할 수 있습니다.