In der Manpage von lstat (2) finden Sie Anregungen zu Fällen, in denen es zu Fehlern kommen kann, die nicht ENOENT entsprechen (Datei existiert nicht).
Das offensichtlichste ist:
Die EACCES-Suchberechtigung
wird für eines der Verzeichnisse im Pfadpräfix von path verweigert .
Sie benötigen also ein Verzeichnis, in dem Sie nicht suchen können.
Ja, Sie können nach einem suchen, der bereits in Ihrem System vorhanden ist (möglicherweise, /var/lib/private
wenn es vorhanden ist?). Sie können jedoch auch selbst einen erstellen, mit dem Äquivalent von:
$ mkdir myprivatedir
$ touch myprivatedir/myunreachablefile
$ chmod 0 myprivatedir
$ ls -l myprivatedir/myunreachablefile
Die lstat (2) -Operation schlägt hier mit EACCES fehl. (Das Entfernen aller Berechtigungen aus dem Verzeichnis stellt dies sicher. Möglicherweise benötigen Sie nicht einmal so viel und das chmod -x
Entfernen der Ausführungsberechtigungen würde ausreichen, da Ausführungsberechtigungen für ein Verzeichnis erforderlich sind, um auf Dateien darunter zuzugreifen.)
Es gibt eine andere kreative Möglichkeit, lstat (2) zum Scheitern zu bringen, indem Sie die Manpage lesen:
ENOTDIR
Eine Komponente des Pfadpräfixes von path ist kein Verzeichnis.
Der Versuch, auf eine Datei wie /etc/passwd/nonexistent
diese zuzugreifen, sollte diesen Fehler auslösen, der sich wiederum von ENOENT ("Keine solche Datei oder Verzeichnis") unterscheidet und möglicherweise Ihren Anforderungen entspricht.
Ein anderer ist:
Der ENAMETOOLONG-
Pfad ist zu lang.
Möglicherweise benötigen Sie einen wirklich langen Namen für diesen Namen. (Ich glaube, 4.096 Byte sind das typische Limit, aber Ihr System / Dateisystem hat möglicherweise einen längeren.)
Letztendlich ist es schwer zu sagen, ob eines davon tatsächlich für Sie nützlich sein wird. Sie möchten etwas, das das Szenario "Datei existiert nicht" nicht auslöst. Während dies normalerweise einen ENOENT-Fehler bedeutet, interpretieren in der Praxis viele Überprüfungen höherer Ebenen Fehler aus lstat (2) einfach als "nicht vorhanden". Zum Beispiel test -e
oder das Äquivalent [ -e ...]
aus der Shell könnte einfach alles oben Genannte als "nicht vorhanden" interpretieren, zumal es keine gute Möglichkeit gibt, eine andere Fehlermeldung zurückzugeben, und wenn kein Fehler zurückgegeben wird, bedeutet dies, dass die Datei vorhanden ist. Das ist mit Sicherheit nicht der Fall.
/etc/shadow