-
<, >, >>, >&, |, |&, tee (리다이렉션, 파이프)Linux 2022. 12. 22. 01:18
표준 입력, 표준 출력, 표준 에러 출력 개념과 리다이렉트, 파이프 개념을 정리하고
<, >, >>, >&, |, |&, tee 명령어의 사용법을 정리한다.
1. 표준 입력(STDIN), 표준 출력(STDOUT), 표준 에러 출력(STDERR)
명령어는 입력을 받아 처리하고 결과를 출력한다.
리눅스를 비롯한 유닉스 계열의 OS에는 이런 입출력을 통일된 방식으로 다룬다.
이러한 표준 입력, 표준 출력, 표준 에러 출력을 어디서 받아서 어디로 내보낼지 여부는 명령줄에서 전환 가능하다.
입출력을 파일로 전환하는 기능을 리다이렉트
명령어의 출력을 다른 명령어의 입력으로 전환하는 기능을 파이프라고 한다.
2. <, >, >>, >&
2.1 >
표준 출력을 파일로 전환하려면 > 를 사용하고, > 뒤에 파일명을 지정한다.
파일로 전환했으므로 결과가 화면에 출력되지는 않는다.
사용 예
ps 명령어 출력 결과를 pslog 파일에 저장
-> ps > pslog
2.2 <
표준 입력을 파일로 전환하려면 < 를 사용하고, < 뒤에 파일명을 지정한다.
사용 예
cat < pslog
-> pslog 출력
2.3 >>
리다이렉트 >를 사용 했을 때 이미 파일이 존재한다면 덮어쓰기가 된다.
덮어쓰지 않고 파일 끝에 추가하고 싶다면 >>를 사용.
사용 예
date >> file2
-> date 명령어의 출력을 file2 끝에 추가.
2.4
>나 >>는 표준 출력만 파일로 리다이렉트 되고 표준 에러 출력은 화면에 표시된다.
리다이렉트 기호 앞에 파일 디스크립터 번호를 지정하면 표준 출력 또는 표준 에러 출력을 골라서 파일로 리다이렉트가 가능하다.
파일 디스크립터 번호는 다음과 같다.
표준 입력 - 0
표준 출력 - 1
표준 에러 출력 - 2
사용 법과 예
명령어 2> 파일명
ls -l a 2> err
-> 표준 출력은 화면에 그대로 출력되고, 표준 에러 출력이 err 파일에 저장.
참고
리눅스 특수 파일 중 하나인 /dev/null 파일에 리다이렉션 되면 해당 내용을 저장하지 않는다.
출력 메시지나 에러 메시지를 제어하고 싶을 때 자주 사용한다.
또한 /dev/null 파일을 읽으면 파일이 끝났다는 기호 EOF 를 돌려준다.
2.5 >&
>& 앞뒤에 파일 디스크립터 번호를 지정하면 표준 에러 출력을 표준 출력으로
또는 표준 출력을 표준 에러 출력으로 전환한다.
리다이렉션 기호가 여러개 있다면 출력 전환 실행은 뒤에서부터 시작한다.
사용 예
ls -l a b > file 1>&2
-> 표준 출력을 표준 에러 출력으로 전환이 먼저 적용되고 명령어의 표준 출력을 file에 저장하게 된다.
ls -l a b의 표준 에러 출력이 화면에 표시 되고
ls -l a b의 표준 출력이 표준 에러 출력으로 전환되어 화면에 표시 된다.
따라서 file에 표준 출력이 저장 되어야 하는데 저장될 표준 출력이 없으므로 file에는 아무 것도 저장되지 않는다.
ls -l a b 2>&1 > file2
-> 표준 출력이 file2에 저장이 먼저 적용, 표준 에러 출력이 표준 출력으로 전환.
따라서 ls -l a b 의 표준 출력만 file2에 저장.
ls -l a b > file3 2>&1
-> 표준 에러 출력을 표준 출력으로 전환이 먼저 적용, 표준 출력이 file3에 저장.
따라서 ls -l a b 의 표준 에러 출력과 표준 출력 모두 file3에 저장.
3. |, |&, tee
3.1 |
명령어를 다양하게 조합하여 사용하려면 | (파이프)를 사용하면 된다.
첫 번째 명령어의 출력 결과를 두 번째 명령어의 입력으로 전달할 수 있다.
사용 예
ps -ef | grep java | tail - n 4
ps aux | grep user1 | wc -l
-> user1 사용자 프로세스가 몇개 있는지
3.2 |&
표준 출력과 표준 에러 출력을 다음 명령어의 입력으로 전달할 때 사용한다.
명령어1 2>&1 | 명령어2 와 명령어1 |& 명령어2 는 같은 의미다.
3.3 tee
리다이렉션으로 출력을 파일로 전환하면 화면에 표시되지 않는다.
파일로 저장도 하면서 화면에 출력도 하고 싶다면 tee를 사용한다.
사용 예
ps | tee file1
-> ps 결과를 화면에 표시하면서 file1 파일에 저장(덮어쓰기).
덮어쓰기가 아니라 파일 마지막에 추가 하고 싶다면 -a 옵션을 사용.
date | tee -a file1
'Linux' 카테고리의 다른 글
echo, unset (0) 2022.12.24 xargs, ; (0) 2022.12.22 wc (0) 2022.12.18 zip, unzip, zcat, tar (0) 2022.12.18 chown, chmod (0) 2022.12.16