본문 바로가기

os/linux

[ Linux ] 리눅스 명령어 (중급) - 리다이렉션, 파이프, tee

[ Linux ] 리눅스 명령어 (중급) - 리다이렉션, 파이프, tee

 

안녕하세요. 심심한 코딩쟁이입니다.

 

오늘은 약간 수준 높은 리눅스 명령어에 대해서 알아보겠습니다.

 

조금만 사용해 보시면 금방 익숙해지실 겁니다.

 

천천히 따라와 주세요.

 

linux-logo
리눅스 로고


프로세스와 표준 입출력

 

명령어를 사용해 보기에 앞서 프로세스와 표준 입출력에 대해 알아봅시다.

 

프로세스는 간단히 말하자면 현재 실행 중인 프로그램이라고 생각하시면 됩니다.

 

메모리에 적재되어 PCB 형태로 OS에게 관리되는 것이 프로세스입니다.

 

자세한 내용은 OS(운영체제)를 공부하다 보면 더욱 깊게 알 수 있습니다.

 

프로세스는 표준 입력을 받아서 표준 출력과 표준 에러를 결과로 내보냅니다.

 

stdin-stdout-stderr
표준 입력, 출력, 에러

 

각각 표준 입력 0, 표준 출력 1, 표준 에러 2 의 파일 디스크립터 번호를 가집니다.

 

표준입력은 키보드를 사용해 입력되고 표준 출력과 에러는 모니터를 통해 출력됩니다.


리다이렉션

 

프로세스의 입력과 출력 대상을 변경하는 행위를 말합니다.

 

일반적으로는 출력 값을 파일에 저장하는 용도로 사용되며 에러의 내용을 저장하기도 합니다.


표준 입력 재지정

 

< 를 사용하여 명령어의 표준 입력을 재지정합니다. 

 

# 표준 입력을 재지정
cat < ~/test.txt
cat ~/test.txt

 

redirection
cat의 입력 리다이렉션

cat 출력을 통해 동일한 결과임을 확인할 수 있습니다.


표준 출력 재지정

 

> 또는 >> 를 사용해 명령어의 표준 출력을 지정된 파일에 저장한다.

 

> 를 사용하면 지정한 파일에 덮어쓰기로 저장되고

 

>> 를 사용하면 이어쓰기로 저장됩니다.

 

ls # 현재 디렉터리에 존재하는 파일 및 디렉터리 리스트 출력

ls > test.txt # ls의 표준 출력을 test.txt 파일에 저장

cat test.txt # test.txt의 내용 출력

 

redirection
표준 출력 리다이렉션

 

ls >> test.txt # ls의 출력을 test.txt에 이어쓰기로 저장

cat test.txt # test.txt의 내용 출력

 

redirection
표준 출력 리다이렉션


표준 에러 재지정

 

2> 또는 2>> 를 사용해 명령어의 표준 에러를 지정된 파일에 저장한다.

 

2> 는 덮어쓰기 2>> 는 이어쓰기로 저장된다.

 

mkdir test # test 디렉터리 생성

rm test # rm 명령어로 test 디렉터리를 삭제하라는 명령이지만 에러 발생(옵션필요)

rm test 2> rm_result.txt # rm의 표준 에러를 rm_result.txt에 저장

cat rm_result.txt # rm_result.txt의 내용 출력

 

redirection
표준 에러 리다이렉션

 

rm test 2>> rm_result.txt # rm의 표준 에러를 rm_result.txt에 덮어쓰기로 저장

cat rm_result.txt # rm_result.txt의 내용 출력

 

redirection
표준 에러 리다이렉션


표준 출력 표준 에러 모두 재지정

 

&> 또는 &>> 를 사용하면 표준 출력 표준 에러를 모두 재지정할 수 있습니다.

 

사용법은 위와 같으므로 생략하겠습니다.



파이프

 

리눅스에서 파이프는 2개 이상의 명령어를 함께 사용하여

 

첫 번째 명령어의 표준 출력을 두 번째 명령어의 표준 입력으로 대체하는 방법입니다.

 

pipe
파이프


파이프 사용 예시

 

 |  를 명령어 사이에 배치해서 사용합니다. Shift + \ (백슬래시) 키로 표기 가능합니다. 

 

예제에 사용된 grep 명령어는 문자열을 찾아주는 명령어로 쓰임새가

 

아주 다양하기 때문에 다음시간에 자세하게 다룰 예정입니다.

 

cat test.txt | grep '바탕화면' # cat 명령어의 출력을 grep 의 입력으로 대체

 

pipe-ex
파이프 예제



tee

 

파이프와 유사하지만 첫 번째 명령어의 표준 출력을 받아서 두 가지 일을 수행합니다.

 

첫 번째로는 받아온 표준 출력을 파일 또는 모니터에 출력해 줍니다.

 

두 번째로는 받아온 표준 출력을 뒤에 이어지는 명령어에 표준 입력으로 대체해 줍니다.

 

tee
Tee


간단한 예제를 통해 tee의 동작을 살펴보겠습니다.

 

 ls -l > saved_output | cat # ls 의 표준 출력을 saved_output 파일에 저장 후
                            # 파이프를 이용해 cat 실행하지만 cat의 입력으로 들어오는것이 없다.

ls -l | tee saved_output | cat # ls 의 표준 출력을 saved_output 파일에 저장 후
                               # 파이프로 tee의 표준 출력을 cat의 표준 입력으로 대체한다.

 

tee 를 사용하면 ls 의 표준 출력이 saved_output 파일에 저장되면서 cat의 표준 입력으로도 전해지면서 된다.

 

tee-ex
tee 예제


여기까지 리눅스 명령어 (중급) 리다이렉션, 파이프, tee에 대해서 알아보았습니다.

 

리눅스가 익숙하지 않으신 분들에게는 아주 생소한 작동방식이었을 겁니다.

 

아주 유용한 명령어들이기 때문에 적재적소에 잘 사용하시면 리눅스 시스템 사용에 큰 도움이 될 것입니다.

 

궁금하신 점이나 어려운 부분이 있다면 댓글로 남겨주세요. 성심성의껏 답변드리도록 하겠습니다.

 

감사합니다.

반응형