비트를 버리는 통
/dev/null은 쓰기 데이터는 모두 버리고, 읽기 요청에는 즉시 EOF를 돌려주는 특수 기기야. Unix에서 필요 없는 출력을 숨길 때 쓰는 표준 목적지지.
자주 쓰는 패턴
cmd 2>/dev/null: 표준 오류만 버려.cmd >/dev/null 2>&1: 표준 출력과 표준 오류를 모두 버려.cmd </dev/null: 빈 표준 입력을 공급해. 입력을 기다리면 안 되는 백그라운드 작업에서 유용해.: > file또는cat /dev/null > file: 파일 크기를 0바이트로 줄여.
반대 성격의 기기: /dev/zero
/dev/zero는 읽을 때마다 널 바이트를 계속 내보내. dd if=/dev/zero of=blob bs=1M count=10은 0으로 채운 10MB 파일을 만들어서 파일 시스템 시험, 스왑 파일, 시험 데이터에 쓸 수 있어. 관련 기기로 암호학적 난수를 제공하는 /dev/random과 빠르게 난수를 제공하는 /dev/urandom이 있어.
입력과 출력을 뒤바꾸지 마
cmd > /dev/null은 출력을 숨기고, cmd < /dev/null은 빈 입력을 줘. 방향을 바꾸어 쓰면 스크립트가 빈 입력을 받고도 조용해서 원인을 찾기 어려워져.
출력을 버려도 실패 상태는 남아
command >/dev/null은 화면에 보일 바이트만 버릴 뿐 명령의 종료 상태를 성공으로 바꾸지 않아. 조용히 실행하더라도 if command ...처럼 실패를 따로 처리해. 보이지 않는 출력과 중요하지 않은 작업은 같은 뜻이 아니야.
진단 정보는 필요한 만큼만 버려
>/dev/null 2>&1은 예약 작업을 조용하게 만들지만 복구에 필요한 단서도 함께 지워. 이름을 붙일 수 있는 예상 잡음만 좁게 버리고, 운영 작업의 출력은 크기를 제한한 로그나 모니터링 대상으로 보내.
/dev/null은 빈 파일이 아니야
빈 일반 파일에는 디렉터리 항목, 권한, 시각 정보, 저장 공간이 있어. 반면 /dev/null은 쓰기를 버리고 읽기에 즉시 EOF를 내는 기기 끝점이야. 두 대상을 같은 상태 저장소처럼 바꾸어 쓰면 안 돼.