/dev/null 2>&1

Linux/Linux 일반 : 2008. 12. 1. 12:37
반응형
/dev/null 2>&1 

만약... 
nohup ${DIR}/bin/scheduler scheduler.ini >scheduler.out 2>&1 & 
으로 한다면은... 에러 메시지(stderr)은 scheduler.out 파일에 에러 메시지를 출력하지 않고 바고 
콘솔에다가 뿌려 줍니다. 
이건 stderr(2)이 버퍼를 이용하지 않고 에러가 생기는 즉시 바로 출력을 해주기 
때문입니다. 
이렇게 2>&1 리다이렉션을 시켜 줌으로 인해 stderr > stdout 으로 출력이 되고 
scheduler.out 파일에 에러 메시지가 저장이 되게 되는 것입니다. 

------------------------------------------------------------------------- 
2 >&1 의 의미. 

n >&m: 표준출력과 표준에러를 서로 바꾸기. 
0, 1, 2는 각각 표준입력, 표준출력, 그리고 표준에러를 의미합니다. 

2>&1의 의미는 표준 출력의 전달되는 곳으로 표준에러를 전달하라라는 
의미입니다. 
이것은 Bourne쉘 연산자이기 때문에 csh에서는 사용할 수 없답니다. 

------------------------------------------------------------------------- 

 if ( ls -l $0 | grep $LOGNAME >/dev/null ) 
    여기서 /dev/null로 리다이렉션하는건 무었을 의미하나요? 

표준출력을 버리라는 뜻입니다. 이 부분에서 grep 명령을 사용하는 것은 
걸리는 것이 어떻게 생겼는지 보려는 것이 아니라 걸리는 것이 있는지 
없는지 알아내어 별도의 작업을 하려는 것이고 화면에 뭔가가 "뿌려지는" 
것은 막자는 것이죠. 

이런 용도로 grep을 사용할 때, -q, -s 등의 옵션을 사용할 수 있습니다. 
자세한 내용은 man grep. 

 nohup ${DIR}/bin/scheduler scheduler.ini >scheduler.out 2>&1 & 

 여기서 2>&1 & 은 무얼 의미하나요? 

앞부분의 "2>&1"은 표준오류 스트림을 표준출력으로 돌리라는(?) 뜻입니다. 
그냥 ">"를 기준으로 보면 "2"를 "&1"로 보내라는 뜻인데, 여기서 "2"는 
표준오류 스트림을 나타내는 번호이고 "1"은 표준출력을 나타내는 번호입니다. 
마지막 "&" 는 백그라운드로 실행하라는 뜻이구요.  

>/dev/null 은 출력을 /dev/null로 하겠다는 소리입니다. 
즉 출력이 안보이겠죠. 

>&1이 의미하는 것은 출력을 표준 출력에다가 하겠다는 소리입니다. 
<&0은 당연히 표준 입력이 되겠죠. 
------------------------------------------------------------------------- 
이렇게 해서 열흘 이상 지난 파일들을 자동으로 삭제하는 셸 스크립트를 완성했습니다. 
정확히 말하자면, 최근 열 개 까지의 날짜 디렉토리를 남겨 두고 나머지를 삭제하는 거겠군요. 
이제 휴지통에 신경을 덜 써도 될 것 같습니다. 
#!/bin/sh 

cd ~/.Trash/ 
mytrash=`date +%F` 

mkdir ${mytrash} >/dev/null 2>&1; 
mv * ${mytrash} >/dev/null 2>&1; 
mv ${mytrash}/20??-??-?? . >/dev/null 2>&1; 

for dir in `ls -1d 20??-??-?? | sort -r | tail -n +11` 
do 
        rm -rf "${dir}" 
done 

반응형

'Linux > Linux 일반' 카테고리의 다른 글

linux - nmap , scanning  (0) 2008.12.19
우분투에 IE 설치하기.  (0) 2008.11.28
HOW-TO Network Configuratoin  (0) 2008.11.26
Posted by Real_G