[shell] / dev / null 2> & 1은 무엇입니까?

이 코드는 /etc/cron.daily/apf에서 찾았습니다.

#!/bin/bash  
/etc/apf/apf -f >> /dev/null 2>&1
/etc/apf/apf -s >> /dev/null 2>&1  

방화벽을 비우고 다시로드합니다.
나는 그 >> /dev/null 2>&1부분을 이해하지 못한다 .

cron에서 이것을 사용하는 목적은 무엇입니까? 방화벽 규칙을 재정의하고 있습니다. 이 크론 작업을 안전하게 제거 할 수 있습니까?



답변

>> /dev/null표준 출력 ( stdout)을로 리디렉션 하여 /dev/null버립니다.

(이것은 >>불필요한 >>것을 의미합니다 . 왜냐하면 추가하는 동안 >은 자르고 쓰는 것을 의미하고, 추가하거나 쓰는 /dev/null것은 동일한 순 효과 를 갖습니다. 나는 보통 >그런 이유로 사용 합니다.)

2>&1표준 오류 ( 2)를 표준 출력 ( 1)으로 리디렉션 한 다음 표준 출력이 이미 리디렉션되었으므로이를 버립니다.


답변

하자 브레이크 >> /dev/null 2>&1부품에 문 :


1 부 : >> 출력 리디렉션

프로그램 출력을 재지 정하고 파일 끝에 출력을 추가하는 데 사용됩니다. 더…


2 부 : /dev/null 특수 파일

이것은 의사 장치 특수 파일 입니다.

Command ls -l /dev/null는이 파일에 대한 세부 정보를 제공합니다.

crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null

관찰 했습니까 crw? 이는 직렬 액세스를 제공하는 문자 특수 파일 유형 의 의사 장치 파일 임을 의미합니다 .

/dev/null모든 입력을 받아들이고 버립니다. 출력을 생성하지 않습니다 (항상 파일 끝 표시를 읽을 때 표시 함). 참조 : Wikipedia


3 부 : 2>&1 파일 설명자

프로그램을 실행할 때마다 운영 체제는 항상 파일을 열 때마다 알듯이 3 개의 파일, 표준 입력, 표준 출력 및 표준 오류를 엽니 다. 커널 에서 운영 체제 는 음이 아닌 정수를 반환합니다. 파일 디스크립터 . 이들 파일의 파일 디스크립터는 각각 0, 1 및 2입니다.

그래서 2>&1 단순히 표준 출력 리디렉션 표준 오류는 말한다.

& 뒤에 오는 것은 파일 이름이 아니라 파일 설명 자라는 것을 의미합니다.

요컨대이 명령을 사용하면 실행하는 동안 프로그램이 소리 지르지 않도록 지시합니다.

사용의 중요성 2>&1 ?

터미널에서 일부 오류가 발생한 경우에도 출력을 생성하지 않으려는 경우. 보다 명확하게 설명하기 위해 다음 예제를 살펴 보겠습니다.

$ ls -l > /dev/null

위 명령의 경우 터미널에 출력이 인쇄되지 않았지만이 명령으로 오류가 발생하면 어떻게됩니까?

$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory

출력을로 리디렉션하고 /dev/null있지만 터미널에 인쇄됩니다. 오류 출력을로 리디렉션하지 않기 때문에 오류 출력 /dev/null을 리디렉션하려면 다음을 추가해야합니다 2>&1.

$ ls -l file_doesnot_exists > /dev/null 2>&1


답변

이것은 프로그램을 조용히 실행하고 모든 출력을 숨기는 방법입니다.

/dev/null쓰여진 모든 것을 버리는 특별한 파일 시스템 객체입니다. 스트림을 스트림으로 리디렉션하면 프로그램의 출력이 숨겨집니다.

2>&1부분은 “오류 스트림을 출력 스트림으로 리디렉션”을 의미하므로 출력 스트림을 리디렉션하면 오류 스트림도 리디렉션됩니다. 프로그램이 stderr지금 작성하더라도 해당 출력도 삭제됩니다.


답변

/dev/null 쓰기는 모두 버리는 표준 파일이지만 쓰기 작업이 성공했다고보고합니다.

1표준 출력이며 2표준 오류입니다.

2>&1표준 오류를 표준 출력으로 리디렉션합니다. &1는 파일 디스크립터 (표준 출력)를 나타내며, 그렇지 않으면 (만 사용하는 경우 1) 표준 오류를이라는 파일로 리디렉션합니다 1. [any command] >>/dev/null 2>&1모든 표준 오류를 표준 출력으로 리디렉션하고 모든 표준 오류를에 기록합니다 /dev/null.


답변

나는 >> /dev/null 2>&1조용한 cronjob에 사용 합니다. cronjob은 작업을 수행하지만 보고서를 전자 메일로 보내지 않습니다.

내가 아는 한 제거하지 마십시오 /dev/null. 특히 cPanel 을 실행할 때 유용한 cronjob 보고서에 유용 합니다.


답변

다른 사람들이 설명했듯이 / dev / null에 쓰면 프로그램의 출력이 제거됩니다. 일반적으로 cron은 cronjob으로 시작된 프로세스의 모든 출력에 대해 이메일을 보냅니다. 따라서 출력을 / dev / null에 쓰면 cron에서 주소를 지정한 경우 스팸이 발생하지 않습니다.


답변

편집 /etc/conf.apf. 설정하십시오 DEVEL_MODE="0". DEVEL_MODE세트하는 15 분 후에 APF 정지 cron 작업을 추가합니다.