[전산학] Redirection, Pipe

Hyo Kyun Lee·2021년 7월 13일
0

전산학

목록 보기
10/16
post-custom-banner

1-1. Stream

Redirection을 이해하기 위한 사전개념

Stream은 문자열과 개체의 통로, 혹은 흐르는 일련의 과정을 의미한다.

리눅스 관점에서 Stream은 크게 3가지로 분류된다.

- Standard Input, Stdin
Input Device(입력장치)에서 이를 처리하기 위한 프로세스까지 데이터가 흐르는 일련의 과정

- Standard Output, Stdout
프로세스에서 Output Device(출력장치)까지 데이터가 흐르는 일련의 과정

- Standard Error, Stderr
프로세스에서 terminal device(data 송수신시 과정의 종료지점, 말단 장치)까지 데이터가 흐르는 일련의 과정

→ 서버작업시 우리가 확인하는 환경은 주로 CLI환경으로,
여기서의 Output Device는 데이터 전송상태를 출력하는 Terminal 환경을 보통 의미한다.

1-2. 리눅스 명령구조

실행파일 실행(argc), 옵션 구성(argv[])

ls -al

위 리눅스 명령은 현재 디렉토리 내 존재하는 파일 및 하위 디렉토리를 나타내준다.

이 명령어의 구조를 살펴보면, ls(ls라는 실행파일을 실행할 것) -al(ls실행에 대한 옵션)이다.
물론 이때의 환경변수는 기존 설치환경과 동일하다고 가정한다.

이처럼 리눅스 명령은 실행파일과 인자로 명령하고, 그 결과가 터미널에 출력되는 형식이다.

리눅스의 표준 입출력 스트림은 정해져 있다.

이러한 명령은 키보드를 통해 프로세스에 입력 및 실행되며(Stdin, 표준 입력 스트림)
그 명령결과가 터미널을 통해 출력된다(Stdout, 표준 출력 스트림)

리눅스의 모든 명령은 위 표준 입출력스트림을 따르고 있다. 다시 말해, 입출력 구조 및 그 실행 과정이 정해져있다.

2-1. Redirection

표준입출력 구조와 과정(방향)을 바꿀 수 있다.

Redirection의 개념은 이 입출력스트림의 과정, 방향을 바꿀 수 있다는 것이다.

꺾쇠(< >)를 사용하여 변경할 수 있고, 리눅스 체계의 핵심인 파일을 이용하여 바꾼다.

File 출력 스트림(과정, 통로)의 입력 스트림화 하는 방식이 Redirection의 핵심이다.

2-2. 예시

ls > file.txt
  • ls (ls -al과 별도로 숨김파일은 표시하지 않는 명령) 결과를 file.txt에 출력한다.
  • 출력스트림의 file화
head file.txt
head < file.txt
  • head file.txt : file.txt의 첫 10줄을 터미널 출력, 표준 출력 스트림.
  • head < file.txt : file.txt의 data 모두가 head라는 파일안에 들어간다.
head < file.txt > file2.txt
  • file.txt의 data를 head 파일화(출력스트림)
  • head 파일을 하나의 입력스트림으로 사용하여 file2.txt에 저장하고 파일화

3. Pipe

Process간 통신 기법인 IPC 기법 중 하나이다.

맥락은 Redirection과 연결된다.

두 프로세스 사이에서, 한 프로세스의 출력 스트림이 다른 프로세스의 입력스트림으로 사용할 때 이용하는 기법이다.

Redirection이 꺾쇠를 사용했다면, Pipe는 | 기호를 사용한다.

ls | grep file.txt
  • ls 명령의 출력 내용이 grep의 입력 스트림화 되어 piping 된다.

  • 입력으로 들어오는 data 중 키워드와 관련한 데이터들을 찾는 grep 명령을 이용한다.

  • 즉 file.txt 파일을 탐색하되, 해당 입력 스트림은 ls를 통해 들어온 데이터로 제한된다.

4. 참조링크

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

post-custom-banner

0개의 댓글