Ich möchte überprüfen, ob eine Datei wie diese existiert
[ -f /path/to/file/ ]
Ich führe diesen Befehl jedoch als normaler Benutzer aus und die Datei gehört root. Wie kann ich sudo verwenden, um dies zu erreichen?
sudo [ -f /path/to/file/ ]
funktioniert nicht.
Antworten:
Was Sie beschreiben, sollte gut funktionieren - solange Sie absolute Pfade verwenden und
-f
("Datei existiert und ist eine reguläre Datei"), ist wirklich der Test, den Sie durchführen möchten.Ich sehe ein Trailing
/
in dem, was Sie in Ihrer Frage gepostet haben - Testen Sie für ein Verzeichnis? Das sollte sein-d
, oder einfach-e
("Etwas existiert mit diesem Namen - unabhängig vom Typ")Beachten Sie auch, dass
test
([
) Ihnen mitteilen sollte, ob eine Datei im Besitz von root ist oder nicht , es sei denn, etwas auf dem Weg ist nicht lesbar ( ) (z. B.[ -f /root/.ssh/known_hosts ]
wird wahrscheinlich fehlschlagen, weil das Verzeichnis /root/.ssh nicht vorhanden ist (oder zumindest nicht sollte) kann von einem normalen Benutzer nicht gelesen werden.[ -f /etc/crontab ]
Sollte erfolgreich sein.quelle
sudo
Befehl fehlschlägt (falsches Kennwort, in / etc / sudoers nicht zulässig usw.), wird dasselbe Ergebnis erzielt, als ob die Datei nicht vorhanden wäre.sudo
Teil der Arbeit :)Testmanpage
Um die Dinge zu erledigen, auf der anderen Seite, wenn Sie von root aus prüfen möchten, ob eine Datei oder ein Verzeichnis für einen bestimmten Benutzer lesbar ist, den Sie verwenden können
quelle
Wenn Sie zu den anderen Antworten hinzufügen, können Sie zunächst feststellen, ob die Test- oder die Sudo-Authentifizierung fehlgeschlagen ist
sudo true
. Die meisten mir bekannten Sudo-Implementierungen erfordern innerhalb kurzer Zeit keine erneute Authentifizierung.Beispielsweise:
quelle