리디렉션과 파이프라인

Chooooo·2025년 2월 13일
0

리눅스 정리

목록 보기
9/10

리디렉션

리디렉션은 프로그램의 입력과 출력의 방향을 바꾸는 메커니즘.
프로세스의 표준 입출력을 변경해 파일로부터 데이터를 읽거나 데이터를 파일에 쓰는 방법을 제공한다.

리디렉션은 크게 출력 리디렉션과 입력 리디렉션으로 나눌 수 있음

출력 리디렉션

리눅스 시스템에서 스트림은 데이터가 흐르는 가상의 통로이다(표준 입력 스트림, 표준 출력 스트림, 표준 에러 스트림). 리디렉션은 이러한 스트림의 방향을 변경하는 것.
예를 들어, ls -l > file_list.txt 명령을 실행하면 ls 명령의 표준 출력 스트림이 터미널 화면 대신 file_list.txt 파일로 향하게 된다.

출력 리디렉션의 기본 형식:

  • 명령 [스트림_번호] > 파일
  • 명령 [스트림_번호] >> 파일

>를 부등호보다는 화살표로 생각하면 이해하기 쉽다. 실행한 명령의 출력 스트림을 파일로 보낸다는 의미이다.

>는 저장할 내용을 파일에 덮어쓴다. 그래서 기존 파일에 리디렉션하면 파일 내용이 삭제되고 새롭게 저장한 내용만 남는다. 파일이 존재하지 않는 경우에는 파일을 생성하면서 내용을 저장한다.

>>는 파일의 끝부분에 내용을 추가한다. 이 역시 존재하지 않는 파일에 리디렉션 하면 파일을 새롭게 저장한다.

>>> 앞에 스트림 번호는 입력할 수도 있고, 생략할 수도 있다. 스트림 번호를 생략하면 표준 출력(스트림 번호1)이 기본 값으로 설정된다.
표준 에러는 스트림 번호 2로 표기한다.

실제 예시

  1. 표준 출력 스트림을 파일로 리디렉션
$ echo "Hello World" > output.txt
$ cat output.txt
Hello World

이 과정에서 일어나는 일:

  • echo 명령어가 "Hello World" 출력을 생성
  • > 리디렉션으로 인해 화면 대신 output.txt 파일로 출력이 전달됨
  • cat 명령어로 파일 내용 확인
  1. 표준 에러 스트림을 파일로 리디렉션
$ ls nonexistent_file 2> error.txt
$ cat error.txt
ls: cannot access 'nonexistent_file': No such file or directory

이 과정에서 일어나는 일:

  • ls 명령어가 존재하지 않는 파일을 찾으려고 시도
  • 발생한 에러가 2> 리디렉션으로 인해 error.txt 파일로 전달됨
  • cat 명령어로 에러 메시지 확인

입력 리디렉션

입력 리디렉션(<)은 키보드로부터 받는 입력을 파일로부터 받도록 변경하는 것.
기본 형식 : 명령어 [스트림_번호] < 파일

파이프라인

파이프라인(pipeline)은 리디렉션에서 한 걸음 더 나아간 기능. 리디렉션이 프로세스 스트림과 파일 간 상호작용이라면 파이프라인은 프로세스 스트림 간 상호작용이다.

파이프라인(|)은 한 명령어의 출력을 다른 명령어의 입력으로 직접 연결하는 메커니즘이다.

기본 형식 : 명령어1 | 명령어2 | 명령어3

실제 동작 예시
ls -l | grep "txt"
이 명령에서 일어나는 일을 단계별로 살펴보면
1. ls -l이 실행되어 디렉토리 내용을 상세히 출력
2. 이 출력이 파일로 저장되거나 화면에 표시되지 않고 곧바로 grep으로 전달
3. grep이 전달받은 내용에서 "txt"가 포함된 줄만 찾아서 화면에 출력

예시2
$ ps aux | grep "nginx" | wc -l
1. ps aux가 실행 중인 모든 프로세스 목록 생성
2. grep이 그 중에서 "nginx"가 포함된 줄만 필터링
3. wc -l이 최종적으로 줄 수를 세어서 출력

파이프라인의 장점
1. 디스크 사용을 최소화한다 -> 중간 결과를 파일에 저장할 필요가 없음
2. 메모리 사용이 효율적이다. -> 데이터가 스트림으로 처리된다.
3. 복잡한 작업을 간단한 명령어들의 조합으로 해결할 수 있다.

profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글