dev/null 2>&1 의 의미 > server

본문 바로가기
사이트 내 전체검색

server

dev/null 2>&1 의 의미

페이지 정보

작성자 서방님 댓글 0건 조회 117회 작성일 13-05-09 08:58

본문

shell(#mode)에서 간단하게 명령어를 통해 테스트를 진행하면서 "/dev/null 2>&1"의 의미를 알아본다,

아래 명령어는 표준 출력을 /dev/null로 redirection 하라는 의미로 표준출력을 버리라는 의미다,

# rm test > /dev/null


하지만, test라는 file이 존재하지 않는 경우 아래와 같은 표준에러가 출력된다,

# rm test > /dev/null
rm: cannot remove 'test': No such file or directory
#


방금 언급했지만, 이것은 "표준출력"이 아닌 "표준에러"이기 때문에 화면에 출력이 된것이다,
다시 강조하면 /dev/null 로 redirection 을 통해 화면 출력을 하지 않는것은 표준출력에 한해서 해당된다.


자 그렇다면, 표준에러를 버리고 싶다면 아래와 같이 사용하도록 하자,

# rm test > /dev/null 2>&1


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을 가리키고 있는 것입니다.)

댓글목록

등록된 댓글이 없습니다.

Total 356건 16 페이지
게시물 검색

회원로그인

접속자집계

오늘
132
어제
225
최대
1,347
전체
154,891
Latest Crypto Fear & Greed Index

그누보드5
Copyright © 서방님.kr All rights reserved.