매뉴얼 페이지cp(1)
설명하다
--no-clobber
기존 파일을 덮어쓰지 마세요
그런데 아래와 같은 상황이 가능할까요?
cp
파일이 이미 존재하지 않는다고 가정하고 파일이 존재하는지 확인합니다.- 다른 프로세스가 동일한 경로에 쓰기 때문에 이전에는 존재하지 않았던 파일에 데이터가 기록됩니다.
cp
현재 파일이 존재하는지 모르기 때문에 데이터를 덮어씁니다.
cp --no-clobber
이 경쟁 조건에 취약합니까? 그렇지 않다면 cp
위의 상황을 피하는 방법은 무엇입니까?
답변1
cp
그러한 경쟁 조건에 취약하지 않습니다. 설정되면 --no-clobber
대상이 이미 존재하는지 확인하고, 존재하지 않아 계속 복사해야 한다고 판단하면 새 파일에 복사해야 한다는 것을 기억합니다. 대상 파일을 열어야 할 때,생성을 강제하는 플래그로 엽니다.,O_CREAT
그리고O_EXCL
;그런 다음 운영 체제는 파일이 존재하지 않는지 확인합니다.그것을 열 때EEXIST
, 성공하면 실패합니다( ).