리눅스 리다이렉션과 파이프

Posted by on December 4, 2019

Recently by the same author:


Python에서 Singleton 구현

Linux Redirection


  • 표준 스트림의 흐름을 바꾸는
  • 특수기호 >< 을 사용


1. Stream

  • 일반적인 커맨드의 프로세스는 입력 스트림, 표준 출력 스트림, 오류 출력 스트림을 갖는다.
  • 모든 스트림은 일반적인 문자열로 콘솔에 출력한다.


2. Redirection

  • 프로세스의 스트림을 콘솔이 아닌 파일로 사용하는 등의 흐름을 바꾸는데 사용


파일 목록을 텍스트 파일로 저장

ls > ls.txt
  • ls는 디렉토리와 파일의 목록을 출력하는 것으로 콘솔에 출력된다.
  • 이것을 ls.txt 라는 파일로 흐름을 바꾸어 출력하게 되고, 이는 ls.txt에 파일의 목록을 기록한다.


파일에 쓰여진 것을 콘솔로 출력

head < ls.txt
  • head: 파일의 처음 부분을 설정한 라인만큼 출력
  • 파일 출력을 콘솔 출력으로 흐름을 바꾸게 되고 콘솔에 ls.txt 의 내용이 출력된다.


심화

head < ls.txt > ls2.txt
  • 왼쪽부터 실행된다.
  • ls.txt의 내용을 head로 보내 내용을 출력하고 이를 ls2.txt에 기록한다.



Linux Pipe


  • 프로세스간 사용하는 기능
  • | 표시로 사용
  • A B: A의 커맨드 표준 출력을 B의 커맨드 표준 입력으로 사용
    • A의 결과를 걸러서 B에서 사용


1. 사용 예시

ls | grep ls.txt
  • ls 명령어의 출력 스트림을 grep 커맨드의 입력 스트립으로 보내고, grep의 인자로 ls.txt 를 넘기는 상황
  • 현재 디렉토리에 ls.txt 가 있다면 콘솔에 출력


2. grep

  • 입력으로 전달된 파일의 내용에서 특정 문자열을 찾고자 할 때 사용
  • 정규표현식, 패턴 매칭 방식을 사용
  • 기본적으로 대소문자 구분
grep [option] [pattern] [file]
  • grep을 파이프로 입력 스트림을 주는 경우에는 필터처럼 동작
  • 파일이나 디렉토리 명을 쓰지 않아도 패턴과 옵션으로 해당 패턴 탐색


혼합해서 사용

ls | grep ls.txt > ls2.txt
  • 현재 디렉토리의 파일, 디렉토리 리스트를 grep 으로 전송
  • 해당 리스트에서 ls.txt가 있는지 검색
  • 검색 결과를 ls2.txt에 기록