"sudo sh -c"和"su -c"的区别
The difference between "sudo sh -c" and "su -c"
我想在启动时以 root 身份启动一个程序,并将以下行之一添加到 rc.local:
sudo /path/my_prog
sudo sh -c "/path/my_prog"
su -c "/path/my_prog"
这三行有什么区别,哪一行是正确的?
sudo /path/my_prog
将以 sudo 权限执行 /path/my_prog
。
sudo sh -c "/path/my_prog"
将使用 sudo 权限执行 /path/my_prog
(由标志 -c
指定)和 sh。
su -c "/path/my_prog"
将使用您当前的 shell 使用 sudo 权限执行 /path/my_prog
(由标志 -c
指定)。
使用正确的取决于您的用例,所以实际上这取决于您。恕我直言,sudo foo
和 su -c foo
基本相同。
你不需要它们中的任何一个; rc.local
运行 具有 root
权限。正确答案是 运行 你的命令。
/path/my_prog
su
如果您 root
并想切换到其他帐户,
是有意义的。
sudo
如果您 运行 正在使用非特权帐户,并且已被授予切换到另一个帐户的权利(通常,但并非总是 root
),那么
sudo
是有意义的,通常要求能够以交互方式提供您的密码(尽管如果您确实需要可以关闭此功能;显然,您需要在弄乱 security-related 东西之前了解自己在做什么)。
sh -c "command"
只是 运行 command
的一种低效方式。 运行 当您实际需要 shell 功能(例如通配符扩展、重定向等)或 shell 内置函数(例如 cd
.[=24=)时,shell 才有意义]
理想情况下,您可能希望确保 my_prog
运行 在专用的非特权系统帐户上;那么,语法将是
su otheraccount -c /path/my_prog
显然您需要创建 otheraccount
并确保它具有执行此特定任务所需的权限。
su
可选地让您在帐户名前添加一个破折号以使其 运行 登录会话;但是对于服务帐户,这可能没有意义。
我想在启动时以 root 身份启动一个程序,并将以下行之一添加到 rc.local:
sudo /path/my_prog
sudo sh -c "/path/my_prog"
su -c "/path/my_prog"
这三行有什么区别,哪一行是正确的?
sudo /path/my_prog
将以 sudo 权限执行/path/my_prog
。sudo sh -c "/path/my_prog"
将使用 sudo 权限执行/path/my_prog
(由标志-c
指定)和 sh。su -c "/path/my_prog"
将使用您当前的 shell 使用 sudo 权限执行/path/my_prog
(由标志-c
指定)。
使用正确的取决于您的用例,所以实际上这取决于您。恕我直言,sudo foo
和 su -c foo
基本相同。
你不需要它们中的任何一个; rc.local
运行 具有 root
权限。正确答案是 运行 你的命令。
/path/my_prog
su
如果您 root
并想切换到其他帐户,
sudo
如果您 运行 正在使用非特权帐户,并且已被授予切换到另一个帐户的权利(通常,但并非总是 root
),那么
sudo
是有意义的,通常要求能够以交互方式提供您的密码(尽管如果您确实需要可以关闭此功能;显然,您需要在弄乱 security-related 东西之前了解自己在做什么)。
sh -c "command"
只是 运行 command
的一种低效方式。 运行 当您实际需要 shell 功能(例如通配符扩展、重定向等)或 shell 内置函数(例如 cd
.[=24=)时,shell 才有意义]
理想情况下,您可能希望确保 my_prog
运行 在专用的非特权系统帐户上;那么,语法将是
su otheraccount -c /path/my_prog
显然您需要创建 otheraccount
并确保它具有执行此特定任务所需的权限。
su
可选地让您在帐户名前添加一个破折号以使其 运行 登录会话;但是对于服务帐户,这可能没有意义。