Ist „cp --no-clobber“ anfällig für Race Condition?

Ist „cp --no-clobber“ anfällig für Race Condition?

Die Manpage fürcp(1)sagt

--no-clobberüberschreibe keine vorhandene Datei

Wäre jedoch nicht folgendes Szenario möglich?

  1. cpprüft die Existenz der Datei. Nehmen wir an, die Datei existiert (noch) nicht.
  2. Ein anderer Prozess schreibt in den gleichen Pfad, sodass nun Daten in die zuvor nicht vorhandene Datei geschrieben werden
  3. Da cpes die nun vorhandene Datei nicht kennt, überschreibt es die Daten

Ist cp --no-clobberdieser Race Condition anfällig? Und wenn nicht, wie lässt sich cpdie oben beschriebene Situation vermeiden?

Antwort1

cpist nicht anfällig für diesen Race Condition. Wenn --no-clobbergesetzt ist, prüft es, ob das Ziel bereits existiert. Wenn es feststellt, dass dies nicht der Fall ist und es deshalb mit dem Kopieren fortfahren sollte, merkt es sich, dass es in eine neue Datei kopieren soll. Wenn es an der Zeit ist, die Zieldatei zu öffnen,es öffnet es mit Flaggen, die seine Erstellung erzwingen,O_CREATUndO_EXCL; das Betriebssystem überprüft dann, ob die Datei existiertbeim Öffnen, und schlägt fehl ( EEXIST), wenn dies der Fall ist.

verwandte Informationen