Wie kann ich mit sudo prüfen, ob eine Datei existiert?

13

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.

ckliborn
quelle
2
Es funktioniert auf meinem System. Was sind die Symptome ? Möchten Sie wirklich -f und nicht -e verwenden?
15.

Antworten:

11

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.

voretaq7
quelle
4
Es gibt ein mögliches Problem: Wenn der sudoBefehl fehlschlägt (falsches Kennwort, in / etc / sudoers nicht zulässig usw.), wird dasselbe Ergebnis erzielt, als ob die Datei nicht vorhanden wäre.
Gordon Davisson
1
@ Gordon - wahr: Meine Antwort basiert auf dem sudoTeil der Arbeit :)
voretaq7
13
if sudo test -f "/path/to/file"; then
    echo "FILE EXISTS"
else
    echo "FILE DOESN'T EXIST"
fi

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

if sudo -u username test -f "/path/to/file"; then
    echo "FILE EXISTS"
else
    echo "FILE DOESN'T EXIST"
fi
Luca Borrione
quelle
Die Antwort von Luca Borrione funktionierte perfekt für mich. Ich musste die Existenz von Dateien testen, die sich tief in Verzeichnissen befanden, die nur von root gelesen werden konnten.
Wandheizung
1

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:

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
Robrecht Dewaele
quelle