Redirection을 이해하기 위한 사전개념
Stream은 문자열과 개체의 통로, 혹은 흐르는 일련의 과정을 의미한다.
리눅스 관점에서 Stream은 크게 3가지로 분류된다.
- Standard Input, Stdin
Input Device(입력장치)에서 이를 처리하기 위한 프로세스까지 데이터가 흐르는 일련의 과정
- Standard Output, Stdout
프로세스에서 Output Device(출력장치)까지 데이터가 흐르는 일련의 과정
- Standard Error, Stderr
프로세스에서 terminal device(data 송수신시 과정의 종료지점, 말단 장치)까지 데이터가 흐르는 일련의 과정
→ 서버작업시 우리가 확인하는 환경은 주로 CLI환경으로,
여기서의 Output Device는 데이터 전송상태를 출력하는 Terminal 환경을 보통 의미한다.
실행파일 실행(argc), 옵션 구성(argv[])
ls -al
위 리눅스 명령은 현재 디렉토리 내 존재하는 파일 및 하위 디렉토리를 나타내준다.
이 명령어의 구조를 살펴보면, ls(ls라는 실행파일을 실행할 것) -al(ls실행에 대한 옵션)이다.
물론 이때의 환경변수는 기존 설치환경과 동일하다고 가정한다.
이처럼 리눅스 명령은 실행파일과 인자로 명령하고, 그 결과가 터미널에 출력되는 형식이다.
리눅스의 표준 입출력 스트림은 정해져 있다.
이러한 명령은 키보드를 통해 프로세스에 입력 및 실행되며(Stdin, 표준 입력 스트림)
그 명령결과가 터미널을 통해 출력된다(Stdout, 표준 출력 스트림)
리눅스의 모든 명령은 위 표준 입출력스트림을 따르고 있다. 다시 말해, 입출력 구조 및 그 실행 과정이 정해져있다.
표준입출력 구조와 과정(방향)을 바꿀 수 있다.
Redirection의 개념은 이 입출력스트림의 과정, 방향을 바꿀 수 있다는 것이다.
꺾쇠(< >)를 사용하여 변경할 수 있고, 리눅스 체계의 핵심인 파일을 이용하여 바꾼다.
File 출력 스트림(과정, 통로)의 입력 스트림화 하는 방식이 Redirection의 핵심이다.
ls > file.txt
head file.txt
head < file.txt
head < file.txt > file2.txt
Process간 통신 기법인 IPC 기법 중 하나이다.
맥락은 Redirection과 연결된다.
두 프로세스 사이에서, 한 프로세스의 출력 스트림이 다른 프로세스의 입력스트림으로 사용할 때 이용하는 기법이다.
Redirection이 꺾쇠를 사용했다면, Pipe는 | 기호를 사용한다.
ls | grep file.txt
ls 명령의 출력 내용이 grep의 입력 스트림화 되어 piping 된다.
입력으로 들어오는 data 중 키워드와 관련한 데이터들을 찾는 grep 명령을 이용한다.
즉 file.txt 파일을 탐색하되, 해당 입력 스트림은 ls를 통해 들어온 데이터로 제한된다.
https://losskatsu.github.io/os-kernel/linux-redirection/#1-%ED%91%9C%EC%A4%80-%EC%8A%A4%ED%8A%B8%EB%A6%BCstandard-stream
https://velog.io/@gyrbs22/%EC%A0%84%EC%82%B0%ED%95%99-%EC%8A%A4%ED%8A%B8%EB%A6%BCStream