오늘은 Linux에서 강력한 기능 중 하나인 재지향(redirection)과 파이프(pipe)에 대해서 알아봅시다.
이번에는 Linux Kernel 내부 구현이 아닌, 개념과 사용법 정도만 알고 가볍게 넘어가겠습니다.
재지향(redirection)
Linux에서 Shell은 항상 아래의 표준 입출력을 파일의 형태(fd)로 열고 있습니다.
1.
stdin
2.
stdout
3.
stderr
프로그램의 연산 결과를 출력 장치(파일, 모니터)로 전달하지만, 이 출력되는 데이터를 임의의 다른 장치로 전송하는 것을 재지향(redirection)이라고 합니다.
재지향(redirection)이란 프로세스의 fd(stdin, stdout, stderr)가 가리키는 대상을 변경하는 것 입니다.
사용법
Linux에서 열려 있는 파일은 fd(file descriptor)를 할당 받게 됩니다.
•
stdin → 0
•
stdout → 1
•
stderr → 2
stdin, stdout, stderr는 fd이기 때문에 재지향할 수 있습니다.
< file
파일로부터 표준 입력을 받도록 재지향합니다.
> file
표준 출력을 파일로 재지향합니다.
파일이 없으면 새로 만들고, 파일이 존재한다면 덮어씁니다.
>> file
표준 출력을 파일로 재지향합니다.
파일이 없으면 새로 만들고, 파일이 존재한다면 끝에 추가합니다.
2>&1
stderr을 stdout으로 재지향합니다.
파이프(pipe)
파이프(pipe)란 한 프로세스의 표준 출력을 다른 프로세스의 표준 입력으로 연결해 주는 메커니즘이며, 프로세스간에 단 방향 통신을 제공합니다.
파이프(pipe)는 Linux shell에서 사용되며, |가 파이프 연산자는 이 메커니즘 위에서 동작합니다.
example
아래의 명령어로 설명을 해보면 ls -al의 결과인 디렉토리 리스트중에서 .txt가 들어간 파일을 찾습니다.
ls -al | grep ".txt"
C
복사