[Linux]리눅스 터미널 텍스트 조작하기: 파이프와 리다이렉션 완벽 정리
안녕하세요! 리눅스(Linux)나 macOS 같은 유닉스(Unix) 계열 운영체제를 다룰 때, 고수들의 터미널 창을 보면 여러 명령어를 기괴한 기호들로 엮어서 한 줄로 길게 실행하는 모습을 자주 볼 수 있습니다.
리눅스는 모든 데이터를 ‘텍스트 스트림(Streams of text)’으로 처리하기 때문에, 간단한 명령어 몇 개만 조립해도 엄청나게 복잡하고 강력한 데이터 가공 시스템을 만들어낼 수 있습니다.
오늘은 그 마법 같은 기술인 파이프(|)와 리다이렉션(>, >>, <), 그리고 화면에 뜨는 에러 메시지만 쏙 골라내어 텍스트 파일로 저장하는 에러 분리 기호(2>)까지 완벽하게 정리해 드리겠습니다.
🌊 1. 터미널을 흐르는 3가지 물줄기: 표준 스트림
리눅스 터미널에서 명령어가 실행되면, 시스템은 보이지 않는 곳에서 3가지 데이터 물줄기(Stream)를 기본적으로 연결해 줍니다. 리눅스의 대전제인 “모든 것은 파일이다”라는 규칙에 따라, 이 물줄기들도 시스템 내부적으로는 ‘특별한 파일’로 취급됩니다.
- 표준 입력 (stdin / 0번): 키보드로 타이핑해서 프로그램에 집어넣는 데이터입니다.
- 표준 출력 (stdout / 1번): 명령어가 정상적으로 실행되어 터미널 화면에 뿜어내는 결과물입니다.
- 표준 에러 (stderr / 2번): 명령어가 실패했을 때 화면에 뿌려지는 빨간 맛(?) 에러 메시지입니다.
보통은 출력과 에러가 터미널 화면에 한데 섞여서 나오지만, 이 물줄기들의 방향을 내 마음대로 꺾어버리는 기술이 바로 리다이렉션(Redirection)과 파이프(Pipe)입니다.
🚰 2. 명령어와 명령어를 빨대로 잇다: 파이프 (|)
키보드 엔터 키 근처에 있는 원화 기호(₩)를 Shift를 누른 채 치면 나오는 | 기호가 바로 파이프입니다.
파이프는 “앞 명령어의 입(출력)을 뒤 명령어의 귀(입력)에 직접 빨대로 연결해 버리는 기술”입니다. 결과물이 화면에 출력되는 대신, 다음 명령어의 재료로 곧장 들어가게 됩니다.
💡 실전 예시: 특정 폴더 안의 파일 개수 세기
$ ls -A1 /usr/bin | wc -l
ls -A1 /usr/bin:/usr/bin폴더 안의 파일 목록을 숨김 파일까지 포함해 ‘한 줄에 하나씩(-1)’ 뿜어냅니다. (출력물이 너무 많아 화면이 마구 올라가겠죠?)| wc -l: 하지만 파이프(|)를 채웠기 때문에 화면에 파일 목록이 뜨지 않습니다. 대신 그 목록이 통째로wc -l(줄 수 계산기)로 들어가서 “총 몇 줄인지(파일이 몇 개인지) 숫자”만 깔끔하게 딱 띄워줍니다.
💾 3. 화면 대신 파일로 쏴라: 리다이렉션 (>, >>, <)
명령어의 실행 결과를 화면에 보여주는 대신 텍스트 파일로 저장하고 싶을 때는 화살표 방향 기호를 사용합니다.
1) 기존 내용을 다 지우고 새로 쓰기: >
$ ls /usr/bin > ~/mylisting1.txt
명령어 결과가 화면이 아닌 mylisting1.txt 파일에 저장됩니다. 만약 이미 존재하던 파일이라면 기존 내용이 싹 날아가고 덮어쓰기(Overwrite) 되므로 주의해야 합니다!
2) 기존 내용 뒤에 이어서 누적하기: >>
$ echo "& 원본 데이터 뒤에 추가할 내용!" >> ~/mylisting1.txt
화살표를 2개(>>) 쓰면 기존 파일의 알맹이를 건드리지 않고, 맨 아랫줄에 새로운 내용을 안전하게 이어 붙입니다(Append). 로그 파일을 누적해서 기록할 때 무조건 쓰이는 기호입니다.
3) 파일 내용을 프로그램에 집어넣기: <
# list1 파일 내용을 읽어서 알파벳 순으로 정렬하기
$ sort < list1
🚨 4. 실무 치트키: 에러 메시지만 따로 분리하기 (2>)
서버를 운영하거나 긴 스크립트를 돌릴 때, 정상 출력 결과와 에러 메시지가 화면에 뒤섞여 있으면 원인을 찾기 매우 힘듭니다. 이때 표준 에러의 고유 번호인 2번을 활용하면 에러만 따로 격리할 수 있습니다.
$ cat list1 list2 list3 존재하지않는파일 2> errors.txt
- 결과: 실제로 존재하는 파일들의 내용(정상 출력)은 터미널 화면에 깔끔하게 표시됩니다.
- 반면, ‘존재하지 않는 파일’ 때문에 발생한 에러 메시지는 화면에 뜨지 않고
errors.txt라는 파일 속에 자동으로 격리 저장됩니다. - 에러 로그를 덮어쓰지 않고 계속 누적하고 싶다면 마찬가지로
2>를 사용하면 됩니다. 나중에 서버에 문제가 생겼을 때 이errors.txt파일만 열어보면 되니 정말 편하겠죠?
📝 요약 및 정리
|(파이프): 앞 명령어의 출력을 뒤 명령어의 입력으로 연결할 때 사용합니다.>(덮어쓰기) />>(이어붙이기): 명령어 출력 결과를 파일로 저장할 때 사용합니다.2>(에러 분리): 오직 에러 메시지만 골라내어 파일로 격리 저장할 때 사용합니다.
리눅스의 파이프와 리다이렉션 시스템은 텍스트 기반 환경이 왜 강력한지 증명해 주는 최고의 도구입니다. 이 기호들을 자유자재로 조합하면 수천 줄짜리 로그 파일도 1초 만에 분석할 수 있게 됩니다.
터미널을 열고 직접 화살표와 파이프를 입력하며 데이터의 흐름을 제어해 보세요! 궁금한 점은 언제든 댓글로 남겨주세요. 😊
댓글 남기기