본문 바로가기

Linux

Linux 표준스트림, 리다이렉션

728x90

표준스트림

keypoint

입력스트림과 출력스트림에는 버퍼가 있는 반면 오류 출력 스트림에는 버퍼가 없다.

이는 프로그램 충돌 시 오류메세지를 디스플레이로 즉각 전달하기 위해서다.

오류메시지가 버퍼를 거친다면 프로그램 비정상 종료시 할당되었던 버퍼가 해제되고 오류메시지가 모니터에 도달하지 못할 수도 있다.


리다이렉션

리다이렉션이란, 실행되는 프로그램의 표준 스트림을 사용자 임의로 변경할 수 있는 기능이다.

예를 들어, 출력 리다이렉션을 한다면 위 그림에서 출력 스트림이 모니터가 아니라 다른 프로그램을 향하게 할 수 있다.

 

출력 리다이렉션

date > today.txt

위 명령어는 date 명령어의 출력을 모니터가 아니라 today.txt 파일을 향한다.

* 주의 : today.txt가 이미 존재한다면 덮어씌워진다.

 

date >> today.txt

위 명령어도 마찬가지로 date 명령어의 출력이 today.txt 파일을 향한다.

단, today.txt가 이미 존재하더라도 거기에 추가로 append된다.

 

cat > text.txt
Hello, I am bithub.
cat >> text.txt
This is my second cat.

cat text.txt
Hello, I am bithub.
This is my second cat.

* cat 명령어를 끝내고 싶으면 ctrl + d를 입력하면 되는데 ctrl + d는 EOF를 의미한다.


오류 출력 리다이렉션

오류 출력 리다이렉션은 주로 오류메시지를 로깅할 때 사용된다.

'2>' 를 사용하면 된다.

 

asdfsadfas23 2> error.log
cat error.log
asdfsadfas23: command not found

 

마찬가지로 2>>를 사용하면 기존 파일에 오류 메시지를 append한다.

 

출력리다이렉션과 오류출력리다이렉션을 동시에 진행하려면 &>를 사용하면 된다.

cat text.txt &> text_copy.txt

 


입력 리다이렉션

입력 리다이렉션은 주로 명령어의 입력을 대량으로 한번에 넣고 싶을 때 사용된다.

이러한 테크닉을 here document(heredoc)이라고 한다.

 

 

방법은 간단하다.

command << 종료식별자

입력1

입력2

...

종료식별자

 

예제를 보자.

cat << BITHUB
james
tom
steven
sam
thomas
BITHUB

<출력>
james
tom
steven
sam
thomas

 

여기서 종료식별자는 BITHUB다.

 

두번째 예제를 보자.

cat < names.txt > names_copy.txt

cat 명령어의 입력 스트림으로 names.txt가 들어가고 출력 스트림에 names_copy.txt를 연결해주었다.

names.txt의 복사본으로 names_copy.txt가 생성된다.

'Linux' 카테고리의 다른 글

Linux 스크립트 함수 작성  (0) 2024.03.15
Linux 파이프  (0) 2024.03.15
Linux 와일드카드  (0) 2024.03.14
Linux 파일시스템(윈도우와 차이점)  (1) 2024.03.14
Linux 자주 사용되는 명령어  (0) 2024.03.14