[Linux] 11. 표준 입출력과 파이프라인

2022. 8. 24. 01:43

이 책은 '모두의 리눅스' 라는 책을 보고 공부하여 작성한 글입니다. 책과 순서가 다르거나 틀린 내용이 있을 수 있으니 참고해서 읽어주시기 바랍니다. 

 

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. 파이프라인 : |

여러 명령어를 연결하려면 한 명령어의 실행 결과를 다른 명령어에 입력할 수 있어야 한다. 이를 위해 존재하는 기능이 파이프라인이다. 명령어의 표준출력을 다른 명령어의 표준 입력으로 사용할 수 있다. 

1,2줄 명령어를 간단히 하면 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

BELATED ARTICLES

more