`cp --no-clobber`는 경쟁 조건에 취약합니까?

`cp --no-clobber`는 경쟁 조건에 취약합니까?

매뉴얼 페이지cp(1)라고

--no-clobber기존 파일을 덮어쓰지 마세요

하지만, 다음과 같은 시나리오는 가능하지 않을까?

  1. cp파일 존재를 확인합니다. 파일이 (아직) 존재하지 않는다고 가정하겠습니다.
  2. 일부 다른 프로세스가 동일한 경로에 쓰기 때문에 이제 이전에 존재하지 않았던 파일에 데이터가 기록됩니다.
  3. cp현재 존재하는 파일을 인식하지 못하기 때문에 데이터를 덮어씁니다.

cp --no-clobber이 경쟁 조건에 취약합니까 ? 그렇지 않다면 cp위의 상황을 어떻게 피할 수 있습니까?

답변1

cp이 경쟁 조건에 취약하지 않습니다. 가 설정 되면 --no-clobber대상이 이미 존재하는지 확인합니다. 그렇지 않다고 판단하여 복사를 진행해야 하는 경우 새 파일에 복사해야 한다는 것을 기억합니다. 대상 파일을 열어야 할 시간이 오면,생성을 강제하는 플래그로 엽니다.,O_CREAT그리고O_EXCL; 그런 다음 운영 체제는 파일이 존재하지 않는지 확인합니다.그것을 여는 동안EEXIST, 그렇다면 실패합니다( ).

관련 정보