| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
Tags
- php
- terminal
- coreutils
- PackageManagement
- Solaris
- 리눅스
- 쉘스크립트
- 명령어
- linux
- 사용자관리
- 리눅스명령어
- UnixCommand
- linuxcommand
- JavaScript
- environment
- shell
- 정규표현식
- 터미널
- UNIX
- 파일시스템
- 시스템관리
- 자바스크립트
- 유닉스명령어
- tcsh
- sysadmin
- bash
- js
- cups
- Unix명령어
- 유닉스
Archives
- Today
- Total
ioerror
| , |& 사용법 및 옵션 - 명령어 표준 출력을 다른 명령어의 표준 입력으로 연결하는 파이프 연산자 본문
반응형

| , |& - pipe / pipe with stderr operator
명령어 표준 출력을 다른 명령어의 표준 입력으로 연결하는 파이프 연산자
유닉스 및 리눅스 쉘(Shell) 환경에서 파이프 연산자(|, |&)는 앞서 실행된 명령어의 표준 출력(stdout) 또는 표준 에러(stderr) 스트림을 디스크에 저장하지 않고, 뒤따르는 명령어의 표준 입력(stdin)으로 직접 연결하여 연속 처리하는 핵심 프로세스 간 통신(IPC) 기호이다.
1. 명령어 용도
- 사용가능 OS, Shell: POSIX 호환 모든 유닉스 및 리눅스 쉘 (|), Bash 4.0+/zsh/tcsh (|&)
- 대용량 로그 파일이나 텍스트 데이터 출력을 grep, awk, sed, sort 등의 필터링 도구와 연계하여 원하는 데이터만 즉시 가공·추출하는 경우
- 명령어 실행 중 발생하는 오류 메시지(stderr)와 정상 출력(stdout)을 모두 모아 한 번에 검색하거나 페이저(less) 프로그램으로 확인하는 경우
- 서버 모니터링 시 프로세스 목록(ps aux) 중 특정 프로세스 개수나 상태를 파이프라인으로 연결하여 실시간 집계하는 경우
2. 명령어 서식
Bash
# 1. 기본 파이프 (표준 출력만 전달)
command1 | command2 [| command3 ...]
# 2. 표준 출력과 표준 에러 통합 파이프 (Bash 4.0+/zsh)
command1 |& command2
# 3. POSIX 호환 표준 출력 및 표준 에러 통합 파이프
command1 2>&1 | command2
3. 명령어 옵션
- 주요 옵션 소개 테이블
| 연산자/구문 | 설명 | 사용가능 OS 및 쉘 |
| cmd1 | cmd2 | cmd1의 표준 출력(stdout, FD 1)을 cmd2의 표준 입력(stdin, FD 0)으로 전달하다. | [POSIX/Shell] |
| cmd1 |& cmd2 | cmd1의 표준 출력(FD 1)과 표준 에러(FD 2)를 모두 cmd2의 표준 입력으로 전달하다. | [Bash 4.0+/zsh/tcsh] |
| cmd1 2>&1 | cmd2 | cmd1의 표준 에러를 표준 출력에 병합한 후 cmd2로 전달하는 POSIX 호환 방식이다. | [POSIX/Shell] |
| set -o pipefail | 파이프라인으로 연결된 명령어 중 하나라도 실패(비zero 반환)하면 전체 파이프라인의 종료 상태를 실패로 처리하도록 쉘 옵션을 설정하다. | [Bash/zsh/ksh] |
| ${PIPESTATUS[@]} | 파이프라인 내에서 실행된 각 명령어들의 종료 코드(Exit Status) 배열을 조회하다. | [Bash] |
| $pipestatus | 파이프라인 내 각 명령어의 종료 코드를 담고 있는 배열 변수이다. | [zsh] |
- 명령어 옵션 사용시 결과 예시
Bash
# 1. 기본 파이프 (|) - 프로세스 목록에서 특정 단어(nginx) 검색
ps aux | grep "nginx"
# output:
# root 1234 0.0 0.1 10240 2048 ? Ss 10:00 0:00 nginx: master process
# www-data 1235 0.0 0.2 10600 3072 ? S 10:00 0:00 nginx: worker process
# 2. 파이프를 이용한 텍스트 카운팅 (grep + wc)
grep -i "error" /var/log/syslog | wc -l
# output:
# 42
# 3. 표준 출력과 표준 에러 동시 전달 (|&) [Bash 4.0+/zsh]
ls -l /bin/bash /invalid_path |& grep "No such file"
# output:
# ls: cannot access '/invalid_path': No such file or directory
# 4. pipefail 옵션 적용 후 PIPESTATUS 확인 [Bash]
set -o pipefail
cat non_existent_file.txt | grep "test"
echo ${PIPESTATUS[@]}
# output:
# cat: non_existent_file.txt: No such file or directory
# 1 1 (첫 번째 cat 명령어와 두 번째 grep 명령어 모두 실패 코드를 반환하다)
4. 명령어 특이사항(유의사항)
- 서브쉘(Subshell) 비동기 실행 및 변수 공유 불가: 파이프라인(|)으로 연결된 각 명령어는 쉘의 별도 서브쉘(Subshell) 프로세스에서 실행된다. 따라서 파이프 오른쪽 명령에서 쉘 변수 값을 변경하거나 cd 명령을 실행하더라도, 파이프 실행이 끝난 후 원래의 메인 쉘 환경에는 아무런 영향을 주지 않다.
- 종료 상태 코드(Exit Code) 유의점: 기본적으로 파이프라인 연결 전체의 종료 상태는 가장 마지막에 실행된 명령어의 종료 상태를 따라간다. 앞쪽 명령어가 실패하더라도 마지막 명령어가 성공하면 $? 값은 0(성공)을 반환한다. 이를 방지하려면 set -o pipefail 옵션을 미리 활성화해야 하다.
- |&와 POSIX 이식성: |& 연산자는 Bash 4.0 이상, zsh, tcsh 등 최신 단독 쉘에서 제공하는 편의 문법이다. /bin/sh 기반의 순수 POSIX 호환 스크립트 작성 시에는 2>&1 | 구문을 사용하는 것이 안전하다.
- 버퍼링(Buffering) 현상: 파이프 라인을 거쳐 데이터를 전달할 때 표준 출력이 터미널이 아닌 파이프 파일 기술자로 변경되므로 블록 버퍼링(Block Buffering)이 수행되어 실시간 출력이 지연될 수 있다. 실시간 출력이 필요한 경우 stdbuf 명령어를 혼용하다.
관련 명령어들
- grep: 파일이나 파이프 입력에서 지정한 패턴 텍스트를 검색하다.
- tee: 표준 입력을 받아 표준 출력으로 출력함과 동시에 파일로도 기록하다.
- xargs: 표준 입력으로 전달된 텍스트 데이터를 받아 다른 명령어의 인자(Arguments)로 변환하여 실행하다.
- less: 대용량 파이프 출력을 한 페이지씩 나누어 볼 수 있게 하는 터미널 페이저이다.
- stdbuf: 파이프 통신 시 발생할 수 있는 입출력 버퍼링 정책을 조절하다.
https://ioerror.tistory.com/entry/UNIX-Linux-Command-Reference
UNIX & Linux Command Reference
유닉스 / 리눅스 명령어 표유닉스와 리눅스 환경에서 자주 사용되는 필수 명령어들을 완벽하게 정리한다. 서버 관리, 프로그래밍, 일상적인 시스템 운영 등 어떤 목적이든 터미널 환경을 능숙하
ioerror.tistory.com
반응형
'OS' 카테고리의 다른 글
| ;(세미콜론) 사용법 및 옵션 - 명령어 순차 실행 및 구문 구분 제어 기호 (0) | 2026.08.09 |
|---|---|
| <, >, >> 사용법 및 옵션 - 표준 입출력 리다이렉션(재지정) 연산자 (0) | 2026.08.09 |
| =(equal) 사용법 및 옵션 - 문자열 비교 및 조건식 검증 연산자 (0) | 2026.08.09 |
| zip 사용법 및 옵션 - 파일 및 디렉터리 압축 및 아카이브 생성 (0) | 2026.08.09 |
| zcat 사용법 및 옵션 - 압축 파일의 내용을 해제 없이 표준 출력으로 조회 (0) | 2026.08.09 |
Comments