본문 바로가기

Data Engineering/Linux

[Linux] 표준 입출력과 리다이렉션(Redirection)

1. 표준 입출력

리눅스에서는 명령어를 실행하면 표준 입출력 채널이 열린다.
 


 

 

표준 입출력 채널에는 세 가지가 있다.

  • stdin: 표준 입력. 텍스트를 입력으로 받는다 (입력 예) 키보드 또는 파일).
  • stdout: 표준 출력. 프로그램의 실행 결과를 출력한다 (출력 예) 디스플레이, 프린터, 파일 등).
  • stderr: 표준 에러 출력. 프로그램 실행 중 발생한 에러 메시지를 출력한다.

 

2. 리다이렉션(Redirection)

표준 입출력의 방향을 변경하는 것. 키보드가 아닌 파일로 입력을 받거나, 모니터가 아닌 파일로 출력을 받는 등의 작업을 할 수 있다.
 

2-1. 표준 출력

표준 출력 리다이렉션 기호는 >을 사용한다(이는 1>을 의미한다). 주로 실행 결과를 디스플레이에 출력하는 것이 아닌 파일에 저장하기 위해 사용한다.
 
아래와 같이 리다이렉션 기호을 사용해 ls 명령어의 출력 결과를 list.txt 파일에 쓸 수 있다.
 

 
 
같은 파일에 리다이렉션 기호를 사용하면 내용을 덮어쓴다. 대신 >>을 사용하면 내용을 파일 끝에 추가한다.
 

 

2-2. 표준 에러

표준 에러 리다이렉션 기호는 2>을 사용한다. 아래와 같이 표준 출력 뒤에 2>를 사용해 error.txt 파일로 에러 메시지를 출력할 수 있다.
 

 
마찬가지로 2>>기호를 사용하면 에러 내용을 파일 끝에 추가한다.
 

2-3. 활용

예시의 표준 출력은 명령어 정상 실행 결과의 출력을 화면에서 파일로 바꾼 것이고, 표준 에러 출력은 에러 메시지의 출력을 화면에서 파일로 바꾼 것이다.
 
주로 명렁어가 정상적으로 실행해도 결과를 파일에 넣고, 에러메시지가 떠 실패해도 파일에 넣고 싶어 하기 때문에 아래와 같이 사용한다.

[command] > output.txt 2>&1

 
 
2>&1은 표준 에러(2)를 표준 출력(&1)으로 리다이렉션(>)하는 것을 의미한다. 앞에서 표준 출력은 파일로 리다이렉션(>)했기 때문에 같은 파일에 출력된다. 이를 통해 프로그램 실행 시 에러가 발생하더라도 화면에 메시지가 뜨지 않고 계속 실행된다.
 

*표준 출력(1)에 &을 붙인 이유는 숫자 1을 표준 출력으로 인식하게 하기 위해서이다.

 

리다이렉션 예시 의미
[command] > file.txt 표준 출력 리다이렉션 (>)
[command] < file.txt 표준 입력 리다이렉션 (<)
[command] 2> error.txt 표준 에러 리다이렉션 (2>)
[command] > output.txt 2>&1 표준 출력 및 표준 에러를 같은 파일로 리다이렉션
[command] > output.txt 2> error.txt 표준 출력 및 표준 에러를 다른 파일로 리다이렉션

 
 

✔ /dev/null

실제 작업 시에 사용하지는 않았지만 /dev/null 파일에 리다이렉션 하는 경우도 많다고 한다. /dev/null 파일은 쓰레기통이라고 보면 된다. 입출력 파일로 지정해도 아무 내용도 기록되지 않기 때문이다(항상 비어있으며 전송된 데이터는 버려진다).
 


참고자료

 

[Linux]리눅스 명령어 연습 사이트 / 웹에서 설치 없이 바로 명령어 입력  윈도우에서 리눅스 하기

bellard.org/jslinux/ JSLinux JSLinux Run Linux or other Operating Systems in your browser! The following emulated systems are available: CPUOSUserInterfaceVFsyncaccessStartupLinkTEMUConfigComment x86Alpine Linux 3.12.0ConsoleYes click here url x86Alpine Li

marine1188.tistory.com

 

다시 시작하는 리눅스 #12 표준 입출력과 파이프라인

리눅스는 각 명령어가 가능한 한 작고 간단한 동작만을 수행하도록 설계되었다. 한 명령어에 다양한 기능을 포함하기보다는 적은 기능을 포함하는 것이 알기 쉽고 사용하기에도 쉽기 때문이다.

velog.io