it-swarm.com.ru

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

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

cat /dev/null > error.log

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

File already exists.

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

107
Sumeet Pareek

У вас установлена ​​опция noclobber. Ошибка выглядит так, как будто она из csh, так что вы должны сделать:

cat /dev/null >! file

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

cat /dev/null >| file

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

>| file
154
R Samuel Klatchko

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

$truncate -s0 yourfile

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

$Sudo truncate -s0 yourfile

Помощь/Руководство: человек усекать

проверено на Ubuntu Linux

70
risnandar

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

> error.log
48
SIFE

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

:> filename

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

7
petermolnar

false | тройник fileToTruncate

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

4
Dodger Web

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

echo "" | Sudo tee fileName
2
sakhunzai

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

Это, безусловно, будет работать в любом формате:

truncate -s 0 file.txt
0
user3301460