Server/리눅스
[Linux] 입출력 리다이렉션(Redirection), 파일 디스크립터(File descriptor)와 파이프(Pipe)
허니차
2020. 2. 9. 16:54
*표준 입/출력: 키보드로 입력 --> 모니터로 출력
입출력 리다이렉션(Redirection) : 파일로 표준 입/출력을 할 수 있도록 하는 것
리다이렉션 기호 | 방향 | 의미 |
> | 표준 출력 |
명령 > 파일 : 명령의 결과를 파일로 저장 (기존 파일 덮어씀) |
>> | 표준 출력(append) | 명령 >> 파일 : 명령의 결과를 기존 파일에 추가 |
< | 표준 입력 | 명령 < 파일 : 파일의 데이터를 명령에 입력 |
Ex1) cat test1.txt의 결과를 test.txt로 저장한다. (표준 출력 리다이렉션)
$cat test1.txt > test.txt
Ex2) cat test1.txt를 실행했을 때 에러가 발생하면 err.txt로 저장한다. (표준 에러 리다이렉션)
$cat test1.txt 2 > err.txt
*표준 출력/에러 모두 리다이렉션을 하고 싶다면 파일명 앞에 &추가
Ex) cat test1.txt >& test_err.txt
Ex3) test1.txt의 내용을 sort명령어의 입력으로 받는다. (표준 입력 리다이렉션)
$sort < test1.txt
Ex4) cat test1.txt를 실행한 결과를 test1.log로 저장하고 에러가 발생하는 경우에도 test1.log로 저장한다.
$cat test1.txt > test1.log 2 >&1
파일 디스크립터(File descriptor,fd)
구분 | 장치 |
fd |
표준 입력 | 키보드 | 0 |
표준 출력 | 모니터 | 1 |
표준 에러 | 모니터 | 2 |
*쉘 스크립트에서 표준 에러 출력 없애는 법 : 실행 명령 뒤에 리다이렉션 기호를 사용하여 /dev/null 2 > &1를 붙여 사용
Ex) cat /etc/shell > /dev/null 2 > &1
(/dev/null은 0값을 갖는 Null파일)
파이프 라인(Pipe): 실행한 명령의 결과를 다음 명령으로 전달하여 처리되도록 할 때 사용
Ex)실행중인 프로세스 출력 결과 중 test란 문자가 포함된 라인만 출력
$ps -ef | grep test
$ps -ef | grep test | grep -v foo