stdin으로 줄여 쓰는 표준 입력은 프로그램이 들어오는 데이터를 보통 읽는 스트림입니다. 대화형 터미널에서 쉘은 일반적으로 stdin을 터미널 입력에 연결해 프로그램이 사용자가 입력한 내용을 읽게 합니다.
Text-Fu · 레슨 2
표준 입력 (stdin)
프로그램이 표준 입력을 읽는 방식과 Bash가 그 스트림을 파일에 연결하는 방법을 배웁니다.
표준 입력과 파일 디스크립터 0
관례상 세 표준 스트림은 다음 파일 디스크립터 번호를 사용합니다.
0: 표준 입력(stdin)1: 표준 출력(stdout)2: 표준 오류(stderr)
프로그램은 이 스트림을 사용할지와 사용 방식을 선택할 수 있습니다. stdin을 읽도록 만든 명령어는 파일 피연산자나 다른 입력 소스가 없으면 흔히 터미널 입력을 기다립니다.
표준 입력을 관례상 나타내는 파일 디스크립터는 무엇인가요?
파일을 stdin으로 리디렉션하기
< 연산자는 Bash가 파일을 읽기용으로 열어 명령어의 stdin에 연결하게 합니다.
$ cat < peanuts.txt
Hello World
쉘은 < peanuts.txt를 처리하고 cat은 파일 디스크립터 0을 읽을 뿐입니다. 경로는 일반 파일 피연산자로 cat에 전달되지 않습니다.
입력 파일이 없거나 열 수 없으면 쉘이 리디렉션 오류를 내고 해당 입력으로 명령어를 시작하지 않습니다.
sort가 names.txt에서 표준 입력을 읽게 하는 명령어는 무엇인가요?
파일 피연산자와 입력 리디렉션
일부 명령어는 파일 이름 피연산자나 stdin을 모두 받을 수 있지만 결과가 약간 다를 수 있습니다.
$ wc -l peanuts.txt
1 peanuts.txt
$ wc -l < peanuts.txt
1
두 형식은 같은 데이터의 줄을 셉니다. 첫 번째에서는 wc가 파일 이름을 인자로 받으므로 이름을 알고, 두 번째에서는 stdin 스트림만 받아 출력할 파일 이름이 없습니다.
wc -l < peanuts.txt가 보통 출력에서 peanuts.txt를 생략하는 이유는 무엇인가요?
입력과 출력 리디렉션 결합하기
한 명령줄에서 둘 이상의 스트림을 리디렉션할 수 있습니다.
$ cat < peanuts.txt > banana.txt
쉘은 서로 독립적인 두 연결을 수행합니다.
< peanuts.txt는peanuts.txt를cat의 stdin으로 엽니다.> banana.txt는banana.txt를 만들거나 잘라내고cat의 stdout에 연결합니다.
cat은 stdin에서 바이트를 읽어 stdout으로 쓰므로 banana.txt가 원본 내용을 받습니다. 일반적인 파일 복사에는 cp peanuts.txt banana.txt가 의도를 더 직접적으로 전달하며, 이 예제는 스트림 연결을 보여 주기 위한 것입니다.
cat < input.txt > output.txt에서 stdin을 제공하는 파일과 stdout을 받는 파일은 각각 무엇인가요?
입출력 리디렉션은 다음 실습에서 연습해 보세요.
- 리눅스에서 입력 및 출력 리디렉션 - >, >>, 2> 및 tee 명령과 같은 연산자를 사용하여 표준 출력 (stdout), 표준 오류 (stderr), 표준 입력 (stdin) 을 조작하여 명령의 데이터 흐름을 제어하는 연습을 합니다.
- 데이터 스트림 리디렉션 - 리눅스 스트림 리디렉션 기술을 배웁니다. 표준 입력, 출력 및 오류 스트림을 조작하고, 출력을 결합하며, 고급 파일 작업을 위해 /dev/null을 활용합니다.
레슨 완료
표준 입력 (stdin) 완료
이제 쉘을 통해 명령어의 표준 입력을 파일에 연결할 수 있습니다.
stdin이 파일 디스크립터 0임을 알 수 있습니다.
<로 읽을 수 있는 파일을 리디렉션할 수 있습니다.파일 이름 피연산자와 리디렉션 입력을 구분할 수 있습니다.
stdin과 stdout 리디렉션을 의도적으로 결합할 수 있습니다.