프로세스 이동 권한이 거부된 것으로 mv
보입니까 ?cp(1)
그렇다면 어떤 일을 잘하고 잘하는 것은 규칙에 어긋나는 것이 아닌가?
답변1
짧은 대답은 '아니요'입니다.
실행은 다음과 같습니다.
rename()
기능
rename()
콘텐츠를 복사하지 않고 디스크에서 이름을 바꿉니다. 이는 완전히 원자적인 작업이며 부분 완료 시 절대 실패하지 않습니다.
그러나 이것이 전체 이야기를 말해주지는 않습니다. 이 효과는 어디에 있습니까?할 수 있는이는 장치 간에 파일을 이동하려고 할 때 발생합니다. 이 경우 파일 시스템에서 이름 바꾸기를 수행할 수 없습니다. 이동 효과를 얻으려면 mv
먼저 소스를 대상에 복사한 다음 소스를 삭제하세요. 사실 mv /mnt/a/X /mnt/b/Y
본질적으로 동일합니다 cp /mnt/a/X /mnt/b/Y && rm /mnt/a/X
. 이것이 장치 간에 파일을 이동하는 유일한 방법입니다.
mv
원본 파일을 삭제할 수 있는 권한이 없는 경우 오류가 보고되지만 이미 복사가 발생한 것입니다. 작업 중에 권한이 변경되는 경쟁 조건이 있을 수 있으므로 사전에 권한을 확인한다고 해서 이러한 상황을 피할 수는 없습니다.
장치 간에 파일을 완전히 이동할 수 없는 경우 외에는 이러한 일이 발생하는 것을 방지할 수 있는 방법이 없습니다. 소스와 대상 사이에서 선택을 허용하면 일반적인 경우 작업이 더 단순해지지 mv
만 이러한 비정상적인 상황에서는 이상한(그러나 비파괴적인) 동작이 발생합니다.
이는 또한 단일 장치 내에서 대용량 파일을 이동하는 것이 다른 장치로 이동하는 것보다 훨씬 빠른 이유이기도 합니다.