안녕하세요 피터입니다.

오늘은 리눅스의 I/O 재지향(redirection)에 대해서 설명드리겠습니다.

재지향파이프(pipe)와 더불어 리눅스의 명령어들을 훨씬 강력하게 무장시켜주는 역할을 하는 핵심 기능입니다.

마치 그 자체로는 특별한 맛이 나지 않지만 단맛이나 짠맛 같은 다른 맛을 훨씬 강하게 만들어주는 조미료와 같다고 할까요?


파이프는 아래 글에서 자세히 보실 수 있습니다.

개요

리눅스 쉘은 항상 아래와 같이 표준 입출력파일 형태로 열고 있습니다.
  • 표준입력(stdin: 키보드)
  • 표준출력(stdout: 모니터)
  • 표준에러(stderr: 모니터)


기본적으로 프로그램은 연산 결과를 출력 장치(파일, 모니터, 프린터 등)로 내보내는데요. 이 출력되는 데이터를 임의로 다른 장치로 보내는 것을 재지향(redirection)이라고 합니다.


다시 말하면 파일이나 프로그램, 명령어 등의 출력을 낚아채어 다른 파일이나 프로그램, 명령어의 표준 입력으로 보내는 것을 말합니다.


사용법

표준 입출력은 파일 형태로 열려 있다고 말씀드렸는데요. 리눅스에서 열려 있는 파일은 파일 디스크립터(file descriptor)를 할당 받게 됩니다.

  • 표준 입력(stdin) = 0
  • 표준 출력(stdout) = 1
  • 표준 에러(stderr) = 2

이렇게 0, 1, 2파일 디스크립터를 할당받기 때문에 이를 이용해서 재지향을 할 수 있습니다.



> file
표준 출력을 파일로 재지향 합니다. 파일이 없으면 새로 만들고, 파일이 있으면 덮어씁니다.

>> file
표준 출력을 파일로 재지향 합니다. 파일이 없으면 새로 만들고, 파일이 있으면 파일의 끝에 덧붙입니다.

2>&1
표준 에러를 표준 출력으로 재지향합니다. 표준 에러도 표준 출력의 자격으로 보내집니다.

< file
파일로부터 표준 입력을 받도록 재지향합니다.


예제

ex) test.txt 파일의 출력을 test.out 파일로 저장

cat test.txt > test.out

ex) today.log 파일의 출력을 week.log 파일의 끝에 덧붙임

cat today.log >> week.log


ex) cat 명령어의 에러를 표준 출력으로 재지향하고 표준 출력을 out 파일로 재지향

[root@peterdev test]# cat nofile > out 2>&1
[root@peterdev test]# cat out
cat: nofile: No such file or directory

에러가 표준 출력으로 재지향 되었기 때문에 화면에 에러가 출력되는 대신에 out 파일에 기록됩니다.


ex) ls 명령어의 에러를 /dev/null 로 재지향

[root@peterdev test]# ls -xy 2> /dev/null
[root@peterdev test]#

/dev/null 은 특수 파일로 이 파일로 출력된 데이터는 버려집니다.

ls 명령에 xy 라는 잘못된 옵션을 입력하여 에러가 발생하였지만, /dev/null 로 재지향하여 출력을 없애버렸습니다.



 

-Peter의 우아한 프로그래밍

여러분의 댓글은 저에게 크나큰 힘이 됩니다. 오류 및 의견 주시면 감사하겠습니다.

블로그 이미지

Awesome PeterAhn

IT 정보 공유, 프로그래밍 지식 공유, 훌륭한 개발자가 되어보자

댓글을 달아 주세요