Ошибка, даже с sudo: «dd: не удалось открыть '/ dev / sda1': разрешение отклонено» (ввод dd передан из gzip)

14

Моя команда, которая не работает :

sudo gzip -dc sda1.image.gz | dd of=/dev/sda1

возвращает следующую ошибку еще до того, как я смог ввести свой пароль:

dd: failed to open ‘/dev/sda1’: Permission denied
[sudo] password for ken:

Я также пытался без параметров "-dc" и получаю ту же ошибку.

Однако команда dd без gzip, использующая несжатый файл, работает :

sudo dd if=sda1.image of=/dev/sda1

Кажется, что sudo применяется только к первой команде, а не ко всей последовательности команд. Если я остаюсь в том же сеансе терминала и повторяю команду, я не получаю запрос пароля (моя аутентификация, кажется, сохраняется), и все же я все еще получаю ту же ошибку (как будто моя аутентификация не применяется к операции записи / dev ). Та же ошибка возникает при выполнении из скрипта / bin / sh.

Как мне составить команду (команды), чтобы распаковать мое изображение на устройство?

Я использую Ubuntu 14.04 LTS в окне терминала.

Кен Конрад
источник

Ответы:

17

Вы пропали sudoна другой стороне конвейера:

sudo gzip -dc sda1.image.gz | sudo dd of=/dev/sda1

В <command> | <command> | [...]формате команд каждая команда конвейера, которая требует, sudoдолжна выполняться с использованием sudo, а не только первой.

В этом случае вам может не понадобиться использовать sudoon gzip -dc sda1.image.gz, если у вас нет разрешения на чтение файла:

gzip -dc sda1.image.gz | sudo dd of=/dev/sda1

В общем случае, если для всех команд, которые должны быть запущены в конвейере sudo, необходимо написать sudoв каждой команде один способ - выполнить всю команду в подоболочке, вызванной с помощью sudo:

sudo bash -c '<command> | <command> | [...]'
кос
источник
3
@KenConrad Если этот ответ решил вашу проблему, пометьте его как принятый, щелкнув по значку под счетчиком голосов, чтобы другие пользователи могли знать, что этот ответ сработал для вас, и, возможно, получить от него прибыль.
Кос