[Linux/Unix] POSIX와 Unix 계열의 표준 입출력

2024. 4. 23. 09:50·[ Computer Science ]/Linux 리눅스

이전 글...

[Linux/Unix] POSIX란? (포직스, 이식 가능 운영체제 인터페이스, Unix 표준)

 

표준 스트림


표준 스트림(Standard Stream)은 Posix 표준을 따르는 OS의 표준 입출력 통로를 말한다.

Unix 계열 운영체제에서 컴퓨터 프로그램과 여러 입출력 장치 간에 통로(Stream)

 

스트림은 프로그램을 드나드는 데이터를 바이트의 흐름(byte stream)으로 표현된 것이다. 

Unix 기반 운영체제에서는 이 스트림을 이용해서 각 장치를 파일처럼 다루고, 모든 파일과 데이터를 표준 입력과 표준 출력으로 나타내며 이들 사이의 상호작용을 pipe를 통해 조합, 연결하여 사용한다. 

즉, 표준 입출력 + pipe로 모든 동작을 정의한다.


표준 입력(stdin) / 표준 출력(stdout) / 표준 에러(stderr)

표준 스트림은 일반적으로 표준 입력, 표준 출력, 표준 에러의 3가지로 나뉜다.

이 3가지가 표준 스트림으로, 운영체제에서 기본적으로 제공하는 추상화된 입출력 장치를 말한다.

표준 스트림 파일 디스크립터 숫자
표준 입력(stdin, Standard Input) - 키보드 0
표준 출력(stdout, Standard Output) - 모니터 1
표준 에러(stderr, Standard Error) - 모니터 2

 

기본적으로 입력은 키보드, 출력은 모니터로 설정되어 있다. 

 

표준 입력

표준 입력(stdin)은 프로그램에 입력되는 데이터의 출처를 말한다. 이 입력은 사용자가 Shell과 같은 UI를 통해 키보드로 입력한 데이터가 될 수도 있고, 어떤 파일이 될 수도 있다.

 

표준 출력 / 표준 에러

표준 출력(stdout)은 프로그램에서 출력(반환)되는 데이터의 방향을 말한다. 이 출력은 기본적으로 Shell과 같은 콘솔로 설정되어 있다. 사용자는 모니터를 통해 이 콘솔에서 표준 출력(stdout) 또는 표준 에러(stderr)를 확인할 수 있다.

 

표준 출력은 정상적인 출력이 반환되는 경우를 말하고, 표준 에러는 프로그램의 비정상 동작 시에 반환되는 경우를 말한다. 두 가지 모두 콘솔에 출력되게 된다.


파이프(pipe)


파이프는 하나의 표준 출력을 다른 명령의 표준 입력으로 사용하는 명령어이다.

" | " 문자를 이용한다. (키보드 \ 위에 적힌 문자, shift + '\')

pipe

(ex1) pipe / grep

pipeline & grep example

위와 같이 ls 명령에 대한 표준 출력을 파이프('|')를 통해 grep 명령어의 표준 입력으로 사용한다.

 

(ex2) pipe / grep / sort /redirection

ls -al | grep test | sort -k6 > piperesult.txt

ls -al | grep test | sort -k6 > piperesult.txt

현재 폴더 리스트 조회
test를 포함한 문자열 탐색
날짜(Apr 22) 기준 정렬
해당 결과를 piperesult.txt에 저장
piperesult.txt read

결과적으로 ls -al 중, test를 포함한 라인을 뽑아내고, 날짜 기준 정렬한 뒤에 piperesult.txt란 파일에 저장하는 명령이다. 

 

필터(filter)

파이프에는 여러 가지 필터를 사용할 수 있다. 위의 예제에서 grep 명령어도 필터 중 하나이다.

grep명령어는 표준 입력으로부터 받은 데이터로부터 지정한 문자열을 포함한 라인을 찾아서 출력해 준다.

 

필터 종류

filter

저작자표시 (새창열림)

'[ Computer Science ] > Linux 리눅스' 카테고리의 다른 글

[Linux/Unix] POSIX란? (포직스, 이식 가능 운영체제 인터페이스, Unix 표준)  (0) 2024.04.17
[리눅스] VI 에디터 명령어 정리  (0) 2023.07.21
[리눅스] 파일 복사, 하드 링크와 소프트 링크  (0) 2023.07.10
[리눅스] 프로세스, 상태 확인하기  (0) 2023.07.10
[리눅스] 리다이렉션과 파이프, grep 명령어  (0) 2023.07.10
'[ Computer Science ]/Linux 리눅스' 카테고리의 다른 글
  • [Linux/Unix] POSIX란? (포직스, 이식 가능 운영체제 인터페이스, Unix 표준)
  • [리눅스] VI 에디터 명령어 정리
  • [리눅스] 파일 복사, 하드 링크와 소프트 링크
  • [리눅스] 프로세스, 상태 확인하기
HSRyuuu
HSRyuuu
Web Server Developer hsryuuu
  • HSRyuuu
    HS_dev_log
    HSRyuuu
  • 전체
    오늘
    어제
    • 전체 글 보기 (241) N
      • Java (25)
      • Spring (32) N
      • JPA & QueryDSL (13)
      • Database (17)
      • 자료구조 & 알고리즘 (30)
      • Infra & DevOps (13)
      • [ Computer Science ] (47)
        • Web & Network (14)
        • 프로그래밍 이론 (11)
        • 운영체제 (3)
        • 데이터베이스 이론 (5)
        • Linux 리눅스 (7)
      • [ Frontend ] (17)
        • Vue.js & Nuxt.js (9)
        • JSP_Thymeleaf (7)
      • [ 기타 ] (47)
        • 오픈소스 라이브러리 (5)
        • 코딩테스트 (13)
        • Trouble Shooting (7)
        • Tech Interview (6)
        • Book Review (9)
        • 끄적끄적... (5)
        • 개인 프로젝트 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • github
  • 링크

  • 공지사항

    • GitHub
    • 공부한 내용을 정리하고 기록하는 블로그 입니다.
  • 인기 글

  • 태그

    cleancode
    백엔드공부
    백준
    자료구조
    Spring
    Java
    클린코드
    백엔드
    백엔드스쿨
    리눅스
    Nuxt3
    mybatis
    SQL
    기술면접
    Linux
    JPA
    트랜잭션
    TechInterview
    SpringBoot
    MySQL
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
HSRyuuu
[Linux/Unix] POSIX와 Unix 계열의 표준 입출력
상단으로

티스토리툴바