Как очистить ( "обрезать" ) файл на linux, который уже существует и каким-то образом защищен?

У меня есть файл error.log на моем сервере, который мне нужно часто усекать. У меня есть права на rw для файла. Открытие файла в vi > удаление всего содержимого > сохранение (очевидно). Но когда я попробую ниже

cat /dev/null > error.log

Я получаю сообщение

File already exists.

Очевидно, что на сервере существует какая-то конфигурация, чтобы предотвратить случайное переопределение файлов. Может ли кто-нибудь сказать, как я "обрезаю" файл в одной команде?

Ответ 1

У вас есть опция noclobber. Ошибка выглядит как csh, поэтому вы бы сделали:

cat /dev/null >! file

Если я ошибаюсь и вы используете bash, вы должны сделать:

cat /dev/null >| file

в bash, вы также можете сократить это:

>| file

Ответ 2

Вы также можете использовать функцию truncate

$truncate -s0 yourfile

Если разрешение отклонено, используйте sudo

$sudo truncate -s0 yourfile

Справка/руководство: человек усекает

протестирован на ubuntu Linux

Ответ 3

Этого будет достаточно, чтобы установить размер файла 0:

> error.log

Ответ 4

кредит для моего старшего коллеги за это:

:> filename

Это не приведет к поломке файлов журнала, поэтому вы можете даже использовать его в syslog, например.

Ответ 5

false | tee fileToTruncate

может работать также

Ответ 6

Поскольку sudo не будет работать с перенаправлением >, мне нравится команда tee для этой цели

echo "" | sudo tee fileName

Ответ 7

Любой может попробовать эту команду, чтобы обрезать любой файл в системе linux

Это наверняка будет работать в любом формате:

truncate -s 0 file.txt

Ответ 8

Я делаю так: cp /dev/null file

Ответ 9

Вы также можете попробовать:

echo -n > /my/file