Linux - 기초

Jaeminst·2022년 2월 11일

표준스트림과 stdin, stdout, stderr이 무엇인가요? *

표준 스트림은 각 프로세스가 실행될 때 프로그램과 환경 사이에 상호 연결된 입력 및 출력 통신 채널이며, 기본적으로 할당되는 3개의 스트림을 표준 스트림이라고 합니다.

이 것을 이해하려면 과거 입출력을 이해하여야 합니다.
프로그램의 입출력은 환경설정 정보, 내부 파일 목록 정보를 일일이 지정해주어야 했고, 하드웨어 관련 설정을 세세히 해줘야 했습니다.
Unix 계열 운영체제는 이러한 작업을 파일처럼 다루는 것으로 해결했습니다.

프로세스
stdin은 표준 입력이라고 합니다.
stdout은 표준 출력이라고 합니다.
stderr은 표준 에러라고 합니다.

실제로 프로세스 실행 시 /proc/PID/fd 폴더 아래에 저장되어 있는 파일 형태로 존재하며, /dev/stdin, /dev/stdout, /dev/stderr와 연결되어 동작됩니다.

예로 들면 터미널 실행시 명령줄 인터프리터 즉, CLI가 bash라는 프로세스로 동작하여 해당하는 표준 스트림에 연결되어 동작 되어 표준입력이 키보드 입력이라는 것을 알 수 있습니다.

파이프라인과 리다이렉션이 무엇인지 예시를 들어 설명하세요. *

파이프라인는 한 명령/프로그램/프로세스의 출력을 추가 처리를 위해 다른 명령/프로그램/프로세스로 보내기 위해 Linux 및 기타 유닉스 계열 운영 체제에서 사용되는 리다이렉션의 한 형태입니다. Unix/Linux 시스템은 명령의 표준 출력이 다른 명령의 표준 입력에 연결되도록 허용합니다. 파이프 문자 '|' 를 사용하여 할 수 있습니다.

이 것을 사용하기 위해서는 리다이렉션에 대해 먼저 이해할 필요가 있습니다.
리다이렉션이란, 표준 스트림의 흐름을 바꿔 파일로 표준 입/출력을 할 수 있도록 합니다.

예제로 받아둔 access.log를 cat 으로 출력하면 많은 내용이 출력됩니다.
이것을 head 명령을 사용하여 출력하면 10줄 또는 원하는 줄수 많큼 출력하게 됩니다.

여기서 리다이렉션을 사용하면 head access.log > headLog.txt로 access.log에서 10줄을 headLog.txt로 리다이렉션 하여 파일로 만들 수 있습니다.
wc headLog.txt를 해보면 10줄이라는 것을 알 수 있습니다.

파이프를 사용하여 access.log에 있는 내용 중 원하는 내용을 출력할 수 있습니다.
cat access.log | grep note를 해보면 note가 포함된 것을 출력합니다.

이 두개를 조합아여 원하는 단어가 포함되거나 다른 명령을 파이프로 연결하여 리다이렉션할 수 있습니다.
cat access.log | grep note > grepNote.txt 로 파이핑한 데이터를 파일로 출력한 형태로 만들 수 있습니다.

profile
DevOps !

0개의 댓글