执行此命令时:
sudo -u www-data grep -a 't=' /var/www/temp/w1_slave | cut -f2 -d= > /var/www/temp/temp.txt
我有错误:
拒绝权限
我做错了什么?用户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而不在本地复制该文件吗?
答案 0 :(得分:0)
执行sudo
时,它仅与第一个命令相关,而不是与管道(|
)之后的第二个命令相同,与上一个重定向(>
)没有相同t有正确的凭据来创建文件。
如果你需要两个命令(包括重定向)来运行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。