4

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

я бегу

 > file.log

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

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

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

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

head -1 file.log > first_line.txt

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

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

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

Спасибо,

РЕДАКТИРОВАТЬ после комментариев: файл постоянно открыт и записывается другими процессами.

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

2 ответа2

3

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

используйте 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)

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .