본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성하였습니다.

안녕하세요! 리눅스 터미널과 점점 더 친해지고 있는 Big Byte입니다! 🚀 다들 활기찬 화요일 시작하셨나요?
지난 시간에는 ps, top/htop, kill로 시스템 내부를 실시간으로 감시하고 응답 없는 프로세스를 해결하는 방법을, df, du로 디스크 공간을 현명하게 관리하는 법을 배웠죠! 🩺💾 마치 시스템의 건강 상태를 진단하는 의사가 된 기분이었습니다. 그리고 ping, ip addr, ss, curl/wget을 통해 네트워크 연결 상태를 확인하고 세상과 소통하는 방법까지! 🌐 이제 제 리눅스 시스템이 어떻게 돌아가고 외부와 어떻게 연결되는지 조금 더 알게 된 것 같아 뿌듯했습니다. 😊
시스템 상태 점검과 네트워크 연결법을 익혔으니, 이제는 데이터의 흐름을 제어하는 기술을 배울 차례입니다! 바로 리눅스의 강력한 기능 중 하나인 입출력(I/O) 리다이렉션(Redirection) 과 관련 명령어들이죠. 🤩 마치 물의 흐름을 원하는 곳으로 보내거나(출력), 필요한 곳에서 가져오고(입력), 파이프로 연결해 여러 작업을 한 번에 처리하는 것과 같아요! 🚰 그럼 오늘 배운 내용을 함께 살펴보시죠! Let's control the flow! 🌊

1. 데이터 물길을 바꾸다! I/O 리다이렉션과 친구들 🏞️
리눅스에서 명령어는 기본적으로 '표준 입력(stdin)'으로 데이터를 받고, '표준 출력(stdout)'으로 결과를 보여주며, '표준 에러(stderr)'로 오류 메시지를 출력합니다. 키보드로 명령어를 입력하고(stdin), 결과가 화면에 나타나는(stdout) 것이 가장 일반적이죠. I/O 리다이렉션은 이 기본 흐름을 바꾸는 마법입니다! ✨
1.1 표준 스트림 (Standard Streams) 간단 정리
- 표준 입력 (stdin, 0): 명령어가 데이터를 입력받는 기본 통로 (주로 키보드)
- 표준 출력 (stdout, 1): 명령어가 성공적인 결과를 출력하는 기본 통로 (주로 화면)
- 표준 에러 (stderr, 2): 명령어가 오류 메시지를 출력하는 기본 통로 (주로 화면)
1.2 출력 방향 바꾸기: > 와 >> (stdout 리다이렉션) ➡️📄
명령어의 결과를 화면 대신 파일에 저장하고 싶을 때 사용합니다.
- > (덮어쓰기): 지정한 파일이 없으면 새로 만들고, 있으면 기존 내용을 지우고! 결과를 저장합니다. ⚠️ 주의!
-
ls -l > file_list.txt # ls -l 결과를 file_list.txt에 저장 (기존 내용 삭제) echo "Hello Linux!" > greeting.txt # "Hello Linux!" 텍스트를 greeting.txt에 저장 - >> (이어쓰기): 지정한 파일이 없으면 새로 만들고, 있으면 기존 내용 뒤에! 결과를 덧붙입니다.이제 명령어 결과를 파일로 남겨두고 나중에 확인하거나 다른 용도로 활용할 수 있게 되었어요! 마치 물을 원하는 통에 담아두는 것 같죠?
-
date >> log.txt # 현재 날짜와 시간을 log.txt 파일 끝에 추가 echo "Another log entry" >> log.txt # 텍스트를 log.txt 파일 끝에 추가
1.3 입력 방향 바꾸기: < (stdin 리다이렉션) 📥📄
파일의 내용을 명령어의 입력으로 사용하고 싶을 때 씁니다. 키보드 입력 대신 파일 내용을 넣어주는 거죠.
cat < greeting.txt # greeting.txt 파일의 내용을 읽어서 cat 명령어로 출력 (cat greeting.txt와 유사)
sort < file_list.txt # file_list.txt 파일 내용을 정렬해서 화면에 출력
마치 통에 담긴 물을 파이프로 끌어와 사용하는 느낌이랄까요?
1.4 에러 메시지만 따로! 2> 와 2>> (stderr 리다이렉션) 🚒📄
정상적인 결과(stdout)는 화면에 그대로 두거나 다른 파일로 보내고, 오류 메시지(stderr)만 별도로 저장하고 싶을 때 사용합니다. 숫자 2는 표준 에러를 의미해요.
find / -name "secret.txt" 2> error_log.txt # 파일 찾는 중 발생하는 오류(권한 없음 등)만 error_log.txt에 저장
grep "ERROR" system.log > error_lines.txt 2>> error_log.txt # system.log에서 "ERROR" 포함 라인은 error_lines.txt에 저장하고, grep 실행 중 오류는 error_log.txt에 추가
이렇게 하면 정상 결과와 오류를 분리해서 관리하기 편리해집니다! 👍
1.5 stdout과 stderr를 한 곳으로! &> 또는 > ... 2>&1 🧑🤝🧑📄
때로는 정상 결과와 오류 메시지 모두를 하나의 파일에 기록하고 싶을 때가 있습니다.
# 방법 1: &> 사용 (bash 최신 버전)
ls -al /root &> output_and_errors.log
# 방법 2: 전통적인 방식 (더 호환성이 높음)
ls -al /root > output_and_errors.log 2>&1
# 설명: stdout(1)을 파일로 보내고(>), stderr(2)를 stdout(1)이 가리키는 곳(&1)으로 보낸다
이제 모든 출력을 한눈에 볼 수 있게 되었네요!

