본문 바로가기

Server/리눅스

[Linux] 입출력 리다이렉션(Redirection), 파일 디스크립터(File descriptor)와 파이프(Pipe)

*표준 입/출력: 키보드로 입력 --> 모니터로 출력

입출력 리다이렉션(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