리눅스 리다이렉션(Redirection)

Gunter·2024년 2월 19일

 

파일 디스크립터 (file descripter)

리눅스는 CLI(Command Line Interface)명령어 기반 운영체제이기 때문에, 명령어를 input 하거나, 결과가 output 되는 형식으로 이용한다.

파일 디스크립터는 리눅스 운영체제가 특정 파일에 접근할 때 사용되는 값을 의미한다.
리눅스 시스템에서 모든것은 파일로 관리되는데, 입력과 출력도 마찬가지.

이 때 기본적으로 표준 입력, 출력, 오류는 항상 고정으로 0번 1번 2번 파일번호를 가진다.

종류영문파일 디스크립터특징
표준 입력 스트림stdin0키보드로 명령어를 치고 엔터를 이용해 입력하는 방식을 의미
표준 출력 스트림stdout1키보드로 명령어를 실행하고 정상 종료 시 출력되는 내용을 의미
표준 오류 스트림stderr2명령어 실행 시 발생한 에러 메시지 내용을 의미

 


 

리다이렉션 (Redirection)

 
리다이렉션(Redirection)은 말 그대로, 방향을 변경하는것을 의미한다.
리다이렉션은 파일 디스크립터를 활용하여 표준 출력과 에러를 자유롭게 다룰 수 있다.
키보드로 표준 입력을 받거나 화면으로 출력하는 것이 아니라, 파일로 표준 입력을 받고, 파일로 표준 출력을 받는 기능을 의미한다.

종류기호사용법설명
표준 출력 (덮어쓰기)>명령어 > 파일명령어의 결과를 파일에 덮어씀.
표준 출력 (추가)>>명령어 >> 파일명령어의 결과를 파일에 추가
표준 입력<명령어 < 파일파일의 내용을 명령어의 입력으로 사용

 

기초 사용법

형태의미
[명령어] 1> [파일]명령어 > 파일과 같은 의미로, 표준 출력을 파일에 덮어쓴다.
[명령어] 2> [파일]명령어 실행 시 에러가 발생하면, 에러 내용을 파일에 덮어쓴다.
[명령어] 1> [파일] 2> [파일2]명령어 실행 시, 결과는 파일에, 에러는 파일2에 덮어쓴다.
[명령어] 1> [파일] 2> [파일]명령어 실행 시, 표준 출력과 에러를 모두 파일에 쓴다.

 

활용해보기

형태의미
[명령어] 1> [파일] 2> /dev/null명령어 실행 시, 결과는 파일에 쓰고, 에러는 출력하지 않고 버린다.
[명령어] > [파일] 2>&1명령어 실행 시, 표준 출력과 에러 모두 파일에 쓴다.
  • /dev/null 은 리눅스에서 쓰레기통과 같다. 휴지통에 들어가는 순간 파일이 완전히 삭제된다.
  • [명령어] > [파일] 2>&1 는 표준 출력(stdout)을 파일에 쓰고, 표준 에러(2)를 &1로 보내라는(>) 의미이다.
    - 이 때 &1은, 표준 출력(1)으로 보내는데 백그라운드(&)로 보내라는 의미이다.
    한줄 요약 : '표준 에러(2)를 백그라운드(&)로 표준출력(1)에 보내라(>)'

 


예제로 연습해보자 ..! 🤓🤓🤓🤓

~$ find / -name *.txt 1>& a.txt

find : 파일 시스템에서 파일을 찾아라.
/ : 루트 디렉토리
-name *.txt : '.txt'확장자를 가진 파일을 찾아라.

'.txt' 확장자를 가진 모든 파일의 목록을 a.txt라는 파일에 저장해라.

 

~$ ls -al -Hello 1> b.txt 2> a.txt

ls -al : 디렉토리의 내용을 나열. -a는 모든 파일 나열, -l은 자세한 정보 출력.
1> b.txt : 표준 출력(ls -al -Hello 명령어의 출력)을 b.txt 파일에 저장.
2> a.txt : 표준 에러 출력(ls -al -Hello 명령어에서 발생하는 모든 오류 메시지)을 a.txt 파일에 저장.

ls -al -Hello 명령어의 정상적인 출력은 b.txt에 저장되고, 오류메시지는 a.txt에 저장된다.

 

~$ ls -Hello > c.txt 2>&1

ls를 사용해 -Hello인 특정 옵션과 함께 디렉토리의 내용을 나열하고, 그 결과와 오류 메시지를 함께 c.txt 파일에 저장

0개의 댓글