리눅스 기초 다지기 - 35. 표준 파일 디스크립터

 

표준 파일 디스크립터

: 리눅스 시스템은 모든 개체를 파일로 다룬다. 리눅스는 파일 디스크립터를 사용하여 각 파일 개체를 식별한다.

 

디스크립션 | 약어 | 설명

0 STDIN 표준입력
1 STDOUT 표준출력
2 STDERR 표준에러

 

STDIN

: STDIN 파일 디스크립터는 셸의 표준 입력을 의미한다. 터미널에서 표준 입력은 키보드를 뜻한다.

 

cat 명령어만 입력할 경우 STDIN에서 입력을 받아들인다.

cat
hello
hello
world
world

 

입력 리다이렉션 기호(<)를 사용하면 리눅스는 표준 입력 디스크립터를 리다이렉트가 가리키는 파일로 바꾼다.

 

cat 명령어가 STDIN이 아닌 다른 파일로부터 입력을 받을 수 있도록 아래와 같이 사용할 수 있다.

cat < hello
helloworld!

 

STDOUT

: STDOUT 파일 디스크립터는 셸의 표준 출력을 의미한다. 터미널에서 표준 출력은 모니터를 뜻한다.

 

출력 리다이렉션을 사용하여 파일로 리다이렉트 할 수 있다.

 

df -h > dffile
cat dffile
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               4.0M     0  4.0M   0% /dev
tmpfs                  3.8G     0  3.8G   0% /dev/shm
tmpfs                  1.5G  8.7M  1.5G   1% /run
/dev/mapper/rl-root     48G  1.1G   44G   3% /
/dev/sda1              920M  173M  684M  21% /boot
/dev/mapper/hk-stack2  974M   24K  907M   1% /test/stack
/dev/sda3              952M  7.0M  945M   1% /boot/efi
/dev/mapper/hk-stack    12G  120M   12G   1% /test/stack
tmpfs                  768M     0  768M   0% /run/user/0

 

> 을 사용하면 파일을 덮어쓰고, >>을 사용하여 데이터를 추가할 수 있다.

 

echo "hello world!" >> dffile
cat dffile
Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               4.0M     0  4.0M   0% /dev
tmpfs                  3.8G     0  3.8G   0% /dev/shm
tmpfs                  1.5G  8.7M  1.5G   1% /run
/dev/mapper/rl-root     48G  1.1G   44G   3% /
/dev/sda1              920M  173M  684M  21% /boot
/dev/mapper/hk-stack2  974M   24K  907M   1% /test/stack2
/dev/sda3              952M  7.0M  945M   1% /boot/efi
/dev/mapper/hk-stack    12G  120M   12G   1% /test/stack
tmpfs                  768M     0  768M   0% /run/user/0
hello world!

 

STDERR

: 셸은 STDERR 파일 디스크립터를 사용하여 오류 메시지를 처리한다.

 

STDERR 파일 디스크립터는 기본적으로 STDOUT 파일 디스크립터와 같은 곳을 가리킨다.

하지만 STDOUT를 리다이렉션 했을 때 STDERR까지 자동으로 리다이렉트 되지는 않는다.

 

# 오류 리다이렉트
ls -al stack 2> study
cat study
ls: cannot access 'stack': No such file or directory

 

/dev/null

: Null 파일 표준 위치

Null 파일은 아무 것도 포함하지 않은 파일이다. 셸이 널 파일로 보내는 모든 출력은 저장되지 않으며 따라서 없어진다.

 

ls -al > /dev/null
cat /dev/null

 

위 방법을 이용하면 파일을 삭제하지 않고 기존 파일 내용을 삭제할 수 있다.

cat /dev/null > study
cat study