둘셋 개발!

[Linux] 표준 입출력과 파이프 본문

카테고리 없음

[Linux] 표준 입출력과 파이프

23 2024. 3. 28. 21:07

본 내용은 'KT 리눅스 쉘 스크립트 프로그래밍 교육'에 기반한 내용입니다.

 

 

표준 출력

터미널에서 작업하는 명령은 보통 모니터에 출력된다.

이것을 '표준 출력' 이라고 하고 숫자로는 1로 표현한다.

'표준 출력'을 모니터가 아닌 출력값을 파일로 저장할 수도 있는데 이를 Redirection이라고 한다.

> 기호를 사용한 후에 파일 이름을 쓰면 된다.

 

ls -l 의 내용이 log.txt에 담긴 모습이다.

 

위에서 표준 출력은 숫자 1로 표현한다고 했으니 '>'와 '1>' 은 동일한 표현이다.

이게 무슨말이냐 하면

ls -l > log.txt
ls -l 1> log.txt

이 두개가 같은 것이라는 말이다.

 

그럼 만약 오류를 출력하고 싶다면 2를 사용하면 된다.

ls -l 2>log.txt

(ls -l 은 오류가 아니니 log.txt에는 아무것도 저장이 안된다.)

 

 

그럼 만약 출력 결과를 모니터에서도, 파일로도 저장하고 싶지 않다면 어떻게 해야할까?

그럴 때 /dev/null을 사용하면 된다.

who | grep root > /dev/root

이 명령어의 의미는 로그인한 사용자 중에서 root가 있다면 화면에도 파일로도 저장하지 않겠다는 의미이다.

 

실무에서 자주 사용하는 것은....!!

표준 출력과 표준 오류  모두 특정한 파일에 저장하기!! 이다.

 

1) 표준 출력과 표준 오류 모두 같은 파일에 저장하기

ls -l *.txt > log.txt 2> &1

표준 출력(>)의 경우 log.txt에 저장하고 표준 오류(2>)의 경우는 background(&)로 1로 보내는 것이다.

앞에서도 말했듯이 1은 표준출력이다

 

2) 표준 출력과 표준 오류 각각 다른 파일에 저장하기

ls -l *.txt > log.txt 2> error.txt

표준 출력(>)의 경우 log.txt에 저장하고 표준 오류(2>)의 경우는 error.txt에 저장하라는 것이다.


표준 입력

터미널에서 작업할 때 표준 입력은 주로 키보드로 입력하는 값이나, 파일에 내용을 읽어들이는 것이다.

 

echo "hello"  # 키보드로 hello라고 입력
cat /etc/passwd  # /etc/passwd의 내용을 읽어들임

 

표준 입력을 파일로 받아서 처리할 때는 '<' 를 사용한다.

sort < /etc/passwd 		# /etc/passwd 내용을 읽어서 정렬

 

 

그렇다면 여기서 문제

11.sh 파일에 있는 내용을 정렬 시킨 값을 22.sh에 저장하려면??

 

답:

sort < 11.sh > 22.sh


Pipe 사용하기

파이프는 표준 출력을 다음 명령의 표준 입력으로 처리하는 것이다.

한번만 사용하는 것이 아니라 계속 파이프를 사용할 수 있다.

하지만 표준 입력과 표준 출력은 딱 한 번만 사용 가능하다.

 

cat 33.sh | sort > 44.sh  # 33.sh의 파일의 내용의 결과값을 정렬해서 44.sh에 저장

 

cat 33.sh | grep bts  # 33.sh의 파일의 내용 출력값에서 bts인 것을 찾아라