Learn

Pipe와 리디렉션

Terminal

|, >, >>, <를 사용해 명령어를 조합하고 터미널을 조립 라인처럼 활용하기.

터미널의 진짜 힘은 조합에서 나와요. ls, grep, wc를 따로 쓰면 유용하지만, pipe로 연결하면 다른 곳에서는 작은 앱이 필요한 문제를 해결할 수 있어요.

stdin, stdout, stderr

모든 명령어에는 세 가지 암묵적인 "스트림"이 있어요 :

  • stdin (표준 입력) : 입력으로 읽는 내용.
  • stdout (표준 출력) : 정상적으로 출력하는 내용.
  • stderr (표준 에러) : 오류가 발생했을 때 출력하는 내용.

기본적으로 stdout과 stderr는 모두 터미널에 표시돼요. 리디렉션을 사용하면 다른 곳으로 보낼 수 있어요.

파일로 리디렉션하기

shell
ls > files.txt
echo "안녕" > message.txt

>는 stdout을 파일로 보내요. 주의 : 파일이 이미 있으면 덮어써요.

shell
echo "첫 번째 줄" > log.txt
echo "두 번째 줄" >> log.txt

>>는 덮어쓰지 않고 파일 끝에 추가해요. 로그 파일에 꼭 필요한 기능이에요.

에러 리디렉션하기

shell
ls /없는-폴더 2> errors.txt
ls /없는-폴더 2>> errors.txt
command &> everything.txt
  • 2>는 stderr(에러)를 파일로 리디렉션해요.
  • &>는 stdout과 stderr를 함께 리디렉션해요. 명령어가 출력하는 모든 것을 캡처할 때 유용해요.

Pipe : 명령어 연결하기

|(pipe)는 한 명령어의 stdout을 다음 명령어의 stdin으로 보내요 :

shell
ls | grep README
cat access.log | grep ERROR | wc -l
ps aux | grep node
  • ls | grep README : 파일 목록에서 "README"가 포함된 것만 남겨요.
  • cat access.log | grep ERROR | wc -l : 로그 파일에서 "ERROR" 줄이 몇 개인지 세요.
  • ps aux | grep node : 실행 중인 Node.js 프로세스를 찾아요.

실용적인 예시

현재 폴더에 .js 파일이 몇 개인지 확인하기 :

shell
ls | grep ".js$" | wc -l

로그 파일에서 에러 줄을 추출해서 저장하기 :

shell
cat app.log | grep ERROR > todays-errors.txt
리디렉션 (GNU Bash 매뉴얼)

다음 단계를 열려면 단계를 체크하세요

코스로 돌아가기