Home 리다이렉션, 2>&1, /dev/null
Post
Cancel

리다이렉션, 2>&1, /dev/null

리다이렉션(redirection)

  • 리다이렉션은 컴퓨팅에서 표준 스트림을 사용자 지정 위치로 우회할 수 있는 다양한 유닉스 셸을 포함한 대부분의 명령어 인터프리터에 일반적인 명령.
  • 표준 스트림에 대한 방향을 지정한다고 보면 이해하는데 도움이 될 것

null 장치(디바이스)

  • null 장치(디바이스)는 기록 대상이 되는 모든 데이터를 버리지만 쓰기 작업은 성공했다고 보고하는 장치 파일
  • 이 장치는 유닉스 계열에서는 /dev/null이라고 부르며 어떠한 프로세스에도 데이터를 제공하지 않고 그 즉시 EOF를 내보냄
  • 일반적으로 출력이 필요 없는 경우에 리다이렉션을 이용하여 출력을 null 장치로 보내는 방법으로 자주 이용

표준 스트림

  • 유닉스 계열의 표준 스트림은 3가지로 분류할 수 있으며 다음과 같다.
    • 표준 입력 : stdin, 파일 디스크립터 0
    • 표준 출력 : stdout, 파일 디스크립터 1
    • 표준 오류 : stderr, 파일 디스크립터 2

Untitled

표준 입력 리다이렉션


명령어 < 파일

  • 표준 입력 스트림에 대한 리다이렉션은 위와 같은 방법으로 사용

Untitled

  • cat test.txt로 입력을 하여도 같은 결과가 나오겠지만 이는 cat에 대한 아규먼트로 동작하는 방식
  • 위의 예제처럼 동작하는 것은 표준 입력을 cat 명령어로 리다이렉트 하여 전달한 방식

표준 출력 리다이렉션


명령어 > 파일

  • 표준 출력 스트림에 대한 리다이렉션은 표준 출력과 반대 방향을 가리키면서 사용

Untitled

  • cat test.txt 명령에 대한 표준 출력을 ‘test_copy.txt’ 파일로 리다이렉션
  • test_copy.txt 파일이 있으면 파일 내용을 지우고 새로 내용을 추가
  • 파일이 없으면 새로 파일을 만들어서 내용을 추가

명령어 >> 파일

  • 표준 출력 스트림에 대한 리다이렉션 과정에서 파일에 내용을 지우고 새로 내용을 추가하지 않고 기존 내용 뒤에 표준 출력 내용을 추가할 경우에는 ‘>’대신에 ‘»‘를 사용

2 >&1 & 의 의미


  • ex) nohup ${DIR}/bin/scheduler scheduler.ini >scheduler.out 2>&1 &
  • 0, 1, 2는 각각 표준입력, 표준출력, 그리고 표준에러를 의미한다.
  • 2는 표준 오류 출력에 대한 파일 디스크립터 번호이고, 1은 표준 출력에 대한 파일 디스크립터 번호이다.
  • &는 파일 디스크립터를 가리키는 특수 기호이다.
  • ”>”를 기준으로 보면 “2”를 “&1”로 보내라는 뜻인데, 2>&1의 의미는 표준 출력의 전달되는 곳으로 표준에러를 전달하라라는 의미이다.
  • 만약 위와 같다면, 에러 메시지(stderr)는 scheduler.out 파일에 에러 메시지를 출력하지 않고 바고 콘솔에다가 뿌려준다.
  • 이건 stderr이 버퍼를 이용하지 않고 에러가 생기는 즉시 바로 출력을 해주기 때문이다.
  • 이렇게 2>&1 리다이렉션을 시켜 줌으로 인해 stderr > stdout 으로 출력이 되고 scheduler.out 파일에 에러 메시지가 저장이 되게 되는 것이다.
  • 마지막 “&” 는 백그라운드로 실행하라는 뜻이다.

/dev/null 의 의미


명령어 > /dev/null

  • cat 명령어를 사용하여 ‘test.txt’ 내용을 표준 출력으로 터미널상에 표시하였다.

Untitled

  • 그 다음으로, >/dev/null 은 출력을 /dev/null로 하겠다는 뜻이다. /dev/null로 리다이렉션 하는 건 표준출력을 버리라는 뜻이다. 즉, 출력이 안보인다.
  • 스크립트 등에서 표준 출력을 표시하고 싶지 않을 경우에 유용하게 사용할 수 있다.

명령어 2> /dev/null

  • 표준 출력을 버리는 방법과 마찬가지로 표준 오류 또한 null 장치와 리다이렉션을 이용하여 표시하지 않을 수 있다. 차이점은 리다이렉션에서 표준 출력이 아닌 표준 오류를 null 장치로 보내주도록 지정하는 것이다.
  • ‘no_test.txt’라는 존재하지 않은 파일에 대해서 cat 명령를 수행하였고 파일이 없으므로 “No such file or directory”라는 에러 메시지를 출력하였다.

Untitled

  • “cat no_test.txt 2> /dev/null” 입력을 하게 되면 아무런 오류 메시지도 출력이 되지 않게 된다. 표준 오류를 null 장치로 리다이렉션 하였기 때문에 아무런 메시지도 표시되지 않게 된 것이다.

명령어 &> /dev/null

  • &> /dev/null은 명령의 모든 출력을 버리고, 터미널에 아무것도 표시하지 않는 것을 의미한다.
This post is licensed under CC BY 4.0 by the author.