숏컷 코드
command > out.txt
command >> out.txt
command 2> error.txt
command > out.txt 2>&1
cat app.log | grep "ERROR" | less
echo $?| 형태 | 의미 |
|---|---|
> | stdout을 파일로 덮어쓰기 |
>> | stdout을 파일 뒤에 추가 |
2> | stderr를 파일로 보내기 |
2>&1 | stderr를 stdout과 같은 곳으로 보내기 |
| | 앞 명령의 stdout을 뒤 명령의 stdin으로 연결 |
$? | 직전 명령의 exit status |
입출력 흐름
Linux 프로세스는 기본적으로 stdin, stdout, stderr 세 흐름을 가집니다. stdout은 정상 출력, stderr는 오류 출력입니다. >는 stdout만 바꾸므로 오류 메시지는 터미널에 그대로 보일 수 있습니다. 오류까지 파일로 남겨야 하면 2> 또는 2>&1을 함께 써야 합니다.
node server.js > app.log 2> app.err
node server.js > app.log 2>&1pipe는 앞 명령의 stdout을 뒤 명령의 stdin으로 넘깁니다. 로그에서 특정 문자열만 보고, 그 결과를 다시 정렬하거나 페이지 단위로 읽는 식으로 작은 도구를 연결할 수 있습니다.
grep "ERROR" app.log | sort | uniq -c | sort -nrexit status는 명령 성공 여부를 숫자로 남긴다
일반적으로 exit status 0은 성공이고, 0이 아닌 값은 실패입니다. 셸 스크립트와 CI는 이 값을 기준으로 다음 단계를 계속할지 중단할지 결정합니다. 명령이 출력은 했지만 실패했을 수도 있고, 출력이 없어도 성공했을 수 있으므로 stdout만 보고 성공을 판단하지 않는 편이 안전합니다.
grep "READY" app.log
echo $?체크포인트
| 상황 | 선택 |
|---|---|
| 결과를 새 파일로 저장 | > |
| 로그를 이어 쓰기 | >> |
| 오류만 별도 파일로 저장 | 2> |
| stdout과 stderr를 한 로그로 합치기 | > file 2>&1 |
| 여러 명령을 연결 | | |
| 직전 명령 성공 여부 확인 | echo $? |
주의할 점
>는 기존 파일을 덮어씁니다. 보존해야 하는 로그나 결과 파일에는 >>를 쓰거나,
실행 전 파일명을 명확히 확인하십시오.
# 기존 app.log를 덮어씀
command > app.log
# 기존 app.log 뒤에 추가
command >> app.log참고 링크
2 sources