为什么在将 sudo 与管道一起使用时我的权限被拒绝?
Why I've got Permission Denied when using sudo with pipe?
当我执行这条命令时:
sudo -u www-data grep -a 't=' /var/www/temp/w1_slave | cut -f2 -d= > /var/www/temp/temp.txt
我有错误:
Permission Denied
我做错了什么?用户 www-data
是 /var/www/temp/temp.txt
的所有者,此用户也是 /var/www/temp/w1_slave
和整个 /var/www
目录的所有者。
命令:
sudo -u www-data grep -a 't=' /var/www/temp/w1_slave | cut -f2 -d=
工作正常,我也可以修改文件/var/www/temp/temp.txt
。
这里是ls -lh
:
-rw-r--r-- 1 www-data www-data 5 paź 21 20:46 temp.txt
-rw-r--r-- 1 www-data www-data 4,0K paź 21 21:01 w1_slave
我正在尝试通过以下方式复制远程文件:
scp osmc@10.100.10.10:/sys/bus/w1/devices/28-000006140194/w1_slave /var/www/temp
并将输出存储到另一个文件中该文件的变量中。我可以在不在本地复制该文件的情况下从远程服务器执行 grep 吗?
当你做sudo
时,它只涉及第一个命令,而不是管道后的第二个命令(|
),与最后一个重定向(>
)的方式相同没有创建文件的正确凭据。
如果您需要两个命令(包括重定向)到 运行 并具有 sudo 访问权限,那么您必须用 shell 包装它们,例如:
sudo -u www-data sh -c "grep -a 't=' /var/www/temp/w1_slave | cut -f2 -d= > /var/www/temp/temp.txt"
或使用sudo tee
:
sudo -u www-data grep -a 't=' /var/www/temp/w1_slave | cut -f2 -d= | sudo tee /var/www/temp/temp.txt
这会将内容添加到文件中(同时打印出来)。如果您不想打印它,请将标准输出重定向到 > /dev/null
.
到 grep
远程文件而不复制(scp
复制),请改用 ssh
。只需 运行 与您通常 运行 相同的命令,但以 ssh user@host
为前缀,然后将其分配给变量,例如:
FOO=$(ssh osmc@10.100.10.10 "command")
这假定您已正确设置 SSH 密钥,因此它不会要求您输入密码。
要查看是否可行,首先通过以下方式手动检查命令:
ssh osmc@10.100.10.10 "whoami"
ssh osmc@10.100.10.10 "sudo -u www-data whoami"
为了调试,将 -x
添加到您的 shebang 或将多个 -v
添加到您的 ssh。
当我执行这条命令时:
sudo -u www-data grep -a 't=' /var/www/temp/w1_slave | cut -f2 -d= > /var/www/temp/temp.txt
我有错误:
Permission Denied
我做错了什么?用户 www-data
是 /var/www/temp/temp.txt
的所有者,此用户也是 /var/www/temp/w1_slave
和整个 /var/www
目录的所有者。
命令:
sudo -u www-data grep -a 't=' /var/www/temp/w1_slave | cut -f2 -d=
工作正常,我也可以修改文件/var/www/temp/temp.txt
。
这里是ls -lh
:
-rw-r--r-- 1 www-data www-data 5 paź 21 20:46 temp.txt
-rw-r--r-- 1 www-data www-data 4,0K paź 21 21:01 w1_slave
我正在尝试通过以下方式复制远程文件:
scp osmc@10.100.10.10:/sys/bus/w1/devices/28-000006140194/w1_slave /var/www/temp
并将输出存储到另一个文件中该文件的变量中。我可以在不在本地复制该文件的情况下从远程服务器执行 grep 吗?
当你做sudo
时,它只涉及第一个命令,而不是管道后的第二个命令(|
),与最后一个重定向(>
)的方式相同没有创建文件的正确凭据。
如果您需要两个命令(包括重定向)到 运行 并具有 sudo 访问权限,那么您必须用 shell 包装它们,例如:
sudo -u www-data sh -c "grep -a 't=' /var/www/temp/w1_slave | cut -f2 -d= > /var/www/temp/temp.txt"
或使用sudo tee
:
sudo -u www-data grep -a 't=' /var/www/temp/w1_slave | cut -f2 -d= | sudo tee /var/www/temp/temp.txt
这会将内容添加到文件中(同时打印出来)。如果您不想打印它,请将标准输出重定向到 > /dev/null
.
到 grep
远程文件而不复制(scp
复制),请改用 ssh
。只需 运行 与您通常 运行 相同的命令,但以 ssh user@host
为前缀,然后将其分配给变量,例如:
FOO=$(ssh osmc@10.100.10.10 "command")
这假定您已正确设置 SSH 密钥,因此它不会要求您输入密码。
要查看是否可行,首先通过以下方式手动检查命令:
ssh osmc@10.100.10.10 "whoami"
ssh osmc@10.100.10.10 "sudo -u www-data whoami"
为了调试,将 -x
添加到您的 shebang 或将多个 -v
添加到您的 ssh。