Вы должны понимать файловые системы Unix, прежде чем сможете ответить на этот вопрос.
Единственное, что делает rm
, это стирает имя файла, фактически указатель с вашей структуры каталогов на блоки диска.
Когда ты бежишь
ping localhost > /tmp/test.log
rm /tmp/test.log
перенаправление не прекращается. Команда продолжает выполняться, и данные продолжают накапливаться в вашей области диска. У вас просто нет права доступа к этим данным, потому что вы стерли их имя.
Вы можете создать другой, совершенно не связанный файл с именем /tmp/test.log
.
Как вы заметили, пытаясь усечь файл, вы избавляетесь от данных, которые были там раньше, но внутренний дескриптор файла знает позицию в файле, на которую он указывает, и записывает после конца файла расширение файла. Отсюда ведущие нули.
Если вы хотите "сбросить" перенаправление, вам нужно убить программу ping
, стереть или обрезать файл /tmp/test.log
, а затем перезапустить программу ping
.
Вы также можете использовать такую программу, как rotatelogs
ping localhost | rotatelogs ping.out.%Y%m%d.%H%M 600
вращать файл журнала либо на основе истекшего времени или размера файла.