Если ваше ядро поддерживает «inotify», и вы загружаете язык сценариев Python, интересной альтернативой для резервного копирования в основном в реальном времени является inosync, сценарий Python, предоставленный автором, Бенедикт Бём из Германии (http: //bb.xnull.de/). Вы изменяете свой примерный файл конфигурации, чтобы указать на исходные и целевые папки и inosync в фоновом режиме, используя rsync, чтобы обновить цель с изменениями в источнике.
Перенаправление вывода выполняется оболочкой, из которой вызывается команда. Итак, разбивая все на биты, вот что происходит *:
shell вызывает sudo echo "options drm_kms_helper poll=N", который выполняет команду sudo с командной строкой echo "options drm_kms_helper poll=N" sudo запрашивает пароль, открывает оболочку суперпользователя и вызывает [ f5], который запускает команду echo, передавая ей "options drm_kms_helper poll=N" эхо, работая с привилегиями root, выводит строку на свой стандартный вывод. Команда echo завершается, завершение оболочки суперпользователя, sudo завершает оболочку, из которой была вызвана команда, собирает вывод и пытается перенаправить ее на /etc/modprobe.d/local.conf, которая может быть записана только root. Он получает ошибку «отклонено разрешение».Для того, чтобы исправить это, см. ответ @shantanu.
(*) - в то время как приведенная выше последовательность помогает понять, почему команда терпит неудачу, на самом деле вещи происходят несколько не в порядке: исходная оболочка замечает перенаправление и пытается открыть файл для записи, прежде чем вызывать команду sudo .... При открытии файла сбой оболочка даже не вызывает команду, которая должна была записываться в файл (благодаря @PanosRontogiannis для указания этого).
Вот быстрый тест:
$ touch ./onlyroot.txt
$ sudo chown root:root ./onlyroot.txt
$ sudo bash -c "whoami | tee who.txt" > onlyroot.txt
bash: onlyroot.txt: Permission denied
В тесте выше whoami | tee who.txt собирался создать файл с именем who.txt, содержащий слово «root». Однако, когда перенаправление вывода не выполняется в вызывающей оболочке, файл «who.txt» также отсутствует, потому что команда не была вызвана.
Добавление к ответу Shantanu:
... Или вы могли бы использовать команду tee следующим образом:
sudo tee /sys/module/drm_kms_helper/parameters/poll <<<10
или если ее вывод команды: [!d3 ]
echo 10 | sudo tee /sys/module/drm_kms_helper/parameters/poll
Подход, о котором я не упоминал здесь, состоит в том, чтобы просто выполнить всю командную строку в своей собственной оболочке. Сама man-страница sudo дает пример такого подхода:
Сделать список использования каталогов в разделе / home. Обратите внимание, что это выполняет команды в под-оболочке, чтобы сделать работу cd и перенаправление файлов.$ sudo sh -c "cd /home ; du -s * | sort -rn > USAGE"
Другой вариант - использовать временный файл. Это полезно в сценарии bash.
temp=$(mktemp)
echo "Hello, world!" > $temp
sudo cp $temp /etc/wherever
sudo dd of=
Чтобы добавить так, как вы хотите:
echo inbytes | sudo dd of=outfile oflag=append conv=notrunc
или воссоздать файл с нуля:
echo inbytes | sudo dd of=outfile
Преимущества: [ ! d4] лучше, чем tee, поскольку перенаправление /dev/null более красивое, чем sh, поскольку явная подоболочка (но неявная для перенаправления) dd имеет множество мощных параметров, например status=progress, чтобы увидеть ход передачи
Работает, потому что sudo переадресовывает команду stdin в команду.