Linux,  Programming

[Linux] Redirection (2>&1)

Linux shell에선 출력되는 결과를 다른 방식으로 변경하는 명령이 존재한다.

Standard I/O

0: Standard input

우리가 키보드로 입력하는 것을 표준 입력이라고 말한다. 이는 file descriptor에 0번으로 지정되어 있다.

1: Standard output

우리가 모니터로 출력을 볼 수 있도록 나타내는 곳을 표준 출력이라고 말한다. File descriptor에는 1번으로 저장되어 있다.

2: Standard error

어떤 프로세스를 수행 중 어떤 문제로 인해 error가 발생되는 경우 error 결과물을 출력하는 곳을 표준 에러라고 말한다. File descriptor에는 2번으로 저장되어 있다.

Redirection

OperatorDescription
[cmd] > [filename]
[cmd] 1> [filename]
표준 출력 결과를 [filename]으로 출력
[cmd] < [filename]표준 입력을 [filename]으로 입력
[cmd] >> [filename]표준 출력을 결과를 [filename]으로 출력 (append)
[cmd] >& [filename]표준 출력의 결과와 표준 에러를 [filename]으로 출력
[cmd] >>& [filename]표준 출력의 결과와 표준 에러를 [filename]으로 출력 (append)
[cmd] 2> [filename]표준 에러 결과를 [filename]으로 출력
[cmd] 2>> [filename]표준 에러 결과를 [filename]으로 출력 (append)
[cmd] 2>&1표준 에러 결과를 표준 출력 결과로 재지정

Example

$ ls > log.txt 2>&1

위 명령을 해석해보면, ls를 통해 나온 표준 출력 결과를 화면에 띄우지 말고 log.txt에 저장하는데, 2>&1를 통해 표준 에러를 표준 출력으로 재지정 하라는 뜻이다. 그런데 앞서 표준 출력을 파일에 저장하라고 했기 때문에, 표준 에러 또한 파일로 저장이 된다.
참고로 &1에서 &는 표준 출력을 나타내기 위해 사용하는 것이다.

$ /script.sh > /dev/null 2>&1

위 명령을 해석해보면, script.sh의 표준 출력 결과를 /dev/null로 저장하는데 이 위치는 모든 결과를 날리는 장소이다. 따라서 화면에 출력하지 않는다는 의미이며, 2>&1를 통해 표준 에러 결과 또한 표준 출력으로 연결해서 아무것도 나타내지 않겠다는 명령이다.

Reference

  1. https://inpa.tistory.com/entry/%EB%A6%AC%EB%88%85%EC%8A%A4-devnull-%EB%A6%AC%EB%8B%A4%EC%9D%B4%EB%A0%89%EC%85%98-%EA%B8%B0%ED%98%B8-%EC%A2%85%EB%A5%98
  2. https://cloud-oky.tistory.com/43

Leave a Reply

Your email address will not be published. Required fields are marked *