1. Standard Stream
- 리눅스의 표준 입출력을 말한다.
- 리눅스에서는 command로 입력되어 실행되는 3가지 표준 입력스트림이 있다.
a) stdin (Standard Input Stream)
- 리눅스에서 사용하는 표준 입력스트림
- 기본적으로 터미널에서 입력을 받는 기능이다.
b) stdout (Standard Output Stream)
- 리눅스에서 사용하는 표준 출력 스트림
- 기본적으로 터미널 화면에 출력하는 기능이다.
c) stderr (Standard Error Stream)
- 리눅스에서 사용하는 표준 오류 출력 스트림
- 기본적으로 명령어를 틀리게 입력하는 등의 경우, 발생하는 에러를 터미널에 출력하는 기능이다.
- 이처럼 모든 스트림은 기본적으로 console에 출력되도록 설계되어있다.
2. Redirection
- 기본적으로 입출력 스트림은 터미널에서 진행된다.
- 즉, 터미널에서 입력되고 터미널에 출력되는 것이 default 이다.
- 하지만 입출력의 통로를 터미널이 아닌 다른 것으로 대체할 수 있음을 의미한다.
a) 표준 스트림의 흐름을 바꿀 수 있다.
- 꺽쇄(<>) 기호를 사용하여 리다이렉션을 표현할 수 있다.
- 주로 명령어 표준 출력을 화면이 아닌 파일일 때 사용한다.
- 아래의 그림을 보면서 이해해보자.
- 기본적으로 표준 입출력은 터미널에서 입력을 받아 터미널로 출력을 하는 형식이다.
- 리다이렉션을 사용하면 좌측의 그림처럼, 출력을 파일로 바꿀 수 있다.
- 리다이렉션을 사용하면 우측의 그림처럼, 파일의 내용을 입력으로 바꿀 수 있다.
b1) 리다이렉션 예시
- ls 명령어를 사용하면 일반적으로 터미널에 파일 목록을 출력한다.
- 이는 표준 입력을 통해 ls입력을 받고 표준 출력으로 터미널에 결과물을 출력하는 것이다.
- 하지만, ls > files.txt라는 명령을 통해 ls 명령어에 대한 출력을 터미널이 아닌 files.txt에 저장할 수 있다.
b2) 리다이렉션 예시
- head 명령어는 함께 명시된 파일의 내용을 앞에서 부터 10줄 터미널에 출력한다.
- 이는 표준 입력을 명시된 파일의 내용으로부터 받아 오는 것이다.
- 이 경우 터미널에서 입력을 받는 것이 아니라 파일의 내용을 입력으로 받는 것이다.
b3) 리다이렉션 예시
- 위의 예시의 경우, file.txt 파일로 부터 입력을 받아서 head 명령을 실행한다.
- 그리고 head 명령의 실행 결과를 files2.txt에 저장하도록 하는 것이다.
b4) 리다이렉션 예시
- file2.txt가 가진 내용에 새로운 내용을 덮어 씌우는 것이 아니라,
- 기존 내용을 놔두고 새로운 내용을 추가하는 방식이다.
3. Pipe(파이프)
- 파이프는 운영체제 과목에서 IPC기법에서 등장한 내용 중 하나다.
- 프로세스는 다른 프로세스의 데이터에 접근이 불가하므로, 다른 프로세스의 상태를 알 수 없다.
- 이를 극복하기 위해, 프로세스 간의 통신방법 중 하나로 파이프를 이용한다.
- 여기에서는 운영체제가 아니라 리다이렉션을 기반으로 파이프의 역할을 이해하자.
a) 파이프란?
- 한 프로세스의 출력 스트림을 다른 프로세스의 입력 스트림으로 사용하는 것
- 짝대기( | )를 사용하여 표현한다.
- 위의 그림과 같이 어떤 한 프로세스의 결과물(출력)을 파이프를 통해 다른 프로세스의 입력으로 사용한다.
b1) 파이프 예시
- 어떤 디렉토리에 파일이 무수히 많은 경우, 특정한 파일을 찾고 싶을때 위의 명령어를 사용할 수 있다.
- grep이라는 명령어는 입력으로 들어오는 문자열을 검색하여 동일한 문자열을 가진 것을 찾는 역할이다.
- "ls | grep files.txt"는 다음 2개의 프로세스를 가진다.
- 첫번째는 grep 이라는 프로세스, files.txt 라는 이름을 검색한다.
- 두번째는 ls 라는 프로세스, grep으로 찾은 결과물을 ls라는 프로세스의 입력으로 사용하는 것이다.
b3) grep 명령어 참고자료
'컴퓨터공학기초 개념 > 시스템 프로그래밍' 카테고리의 다른 글
10. shell - 프로세스 관리 및 제어 (0) | 2021.09.09 |
---|---|
9. shell - foreground & background 프로세스 (0) | 2021.09.09 |
7. shell - 파일 권한 및 관리(2) (0) | 2021.09.07 |
6. shell - 파일 권한 및 관리(1) (0) | 2021.09.07 |
5. shell - 다중 사용자 (0) | 2021.09.06 |
댓글