dev/null 2>&1 의 의미
페이지 정보
작성자 서방님 댓글 0건 조회 117회 작성일 13-05-09 08:58본문
shell(#mode)에서 간단하게 명령어를 통해 테스트를 진행하면서 "/dev/null 2>&1"의 의미를 알아본다,
아래 명령어는 표준 출력을 /dev/null로 redirection 하라는 의미로 표준출력을 버리라는 의미다,
하지만, test라는 file이 존재하지 않는 경우 아래와 같은 표준에러가 출력된다,
rm: cannot remove 'test': No such file or directory
#
방금 언급했지만, 이것은 "표준출력"이 아닌 "표준에러"이기 때문에 화면에 출력이 된것이다,
다시 강조하면 /dev/null 로 redirection 을 통해 화면 출력을 하지 않는것은 표준출력에 한해서 해당된다.
자 그렇다면, 표준에러를 버리고 싶다면 아래와 같이 사용하도록 하자,
2>&1 는 표준에러를 표준출력으로 redirection 하라는 의미다.
0 : 표준입력
1 : 표준출력
2 : 표준에러
정리하면 "rm test"의 표준출력을 /dev/null로 버리는데, 표준에러는 표준출력으로 redirection한다.
결국 결과는 표준출력이 되기 때문에 /dev/null로 버려지고, 화면에 결과가 뿌려지지 않게 되는 것이다.
/dev/null과 2>&1를 같이 사용하지 않는 경우 위의 예제는 결국 표준출력되기 때문에 화면에 에러 내용이 출력된다,
=====================================================================
우선 /var/spool/cron 폴더의 내용은 직접 수정하지 마시고
crontab 명령을 이용해서 수정하시기 바랍니다. nobody 사용자의 cron 설정확인과 수정은 아래와 같이 하시면 됩니다.
설정확인] crontab -l -u nobody
설정수정] crontab -e -u nobody
자 이제 아래 라인을 설명 드리겠습니다.
* * * * * /var/tmp/.access.log/y2kupdate > /dev/null 2>&1
우선 앞에 * 문자들은 뒤에 설정된 명령을 실행할 주기를 뜻 합니다.
앞에서 부터 분,시,일,달,요일 을 뜻합니다. * 는 all을 뜻하기에
매 1분 마다 뒤 명령이 계속 실행되도록 설정된 것입니다.
그 뒤를 설명하기 위해선 간단한 아래 내용을 이해 하셔야 합니다.
시스템에 기본 적으로 표준입력, 표준출력, 표준에러 가 있으며 이는 가각 0, 1, 2 라는 파일 드스크립터로 연결됩니다. 파일 디스크립터는 단지 식별자라고 이해하시면 됩니다.
그리고 I/O 재지향 이라고 입력이나 출력을 표준입력이나 표준출력이 아닌 다른 곳에서 입력을 받거나 다른 곳으로 출력할 수 있게 하는 것이 있습니다.
간단한 예로...
ls > list.txt
위 명령은 ls 결과를 list.txt 란 파일에 저장하게 됩니다. 여기서 > 가 바로 재지향 명령이 됩니다. 그리고 이 명령라인에는 하나가 생략되어 있는데요. 바로 1 입니다. 전체 명령은 아래와 같습니다.
ls 1> list.txt
즉 ls 결과를 표준출력하지 말고 list.txt 파일에 저장하라는 명려인 것이죠. 여기서 1은 생략 가능한 것입니다.
그럼 질문 하신 명령문을 살펴 보면...
/var/tmp/.access.log/y2kupdate > /dev/null 2>&1
우선 y2kupdate 을 실행한 결과를 /dev/null 로 재지향 했습니다.
(참고: 1이 생략된 것입니다. y2kupdate 1> /dev/null 과 같습니다.)
/dev/null 은 리눅스 시스템에서 블랙홀이죠. 즉 그냥 버리라는 뜻 입니다.
그 뒤에 2>&1 은 2가 표준에러를 뜻 하고 이를 1 표준출력으로 재지향 한 것입니다.
그런데 그전에 1을 /dev/null 로 재지향 했기 때문에 2 역시 /dev/null 로 재지향 된 것입니다.
(참고: 1 앞에 & 는 포인터라고 생각하시면 됩니다. 이전에 사용된 1을 가리키고 있는 것입니다.)
댓글목록
등록된 댓글이 없습니다.