파이프·tee·xargs
쉽게 말하면
| 기호(파이프)는 앞 명령의 결과를 뒤 명령에 그대로 넘겨 줘요. 'ls 결과 중에 txt가 들어간 것만'처럼 작은 명령을 줄줄이 이어 일을 시켜요. 공장 컨베이어 벨트와 같아요.
시험용 정의
파이프 |는 앞 명령의 표준 출력을 뒤 명령의 표준 입력으로 넘긴다. tee는 입력을 화면과 파일로 동시에 보내고, xargs는 입력을 뒤 명령의 인자로 바꿔 준다.
비유로 이해하기
공장 컨베이어 벨트다. 앞 공정(ls)의 결과물이 벨트(|)를 타고 다음 공정(grep)으로 간다. tee는 중간에서 사진을 찍어 남기는 카메라다.
자세히
그림으로 보기: 파이프로 이어 붙이기
- cat /etc/passwd사용자 목록을 모두 출력
- | grep bashbash가 든 줄만 남김
- | wc -l남은 줄 수를 셈 → bash 사용자 수
파이프 예
| 명령 | 뜻 |
|---|---|
| ps -ef | grep sshd | 프로세스 목록에서 sshd만 |
| cat /etc/passwd | wc -l | 사용자 계정 수(줄 수) |
| ls -l | more | 결과를 한 화면씩 |
| sort data.txt | uniq -c | sort -rn | 중복 횟수 세고 많은 순 |
| dmesg | tail -20 | 커널 메시지 마지막 20줄 |
tee
ls -l | tee list.txt: 화면에도 보이고 list.txt에도 저장. -a는 덧붙이기. 파이프 중간에 넣어 과정을 남길 때 쓴다.
xargs
파이프는 입력을 넘기는데, rm처럼 입력이 아니라 인자를 받는 명령이 있다. xargs가 입력 줄들을 인자로 바꿔 준다. find . -name '*.tmp' | xargs rm = 찾은 파일들을 rm의 인자로. -n 1은 하나씩, -I {}는 자리 지정.
명령 연결 기호
| 기호 | 뜻 |
|---|---|
| A ; B | A 실행 후 결과와 상관없이 B |
| A && B | A가 성공하면 B |
| A || B | A가 실패하면 B |
| A | B | A의 출력을 B의 입력으로 |
| A & | A를 백그라운드로 |
| ( A ; B ) | 서브셸에서 묶어 실행 |
시험에 이렇게 나와요
- 앞 명령의 출력을 뒤 명령의 입력으로 → 파이프
|, 화면과 파일에 동시에 →tee - 입력 줄을 명령의 인자로 바꿔 실행 →
xargs(예: find … | xargs rm)
확인 문제
Q1. cmd1 && cmd2에서 cmd2는 언제 실행될까?
- cmd1이 실패했을 때만
- 항상
- cmd1과 동시에
- cmd1이 성공했을 때만
정답 보기
4번 cmd1이 성공했을 때만
&&는 앞 명령이 성공(종료 상태 0)해야 뒤를 실행한다. ||는 앞이 실패해야, ;는 결과와 상관없이 차례로 실행한다. make && make install이 대표적인 예.
Q2. 명령 결과를 화면에 출력하면서 동시에 파일로 저장하는 명령은?
- xargs
- tee
- split
- cat
정답 보기
2번 tee
tee다. T자 관처럼 출력을 화면과 파일 두 갈래로 나눈다. 예: ls | tee list.txt
Q3. 앞 명령이 실패했을 때만 뒤 명령을 실행하는 기호는?
- |
- &&
- ||
- ;
정답 보기
3번 ||
||다. 앞 명령이 실패하면 뒤 명령을 실행한다. &&는 앞 명령이 성공했을 때만, ;는 결과와 상관없이 실행한다.
Q4. 표준 입력으로 받은 목록을 다른 명령의 인자로 넘겨 실행하는 명령은?
- exec
- args
- xargs
- tee
정답 보기
3번 xargs
xargs다. 앞 명령이 내보낸 목록을 받아 뒤 명령의 인자로 붙여 실행한다. 예: find . -name "*.tmp" | xargs rm
헷갈리기 쉬운 O·X
파이프(|)는 앞 명령의 표준 오류도 함께 넘긴다.
정답 보기
X 표준 출력만. 오류까지 넘기려면 2>&1 | 또는 |&.
A ; B 에서 B는 A의 성공 여부와 관계없이 실행된다.
정답 보기
O 맞는 설명이다.