[Linux] 리다이렉션 (표준 출력, 표준 에러 활용)

반응형

 

From Pixabay OpenClipart-Vectors's Image

 

[Linux] 파일 디스크립터(표준 입력, 표준 출력, 표준 에러)에서 표준 입력, 표준 출력, 표준 에러와 이를 포함하는 개념인 파일 디스크립터에 대해 간략하게 알아보았습니다. 이번엔 파일 디스크립터를 활용하여 표준 출력과 에러를 자유롭게 다룰 수 있는 개념인 리다이렉션에 대해 알아보겠습니다.

 

 

1. 리다이렉션 이란?

리다이렉션(Redirection)이란 말 그대로, 방향을 변경하는 것을 의미합니다. 리눅스에선 꼭 키보드로 표준 입력을 받거나 화면으로 표준 출력을 하는 것이아니라, 파일로 표준 입력을 받고, 파일로 표준 출력을 받는 등의 기능을 의미합니다. 리다이렉션을 이용하면 리눅스를 좀 더 자유롭고 편하게 사용할 수 있습니다.

리다이렉션 기호

형태

의미

<

[명령어] < [파일]

파일의 내용을 명령어의 입력으로 사용합니다.

>

[명령어] > [파일]

명령어의 결과(표준 출력)를 파일에 덮어씁니다.

>>

[명령어] >> [파일]

명령어의 결과를 파일에 추가합니다.

 

2. 기초 사용법

파일 디스크립터([Linux] 파일 디스크립터(표준 입력, 표준 출력, 표준 에러))와 리다이렉션을 함께 사용할 수 있습니다.

형태

의미

[명령어] 1>[파일]

[명령어] > [파일] 과 같은 의미로, 표준 출력을 [파일]에 덮어씁니다.

[명령어] 2>[파일]

[명령어] 실행 시, 에러가 발생한다면, 에러 내용을 [파일]에 덮어씁니다.

[명령어] 1>[파일] 2>[파일2]

[명령어] 실행 시, 결과는 [파일]에, 에러는 [파일 2]에 덮어씁니다. 

[명령어] 1>[파일] 2>[파일]

[명령어] 실행 시, 표준 출려과 에러를 모두 [파일]에 씁니다.

 

3. 활용

형태

 

[명령어] 1>[파일] 2>/dev/null

[명령어] 실행 시, 결과는 [파일]에 쓰고, 에러는 출력하지 않고 버립니다.

[명령어] > [파일] 2>&1

[명령어] 실행 시, 표준 출력과 에러 모두 [파일]에 씁니다.

[명령어] &> [파일] ([명령어 >& [파일])

위와 마찬가지로, [명령어] 실행 시, 표준 출력과 에러 모두 [파일]에 씁니다.

[명령어] 1> [파일] 2> /dev/null

표준 에러(stderr)는 표시되지 않고, 아예 삭제됩니다. /dev/null은 리눅스에서 쓰레기통과 같습니다. 윈도와 달리 리눅스에서는 휴지통에 들어가는 순간 파일이 완전히 삭제됩니다. 마치 윈도에서 Shift - delete를 누르면, 파일을 완전히 삭제하시겠습니까? 에서 예를 누른 것과 같습니다. 

 

[명령어] > [파일] 2>&1

표준 출력(stdout)을 [파일]에 쓰고, 표준 에러(2)를 &1로 보내라는(>) 의미입니다. 이때 &1은, 표준 출력(1)으로 보내는데 백그라운드(&)로 보내라는 의미입니다. 종합해보면, 표준 에러(2)를 백그라운드(&)로 표준 출력(1)에 보내라(>)라는 의미입니다. 백그라운드는 화면에 보이지 말고, 안 보이게 처리해라는 의미입니다. 스마트폰에서 유튜브를 백그라운드로 실행과 같은 개념입니다.

 

[명령어] &> [파일] ([명령어 >& [파일])

이는 [명령어] 1>[파일] 2>[파일]과 같은 의미입니다. 표준 출력(1)과 표준 에러(2)를 모두 [파일]에 씁니다. 왜 이렇게 작동하는지 정확히는 모르지만, 공식 문서에도 간단히 설명되어 있습니다. (공식 문서: www.gnu.org/software/bash/manual/bash.html#Redirections)

 

마치며

리다이렉션을 사용하는 경우는 출력과 에러가 너무 길어 파일로 저장하는게 편할 때 사용합니다. 저는 가장 많이 사용하는 것이 [명령어] 1>[파일] 2>[파일2][명령어] &> [파일]입니다. 전자는 출력과 에러를 따로 확인하고 싶을 때 사용하며, 후자는 출력과 에러를 동시에 확인하고 싶을 때 사용합니다.

 

이번엔 리다이렉션의 기초 개념과, 파일 디스크립터와 함께 사용하는 방법, 그리고 활용법을 알아보았습니다. 읽어주셔서 감사합니다. 

Reference
1) www.gnu.org/software/bash/manual/bash.html#Redirections
2) linuxize.com/post/bash-redirect-stderr-stdout/#:~:text=%3E%20%2Fdev%2Fnull-,Redirecting%20stderr%20to%20stdout,everything%20in%20a%20single%20file.&text=%3E%20file%20redirect%20the%20stdout%20to,order%20of%20redirection%20is%20important.
반응형

댓글

Designed by JB FACTORY