파일을 /dev/null에 대한 하드 링크로 바꾸십시오.

파일을 /dev/null에 대한 하드 링크로 바꾸십시오.

log.txt에 쓰는 애플리케이션을 실행 중입니다. 애플리케이션이 새 버전으로 업데이트되어 지원되는 플러그인이 더 이상 호환되지 않습니다. log.txt에 많은 오류가 기록되도록 강제하고 다른 로그 파일에 기록하는 것을 지원하지 않는 것 같습니다.

다른 로그에 어떻게 쓸 수 있나요?

log.txt를 하드 링크(응용 프로그램에서는 차이를 알 수 없습니다. 그렇죠?) 또는 /dev/null에 대한 하드 링크로 바꾸는 것을 고려했습니다. 내 옵션은 무엇입니까?

답변1

/dev/null에 대한 심볼릭 링크를 만들 수 있으며 루트일 필요는 없습니다.

ln -s /dev/null log.txt

답변2

# cp -a /dev/null log.txt

이렇게 하면 올바른 메이저 및 마이너 개발 번호가 포함된 빈 장치가 복사되어 log.txt다른 장치를 갖게 됩니다 null.

장치는 커널에서 이름으로 식별되지 않고 메이저 번호와 마이너 번호로 식별됩니다. 나는 당신이 어떤 운영 체제를 사용하고 있는지 모르기 때문에 우리가 이미 알고 있는 곳에서 번호를 복사하는 것이 편리하다고 생각합니다. 잘못된 메이저 번호와 마이너 번호를 사용하고 있다면 쓰기를 원하지 않는 디스크나 다른 장치와 같은 다른 장치를 만들었을 가능성이 높습니다.

답변3

여기에 있는 다른 답변이 효과가 있을 수 있습니다. 특히, Symlink 솔루션은 아마도 가장 간단한 솔루션일 것입니다. 나는 주로 완전성을 위해 이것을 제공합니다.

파일이 포함된 파일 시스템이 장치를 지원하지 않는 경우(예: 이 옵션으로 마운트된 경우) mknod(또는)과 관련된 솔루션에 문제가 발생합니다. 물론 파일 시스템 간의 하드 링크는 전혀 작동하지 않습니다.cp -anodev

하드 링크 또는 새 장치 노드 생성에 대한 대안은 바인드 마운트를 사용하는 것입니다. 이를 통해 파일 시스템 트리의 한 부분에서 다른 부분으로 파일이나 디렉터리를 마운트할 수 있습니다. 예를 들어 다음을 실행할 수 있습니다.

mount -o bind /dev/null /path/to/log.txt

이는 하드 링크와 매우 유사하지만 다음과 같습니다.

  • 파일 시스템 전반에서 작동할 수 있습니다(하드 링크와 같은 파일 시스템 inode를 기반으로 하지 않기 때문).
  • 읽기 전용 파일 시스템에서 작동합니다(실제로 파일 시스템을 수정하지 않기 때문에).

완전한 예:

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

답변4

음, 명명된 파이프를 사용하는 우아하지 않은 방법은 다음과 같습니다.

# 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

필터링, 전송 등 덤프된 로그로 거의 모든 작업을 수행할 수 있습니다.CNC.

관련 정보