터미널의 진짜 힘은 조합에서 나와요. ls, grep, wc를 따로 쓰면 유용하지만, pipe로 연결하면 다른 곳에서는 작은 앱이 필요한 문제를 해결할 수 있어요.
stdin, stdout, stderr
모든 명령어에는 세 가지 암묵적인 "스트림"이 있어요 :
- stdin (표준 입력) : 입력으로 읽는 내용.
- stdout (표준 출력) : 정상적으로 출력하는 내용.
- stderr (표준 에러) : 오류가 발생했을 때 출력하는 내용.
기본적으로 stdout과 stderr는 모두 터미널에 표시돼요. 리디렉션을 사용하면 다른 곳으로 보낼 수 있어요.
파일로 리디렉션하기
>는 stdout을 파일로 보내요. 주의 : 파일이 이미 있으면 덮어써요.
>>는 덮어쓰지 않고 파일 끝에 추가해요. 로그 파일에 꼭 필요한 기능이에요.
에러 리디렉션하기
2>는 stderr(에러)를 파일로 리디렉션해요.&>는 stdout과 stderr를 함께 리디렉션해요. 명령어가 출력하는 모든 것을 캡처할 때 유용해요.
Pipe : 명령어 연결하기
|(pipe)는 한 명령어의 stdout을 다음 명령어의 stdin으로 보내요 :
ls | grep README: 파일 목록에서 "README"가 포함된 것만 남겨요.cat access.log | grep ERROR | wc -l: 로그 파일에서 "ERROR" 줄이 몇 개인지 세요.ps aux | grep node: 실행 중인 Node.js 프로세스를 찾아요.
실용적인 예시
현재 폴더에 .js 파일이 몇 개인지 확인하기 :
로그 파일에서 에러 줄을 추출해서 저장하기 :
리디렉션 (GNU Bash 매뉴얼)