공든탑앱 열기

파이프·tee·xargs

리눅스마스터 2급 · Shell · 약 9분

쉽게 말하면

| 기호(파이프)는 앞 명령의 결과를 뒤 명령에 그대로 넘겨 줘요. 'ls 결과 중에 txt가 들어간 것만'처럼 작은 명령을 줄줄이 이어 일을 시켜요. 공장 컨베이어 벨트와 같아요.

시험용 정의

파이프 |는 앞 명령의 표준 출력을 뒤 명령의 표준 입력으로 넘긴다. tee는 입력을 화면과 파일로 동시에 보내고, xargs는 입력을 뒤 명령의 인자로 바꿔 준다.

비유로 이해하기

공장 컨베이어 벨트다. 앞 공정(ls)의 결과물이 벨트(|)를 타고 다음 공정(grep)으로 간다. tee는 중간에서 사진을 찍어 남기는 카메라다.

자세히

그림으로 보기: 파이프로 이어 붙이기

  1. cat /etc/passwd사용자 목록을 모두 출력
  2. | grep bashbash가 든 줄만 남김
  3. | 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 ; BA 실행 후 결과와 상관없이 B
A && BA가 성공하면 B
A || BA가 실패하면 B
A | BA의 출력을 B의 입력으로
A &A를 백그라운드로
( A ; B )서브셸에서 묶어 실행

시험에 이렇게 나와요

확인 문제

Q1. cmd1 && cmd2에서 cmd2는 언제 실행될까?

  1. cmd1이 실패했을 때만
  2. 항상
  3. cmd1과 동시에
  4. cmd1이 성공했을 때만
정답 보기

4번 cmd1이 성공했을 때만

&&는 앞 명령이 성공(종료 상태 0)해야 뒤를 실행한다. ||는 앞이 실패해야, ;는 결과와 상관없이 차례로 실행한다. make && make install이 대표적인 예.

Q2. 명령 결과를 화면에 출력하면서 동시에 파일로 저장하는 명령은?

  1. xargs
  2. tee
  3. split
  4. cat
정답 보기

2번 tee

tee다. T자 관처럼 출력을 화면과 파일 두 갈래로 나눈다. 예: ls | tee list.txt

Q3. 앞 명령이 실패했을 때만 뒤 명령을 실행하는 기호는?

  1. |
  2. &&
  3. ||
  4. ;
정답 보기

3번 ||

||다. 앞 명령이 실패하면 뒤 명령을 실행한다. &&는 앞 명령이 성공했을 때만, ;는 결과와 상관없이 실행한다.

Q4. 표준 입력으로 받은 목록을 다른 명령의 인자로 넘겨 실행하는 명령은?

  1. exec
  2. args
  3. xargs
  4. tee
정답 보기

3번 xargs

xargs다. 앞 명령이 내보낸 목록을 받아 뒤 명령의 인자로 붙여 실행한다. 예: find . -name "*.tmp" | xargs rm

헷갈리기 쉬운 O·X

파이프(|)는 앞 명령의 표준 오류도 함께 넘긴다.

정답 보기

X 표준 출력만. 오류까지 넘기려면 2>&1 | 또는 |&.

A ; B 에서 B는 A의 성공 여부와 관계없이 실행된다.

정답 보기

O 맞는 설명이다.

함께 보면 좋은 개념