mv a b
cp a b
;rm a
이들은 두 가지 진술 문입니다. 그들이하는 것과 약간의 차이가 있습니까?
mv
와 비슷 하지만 전자는 파일 시스템 간 이동 (즉 , +가 됨 )에서 작동하지만 후자는 실패합니다 (파일 간 하드 링크를 지원하지 않음). ln
rm
cp
rm
ln
--remove-destination
- 스위치 stackoverflow.com/a/9371263/409638
mv a b
cp a b
;rm a
이들은 두 가지 진술 문입니다. 그들이하는 것과 약간의 차이가 있습니까?
mv
와 비슷 하지만 전자는 파일 시스템 간 이동 (즉 , +가 됨 )에서 작동하지만 후자는 실패합니다 (파일 간 하드 링크를 지원하지 않음). ln
rm
cp
rm
ln
--remove-destination
- 스위치 stackoverflow.com/a/9371263/409638
답변:
관련된 파일이 동일한 파일 시스템에 있다고 가정하면 mv는 단순히 파일 시스템의 포인터를 변경하는 반면, cp는 파일의 전체 내용을 복사하고 rm은 다시 포인터를 변경합니다. 따라서 mv가 훨씬 더 효율적입니다.
mv
파일 이름 만 변경합니다 (원래 파일과 동일한 inode). cp
새 파일에 대한 새로운 inode를 만듭니다. 2. 목표가 존재합니다. mv
한 번에 대상 파일을 링크 해제 (제거)하고 이름을 바꿉니다. cp
대상 파일의 inode를 덮어 씁니다.
mv
권한이나 소유권을 변경하지 마십시오. 친구의 homedir에서 자신의 homedir로 파일을 이동한다고 가정하십시오. 당신이 mv
그것을 당신의 친구에 속하는 homedir에 파일로 끝날 것입니다. 당신은 할 수 없습니다 chown
또는 chmod
하고 권한에 따라조차 수정하거나 읽을. 당신이 cp
다음에 rm
파일이 당신에게 속할 것이고 모든 것이 잘됩니다.
예, mv는 동일한 디스크에서 원자가 될 가능성이 있지만 cp와 rm의 조합은 절대 없습니다.
이것은 mv가 rename()
보장을 가진 호출 인을 사용하여 구현되었다고 가정합니다 . 예를 들어 POSIX를 인용하는 이 뉴스 그룹 post 를 참조하십시오 .
이 rename () 함수는 일반 파일에서 ISO C 표준으로 정의 된 것과 동일합니다. 여기에 포함하면 해당 정의가 확장되어 디렉토리에 대한 조치가 포함되고 새 매개 변수가 이미 존재하는 파일의 이름을 지정할 때의 동작을 지정합니다. 이 사양에서는 함수의 동작이 원 자성이어야합니다.
동일한 파일 시스템에서 mv는 동일한 inode (파일 데이터 및 메타 데이터)를 가리키는 디렉토리 참조를 변경합니다.
복사 및 제거
mv 는 본질적으로 "이름 바꾸기"조작입니다. 이는 파일 자체가 디스크의 동일한 지점에 남아 있음을 의미합니다. 실제 파일 작업이 수행되지 않습니다.