반응형
3.1 입출력 재지정
기본적으로 UNIX/Linux 시스템은 쉘에서 프로그램이 실행될 때 세가지의 파일 입출력 용도인 stdin, stdout, stderr을 지정하여 사용한다.
실행되는 프로그램의 입출력 용도로 사용할 때에는 할당한 숫자를 fd(fiule descriptor)라 명명하고 다음과 같은 용도로 사용한다.
|
fd
|
fd 이름 |
용도
|
표준 장치
|
|
0
|
stdin(standard input)
|
명령어에 입력될 내용을 저장.
|
키보드
|
|
1
|
stdout(standard output)
|
명령어에 출력될 내용을 저장.
|
화면
|
|
2
|
stderr(standard error)
|
명령어에 출력될 에러 메시지를 저장.
|
화면
|
화면으로 출력된 결과를 다른 프로그램에서 입력받아 처리하거나 결과를 재가공해서 화면에 출려ㅑㄱ하고자 할 때 입출력의 용도를 재지정하여 활용하는 것이 입출력 재지정이다.
입출력 재지정은 아래의 표에 있는 형식에서 볼 수 있듯이 <와>를 이용해서 표시한다.
<,> 앞에는 프로그램의 입출력 용도를 의미하는 fd번호를 기입한다.
이떄 <>와 fd는 반드시 붙여서 사용한다.
|
형식
|
내용
|
|
명령어 fd 번호 < 파일
|
명령어에서 기본 지정된 파일이나 표준 입력 장피가 아닌 재지정된 파일에서 데이터를 입력받는다.
|
|
명령어 fd 번호 > 파일
|
명령어에서 기본 지정된 파일이나 표준 입력 장피가 아닌 재지정된 파일에서 데이터를 출력한다.
|
fd번호는 생략할 수 있는데, 입력 재지정 시에는 0, 출력 재지정 시에는 1이 생략된 것으로 생각하면 된다.
입출력 재지정을 활용하명 터미널 환경이나 스케줄에 의한 자동 실행 작업시 키보드 같은 입력 장치에서 데이터를 일일이 입력해야하는 수고를 줄일 수 있다.
관리자는 자동화할 수 있는 기회를 얻을 수 있다.
입출력 방향을 조정함으로써, 어떤 명령어의 출력이 다른 명령어의 입력으로 또는 지정된 파일로 보낼 수가 있다.
|
명령어 < 파일
명령어 0< 파일
|
|
명령어 > 파일
명령어 1> 파일
|
출력 재지정의 경우, > 이후 이름이 같은 파일이 존재한다면 덮어쓰여진다.(주의)
기존 파일의 내용을 지우고 새로운 내용을 쓰는 것이 아니라 기존의 내용에 새로운 내용을 추가하고 싶다면 >>를 사용할 수 있다.
>>를 활용하면서 또 하나 기억할 것은 기존의 파일이 없으면 생성을 하고, 같은 명령어를 다시 수행시 추가되는 내용만 계속 추가한다.
|
명령어 >> 파일
명령어 1>> 파일
|
에러 재지정은 명령어 실행에서 에러가 발생했을 떄 화면 같은 표준 출력 장칙로 출력되는 에러 내용을 파일로 저장 및 출력하도록 재지정하는 것이다.
출력하는 것임으로 > 를 사용하지만 같은 기호를 사용함으로 fd번호 2를 반드시 기입해줘야한다.
|
명령어 2> 파일
명령어 2>> 파일
|
출력과 에러 메시지가 동일한 파일에 출력되도록 재지정해야하는 경우가 있을 수 있는데
이런 경우 명령어의 중복을 막기위해 >&를 사용할 수 있다.
>& 앞에 fd 1번은 생략 가능하지만 뒤에오는 fd 1번은 생략이 불가능 하다.
|
명령 > 파일 2> 파일
명령 1> 파일 2> 파일
명령 2> 파일 > 파일
명령 2> 파일 1> 파일
명령 > 파일 2>&1
명령 1> 파일 2>&1
명령 2> 파일 >&2
명령 2> 파일 1>&2
명령 >> 파일 2>> 파일
명령 1>> 파일 2>> 파일
명령 2>> 파일 >> 파일
명령 2>> 파일 1>> 파일
명령 >> 파일 2>> &1
명령 1>> 파일 2>> &1
명령 2>> 파일 >> &2
명령 2>> 파일 1>> &2
|
3.2 파이프 (Pipe)
UNIX/Linux 시스템 관리 및 활용에서 입출력 재지정과 함께 많이 확용되는 개념인 파이프는 앞의 명령어의 실행 결과가 뒤의 명령어에 입력되도록 입출력을 연결하는 역할을 한다.
파이프의 역할은 출력 재지정과 유사한데,
출력 재지정의 경우 하드디스크 같은 보조 기억 매체의 입출력 버퍼에 저장하고 재지정된 명령어에 전달하기 때문에 버퍼에 저장하고 처리하는데 시간이 소요된다.
이에 반해 파이프의 경우, 여러 개의 명령어가 파이프로 실행될 때 이들 명령어가 거의 동시에 실행되면서 입출력되는 데이터들이 파이프로 연결되어 처리되므로 상대적으로 처리 시간이 빠른 것이 특징이다.
파이프를 통해서 명령어들을 연결하는 형식을 다음과 같다.
|
명령어 a | 명령어 b | 명령어 c
|
파이프를 통해서 연결할 수 있는 명령어의 수에는 제한이 없다.
반응형