У меня на сервере есть файл error.log, который мне нужно часто обрезать. У меня есть права доступа к файлу. Открытие файла в vi> удаление всего содержимого> сохранение работает (очевидно). Но когда я попробую следующее
cat /dev/null > error.log
Я получаю сообщение
File already exists.
Очевидно, что на сервере есть какая-то конфигурация, чтобы предотвратить случайное переопределение файлов. Кто-нибудь может сказать, как «обрезать» файл с помощью одной команды?
linux
file
command-line
Сумит Парик
источник
источник
Ответы:
У вас есть
noclobber
набор опций. Ошибка выглядит так, как будто она из csh, поэтому вы должны сделать:Если я ошибаюсь и вы используете bash, вам следует сделать:
в bash вы также можете сократить это до:
источник
File exists
ошибку, а bash дает совсем другуюcannot overwrite existing file
ошибку.>file
ни одного заголовка, не работает.> file
и>| file
?noclobber
параметр, попытка перенаправления на существующий файл не удалась. Чтобы переопределить конкретное перенаправление, оставив включенным noclobber, вы можете использовать>|
Вы также можете использовать функцию truncate
если в разрешении отказано, используйте sudo
Справка / Руководство: man truncate
протестировано на Ubuntu Linux
источник
Этого будет достаточно, чтобы установить размер файла равным 0:
источник
заслуга моего старшего коллеги в этом:
Это не повредит файлы журнала, поэтому вы даже можете использовать его, например, в системном журнале.
источник
:
- это неэффективная команда (почти комментарий), а затем>
перенаправление, как обычно, таким образом, это просто перенаправляет отсутствие вывода команды, которая ничего не делает в файл. Если noclobber включен, вам понадобится:>| filename
(bash) (и я предполагаю, что:>! filename
в csh, если csh есть:
).может также работать
источник
dd
выводить что-либо было бы лучше, чем просто читаемоеfalse
?Поскольку sudo не работает с перенаправлением
>
, мне нравитсяtee
команда для этой целиисточник
error.log
, если он уже доступен для записи, нет необходимости в sudo. Я думаю, что другая проблема заключается в том, что вы передаете команду в виде строкового аргументаsh
, я не знаю, как это обрабатывается внутри, но это еще один уровень сложности / добавленного перенаправленияecho ""
что добавится новая строка. Вы можете использоватьecho -n ""
для подавления новой строкиЛюбой может попробовать эту команду, чтобы обрезать любой файл в системе Linux.
Это обязательно будет работать в любом формате:
источник
Мне это нравится:
cp /dev/null file
источник
Вы также можете попробовать:
echo -n > /my/file
источник
noclobber
и спросите себя, имеет ли вообще смысл ваш ответ.