如何使用 sudo 检查文件是否存在?

ckl*_*orn 15 linux bash sudo

我想检查一个文件是否存在

[ -f /path/to/file/ ]

但是,我以普通用户身份运行此命令,并且该文件归 root 所有。我如何使用 sudo 来完成此操作。

sudo [ -f /path/to/file/ ] 不起作用。

Luc*_*one 19

if sudo test -f "/path/to/file"; then
    echo "FILE EXISTS"
else
    echo "FILE DOESN'T EXIST"
fi
Run Code Online (Sandbox Code Playgroud)

测试手册页

为了完成事情,在另一方面,如果您想从 root 检查文件或目录是否对某个用户可读,您可以使用

if sudo -u username test -f "/path/to/file"; then
    echo "FILE EXISTS"
else
    echo "FILE DOESN'T EXIST"
fi
Run Code Online (Sandbox Code Playgroud)


vor*_*aq7 12

您所描述的应该可以正常工作 - 只要您使用绝对路径,并且-f(“文件存在并且是常规文件”)确实是您想要执行的测试。

我看到/您在问题中发布的内容的结尾- 您是否正在测试目录?那应该是-d,或者简单地说-e(“存在具有该名称的东西 - 无论类型如何”)

另请注意,除非沿途的某些内容不可读test( [) 应该能够告诉您 root 拥有的文件是否存在(例如[ -f /root/.ssh/known_hosts ]可能会失败,因为 /root/.ssh 目录不是(或至少应该'不是) 普通用户可读。 [ -f /etc/crontab ]应该成功)。

  • 有一个可能的问题:如果 `sudo` 命令失败(密码错误,在 /etc/sudoers 中不允许,等等),它会给出与文件不存在相同的结果。 (5认同)