Освободите содержание файла

Просто обновление sshd обычно не будет заменять ключ хоста. Так да просто обновляют его, и это должно быть прекрасным.

Примечание: Вам обычно не будет нужно это, но если Вы хотите быть на безопасной стороне, можно создать резервное копирование ключей хоста ssh и скопировать их назад после обновления системы. Обычно необходимо было бы скопировать /etc/ssh/ssh_host*. Если что-то пошло не так, как надо, можно восстановить файлы позже.

228
30.08.2013, 08:13
3 ответа

На самом деле, вторая форма touch filename ничего не удаляет из файла - он только создает пустой файл, если Вы не существовали или обновляете измененную в последний раз дату существующего файла.

И третье filename < /dev/null попытки выполнить имя файла с /dev/null как введено.

cp /dev/null filename работы.

Что касается эффективного, самое эффективное было бы truncate -s 0 filename; посмотрите здесь: http://linux.die.net/man/1/truncate.

Иначе, cp /dev/null filename или > filename оба прекрасны. Они оба открывают и затем закрывают файл, с помощью усеченной-на-открытом установки. cp также открывается /dev/null, таким образом, это делает его незначительно медленнее.

С другой стороны, truncate вероятно, было бы медленнее, чем > filename когда выполнено из сценария начиная с выполнения усеченной команды требует, чтобы система открыла исполняемый файл, загрузила его, и выполнение он.

302
27.01.2020, 19:28
  • 1
    Итак, почему Вы говорите это truncate является самым эффективным? –  Stéphane Chazelas 30.08.2013, 09:24
  • 2
    Усеченная операция использует ftruncate () или усеченный () системный вызов, который не потрудился открывать файл. Это также избегает завершения () системный вызов то CP и > filename методы должны звонить. –  ash 30.08.2013, 09:26
  • 3
    На самом деле, она (по крайней мере, GNU один) делает open+ftruncate+close (в дополнение ко многим системным вызовам, которые она делает, чтобы загрузить и инициализировать себя), как так или иначе, она должна была бы создать файл, если бы она не существовала и truncate(2) не делает этого. –  Stéphane Chazelas 30.08.2013, 11:01
  • 4
    Если мы используем touch filename, inode останется тем же (если был файл прежде)? –  pMan 30.08.2013, 11:30
  • 5
    @pMan да, можно попробовать его и свериться ls -i –  terdon♦ 30.08.2013, 16:02

Другой вариант:

echo -n > filename

Из справочной страницы echo :

-n Не печатать завершающий символ новой строки.

43
27.01.2020, 19:28

Существует встроенная команда " :", которая доступна в sh,csh,bash и других возможностях, которую можно легко использовать с оператором перенаправления вывода >обрезать файл:

#!/usr/bin/env bash
:> filename

Что мне нравится в этом, так это то, что ему не нужны никакие внешние команды, такие как «эхо» и т. д.

Одно большое преимущество усечения файлов вместо их удаления/восстановления заключается в том, что приложения, которые работают с этим файлом (, например. кто-то делает tail -f filenameили программное обеспечение для мониторинга,... )не нужно заново открывать его. Они просто могут продолжать использовать файловый дескриптор и получать все новые данные.

7
27.01.2020, 19:28

Теги

Похожие вопросы