소개
기본적으로 Linux 명령은 모든 내용을 화면에 출력합니다. 그렇다면 이 데이터를 저장하려면 어떻게 해야 할까요?
이 과정을 **리디렉션 (Redirection)**이라고 합니다. 우편물에 "전달 주소"를 지정하는 것과 비슷합니다.
셸 문법도 같은 방식으로 이해할 수 있습니다. 리디렉션은 명령이 본질적으로 수행하는 작업을 바꾸는 것이 아니라, 명령의 입력이나 출력이 전달되는 위치를 바꿉니다.
이 실습에서는 데이터가 전달되는 위치를 제어하는 세 가지 방법을 배웁니다.
- 리디렉션하고 덮어쓰기 (
>): 출력 결과를 파일에 저장하고 기존 내용을 바꿉니다. - 리디렉션하고 추가하기 (
>>): 파일 끝에 출력 결과를 추가합니다. - 오류 리디렉션 (
2>): 오류 메시지만 따로 가져옵니다.
출력 리디렉션 (덮어쓰기)
보다 큼 기호 >는 다시 쓰기 (Rewrite) 연산자입니다.
많은 초보자는 >를 "파일에 저장"하는 연산자로 배우지만, 더 정확하게는 "표준 출력을 이 파일로 보내고 기존 내용을 바꾼다"라고 이해해야 합니다. 여러 명령을 더 신중하게 조합할 때 이 차이가 중요해집니다.
Linux 에 다음과 같이 지시하는 것입니다. "이 명령의 입력을 가져와 이 파일에 씁니다. 파일이 이미 있으면 먼저 파일 내용을 지웁니다."
프로젝트 디렉터리로 이동합니다.
cd ~/project
출력 결과를 output.txt로 리디렉션합니다.
echo "Hello, Linux." > output.txt
화면에는 아무것도 출력되지 않습니다. 텍스트가 파일에 저장되었기 때문입니다. 다음 명령으로 확인합니다.
cat output.txt
이제 왜 이 연산자를 "덮어쓰기"라고 하는지 확인합니다. 다음 명령을 실행합니다.
echo "This is new content." > output.txt
cat output.txt
이전의 "Hello, Linux." 내용이 사라졌습니다. > 연산자가 파일 내용을 모두 지웠기 때문입니다.
따라서 리디렉션은 파일을 수정할 때와 같은 주의가 필요합니다. 짧은 명령 하나만으로도 기존 파일의 내용을 즉시 바꿀 수 있습니다.
출력 추가 (>>)
데이터를 삭제하지 않고 기존 내용에 추가하고 싶은 경우가 많습니다. 이때는 보다 큼 기호를 두 개 사용하는 >>를 사용합니다.
>>는 **추가 (Append)**를 지시하는 연산자입니다.
output.txt에 새 줄을 추가합니다.
echo "This line is appended." >> output.txt
cat output.txt
두 줄이 모두 출력되어야 합니다.
기존 내용은 그대로 유지됩니다. 다시 실행해 보겠습니다.
echo "Another line." >> output.txt
cat output.txt
>> 연산자는 로그에 사용하기에 적합합니다.
많은 운영 파일은 처음부터 다시 만들기보다 시간이 지나면서 내용이 늘어나기 때문에 추가 작업이 중요합니다. 로그, 보고서, 명령 기록 파일은 흔히 "파일 끝에 추가하는" 방식으로 관리합니다.
오류 리디렉션 (2>)
앞에서 배운 것처럼 Linux 는 "정상 출력"(stdout) 과 "오류 출력"(stderr) 을 분리합니다.
>와 >> 연산자는 "정상 출력"만 처리합니다. 오류는 처리하지 않습니다.
이때 이전 실습에서 배운 스트림 모델이 실제로 활용됩니다. 출력과 오류가 서로 다른 스트림이라면 Linux 는 각각을 서로 다른 위치로 보낼 수 있습니다.
오류를 가져오려면 2>를 사용합니다. 표준 오류의 ID 가 2 이기 때문입니다.
존재하지 않는 디렉터리를 나열해 봅니다.
ls /missing_directory 2> error.log
화면에는 아무것도 출력되지 않습니다. 오류가 처리되어 error.log에 저장되었기 때문입니다.
다음 명령으로 내용을 확인합니다.
cat error.log
파일 안에 저장된 오류 메시지가 출력됩니다.
2>의 2는 표준 오류에 사용하는 일반적인 파일 디스크립터 번호에서 비롯되었습니다. 아직 모든 파일 디스크립터를 외울 필요는 없지만, 이 숫자가 셸의 스트림 채널을 가리킨다는 점은 알아두면 유용합니다.
요약
이제 데이터 흐름을 제어하는 방법을 익혔습니다.
>(덮어쓰기): 출력 결과를 파일에 저장합니다 (기존 내용을 지웁니다).>>(추가): 파일 끝에 출력 결과를 추가합니다 (기존 기록을 유지합니다).2>(오류 리디렉션): 오류 메시지를 가져옵니다.
이 도구를 사용하면 명령 실행 결과를 효율적으로 저장할 수 있습니다.



