답변:
# cp -a /dev/null log.txt
이것은 당신의 널 장치를 올바른 메이저 및 마이너 dev 번호로 복사하여 log.txt
다른 것을 갖습니다 null
.
커널에서 장치는 이름으로 알려진 것이 아니라 주요 숫자와 부 숫자로 알려져 있습니다. 나는 당신이 어떤 OS를 가지고 있는지 알지 못하기 때문에 우리가 이미 알고있는 곳에서 숫자를 복사하는 것이 편리하다는 것을 알았습니다. 주 번호와 부 번호를 잘못 사용하면 다른 장치, 아마도 디스크 나 쓰고 싶지 않은 다른 장치를 만들었을 것입니다.
sudo
하거나 루트 사용자로 실행 한다는 점은 주목할 가치가 있습니다. "올바른 메이저 및 마이너 개발자 번호"의 의미를 (답으로) 설명하십시오.
/dev/null
명령에서 사용되는 "경로"와 파일 경로가 어떻게 관련되는지에 대해서는 여전히 혼란스러워 합니다. 그리고, 나는 참고로 미래의 리더 도움이 될 생각 당신의 대답에sudo
필요합니다.
cp -a /dev/null log.txt
내 의견 과 관련하여 어떻게 작용 하는가?
sudo
당신이 사용자로 실행하는 일이없는 한,이 명령을 수행하기 위해 root
(일반적으로 낙심하는). 사용 sudo
(또는 실행 root
파일이있는 위치에 배치해야하는 경우) (V.Michel의 대답 @) 하드 링크 (이 답변) 또는 심볼릭 링크를 만드는 것은 모든 오른쪽 해결책이 될 수 있음을 모든 사용자 계정에 기록 할 수 있습니다, 그러나 요점은 다음과 같습니다. 요구 사항을 명시 적으로 유의하십시오.
mknod
. 의견은 일반적으로 거의주의를 기울이지 않으므로 누군가 만 질문을 읽은 다음 귀하의 답변이 혼란 스러울 수 있습니다.
/ dev / null에 대한 심볼릭 링크를 만들 수 있으며 루트 일 필요는 없습니다.
ln -s /dev/null log.txt
ls -l log.txt
예를 들어 "1, 3"이 어떻게 든 중요하다는 것을 아는 것보다는 / dev / null에 대한 심볼릭 링크 라는 것을 보여줍니다.
다른 대답은 아마도 효과가있을 것입니다. 특히 symlink 솔루션이 가장 쉬운 솔루션 일 것입니다. 나는 주로 완전성을 위해 이것을 제공합니다.
파일을 포함하는 파일 시스템이 장치를 지원하지 않는 경우 mknod
(또는 cp -a
예 nodev
를 들어 옵션 으로 마운트 된 경우) 관련된 솔루션 (또는 )이 문제가됩니다 . 물론 파일 시스템 간의 하드 링크는 작동하지 않습니다.
하드 링크 또는 새 장치 노드 작성에 대한 대안은 파일 시스템 트리의 한 부분에서 다른 부분으로 파일 또는 디렉토리를 마운트 할 수있는 바인드 마운트를 사용하는 것입니다. 예를 들어 다음을 실행할 수 있습니다.
mount -o bind /dev/null /path/to/log.txt
이것은 하드 링크처럼 작동하지만 다음과 같습니다.
완전한 예를 들면 다음과 같습니다.
bash-4.3# ls -l /var/log/boot.log
-rw-r--r--. 1 root root 7436 Dec 19 10:00 /var/log/boot.log
bash-4.3# mount -o bind /dev/null /var/log/boot.log
bash-4.3# ls -l /var/log/boot.log
crw-rw-rw-. 1 root root 1, 3 Dec 19 09:58 /var/log/boot.log
bash-4.3# echo words words words > /var/log/boot.log
bash-4.3# ls -l /var/log/boot.log
crw-rw-rw-. 1 root root 1, 3 Dec 19 09:58 /var/log/boot.log
nodev
파일 시스템 에 잘있을 수 있습니다 .
응용 프로그램이 log.txt를 처리하는 방법에 크게 좌우됩니다.
응용 프로그램이 기존 파일을 열고 파일에 쓰는 경우 다른 답변에 설명 된 것처럼 / dev / null로 심볼릭 링크하고 다른 곳에서는 심볼릭 링크하고 다른 곳에서는 하드 링크 할 수 있습니다 (하드 링크는 파일 시스템을 교차 할 수 없으므로 ' 이 점에서 많은 부분) / dev / null 장치 노드의 복사본을 만듭니다.
응용 프로그램이 log.txt를 삭제하고 다시 만들면 OTOH가 작동하지 않습니다. 전체 디렉토리를 다른 곳에서 심볼릭 링크하여 쓰기를 다른 파일 시스템으로 리디렉션 할 수는 있지만 디렉토리에있는 다른 것들을 처리해야합니다.
log.txt라는 파일을 만들려는 시도를 버리는 동안 대부분의 작업을 통과하는 사용자 정의 오버레이 파일 시스템을 만들 수 있기를 정말로 원한다고 생각합니다.
chattr +i log.txt
처음으로 응용 프로그램은 더 이상 파일을 삭제하지 않습니다.
명명 된 파이프를 사용하는 하나의 부적절한 방법 :
# create a named pipe
mkfifo /path/to/log.txt
# read contents from the pipe and redirect them to /dev/null
cat /path/to/log.txt > /dev/null
filter 또는 nc over send와 같이 덤프 된 로그로 무엇이든 할 수 있습니다 .
cat
프로세스가 사망하거나 충돌하는 파이프가 가득 찼을 때, 로그인 프로그램이 중단됩니다.
파일을 실제 널 장치로 만드는 것을 고려하십시오. 올바른 파일 형식과 동일한 부 및 주 번호로 mknod로 만든 "log.txt"파일은 널 장치로 작동합니다.
chmod -w log.txt
?