не может создать обычный файл 'filename': Файл существует

Я получаю это странное сообщение об ошибке в одном из моих скриптов сборки – cp не удается, возвращая ошибку «Файл существует». Я даже пытался использовать cp -f , который должен перезаписать файл, если он существует, но ошибка все же появляется. Запуск cp для перезаписывания существующих файлов отлично работает, когда я делаю это вручную. Что может вызвать эту ошибку?

One Solution collect form web for “не может создать обычный файл 'filename': Файл существует”

Это оказалось обусловлено состоянием гонки. cp проверяет, существует ли целевой файл, а если нет – перезаписывает его. Проблема состояла в том, что эта команда cp запускалась дважды параллельно, что приводило к тому, что этот файл иногда появлялся после проверки того, существует ли он, но перед попыткой создать файл. Выход strace выглядит следующим образом:

 # Command was "cp ab" stat("b", 0x7fff89510620) = -1 ENOENT (No such file or directory) stat("a", {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 stat("b", 0x7fff895103a0) = -1 ENOENT (No such file or directory) # File b will be created at this point in time open("a", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0 open("b", O_WRONLY|O_CREAT|O_EXCL, 0644) = -1 EEXIST (File exists) 

Вот некоторый код bash, используемый для этого:

 #!/bin/bash touch a f() { while true; do rm -fb strace -o /tmp/cp${BASHPID}.trace cp ab || break done } cleanup() { kill -9 %1 %2 } f & f & trap cleanup exit wait 

Эта же ошибка может произойти с mkdir -p или любым другим действием, которое пытается перезаписать файл. Использование flock может помочь избежать условий гонки в таких случаях.

  • Пакетное копирование / перемещение файлов в unix?
  • Отобразить то, что было скопировано `cp` (используя` ksh`)
  • Правильное понимание прав для cp
  • Скопируйте файлы с родительской папкой в ​​новый каталог
  • Как установить отличную от cp?
  • почему команда linux cp не потребляет диск IO?
  • Как скопировать папку рекурсивно идемпотентным способом с помощью cp?
  • Переместите некоторые файлы на каждый каталог в другой каталог
  • Скопировать файл в пункт назначения на основе ini-файла
  • Проверка целостности файла по сравнению с исходным файлом
  • Не удалось удалить каталоги, скопированные из других источников. Centos 6
  • Linux и Unix - лучшая ОС в мире.