[Linux] 터미널의 흐름을 바꾸는 마법: 입출력 리디렉션과 파이프 완벽 정리
안녕하세요! 리눅스 터미널에서 ls를 치면 화면에 파일 목록이 나오고, cat을 치면 파일 내용이 화면에 출력됩니다.
우리는 이것을 너무나 당연하게 생각하죠.
하지만 만약 “화면에 나오는 저 내용을 그대로 텍스트 파일로 저장하고 싶다면?” 혹은 “A 명령어의 출력 결과를 B 명령어의 입력으로 바로 넘겨주고 싶다면?” 어떻게 해야 할까요?
마우스로 일일이 복사해서 메모장에 붙여넣을 필요가 없습니다. 리눅스에는 데이터의 흐름을 자유자재로 바꾸는 강력한 통로인 리디렉션(Redirection)과 파이프(Pipe)가 있기 때문입니다. 오늘 이 두 가지 개념을 완벽하게 마스터해 보겠습니다.
1. 데이터의 방향을 틀어라: 리디렉션(Redirection)
리눅스에서 모든 명령어는 기본적으로 키보드로 입력(Standard Input)받고, 화면으로 출력(Standard Output)하도록 설정되어 있습니다. 이 출력의 방향을 다른 곳(예: 파일)으로 돌리는 기호가 바로 꺾쇠(>, >>)입니다.
① 덮어쓰기 기호: >
명령어의 실행 결과를 화면이 아닌 특정 파일에 새로 저장합니다. 만약 기존에 동일한 파일이 있다면 내용을 완전히 지우고 덮어씁니다.
$ ls -l > file_list.txt
- 결과: 화면에는 아무것도 나오지 않습니다. 대신 현재 폴더의 파일 상세 목록이 file_list.txt라는 파일로 생성되어 그 안에 저장됩니다.
② 이어쓰기(추가) 기호: »
기존 파일의 내용을 유지한 채, 맨 아래줄에 새로운 내용을 추가(Append)하고 싶을 때 사용합니다.
$ echo "새로운 로그 기록 추가" >> log.txt - 결과: log.txt 파일이 없다면 새로 만들고, 이미 내용이 있다면 기존 데이터 다음 줄에 텍스트를 안전하게 덧붙입니다.
2. 명령어와 명령어를 연결하는 고속도로: 파이프 (|)
파이프(|, 엔터키 위의 원화₩ 기호와 함께 있는 바 기호)는 앞 명령어의 출력 결과를 뒤 명령어의 입력으로 다이렉트 연결해 주는 리눅스의 가장 위대한 유산 중 하나입니다. 앞서 배웠던 cat, head, tail, less 같은 명령어들이 이 파이프와 만나면 엄청난 시너지를 냅니다.
💡 실무 활용 예시 (연쇄 명령)
- 끝없이 긴 파일 내용을 한 페이지씩 끊어서 보기
$ cat system.log | lesscat이 뱉어낸 방대한 텍스트를 화면에 폭주시키지 않고, less 프로그램의 입력으로 연결하여 Page Up/Down 키로 천천히 읽을 수 있게 만듭니다.
- 수천 줄의 로그 파일 중 딱 상위 5줄만 가로채기
$ cat eggzy.py | head -n 5파일 전체를 읽어온 뒤, 파이프를 통해 head에 넘겨주어 정확히 맨 위 5줄만 화면에 출력합니다.
- 실시간 로그 중에서 특정 단어가 포함된 줄만 필터링하기
$ tail -f /var/log/syslog | grep "ERROR"tail -f로 실시간 추가되는 시스템 로그를 감시하면서, 파이프를 통해 grep 명령어로 넘겨 “ERROR”라는 단어가 포함된 치명적인 줄만 화면에 골라 띄웁니다.
📌 요약 및 치트키 가이드
| 기호 | 기능 | 한 줄 요약 | |
|---|---|---|---|
| > | 출력 리디렉션 (덮어쓰기) | 결과를 파일로 저장 (기존 내용 삭제) | |
| » | 출력 리디렉션 (이어쓰기) | 결과를 파일 끝에 추가 (기존 내용 보존) | |
| ** | ** | 파이프라인 (연결) | 앞 명령어의 출력을 뒤 명령어의 입력으로 전환 |
리디렉션과 파이프는 리눅스 철학인 “각 프로그램은 하나의 일만 잘해야 하며, 이들을 서로 연결해 더 큰 일을 수행한다”를 가장 잘 보여주는 기능입니다. 이 기호들을 자유자재로 조합하기 시작하면 터미널 환경이 완전히 다르게 보이실 겁니다. 오늘 준비한 마법 같은 명령어 조합 팁은 여기까지입니다. 궁금한 점이 있다면 댓글로 남겨주세요. 😊
댓글 남기기