Вы должны понимать файловые системы 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
вращать файл журнала либо на основе истекшего времени или размера файла.