我想检查一个文件是否像这样存在
[ -f /path/to/file/ ]
但是,我以普通用户的身份运行此命令,并且该文件由root拥有。 我怎样才能使用sudo来实现这一点。
sudo [ -f /path/to/file/ ]不起作用。
你所描述的应该可以正常工作 – 只要你使用的是绝对path,而-f (“File exists and is a regular file”)就是你想要执行的testing。
我在你的问题中看到了一个/你在发布的内容 – 你在testing一个目录吗? 那应该是-d ,或者简单的-e (“这个名字存在的东西 – 不pipetypes是什么”)
另外请注意,除非一路上的东西是不可读的,否则test ( [ )应该能够告诉你一个由root拥有的文件是否存在(例如[ -f /root/.ssh/known_hosts ]可能会失败,因为/ root / .ssh目录不是(或者至less不应该是 )普通用户可读的, [ -f /etc/crontab ]应该成功)。
if sudo test -f "/path/to/file"; then echo "FILE EXISTS" else echo "FILE DOESN'T EXIST" fi
testing手册页
要完成的事情,另一方面,如果你想从根检查,如果一个文件或目录是可读的某个用户,你可以使用
if sudo -u username test -f "/path/to/file"; then echo "FILE EXISTS" else echo "FILE DOESN'T EXIST" fi
添加到其他答案,区分testing或sudo身份validation失败可以通过首先运行sudo true来完成。 我所知道的大多数sudo实现在短时间内不需要重新validation。
例如:
if sudo true; then if sudo test -f "/path/to/file"; then echo "FILE EXISTS" else echo "FILE DOESN'T EXIST" fi else echo "SUDO AUTHENTICATION FAILED" fi