Post

Linux 파이프(Pipe), 리다이렉션(Redirection)

1. 파이프(Pipe), 리다이렉션(Redirection)

표준 입력, 출력, 에러를 연결하기 위해서 사용한다.

2. 파이프(Pipe)

파이프는 command1 | command2와 같은 형태로 사용되고, command1의 표준 출력을 command2의 표준 입력으로 전달한다. &를 붙이면 표준 에러도 함께 전달한다.

1
2
3
4
5
$ command1 | command2
$ command1 |& commnad2

# file.txt의 내용을 읽어서, grep의 입력으로 전달
$ cat file.txt | grep a

3. 리다이렉션(Redirection)

리다이렉션은 command > filename와 같은 형태로 사용되고, 파일을 읽어서 표준 입력으로 전달하거나, 표준 출력을 파일로 저장한다. 파일 대신 명령의 결과를 입력, 출력할 수도 있다. &를 붙이면 표준 에러도 함께 전달한다.

리다이렉션내용
<파일 읽기
>파일 쓰기(overwrite)
>>파일 쓰기(insert)
1
2
3
4
5
6
7
8
# 파일 입력
$ command < infile

# 파일 출력 
$ command > outfile
$ command >> outfile
$ command >& outfile
$ command >>& outfile

4. 2>&1와 /dev/null

스크립트를 작성할 때 2>&1 이라는 표현이 있다. 이 명령은 표준에러(2)를 표준출력(1)으로 리다이렉션 하는 것이다.

리눅스는 표준 입력과 출력을 숫자로 표현할 수 있다. 이를 파일 디스크립터라고 한다.

구분파일 디스크립터
표준 입력0
표준 출력1
표준 에러2

/dev/null은 표준 출력을 버리기 위한 용도로 사용되는 디스크립터 이다. 처리 결과로 출력되는 로그를 보지 않기 위해 사용하고, 2>&1과 함께 사용하여 표준 출력, 표준 에러를 화면에 표시하지 않는 용도로 사용한다.

1
2
3
4
5
# sample.sh의 표준 출력을 보이지 않도록 리다이렉션
$ sample.sh > /dev/null

# sample.sh의 표준 출력, 에러를 보이지 않도록 리다이렉션
$ sample.sh > /dev/null 2>&1

[출처 및 참고]

This post is licensed under CC BY 4.0 by the author.