매뉴얼 페이지cp(1)
라고
--no-clobber
기존 파일을 덮어쓰지 마세요
하지만, 다음과 같은 시나리오는 가능하지 않을까?
cp
파일 존재를 확인합니다. 파일이 (아직) 존재하지 않는다고 가정하겠습니다.- 일부 다른 프로세스가 동일한 경로에 쓰기 때문에 이제 이전에 존재하지 않았던 파일에 데이터가 기록됩니다.
cp
현재 존재하는 파일을 인식하지 못하기 때문에 데이터를 덮어씁니다.
cp --no-clobber
이 경쟁 조건에 취약합니까 ? 그렇지 않다면 cp
위의 상황을 어떻게 피할 수 있습니까?
답변1
cp
이 경쟁 조건에 취약하지 않습니다. 가 설정 되면 --no-clobber
대상이 이미 존재하는지 확인합니다. 그렇지 않다고 판단하여 복사를 진행해야 하는 경우 새 파일에 복사해야 한다는 것을 기억합니다. 대상 파일을 열어야 할 시간이 오면,생성을 강제하는 플래그로 엽니다.,O_CREAT
그리고O_EXCL
; 그런 다음 운영 체제는 파일이 존재하지 않는지 확인합니다.그것을 여는 동안EEXIST
, 그렇다면 실패합니다( ).