[Linux] 리눅스 기본 II - I/O Redirection (입출력 재지정)
입출력 재지정 (I/O Redirection) 기능
명령에 의해 프로그램을 실행하면 커널(운영체제)에 의해 프로세스가 생성되고 프로세스는 기본적인 입출력(I/O)을 위한 3개의 파일을 오픈한다.
- 표준 입력(STDIN, FD:0) : 키보드로부터 입력받기 위한 파일
- 표준 출력(STDOUT, FD:1) : 수행 중에 발생한 정상 메시지를 모니터로 출력하기 위한 파일
- 표준 에러(STDERR, FD:2) : 수행 중에 발생한 에러 메시지를 모니터로 출력하기 위한 파일
유닉스/리눅스 시스템에서 프로세스별로 오픈한 파일을 식별하기 위해 부여한 파일 번호로, 프로세스가 실행되면 기본적으로 3개의 파일을 오픈한다. 이 때 오픈한 파일을 식별하기 위해 부여하는 FD가 0(표준입력), 1(표준출력), 2(표준에러)로 정해져있다.
입출력 재지정 기능은 프로세스의 표준 입력, 출력, 에러를 키보드나 모니터(터미널화면)가 아닌 파일로 재지정하는 기능을 말한다.
- 입력 재지정(Input Redirecton): 표준 입력을 키보드가 아닌 파일에서 읽도록 재지정하는 것
- 출력 재지정(Output Redirection): 표준 출력이나 에러를 모니터가 아닌 파일로 저장하도록 재지정하는 것
출력 재지정은 많이 사용됨 !
입력 재지정 : command [0] < 파일명
출력 재지정 : command [1 or 2] > 파일명
id > a.dat
:id
명령의 출력(1)을a.dat
파일에 새로 저장하여 쓰는 overwrite 모드(>)로 재지정id >> a.dat
:id
명령의 출력(1)을 기존a.dat
파일에 추가하여 쓰는 append 모드(>>)로 재지정id 2> a.err
:id
명령의 에러(2)를a.err
파일에 overwrite 모드로 재지정
파일번호(FD, File Disk) 미지정시 표준 출력으로 설정
id gang
의 수행 결과를 a.out 파일로 출력 재지정. overwrite(>) 모드로 재지정할 경우 기존 내용을 지우고 새롭게 저장한다.
id
의 수행결과를 a.out 파일로 출력 재지정. append(>>) 모드로 재지정할 경우 기존 내용에 추가해서 저장한다. 따라서 위의 id gang
수행결과와 id
의 수행결과가 함께 저장된다.
a.dat 파일을 생성하고 ls -l a.dat b.dat
명령을 실행했을 때, b.dat 파일은 존재하지 않으므로 에러가 발생하고 a.dat의 정보는 출력된다. 각각 ls.out과 ls.err 파일로 재지정을 하기 위해 표준출력(1)은 ls.out 파일, 표준에러(2)는 ls.err 로 overwrite 모드(>)로 재지정 명령어를 실행한다.
재지정할 파일명을 파일번호(FD)를 사용할 수 있으며 &
기호를 추가하여 표현한다. 즉, &1 은 표준출력 &2 는 표준에러를 의미한다. 위 명령은 ls 명령의 표준출력(1)은 ls.out파일로 재지정하고 표준에러(2)는 표준출력(&1)로 재지정한다는 의미이다. 따라서 표준출력과 표준에러가 모두 ls.out 파일로 저장된다.