- Published on
2025.09.27
[모두의 리눅스] - 11. 표준 입출력과 파이프라인
11.1. 표준 입력, 표준 출력, 표준 에러 출력
- 표준 입력(stdin): 데이터를 입력하는 채널
- 표준 출력(stdout): 실행 결과가 출력되는 채널
- 표준 에러 출력(stderr): 에러 메시지가 출력되는 채널
위 세 채널을 합쳐 표준 입출력이라 한다.
11.2. 리다이렉션
리다이렉션: 표준 입출력의 연결을 변경하는 것
>를 사용해 입출력 리다이렉션을 할 수 있다.
$ cat < /etc/crontab # 입력 리다이렉션 사용
$ cat /etc/crontab # 인자로 파일 지정
보통의 표준 입력은 키보드 입력인데, >를 사용해 파일을 표준 입력으로 연결.
파일의 내용을 표준 입력으로 cat 명령어에 전달하는 방식으로 작동. 위의 두 방식의 차이를 이해해야 하는데, 하단의 방법은 사용자 편의를 위해 별도로 제공하는 방식이고, <를 사용하는 것이 리다이렉션
표준 출력 리다이렉션은 주로 실행 결과를 출력이 아닌 파일 저장 등에 사용. 사용 방법은 같음.
표준 에러 출력도 리다이렉션이 가능한데, 표준 출력을 파일 저장으로 리다이렉션한 경우, 실행 결과가 별도로 출력되지 않지만 에러 메시지는 그대로 출력된다. 실행 결과와 에러 메시지를 별도로 다루기 위해 표준 에러 출력이 별도로 존재하는 것이므로 리다이렉션도 마찬가지로 별도로 처리할 수 있다.
표준 에러 출력은 2>로 리다이렉션 한다.
2>&1을 붙이면 표준 출력과 표준 에러 출력을 하나의 파일에 리다이렉션할 수 있음. &1은 표준 출력을 의미하는데, 표준 입출력은 숫자로 관리됨.
- 표준 입력: 0
- 표준 출력: 1
- 표준 에러 출력 2
또한, 이미 존재하는 파일에 표준 출력을 리다이렉션하면 기존 파일을 지우고 덮어 씀. 기존 파일 내용을 유지하려면 > 대신 >>를 사용하면 덮어쓰지 않고 파일의 끝에 이어서 기록.
/dev/null
/dev/null이라는 파일에 리다이렉션할 때가 있는데, 이는 특수 파일로 다음과 같은 특성을 지님.
- 입력 파일로 지정해도 내용이 입력되지 않음
- 출력 파일로 지정해도 내용이 기록되지 않음
표준 출력의 내용이 너무 많아 표준 에러 출력만을 확인하기 위해 사용하거나, 에러 메시지가 너무 많이 출력되는 경우 등에 사용
11.3. 파이프라인
여러 명령어를 연결하는 것으로, 명령어의 표준 출력을 다른 명령어의 표준 입력으로 연결할 수 있다. 파이프라인으로 여러 명령어를 연결 가능
파이프라인은 파이프 기호(|)를 사용
command1 | command2 | command3
$ ls -l | less # ls 결과를 less에 전달
11.4. 필터 명령어
필터 명령어: 표준 입력을 받아들여 표준 출력으로 출력하는 명령어
대표적인 필터 명령어
| 명령어 | 내용 |
|---|---|
| cat | 입력 내용을 그대로 출력 |
| head | 파일 앞부분 출력(출력 행 수 지정 - 기본값 10) |
| tail | 파일 뒷부분 출력 |
| grep | 검색 패턴에 일치하는 행 출력 |
| sort | 정렬 |
| uniq | 중복된 행을 제거하여 출력 |
| tac | 역순으로 출력 |
| wc | 행 수나 바이트 수를 출력 |