본문 바로가기
IT/리눅스

리눅스 명령어-12 명령어 입출력을 파일로 전환

by 노오-력 2023. 1. 25.

표준 출력 리다이렉트

 

ps 명령어 출력 결과를 pslog 파일로 저장해보자

ex) ps 명령어 출력 결과를 pslog 파일에 저장
$ ps > pslog

$ cat pslog

 

표준 출력을 파일로 전환하려면

리다이렉트 기호 > 를 사용한다.

그리고 출력을 저장할 파일 이름을 > 뒤에 지정하면된다.

 

 

리다이렉트 기호 > 를 사용했을 경우 지정장 파일이 이미 존재하면 덮어쓰기한다.

덮어쓰기가 아니라 파일 끝에 추가하고 싶으면 리다이렉트 기호 >> 를 사용하면된다.

ex) date 출력결과를 pslog 파일 뒤에 이어붙이기
$ date >> pslog

$ cat pslog

기존 pslog 파일에 date 명령어 실행 결과가 추가되었다.

 

 

표준에러 출력 리다이렉트

표준 에러출력은 번호를 지정해서 리다이렉트 할 수 있다.

apple 파일은 있지만 peach 파일은 없는 디렉터리를 작성해서 확인해보자.

$ ls -l apple peach > lslog

peach 파일이 존재하지 않기 때문에 에러가 나온다.

그리고 저장된 lslog 파일을 확인해보면 존재하는 apple 에 대해서만 결과를 확인할 수 있다.

 

리다이렉트 기호 > 와 >> 는 표준출력만 파일로 리다이렉트하기 때문에

표준 에러 출력을 사용하는 에러 메시지는 화면에 그대로 표시되고

lslog 파일에는 표준 출력으로 출력한 내용만 저장된다.

 

리다이렉트 기호 앞에 파일 디스크립터 번호를 지정하면

표준 출력 또는 표준 에러 출력을 골라서 파일로 출력 전환 가능하다.

$ ls -l apple peach 2> errlog

이번에는 반대로 에러출력이 파일에 저장되었다.

 

리다이렉트 기호 > 앞에 표준 에러출력의 파일 디스크립터 번호인 2를 지정하면

표준 에러 출력은 errlog 파일로 전환되고 표준 출력은 그대로 화면에 출력된다.

 

 

 

리다이렉트 기호 >& 등을 활용

$ ls -l apple peach > lslog 1>&2

출력 전환 실행은 뒤에서 시작한다.

순서1.    1>&2  는 표준출력(1)을 에러출력(2)로 전환한다는 뜻이고

순서2 .   > lslog 는 표준출력을 lslog 파일로 출력전환 한다는 뜻이다.

 

순서 1에서 표준출력이 모두 에러출력으로 전환되었기 때문에

순서 2에서 더이상 남아있는 표준출력이 없기 때문에 lslog파일은 빈 파일이다.

 

 

$ ls -l apple peach 2>&1 > lslog

순서1.    > lslog 는 표준출력(1)을 lslog 파일로 출력전환

순서2.    2>&1 은 에러출력(2)를 표준출력(1)으로 전환

 

 

$ ls -l apple peach > errlog 2>&1

순서 1.      2>&1 는 에러출력(2)를 표준출력(1)으로 전환

순서 2.      > errlog 는 표준출력(1)을 errlog 파일로 전환

 

순서 1에서 에러출력이 표준출력으로 전환되었기 때문에

순서 2의 > errlog 에 포함되어 파일로 전환된것이다.

 

$ ls -> apple peach >& errlog 명령어를 사용하면 동일한 결과가 나타난다.

 

 

 

 

 

파일과 화면 양쪽에 출력하기

ex) ps의 결과를 화면, pslog 파일로 양쪽 모두 출력하기
$ ps | tee pslog

ex) date의 결과를 pslog 뒤에 이어붙이기 -a옵션
$ date | tee -a pslog

tee 명령어를 사용하면 화면과 파일에 동시에 출력 가능하다.

 

tee 명령어의 -a 옵션을 사용하면 파일을 덮어씌우지 않고

뒤에 이어서 붙일 수 있다.