티스토리 뷰
[Linux] 8. 스트림(Stream), 표준 스트림(Standard Stream), 리다이렉션(Redirection), 파이프(Pipe)
h_json 2024. 1. 16. 00:07스트림, 리다이렉션, 파이프
스트림(Stream)
• 대부분의 프로그램은 데이터를 입력받아 다시 출력하는 형태
• 하지만 유닉스 이전의 운영체제에는 데이터의 입출력 작업이 어려웠음.
- 하드웨어 장치를 통해 입출력을 한다면, 각기 다른 장치마다 서로 다른 설정을 일일이 해주어야 했고, 프로그램끼리의 데이터 입출력을 위해서도 그 프로그램에 대한 환경 설정 등을 일일이 해주어야 했음.
• 유닉스에서는 이런 점을 개선하여 프로그램들과 하드웨어 장치들 모두 파일 형태로 관리하고, 데이터의 입출력 작업을 파일 읽기, 쓰기 작업으로 통일
• 그리고 이런 파일에서 입출력되며 흐르는 데이터, 또는 그 데이터의 통로를 스트림이라고 정의하여, 사용자가 데이터의 입출력을 관리하고 싶을 경우 스트림을 통해 관리하도록 함.
표준 스트림(Standard Stream)
• 유닉스에서는 사용자가 따로 스트림을 지정하지 않아도 되도록, 표준 스트림이라는 것을 제공
• 표준 스트림은 사용자가 어떤 스트림을 사용하겠다 명시하지 않았을 경우, 표준 스트림으로 설정된 스트림을 사용하도록 하는 기본 설정 같은 개념
• 표준 스트림은 프로그램 실행 시 부모 프로세스로부터 값을 상속받아 자동으로 열림
• 유닉스 쉘은 아래와 같은 3개의 표준 스트림을 갖고 있음.
- 표준 입력 스트림(Standard Input, STDIN) : 키보드 입력
- 표준 출력 스트림(Standard Output, STDOUT) : 콘솔 출력
- 표준 에러 스트림(Standard Error, STDERR) : 콘솔 에러 출력
• 따라서, 유닉스 쉘로 어떤 프로그램을 실행하면, 스트림을 따로 지정하지 않아도 유닉스 쉘의 표준 스트림을 상속받아, 내가 실행한 프로그램도 입력 - 키보드, 출력 - 콘솔 이라는 스트림을 갖게 되는 것
• 표준 스트림 역시 파일 형태로 관리되기 때문에, 표준 스트림 파일이 열리면 파일 디스크립션 번호를 할당받음. 할당되는 번호는 아래와 같이 고정이며, 이 때문에 다른 파일들은 번호를 3부터 할당.
- 표준 입력 스트림 : 0, 표준 출력 스트림 : 1, 표준 에러 스트림 : 2
리다이렉션(Redirection)
• 스트림의 방향을 재지정하는 것
• 즉, 키보드로 입력받거나 콘솔에 출력하는 것이 아닌 다른 곳으로 입출력 지정
기호 | 설명 |
< | 입력 스트림 재지정 |
> | 출력 스트림 재지정 (덮어쓰기) |
>> | 출력 스트림 재지정 (이어쓰기) |
2> | 에러 스트림 재지정 (덮어쓰기) |
2>> | 에러 스트림 재지정 (이어쓰기) |
>& | 출력 & 에러 스트림 재지정 (덮어쓰기) |
>>& | 출력 & 에러 스트림 재지정 (이어쓰기) |
※ 참고 : 입력 0, 출력 1은 생략 |
history > result.txt # history 명령의 결과가 표준 출력 스트림에 의해 콘솔에 출력되는 것이 아닌 재지정된 스트림에 의해 result.txt에 출력됨.
echo "Hello" > result.txt # echo 명령의 결과가 result.txt 파일에 덮어쓰기 됨.
echo "Hi" >> result.txt # echo 명령의 결과과 result.txt 파일에 이어쓰기 됨. 즉, Hello Hi 됨.
cat < result.txt # cat이 입력을 표준 입력 스트림에 의해 키보드로 받는 것이 아닌 재지정된 스트림에 의해 result.txt의 내용을 받는다.
파이프(Pipe)
• 프로세스간에 스트림을 이어 A의 출력을 B의 입력으로 들어가게 하는 것
cat result.txt | grep "He" # cat 명령으로 인한 result.txt 안의 내용물 출력이 grep의 입력으로 들어감. result.txt의 내용에서 He 문자열을 검색해줌.
cat result.txt | sort -r # result.txt 내용물을 내림차순으로 정렬.
cat result.txt | sort -r | grep "el" # cat 명령의 결과 출력이 sort 명령어의 입력으로 들어가고, sort 명령의 결과 출력이 grep으로 들어감.
※ 참고
• 한 줄에 여러 명령을 쓰고 싶다면, 첫 번째 명령; 두 번째 명령; 세 번째 명령 이런 식으로 가능
이 글은
유튜브 뉴렉처 리눅스(Linux) 서버 강의/강좌 for 개발자
강의를 듣고 공부한 내용을 바탕으로 작성되었습니다.
'🐧 Linux' 카테고리의 다른 글
[Linux] 10. 링크 파일 (Link File) (0) | 2024.01.20 |
---|---|
[Linux] 9. 아카이브 파일 (Archive File), .tar 파일, .tar.gz 파일 (0) | 2024.01.19 |
[Linux] 7. 파일 디스크립터 (File Descriptor) (1) | 2024.01.15 |
[Linux] 6. 리눅스의 파일 관리 명령어 (~과 #의 의미) (1) | 2024.01.14 |
[Linux] 5. 리눅스의 디렉토리 구조 (0) | 2024.01.11 |