错误,即使使用 sudo:“dd:无法打开‘/dev/sda1’:权限被拒绝”(dd 输入来自 gzip)

Ken*_*rad 17 gzip sudo development dd 14.04

我的命令不起作用

sudo gzip -dc sda1.image.gz | dd of=/dev/sda1
Run Code Online (Sandbox Code Playgroud)

甚至在我有机会输入密码之前返回以下错误:

dd: failed to open ‘/dev/sda1’: Permission denied
[sudo] password for ken:
Run Code Online (Sandbox Code Playgroud)

我也试过没有“-dc”选项并得到同样的错误。

但是,使用未压缩文件的不带 gzip的 dd 命令确实有效

sudo dd if=sda1.image of=/dev/sda1
Run Code Online (Sandbox Code Playgroud)

似乎 sudo 仅适用于第一个命令,而不是整个命令序列。如果我保持在同一个终端会话中并重复该命令,我不会收到密码提示(我的身份验证似乎仍然存在),但我仍然收到相同的错误(好像我的身份验证不适用于 /dev 写操作)。从 /bin/sh 脚本执行时会发生同样的错误。

我应该如何构建我的命令来将我的图像解压缩到设备?

我在终端窗口中使用 Ubuntu 14.04 LTS。

kos*_*kos 21

sudo在管道的另一边失踪了:

sudo gzip -dc sda1.image.gz | sudo dd of=/dev/sda1
Run Code Online (Sandbox Code Playgroud)

<command> | <command> | [...]命令格式中,需要的管道的每个命令都sudo应该使用 运行sudo,而不仅仅是第一个。

在这种情况下,您可能不需要使用sudoon gzip -dc sda1.image.gz,除非您对该文件没有读取权限:

gzip -dc sda1.image.gz | sudo dd of=/dev/sda1
Run Code Online (Sandbox Code Playgroud)

通常,如果要在管道中运行的所有命令都需要sudo,则必须sudo在每个命令中写入的一种方法是在使用sudo以下命令调用的子shell中运行整个命令:

sudo bash -c '<command> | <command> | [...]'
Run Code Online (Sandbox Code Playgroud)

  • @KenConrad 如果此答案解决了您的问题,请通过单击点赞数下方的标记将其标记为已接受的答案,以便其他用户可能知道此答案对您有用,并且也可能从中受益。 (3认同)