/ dev / null에 대한 하드 링크로 파일 교체 이상 호환되지 않습니다. log.txt에

log.txt에 쓰는 응용 프로그램을 실행 중입니다. 앱이 새 버전으로 업데이트되어 지원되는 플러그인이 더 이상 호환되지 않습니다. log.txt에 엄청난 양의 오류가 발생하고 다른 로그 파일에 쓰는 것을 지원하지 않는 것 같습니다.

다른 로그에 어떻게 쓸 수 있습니까?

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



답변

# cp -a /dev/null log.txt

이것은 당신의 널 장치를 올바른 메이저 및 마이너 dev 번호로 복사하여 log.txt다른 것을 갖습니다 null.

커널에서 장치는 이름으로 알려진 것이 아니라 주요 숫자와 부 숫자로 알려져 있습니다. 나는 당신이 어떤 OS를 가지고 있는지 알지 못하기 때문에 우리가 이미 알고있는 곳에서 숫자를 복사하는 것이 편리하다는 것을 알았습니다. 주 번호와 부 번호를 잘못 사용하면 다른 장치, 아마도 디스크 나 쓰고 싶지 않은 다른 장치를 만들었을 것입니다.


답변

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

ln -s /dev/null log.txt

답변

다른 대답은 아마도 효과가있을 것입니다. 특히 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

답변

응용 프로그램이 log.txt를 처리하는 방법에 크게 좌우됩니다.

응용 프로그램이 기존 파일을 열고 파일에 쓰는 경우 다른 답변에 설명 된 것처럼 / dev / null로 심볼릭 링크하고 다른 곳에서는 심볼릭 링크하고 다른 곳에서는 하드 링크 할 수 있습니다 (하드 링크는 파일 시스템을 교차 할 수 없으므로 ‘ 이 점에서 많은 부분) / dev / null 장치 노드의 복사본을 만듭니다.

응용 프로그램이 log.txt를 삭제하고 다시 만들면 OTOH가 작동하지 않습니다. 전체 디렉토리를 다른 곳에서 심볼릭 링크하여 쓰기를 다른 파일 시스템으로 리디렉션 할 수는 있지만 디렉토리에있는 다른 것들을 처리해야합니다.

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와 같이 덤프 된 로그로 무엇이든 할 수 있습니다 .


답변

파일을 실제 널 장치로 만드는 것을 고려하십시오. 올바른 파일 형식과 동일한 부 및 주 번호로 mknod로 만든 “log.txt”파일은 널 장치로 작동합니다.