Die Manpage fürcp(1)
sagt
--no-clobber
überschreibe keine vorhandene Datei
Wäre jedoch nicht folgendes Szenario möglich?
cp
prüft die Existenz der Datei. Nehmen wir an, die Datei existiert (noch) nicht.- Ein anderer Prozess schreibt in den gleichen Pfad, sodass nun Daten in die zuvor nicht vorhandene Datei geschrieben werden
- Da
cp
es die nun vorhandene Datei nicht kennt, überschreibt es die Daten
Ist cp --no-clobber
dieser Race Condition anfällig? Und wenn nicht, wie lässt sich cp
die oben beschriebene Situation vermeiden?
Antwort1
cp
ist nicht anfällig für diesen Race Condition. Wenn --no-clobber
gesetzt 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_CREAT
UndO_EXCL
; das Betriebssystem überprüft dann, ob die Datei existiertbeim Öffnen, und schlägt fehl ( EEXIST
), wenn dies der Fall ist.