1.6 물길을 연결하다! 파이프 | 복습 및 활용 🔗
지난 시간에 grep과 함께 맛보았던 파이프(|) 기억나시죠? 한 명령어의 출력(stdout)을 다른 명령어의 입력(stdin)으로 바로 연결하는 강력한 도구입니다! 여러 명령어를 체인처럼 엮어서 복잡한 작업을 간단하게 처리할 수 있어요.
# 현재 디렉토리 파일 목록 중 '.txt' 파일을 찾아서, 그 개수를 세어보자!
ls -l | grep "\.txt$" | wc -l
# 실행 중인 프로세스 중 'httpd' 관련 프로세스를 찾아서, 그 중 첫 5줄만 보자!
ps aux | grep httpd | head -n 5
파이프를 사용하면 중간 파일을 만들 필요 없이 데이터를 흘려보내며 처리할 수 있어 정말 효율적입니다!
1.7 I/O 리다이렉션과 찰떡궁합! 유용한 명령어 친구들 🛠️
I/O 리다이렉션, 파이프와 함께 사용하면 더욱 강력해지는 명령어들을 소개합니다!
- cat: 파일 내용을 화면에 출력하거나 여러 파일을 합칠 때 사용. (cat file1 file2 > merged_file)
- tee: 파이프 중간에서 데이터를 가로채 화면에도 보여주고 파일에도 저장하고 싶을 때 사용. (ls -l | tee file_list.txt | grep "\.txt$") 마치 수도관 중간에 T자 밸브를 달아 물을 두 갈래로 보내는 것과 같아요!
- head / tail: 파일이나 파이프 데이터의 앞/뒷부분 몇 줄만 볼 때 사용. (head -n 5 large_file.log, tail -n 10 large_file.log) 특히 tail -f log.txt는 실시간 로그 감시에 최고! 👍
- wc: 단어 수(word count), 줄 수(line), 문자 수(character)를 세어줍니다. (wc -l file.txt)
- sort: 텍스트 파일의 내용을 행 단위로 정렬합니다. (sort data.txt, ls | sort -r (역순))
- uniq: 정렬된 데이터에서 중복된 행을 제거합니다. (sort data.txt | uniq)
우와! 오늘은 리눅스에서 데이터의 흐름을 제어하는 방법을 배웠네요! 🤯 표준 입출력의 개념을 이해하고, 리다이렉션 기호(>, >>, <, 2>, &>)와 파이프(|)를 활용하는 법, 그리고 이들과 함께 쓰면 유용한 cat, tee, head, tail, wc, sort, uniq 같은 명령어들까지!
이제 단순히 명령어를 실행하는 것을 넘어, 그 결과를 원하는 대로 가공하고 저장하며, 여러 명령어를 조합하여 더 복잡하고 효율적인 작업을 수행할 수 있게 되었습니다. 리눅스의 진정한 힘은 이런 유연한 데이터 처리에 있다는 것을 다시 한번 느꼈습니다! 😎
정말이지 알면 알수록 매력적인 운영체제예요!

일주일의 시작 월요일이 지났습니다!
화요일도 모두 화이팅입니다! 💪🔥
'데이터 엔지니어링' 카테고리의 다른 글
| 패스트캠퍼스 환급챌린지 16일차: 데이터엔지니어링 초격차 강의 후기 (0) | 2025.04.16 |
|---|---|
| 패스트캠퍼스 환급챌린지 15일차: 데이터엔지니어링 초격차 강의 후기 (1) | 2025.04.15 |
| 패스트캠퍼스 환급챌린지 13일차: 데이터엔지니어링 초격차 강의 후기 (0) | 2025.04.13 |
| 패스트캠퍼스 환급챌린지 12일차: 데이터엔지니어링 초격차 강의 후기 (0) | 2025.04.12 |
| 패스트캠퍼스 환급챌린지 11일차: 데이터엔지니어링 초격차 강의 후기 (0) | 2025.04.11 |