Уязвим ли `cp --no-clobber` к состоянию гонки?

Использование расширения GNU grep-L:

grep -L 'completed without error' o*

-L, --files-without-match

Suppress normal output; instead print the name of each input file from which no output would normally have been printed. The scanning will stop on the first match.

Без GNU grep:

for f in o*; do grep -q "completed without error" "$f" || printf "%s\n" "$f"; done

34
10.03.2020, 03:41
1 ответ

cpне уязвим для этого состояния гонки. Когда установлено --no-clobber, проверяется, существует ли адресат; если он определяет, что это не так, и поэтому он должен продолжить копирование, он запоминает, что должен копировать в новый файл. Когда приходит время открыть файл назначения, открывает его с флагами, которые обеспечивают его создание ,O_CREATиO_EXCL; затем операционная система проверяет, что файл не существует при его открытии , и терпит неудачу (EEXIST), если он существует.

56
28.04.2021, 23:21

Теги

Похожие вопросы