Lösung 1:
if sudo test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
Manpage testen
Um die Sache abzuschließen, können Sie auf der anderen Seite, wenn Sie von root aus überprüfen möchten, ob eine Datei oder ein Verzeichnis für einen bestimmten Benutzer lesbar ist,
verwendenif sudo -u username test -f "/path/to/file"; then
echo "FILE EXISTS"
else
echo "FILE DOESN'T EXIST"
fi
Lösung 2:
Was Sie beschreiben, sollte gut funktionieren - solange Sie absolute Pfade und -f
verwenden ("Datei existiert und ist eine reguläre Datei") ist eigentlich der Test, den Sie durchführen möchten.
Ich sehe eine nachgestellte /
in dem, was Sie in Ihrer Frage gepostet haben - Testen Sie für ein Verzeichnis? Das sollte -d
sein , oder einfach -e
("Es existiert etwas mit diesem Namen - unabhängig vom Typ")
Beachten Sie auch, dass test
nicht lesbar ist, es sei denn, etwas auf dem Weg dorthin ist nicht lesbar ([
) sollte Ihnen mitteilen können, ob eine Datei, die root gehört, existiert oder nicht (z. B. [ -f /root/.ssh/known_hosts ]
wird wahrscheinlich fehlschlagen, weil das Verzeichnis /root/.ssh es nicht ist (oder zumindest nicht sein sollte). ) für einen normalen Benutzer lesbar. [ -f /etc/crontab ]
sollte gelingen).
Lösung 3:
Zusätzlich zu den anderen Antworten könnte die Unterscheidung zwischen dem Fehlschlagen der Test- oder Sudo-Authentifizierung erfolgen, indem zuerst sudo true
ausgeführt wird . Die meisten mir bekannten sudo-Implementierungen erfordern innerhalb kurzer Zeit keine erneute Authentifizierung.
Zum Beispiel:
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