[Linux] 스트림 (Stream) / 파일 디스크립터 (File Descriptor)

반응형

    리눅스 표준 스트림

    유닉스 및 유닉스 계열 운영 체제에서 프로그램(프로세스)과 환경(주변기기) 사이에 미리 연결된 입출력 통로


     

     

    파일 디스크립터

    유닉스에서는 모든 개체를 파일로 관리하며, 프로그램(프로세스)가 파일에 접근하기 위해서 특정 파일의 디스크립터를 이용해 파일에 접근합니다. 셀은 입력과 출력을 위한 세 가지 기본 파일 디스크립터 (File Descriptor - 이하 FD)를 모든 프로세스에 제공합니다. 입력(스트림), 출력(스트림) 줄여서 I/O라고 칭합니다.

     

    • stdin (FD 0) - 키보드 입력
    • stdout (FD 1) - 화면
    • stderr (FD 2) - 오류

     

    실제 /dev 디렉토리를 확인하면 다음과 같이 파일 디스크립터를 파일 형태로 가지고 있는 것을 볼 수 있습니다. 유닉스(Unix)는 장치를 추상화해서 각 장치를 파일처럼 다루는 것으로 여러 가지 이점을 갖게 됩니다. 데이터의 흐름을 스트림으로 정의해 파일을 읽고 쓰는 작업을 통일시키게 됩니다.

     

    ubuntu linux


    리다이렉션

     

    리다이렉션은 프로세스간 통신의 한 형태로 커맨드라인 인터프리터들이 일반적으로 제공하는 기능입니다. 리다이렉션은 표준 스트림을 사용자가 지정한 위치로 우회하는 기능입니다.

     

    • 2> 는 stderr 스트림을 재지정한다는 의미입니다.
    • 1> 또는 > 는 stdout 에 대한 스트림을 재지정한다는 의미 입니다.
    • 만약 이 둘(stderr, stdout)을 모두 재지정하려면 &>를 사용합니다.
    • 스트림을 제거하기 위해서는 /dev/null을 사용합니다.

     

    다음 예제는 stdout과 stderr을 모두 /dev/null로 재지정해 모든 출력값을 버립니다.


    curl https://www.naver.com &> /dev/null

     


     

     

    다음 예제는 출력값과 상태값을 모두 다른 파일로 리다이렉션 하는 예제입니다.


    curl http://www.naver.com > /tmp/naver.txt 2> /tmp/curl-status


     

     

     

    /dev/null

    null device, bit bucket, black hole 이라고 불리는 /dev/null은 리눅스의 null 파일 장치 입니다. 주로 불 필요한 출력 스트림을 버리는 곳으로 사용됩니다.

     

    /dev/null은 파일로 항상 비어있다는 특징이 있습니다. 리다이렉션을 통해 전송된 데이터는 버려집니다. 만약 어떤 명령을 실행하고 결과 값이 필요 없는 경우에는 /dev/null을 출력으로 지정할 수 있습니다.

     


    $ echo Hello World!
    Hello World!
    
    $ echo Hello World! > /dev/null


     

     

    반응형

    댓글

    Designed by JB FACTORY