TIL - pipeline, IO redirection

한성봉·2021년 5월 4일
0

이 글은 생활코딩-Linux 강좌를 토대로 작성하였습니다.

;(semicolon)

리눅스 환경에서 세미콜론으로 여러 명령어를 한번에 실행할 수 있다.

-why라는 디렉터리를 만들고 그 폴더로 바록 이동하고 싶다면 다음과 같은 명령어를 수행하면된다.

% mkdir why;cd why

;(semicolon)를 사용하여 여러 명령을 동시에 수행할 수 있다.

pipeline

  • cat : 해당 파일의 내용을 불러오는 명령어
cat 파일이름.확장자
  • grep : 해당 파일에서 특정 문자열이 있는 행을 출력해주는 명령어
grep + 검색단어 + 파일이름.확장자
  • | : 왼쪽 명령어의 결과(output)을 오른쪽에 있는 명령어에 입력(input)으로 전달합니다.
man ls | grep sort | grep file

다음과 같은 양식으로 사용 가능

IO redirection(Input/Output redirection)

  • 입출력 대상으로 표준 입력, 표준 출력, 표준 오류를 사용하지 않고 다른 경로인 파일로 재지정 하는 것
  • 즉, 명령은 redirection 을 통해 파일로부터 입력받을 수 있고, 파일로 출력할 수 있음
  • 입출력 재지정을 통해 출력과 입력의 방향을 변경할 수 있음

Unix process 에는 여러가지 입출력이 존재한다. 위 사진을 참고하여 학습해보자.
Stdin -> Unix Process -> stdout, stderr 로 입력값이 입력되고 프로세스를 거쳐 결과값을 출력하는 일련의 과정을 IO Stream 이라고도 한다.

  • Unix process : 기본 명령어들을 말한다.
% ls
% man
% cd 
...
  • Command-line Arguments : 기본 명령어들의 옵션 명령어를 말한다.
    프로세스 뒤에 -l과 같은 부수 명령어를 말한다.
% ls -l
% ls -al
% rm -r
...
  • StandardOutput : 명령어들의 출력값을 말한다.
    > , 1> 의 기호로 사용함.
% ls -l

위 명령어를 입력했을 때 다음의 결과를 보여준다.

위 사진의 결과값들을 StandardOutput이라한다. 기본적으로 모니터에 출력이 된다.
모니터의 출력된 결과값을 입력값을 redirection 시켜 파일에 저장할 수 있다. 그때 필요한 것이 redirection 기호인 > 을 사용하면 된다.
만약 위 사진의 출력값을 원하는 파일(empty_Linux.txt)에 저장하고 싶다면 다음과 같은 명령어를 사용하자.

% ls -l > empty_Linix.txt

위 명령어를 수행하면 empty_Linix.txt 파일에 입력값으로 ls -l의 출력값이 redirection 되어서 저장된다.

  • StandardError : 명령어들의 출력값 중 에러가 발생한 경우
    2> 의 명령어로 사용

유닉스 계열의 시스템에서 프로세스의 결과값은 StandardOutputStandardError 2가지로 나눌 수 있다.

위에서 StandardOutputredirection 하기 위해선 > 기호를 사용하였다고 했다. 하지만 >1> 숫자 1이 생략된 상태이다. 그렇기에 StandardError를 사용하기 위해서는 2> 숫자2를 앞에 붙여줘야한다.
예를 들어 result.txt 파일을 삭제하는 예시를 한번 보자.

% rm result.txt

정상적으로 삭제가 될 것이다. 하지만 한번 더 명령을 수행한다면 삭제할 파일이 없기 때문에 다음과 같은 오류가 출력된다.

rm: result.txt: No such file or directory

이 오류를 result2.txt 파일에 오류 출력 메세지를 저장하고 싶다면 다음과 같은 명령어를 수행해야한다.

% rm result.txt 2> result2.txt

StandardError 값은 result2.txt에 저장되었다. 이 파일 안에있는 오류 출력 메세지가 잘 저장되었는지 내용을 불러와보자.

% cat result2.txt

명령어를 수행하면 다음과 같이 결과값이 잘 나타는 것을 알 수 있다.

rm: result.txt: No such file or directory
  • StandardInput : 프로세스에 표준입력으로 input을 시키는 명령
    <의 기호로 명령

예시로 살펴보자.

% cat hello.txt
% cat < hello.txt

차이점은
% cat hello.txt : cat이라는 프로세스에 hello.txt라는 Command-line Arguments 로 인자값을 전달한 경우
% cat < hello.txt: cat이라는 프로세스에 hello.txt라는 StandardInput 으로 입력값을 받은 경우이다.

append

> 기호는 inputredirecton 시켜 덮어쓰는 명령어였다. 덮어쓰기 말고 그대로 입력값을 추가 하고 싶을 때는 >> 기호를 사용한다.

0개의 댓글