[Linux] 11. 표준 입출력과 파이프라인
이 책은 '모두의 리눅스' 라는 책을 보고 공부하여 작성한 글입니다. 책과 순서가 다르거나 틀린 내용이 있을 수 있으니 참고해서 읽어주시기 바랍니다.
1. 표준 입력, 표준 출력, 표준 에러 출력
- 표준입력 (stdin) : 프로그램에 데이터를 입력한 채널
- 표준출력 (stdout) : 프로그램의 실행 결과가 출력되는 채널
- 표준 에러 출력 (stderr) : 프로그램 실행 중 에러 메시지가 출력되는 채널
표준출력과 표준에러출력은 기본적으로 단말 디스플레이에 출력한다.
리눅스 명령어는 표준 입출력이 실제 어디에 연결되어 있는지 신경쓰지 않으며, 그냥 입력을 읽어 표준 출력할 뿐이다. 그래서 사용자가 명령어를 실행할 때 자유롭게 지정할 수 있다.
2. 리다이렉션
redirection : 표준 입출력을 어디로 연결할지 변경하는 것
1) 표준 입력의 리다이렉션 : <
cat 명령어를 단순 실행시키면 표준입력으로 입력된 내용을 표준출력을 출력한다. 이때 표준 입력을 바꾸려면 < 명령어를 사용하면 된다.
이때 cat < /etc/crontab 과 cat /etc/crontab은 동일한 결과를 출력하지만 내부적으로 다른 점이 있다. 파일을 실행 인자로 지정하는 방식은 cat 명령어가 특별히 제공하는 방식을 사용하는 것이다.
2. 표준 출력의 리다이렉션 : >
보통 가장 많이 하는 리다이렉션은 명령어의 실행 결과를 화면에 출력하는 것 대신 파일에 저장하는 방법이다.
3) 표준 에러 출력 : 2>
표준 출력과 표준 에러 출력의 기본 값은 같으나 서로 별도의 채널을 사용한다는 것을 잊지 말아야한다. 리다이렉션하는 방법은 2> 를 사용하면 된다.
+) 표준 출력과 표준 에러 출력을 함께 리다이렉션 할 때는 2>&1를 붙여주면 된다.
4) 리다이렉션으로 파일 덮어쓰기
이미 존재하는 파일에 표준 출력을 리다이렉션하면 기존 파일을 지우고 덮어쓰게 된다. 만약 기존 파일에 이어서 작성하고 싶다면 > 대신 >> 를 사용하면 된다.
5) /dev/null
종종 /dev/null 파일에 리다이렉션할 때가 있다. 이 것은 특수 파일로 아래의 특성을 가진다.
- 입력 파일로 지정해도 아무 내용도 입력되지 않는다.
- 출력 파일로 지정해도 아무 내용도 출력되지 않는다.
포준 출력으로 출력되는 양이 너무 많거나 표준 에러 출력만 확인할 때 자주 사용하는 방식이다. \
3. 파이프라인 : |
여러 명령어를 연결하려면 한 명령어의 실행 결과를 다른 명령어에 입력할 수 있어야 한다. 이를 위해 존재하는 기능이 파이프라인이다. 명령어의 표준출력을 다른 명령어의 표준 입력으로 사용할 수 있다.
ls -l / > temp_list.txt 로 temp_list에 저장한 뒤 less로 temp_list를 실행하는 과정을 파이프라인을 사용하면 간단하게 해결 할 수 있다. ls -l / | less 로 파이프라인을 이용해 결과 값을 넘겨주면 된다.
ls 외에도 표준 출력으로 결과를 출력하는 모든 명령어는 파이프로 연결할 수 있다. 당연히 두 명령어 뿐만 아니라 더 많은 명령어도 연결할 수 있다.
4. 필터 명령어
표준 입력을 받아들여 표준 출력으로 출력하는 명령어를 필터 명령어라고 한다.
cat | 입력 내용 출력 |
head | 파일 앞부분 출력 |
tail | 파일 뒷부분 출력 |
grep | 검색 패턴에 일치하는 부분을 출력 |
sort | 정렬 |
uniq | 중복된 행을 제거하려 출력 |
tac | 역순으로 출력 |
wc | 행 수나 바이트 수를 출력 |
필터 명령어는 파이프라인을 사용하면 그 진가가 발휘된다.
du -b /bin/* | sort -n | tac
위의 예시는 파일 크기가 큰 순서대로 출력을 해준다.
du에 -b 옵션을 붙여 파일 크기를 바이트로 나타내고 이 결과를 -n 옵션(숫자를 기준으로 정렬)으로 sort한다. 이 결과를 tac으로 반대로 표시하면 된다.
'Linux' 카테고리의 다른 글
[Linux] 12. 텍스트 처리 (0) | 2022.08.24 |
---|---|
[Linux] 10. 프로세스와 잡 (0) | 2022.08.23 |
[Linux] 9. 퍼미션과 슈퍼 사용자 (0) | 2022.08.22 |
[Linux] 8.배시 설정 (0) | 2022.08.14 |
[Linux] 7. 텍스트 에디터 (0) | 2022.08.13 |