Как правильно очистить файл

Как правильно очистить файл

Хорошо, я пытаюсь очистить файл. Это текстовый файл журнала, который пишется непрерывно. Мой ls -lh говорит, что он 3 ГБ

я бегу

 > file.log

Мой ls -lh говорит, что все еще 3 ГБ

Однако размер папки, содержащей этот файл, на 3 ГБ меньше. Достаточно странно, подсчет строк говорит, что она не пустая, и я не могу открыть ее в vim (слишком большая).

У меня нет прав администратора, однако я являюсь владельцем файла.

Я попробовал создать новый файл только с первой строкой, чтобы посмотреть, что происходит.

head -1 file.log > first_line.txt

А first_line.txt — 3 ГБ. Это действительно странное поведение.

Вопрос 1: Почему моя первая команда не очищает файл?

Вопрос 2: Как очистить файл, не удаляя его?

Спасибо,

EDIT после комментариев: файл постоянно открывается и записывается другими процессами.

К сожалению, я не могу вмешаться в эти процессы, поэтому не могу временно остановить или перезапустить их.

решение1

ваш файл удерживается процессом, вы не можете его удалить.

используйте lsof file.log, чтобы узнать, какой процесс в него пишет.

затем

mv file.log old.file.log

перезапустите процесс. (это зависит от процесса).

далее вы сможете удалить old.file.log.

Если ваш идентификатор файла указан в, /etc/logrotate.d/*вы можете выполнить команду logrotate.

решение2

Чтобы (почти) очистить файл, используйте команду

echo "" > file.log

Или, если в вашей ОС он есть,

truncate file.log --size 0

Усечет его до 0 байт.

Если в файле нет символов перевода строки, возможно, весь файл состоит из 1 строки, что объясняет размер файла в 3 гигабайта.

Вы можете получить образец файла, используя команду типа

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

Что займет первые 200 байт файла. (Если вам нужно больше, увеличьте параметр "bs" до 4096, если вам нужно больше, используйте параметр count, т.е. чтобы получить 8192 блока, count=2 bs=4096)

Совет @Archemar хорош, но я не уверен, что он отвечает на ваши вопросы.

Связанный контент