Bei der Suche nach systemaufgelösten Diensten nach der kürzlich bekannt gewordenen Sicherheitsanfälligkeit stellte ich ein sehr merkwürdiges Verhalten des Befehls find fest.
root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz
Der Befehl gibt 0 oder zwei Zeilen als Ausgabe für den ersten Lauf zurück. Aber wenn ich den Befehl das zweite Mal ausführe, erhalte ich:
root@localhost:/# find . -name "*systemd-resolved*"
./usr/share/man/man8/systemd-resolved.service.8.gz
./usr/share/man/man8/systemd-resolved.8.gz
./lib/systemd/systemd-resolved
./lib/systemd/system/systemd-resolved.service.d
./lib/systemd/system/systemd-resolved.service
Dies bedeutet, dass "find" beim ersten Mal nicht wirklich alles findet. Auch das passiert nur einmal. Wenn Sie den Befehl das nächste Mal ausführen, wird die korrekte Ausgabe angezeigt. Ich habe dies auf einigen anderen Systemen mit Debian 8 (jessie) überprüft. Bei Kernel 4.9 und höher tritt dieses Problem immer auf, bei Kernel 3.16-Systemen jedoch nicht.
Nach dem Neustart des Systems geschieht dies alles erneut. Das Verhalten ist jedoch für jedes einzelne System gleich. Das bedeutet, dass, wenn das Testen auf einem bestimmten System (falsch) zwei Ausgabezeilen für den ersten Durchlauf und die korrekte Ausgabe für den zweiten Durchlauf zurückgibt, die erste Ausführung des Befehls nach dem Neustart des Systems erneut zwei Zeilen ausgibt. Daher zeigen die Systeme nach jedem Neustart das gleiche Verhalten (gemäß meinen Tests). Die Dateidetails lauten wie folgt:
-rw-r--r-- 1 root root ./usr/share/man/man8/systemd-resolved.service.8.gz
lrwxrwxrwx 1 root root ./usr/share/man/man8/systemd-resolved.8.gz -> systemd-resolved.service.8.gz
-rwxr-xr-x 1 root root ./lib/systemd/systemd-resolved
drwxr-xr-x 2 root root ./lib/systemd/system/systemd-resolved.service.d
-rw-r--r-- 1 root root ./lib/systemd/system/systemd-resolved.service
BEARBEITEN: An alle, die das Problem vorschlagen, möglicherweise im Zusammenhang mit diesem speziellen Fall für diese speziellen Dateien: " System-gelöst " ist nur ein Beispiel. Dies passiert auch bei der Suche nach anderen Keywords. Dies ist ein weiteres Beispiel, das beim ersten Durchlauf falsche Ergebnisse liefert:
root@localhost:/# find . -name "*apache*"
Ist niemand hier in der Lage, dieses Problem auf einem Debian 8 mit dem neuesten Kernel aus dem Backport-Repository zu überprüfen?
strace
? Auf welchem Betriebssystem haben Sie das fehlerhafte Verhalten beobachtet? Was meinst du mit "liefert 0 oder zwei Ergebnisse wie oben"? Null oder zwei Ausgabezeilen oder Beendigungscode 0 + zwei Zeilen? Kommt es erneut vor, nachdem eine neue Shell gestartet oder neu gestartet wurde? Es kann relevant sein, dass der erste Aufruf nur Dateien zurückgibt, während der zweite Dateien und Verzeichnisse zurückgibt./lib/systemd
montiert? Um was für ein Dateisystem handelt es sich? Wenn es ein separaten ist Mount - Punkt, welche Zeit war es angebracht?Antworten:
Die Standardversion von findutils, die auf Debian 8 installiert ist, ist 4.4.2 und dies ist die neueste Version auf Jessie-Repositories. Ich lade die neueste Version (4.6.0) des Quellcodes von findutils herunter und baue die Binärdateien aus dem Quellcode. Dann habe ich die gleichen Tests durchgeführt und der Befehl "find" zeigte die korrekte Ausgabe für den ersten Lauf.
Dann habe ich den Quellcode von findutils, Version 4.4.2 , aus dem gnu-Archiv heruntergeladen und kompiliert. Dasselbe Problem trat beim kompilierten Befehl find auf. Daher tritt dieses Problem bei findutils 4.6.0 nicht auf.
Aber ich weiß immer noch nicht, warum einige Benutzer mit findutils 4.4.2 (der Standardversion des auf Debian installierten Dienstprogramms) nicht die gleichen Ergebnisse erzielen und warum Debian mit dieser alten Version von findutils immer noch veröffentlicht werden sollte und möglicherweise andere Linux-Dienstprogramme und verursachen diese problematische Situation. Und das Letzte ist, dass der genaue technische Grund für das, was seltsam passiert ist, noch unbekannt ist, was nicht wünschenswert ist. Weil ich nicht sicher bin, ob in meiner Betriebssystemumgebung etwas Besorgniserregendes ist.
quelle