| ⬅️ 이전: 8.2 파이프(Pipe)와 필터 | 🏠 분류 목차 | 다음: 8.1 문서 에디터 종류 (vi/nano) ➡️ |
8.3 표준 입출력의 방향 전환, 리다이렉션 (Redirection)
리눅스와 같은 유닉스 기반 시스템은 단순히 화면에 글씨를 뿌리고 키보드로 명령을 내리는 기본 흐름(데이터 흐름)의 방향을 완전히 다른 곳으로 강제 전환시키는 작업이 가능합니다. 이 프로세스를 리다이렉션(Redirection) 이라고 부릅니다.
동작 원리: 명령어의 결과물(Standard Output)은 원래 모니터 방향으로 흘러가야 정상입니다. 하지만 출력 기호(
>)를 사용하여 그 결과물이 향하는 방향 화살표를 꺾어서 모니터가 아닌텍스트 파일이나 다른 외곽 시스템 쪽으로 데이터가 흘러 들어가도록 강제 방향 지시를 할 수 있습니다.
1. 운영체제의 3대 표준 식별 핸들 (번호)
컴퓨터 내부적으로는 입출력을 구분하기 위해 다음과 같이 0번부터 2번까지의 고유 핸들(File Descriptor) 번호표 체계를 사용합니다.
| 핸들 번호 | 영문 명칭 | 기호 매핑 | 세부 의미 설명 |
|---|---|---|---|
| 0 | STDIN (입력) | < |
키보드에서 보내지는 표준 인간의 문자 입력 신호 |
| 1 | STDOUT (출력) | > |
명령어가 정상적으로 연산되어 모니터 쉘 창으로 보내지는 정답 출력 |
| 2 | STDERR (에러) | 2> |
치명적인 버그나 없는 명령어를 쳐서 화면에 시뻘겋게 뜨는 에러 출력 |
(기존 작성된 표준 입출력의 도해 자료입니다.)
2. 방향 지시 기호 사용법 및 덮어쓰기
원하는 대로 방향성을 바꾸려면 화살표와 비슷한 아래 기호들을 명령어 뒤에 이어 붙여 타이핑합니다.
2.1 덮어쓰기 (>)
결과를 화면에 보여주는 대신 텍스트 파일 하나를 아예 새로 창조해서 데이터를 그 안에 통째로 쑤셔넣는 기능입니다.
- 예시:
ls > dir_list.txt(디렉터리 파일 목록을 모니터 대신 저 파일 안에 텍스트로 저장) - 주의: 만약 저 파일이 이미 존재하는 상태라면 원래 있던 내용을 모조리 날려버리고 완전히 덮어써집니다.
2.2 밑에 추가하기 (>>)
원래 저장되어 있던 중요한 텍스트 파일의 내용이 지워지지 않도록 보호하되, 그 파일의 맨 아랫단에서부터 데이터를 조용히 끼워 넣어 내용을 누적 추가(Append)해 줍니다. 시스템 로그(Log) 백업을 만들 때 주로 씁니다.
2.3 표준 입력을 파일에서 땡겨오기 (<)
키보드로 직접 엔터를 치면서 타이핑 치는 대신에, 누가 적어놓은 장문의 텍스트 파일 안으로 들어가 그 안쪽 내용을 명령창 구멍 안으로 억지로 쑤셔 밀어넣어 컴퓨터가 읽도록 명령합니다.
- 예시:
grep "apple" < text.txt
2.4 오류 출력 리다이렉션 (2> / 2>>)
프로그램의 에러 로그(2번 핸들)만을 빼내어 저장하고 싶을 때 2라는 숫자와 화살표를 붙여서 씁니다.
- 예시:
ls /root 2> error.txt(접근이 거부된 에러 로그만 분리되어 에러 파일에 적힙니다.) - 최고의 꿀조합:
command > file.txt 2>&1(정상 명령과 에러 로그를 한 번에 묶어다가 한 파일에 사이좋게 몰아넣는 기술로 실무에서 매우 자주 쓰입니다.)
3. [실습] 출력 방향을 비틀어 문서 저장하기
내가 쳤던 명령어들이 화면 대신 조용히 파일에 영구 기록되는 동작을 눈으로 직접 확인하는 실습입니다.
실습 1. > 를 활용해 달력을 텍스트 파일로 저장
# 지금 컴퓨터 화면에 당장 이번 달력을 출력해봅니다. (모니터 출력)
cal
# 방향을 꺾겠습니다. 모니터에는 아무것도 안 뜹니다.
# 대신 my_cal.txt 라는 텍스트 파일에 아까 그 달력 그림이 이식되어 저장됩니다.
cal > my_cal.txt
# 저장된 달력 파일을 까서 확인해봅니다.
cat my_cal.txt
실습 2. >> 를 활용해 달력 밑에 내 이름 누적해서 박아넣기
# 무언가 글씨를 뱉어내는 echo 명령어를 쓰되 꺾쇠 2개를 줍니다.
echo "작성자: 리눅스 학생" >> my_cal.txt
# 다시 달력 파일을 까보면, 달력 밑동 가장 아래에 내 이름이 지워지지 않고 추가되어 있습니다.
cat my_cal.txt
| ⬅️ 이전: 8.2 파이프(Pipe)와 필터 | 🏠 분류 목차 | 다음: 8.1 문서 에디터 종류 (vi/nano) ➡️ |