파일을 올바르게 비우는 방법

파일을 올바르게 비우는 방법

좋습니다. 파일을 비우려고 합니다. 지속적으로 기록되는 텍스트 로그 파일입니다. 내 ls -lh는 3GB라고 말합니다.

난 달린다

 > file.log

내 ls -lh는 여전히 3GB라고 말합니다.

그러나 이 파일이 포함된 폴더의 크기는 3GB 미만입니다. 이상하게도 줄을 세어보니 비어 있지 않고 vim(너무 큼)으로 열 수 없습니다.

나는 관리자 액세스 권한이 없지만 파일의 소유자입니다.

무슨 일이 일어나고 있는지 확인하기 위해 첫 번째 줄만 사용하여 새 파일을 만들려고했습니다.

head -1 file.log > first_line.txt

그리고 first_line.txt는 3GB입니다. 이것은 참으로 이상한 행동이다.

질문 1: 첫 번째 명령이 파일을 비우지 않는 이유는 무엇입니까?

질문 2: 파일을 삭제하지 않고 비울 수 있는 방법은 무엇입니까?

감사해요,

주석 후 편집: 파일이 다른 프로세스에 의해 지속적으로 열리고 기록되고 있습니다.

안타깝게도 해당 프로세스를 방해할 수 없으므로 일시적으로 종료하거나 다시 시작할 수 없습니다.

답변1

귀하의 파일은 프로세스에 의해 보관되어 있으므로 삭제할 수 없습니다.

lsof file.log어떤 프로세스가 그것에 쓰고 있는지 알아내는 데 사용됩니다 .

그 다음에

mv file.log old.file.log

프로세스를 다시 시작하십시오. (이는 프로세스에 따라 다릅니다).

다음으로 을(를) 삭제할 수 있습니다 old.file.log.

파일 ID가 목록에 있으면 /etc/logrotate.d/*logrotate 명령을 실행할 수 있습니다.

답변2

파일을 (거의) 비우려면 다음 명령을 사용하십시오.

echo "" > file.log

또는 OS에 해당 기능이 있는 경우

truncate file.log --size 0

0바이트로 잘립니다.

파일에 줄 바꿈이 없으면 전체 파일 길이가 1줄이므로 3GB 파일을 설명할 수 있습니다.

다음과 같은 명령을 사용하여 파일 샘플을 가져올 수 있습니다.

dd if=file.log of=firstpart.txt count=1 bs=200

파일의 처음 200바이트를 차지합니다. (더 필요한 경우 "bs" 매개변수를 4096까지 늘리고, 그 이상이 필요한 경우 count 매개변수를 사용하십시오. 즉, 8192개의 블록을 얻으려면 count=2 bs=4096)

@Archemar 조언은 좋지만 귀하의 질문에 대한 답변이 될지 확신할 수 없습니다.

관련 정보