truncate -s 0 log.log
( 동일한 동작으로) 시도하면 :>log.log
디스크에 표시된 공간을 사용할 수 있게 되지만 파일 크기( ls -l
)는 여전히 동일합니다( du
더 적게 표시). 내가 이해한 바로는 포인터가 여전히 "오래되었기" 때문에 이런 일이 발생합니다.
이 동작으로 인해 명령을 사용할 수 없습니다 cat ... | grep ...
. CLI에서는 파일이 바이너리라고 말합니다. 따라서 유일한 방법은 less
또는 다른 명령을 사용하는 것입니다.
그렇다면 다른 프로세스에서 쓰기 모드로 열린 파일을 자르고 잘린 후 올바른 파일 크기를 갖도록 하려면 어떻게 해야 합니까? log.log
데이터를 다른 파일로 자르거나 파일 자체를 삭제하지 않고 파일의 전체 데이터를 삭제 해야 합니다.
답변1
당신은 할 수 없습니다. "쓸 다음 블록" 포인터는 쓰기 위해 파일을 연 프로세스의 메모리에 보관됩니다. 외부에서는 접근할 수 없습니다.
일부 프로그램은 신호가 수신되면 이전 로그를 닫고 새 로그를 열도록 작성되었습니다.
프로그램이 블록 1024를 쓰려고 할 때 단순히 파일을 삭제하면 1023개의 0 블록이 생성되고 데이터는 블록 1024에 저장됩니다.