2024. 3. 11. 19:00ㆍData Engineering/Linux
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