표준 출력 리다이렉션
명령어의 결과를 화면 대신 파일에 저장하는 방법을 출력 리다이렉션이라 한다. 주로 >와 >> 연산자를 사용한다.
command > file.txt: 명령 결과를 지정한 파일에 쓴다. 파일이 존재하면 내용을 덮어쓴다.command >> file.txt: 결과를 파일 끝에 추가한다. 파일이 없으면 새로 생성한다.
예제: 시스템 정보 저장
# CPU 정보를 별도 파일로 저장
cat /proc/cpuinfo > cpu_info.log
# 커널 버전 정보를 기존 파일에 추가
uname -r >> cpu_info.log
특수한 경우로, > filename만 입력하면 해당 파일을 비울 수 있다. 이는 파일 크기를 0으로 만들며, 데이터는 삭제된다.
입력 리다이렉션
기본적으로 키보드에서 입력받는 명령어가 이제는 파일로부터 입력을 받도록 변경한다. < 기호를 사용한다.
# /etc/passwd 파일에서 'root' 포함 행 검색
grep root < /etc/passwd
데이터베이스 복원 등에서도 유용하게 쓰인다.
mysql -u admin -p'mypassword' < backup.sql
Here Document (<<)
여러 줄의 문자열을 명령어에 직접 입력할 때 사용하는 기법이다. 보통 <<EOF 형태로 시작하고, 같은 줄에 EOF가 오면 종료된다. 여기서 EOF는 임의의 식별자로 바꿀 수 있다.
cat > message.txt <<END
안녕하세요.
이 메시지는 자동으로 생성되었습니다.
감사합니다.
END
스크립트 내에서 메뉴 출력에도 자주 활용된다.
#!/bin/bash
cat << MENU
=== 서비스 선택 메뉴 ===
1. 웹 서버
2. DB 서버
3. 백업 시스템
=======================
MENU
에러 출력 리다이렉션
명령 실행 중 발생하는 오류 메시지를 별도로 처리하기 위해 2> 또는 2>>를 사용한다. 여기서 2는 표준 에러 스트림의 파일 디스크립터 번호이다.
# 정상 출력과 오류를 각각 다른 파일에 저장
ls /etc/passwd invalid_path > success.log 2> error.log
오류를 무시하고 싶을 땐 특수 장치 파일 /dev/null로 보내면 된다.
ls /some/path 2> /dev/null
/dev/null과 /dev/zero 이해하기
- /dev/null: 모든 출력을 영구히 삭제하는 "블랙홀". 읽으면 아무것도 나오지 않는다.
- /dev/zero: 무한히 NULL 바이트(0x00)를 제공하는 가상 장치로, 특정 크기의 초기화된 파일 생성에 사용된다.
# 100MB의 공백 파일 생성
dd if=/dev/zero of=blank.img bs=1M count=100
출력과 에러 통합 리다이렉션
표준 출력과 표준 에러를 동시에 동일한 파일에 기록하려면 다음 방법을 사용한다.
&> all.log: 출력과 에러 모두를 all.log에 저장 (bash 권장 방식)> log.txt 2>&1: 출력을 log.txt에, 그리고 에러를 출력과 동일 위치(즉 log.txt)로 리다이렉션&>> log.txt: 기존 내용 뒤에 추가
# 스크립트 실행 로그 전체를 기록
./backup.sh &> backup.log
파이프(|)의 사용
앞 명령어의 출력을 뒤 명령어의 입력으로 연결하는 도구다. 구문은 다음과 같다.
command1 | command2 | command3
중요한 제약 사항:
- 파이프는 표준 출력만 전달하며, 표준 에러는 전달되지 않는다.
- 오른쪽 명령어는 입력 스트림을 처리할 수 있어야 한다 (예: grep, sort, awk 등).
# sshd 관련 프로세스 확인 후 필터링
ps aux | grep sshd | grep -v grep
tee 명령어: 출력 분기
tee는 파이프를 통해 들어오는 데이터를 표준 출력과 동시에 하나 이상의 파일에도 쓴다. 로그 기록에 매우 유용하다.
# 디스크 사용량을 화면에 보여주고 동시에 파일에 저장
df -h | tee disk_usage.log
# 기존 로그에 추가
free -m | tee -a system_monitor.log
옵션:
-a또는--append: 덮어쓰지 않고 기존 파일 끝에 추가--help: 도움말 표시