有没有一种方法可以轻松确定我是否可以读取或写入给定文件,或者是否需要使用“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
而是运行其他一些机制(su
、calife
、 …)。在具有已知配置的已知系统上测试对文件的访问是可以的。如果您分发执行此操作的脚本,请记住这只是一种启发式测试,而不是可靠的测试,并让用户轻松推翻您的决定。
请注意,仅仅因为文件被测试为可读并不意味着您实际上能够读取它。同时该文件的权限可能已更改。有时文件权限所说的内容与访问检查实际执行的内容之间存在差异:具有本地文件系统无法理解的奇特属性的远程文件系统、SELinux 等安全框架等。