Linux/Unix 예제의 입력 출력 리디렉션
⚡ 스마트 요약
리눅스와 유닉스에서 리디렉션은 명령어가 입력을 읽거나 출력을 보내는 위치를 변경합니다.ping 키보드와 화면에서 '>', '<', '추가' 연산자와 같은 연산자를 사용하여 파일이나 장치를 입력합니다.

리디렉션은 가장 유용한 기능 중 하나입니다. Linux 유닉스 셸은 명령어가 입력을 읽고 출력을 보낼 위치를 직접 지정할 수 있기 때문에 유용합니다. 이 페이지에서는 출력, 입력 및 오류 리디렉션에 대해 예제와 함께 설명합니다.
리디렉션이란 무엇입니까?
리디렉션은 리눅스에서 명령어를 실행할 때 표준 입력 및 출력 장치를 변경할 수 있는 기능입니다. 기본적인 작업 흐름은 다음과 같습니다. 리눅스 명령어 입력을 받아 출력을 내는 것입니다.
- 표준 입력(stdin) 장치는 키보드입니다.
- 표준 출력(stdout) 장치는 화면입니다.
리디렉션을 사용하면 위의 표준 입력 및 출력을 변경할 수 있습니다.
출력 리디렉션
아래 그림은 출력 리디렉션 예제의 시작 부분을 나타냅니다.
'>' 기호는 출력(STDOUT) 리디렉션에 사용됩니다.
예:
ls -al > listings
여기서는 `ls -al` 명령의 출력 결과가 화면이 아닌 "listings" 파일로 리디렉션됩니다. 아래 스크린샷은 그 결과를 보여줍니다.
참고: 명령 출력을 파일로 리디렉션할 때 올바른 파일 이름을 사용하십시오. 동일한 이름의 파일이 이미 존재하는 경우, 리디렉션된 명령은 해당 파일의 내용을 삭제한 후 덮어씁니다.
기존 파일을 덮어쓰지 않고 내용을 추가하려면 '>>' 연산자를 사용하세요. 아래 스크린샷은 '>>' 연산자를 사용하여 내용을 추가한 예입니다.
표준 출력을 파일뿐만 아니라 장치로도 리디렉션할 수 있습니다.
$ cat music.mp3 > /dev/audio
`cat` 명령어는 음악 파일을 읽습니다.mp3 이 명령은 출력을 오디오 장치인 /dev/audio로 보냅니다. PC의 사운드 설정이 올바르면 이 명령은 음악 파일을 재생합니다.mp3.
입력 리디렉션
아래 그림은 입력 리디렉션을 보여줍니다.
'<' 기호는 입력(STDIN) 리디렉션에 사용됩니다.
예: 리눅스의 메일 프로그램을 사용하면 터미널에서 이메일을 보낼 수 있습니다.
키보드, 즉 표준 입력 장치를 사용하여 이메일 내용을 입력할 수 있습니다. 하지만 이메일에 파일을 첨부하려면 다음과 같은 형식의 입력 리디렉션 연산자를 사용할 수 있습니다.
mail -s "Subject" to-address < Filename
아래 스크린샷은 메일 명령어가 파일을 입력으로 읽는 모습을 보여줍니다.
이렇게 하면 파일이 이메일에 첨부되어 수신자에게 전송됩니다.
위의 예시는 간단했습니다. 이제 파일 디스크립터를 활용하는 고급 리디렉션 기법을 살펴보겠습니다.
입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에 Descript오르스(FD)
리눅스와 유닉스에서는 모든 것이 파일입니다. 일반 파일, 디렉터리, 심지어 장치까지도 파일입니다. 모든 파일에는 파일 디스크립터(FD)라고 하는 고유 번호가 부여됩니다.
아래 다이어그램은 표준 스트림과 해당 파일 디스크립터를 보여줍니다.
화면에도 파일 디스크립터가 있습니다. 프로그램이 실행되면 출력 결과가 화면의 파일 디스크립터로 전송되고, 모니터에 프로그램 출력 결과가 표시됩니다. 만약 출력 결과가 프린터의 파일 디스크립터로 전송된다면, 프로그램 출력 결과가 프린터로 인쇄될 것입니다.
오류 리디렉션
터미널에서 프로그램이나 명령어를 실행할 때마다 표준 입력, 표준 출력, 표준 오류라는 세 개의 파일이 항상 열립니다.
이 파일들은 프로그램이 실행될 때마다 항상 존재합니다. 앞서 설명했듯이, 각 파일에는 파일 디스크립터가 연결되어 있습니다.
| 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에 | 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에 Descriptor |
|---|---|
| 표준 입력 STDIN | 0 |
| 표준 출력 STDOUT | 1 |
| 표준 오류 STDERR | 2 |
기본적으로 오류 스트림은 화면에 표시됩니다. 오류 리디렉션을 사용하면 오류가 화면이 아닌 다른 파일로 전송됩니다.
오류 리디렉션이 필요한 이유는 무엇입니까?
오류 리디렉션은 유닉스와 리눅스에서 매우 인기 있는 기능 중 하나입니다.
유닉스를 자주 사용하는 사람이라면 많은 명령어가 엄청난 양의 오류를 발생시킨다는 것을 알 것입니다. 예를 들어, 파일을 검색할 때 일반적으로 다음과 같은 오류가 발생합니다. 허가 거부 오류는 일반적으로 특정 파일을 찾는 사람에게 도움이 되지 않습니다. 셸 스크립트를 실행할 때 오류 메시지가 정상적인 프로그램 출력에 방해되는 것을 원하지 않는 경우가 많습니다.
해결책은 오류 메시지를 파일로 리디렉션하는 것입니다.
예제 1
$ myprogram 2>errorsfile
아래 스크린샷은 터미널에서 이 명령어를 실행한 모습입니다.
위 예시에서는 myprogram이라는 프로그램을 실행하고 있습니다. 표준 오류에 대한 파일 디스크립터는 2입니다. "2>"를 사용하면 오류 출력을 "errorsfile"이라는 파일로 리디렉션할 수 있습니다. 따라서 프로그램 출력에 오류가 과도하게 표시되지 않습니다.
예제 2
다음은 find 문을 사용하는 또 다른 예입니다.
find . -name 'my*' 2>error.log
find 명령어를 사용하여 현재 디렉토리(".")에서 이름이 "my"로 시작하는 파일을 검색하고, 오류가 발생하면 error.log 파일로 보냅니다.
예 3 : 좀 더 복잡한 예를 살펴보겠습니다.
서버 관리자는 종종 디렉터리 목록을 작성하고 오류 및 표준 출력을 파일에 저장하여 나중에 처리합니다. 다음은 해당 명령어입니다.
ls Documents ABC> dirlist 2>&1
아래 다이어그램은 두 스트림이 하나의 파일로 캡처되는 것을 보여줍니다.
이리:
- 2>&1은 STDERR이 STDOUT과 동일한 대상(파일 디렉터리 목록)으로 리디렉션됨을 의미합니다.
- 오류 출력은 표준 출력으로 리디렉션되고, 표준 출력은 다시 dirlist 파일로 리디렉션됩니다. 따라서 두 스트림 모두 dirlist 파일에 기록됩니다.
아래 다이어그램은 입력, 출력 및 오류 리디렉션이 어떻게 서로 연관되는지 요약하여 보여줍니다.






.png)