如何检查运行命令是否需要“sudo”权限?

如何检查运行命令是否需要“sudo”权限?

有没有一种方法可以轻松确定我是否可以读取或写入给定文件,或者是否需要使用“sudo”来执行此操作?不必要地以 sudo 方式运行命令意味着这些文件是以 root 用户作为所有者创建的,这是不可取的。

就像是

is_readable /path/to/file
if [[ $? == 0 ]]; then
    do_command /path/to/file;
else
    sudo do_command /path/to/file;
fi

答案1

您可以尝试实用程序-w的切换test

[ -w /path/to/file ] && do_command /path/to/file || sudo do_command /path/to/file

或者长版本:

if [ -w /path/to/file ]; then
  do_command /path/to/file 
else
  sudo do_command /path/to/file
fi

来自联机帮助页

-w FILE
              FILE exists and write permission is granted

答案2

is_readable /path/to/file拼写为test -r /path/to/file[ -r /path/to/file ][[ -r /path/to/file ]]。看使用单括号或双括号 - bash了解它们有何不同。is_writable使用-w.

无法访问文件并不是“需要 sudo”的一个很好的指标。您可能应该以不同的用户或组运行,而不是以 root 运行。可能在特定系统上,获得 root 访问权限的方法不是运行,sudo而是运行其他一些机制(sucalife、 …)。在具有已知配置的已知系统上测试对文件的访问是可以的。如果您分发执行此操作的脚本,请记住这只是一种启发式测试,而不是可靠的测试,并让用户轻松推翻您的决定。

请注意,仅仅因为文件被测试为可读并不意味着您实际上能够读取它。同时该文件的权限可能已更改。有时文件权限所说的内容与访问检查实际执行的内容之间存在差异:具有本地文件系统无法理解的奇特属性的远程文件系统、SELinux 等安全框架等。

相关内容