Unix에서 mv와 {cp + rm the old file}의 차이점이 있습니까?


14
  • mv a b

  • cp a b;rm a

이들은 두 가지 진술 문입니다. 그들이하는 것과 약간의 차이가 있습니까?


1
원 자성? 그래도 mv 명령이 원자 적인지 잘 모르겠습니다.
Adriano Varoli 광장

예. 왜 물어?

1
이제는 + mv와 비슷 하지만 전자는 파일 시스템 간 이동 (즉 , +가 됨 )에서 작동하지만 후자는 실패합니다 (파일 간 하드 링크를 지원하지 않음). lnrmcprmln
Chris Jester-Young

당신이 필요한 사람이 기본 동작을 재정의하는 방법을 궁금해 여기에와 주셔서 - 매일 학교 날 --remove-destination- 스위치 stackoverflow.com/a/9371263/409638
로버트

답변:


20

관련된 파일이 동일한 파일 시스템에 있다고 가정하면 mv는 단순히 파일 시스템의 포인터를 변경하는 반면, cp는 파일의 전체 내용을 복사하고 rm은 다시 포인터를 변경합니다. 따라서 mv가 훨씬 더 효율적입니다.


1
하지만 그들은 똑같은 일을합니까?
Lazer

8
아닙니다.

3
@eSKay : 아니요. 두 가지 시나리오 : 1. 대상이 없습니다. mv파일 이름 만 변경합니다 (원래 파일과 동일한 inode). cp새 파일에 대한 새로운 inode를 만듭니다. 2. 목표가 존재합니다. mv한 번에 대상 파일을 링크 해제 (제거)하고 이름을 바꿉니다. cp대상 파일의 inode를 덮어 씁니다.
Chris Jester-Young

7
또한 mv권한이나 소유권을 변경하지 마십시오. 친구의 homedir에서 자신의 homedir로 파일을 이동한다고 가정하십시오. 당신이 mv그것을 당신의 친구에 속하는 homedir에 파일로 끝날 것입니다. 당신은 할 수 없습니다 chown또는 chmod하고 권한에 따라조차 수정하거나 읽을. 당신이 cp다음에 rm파일이 당신에게 속할 것이고 모든 것이 잘됩니다.
Ludwig Weinzierl

9

예, mv는 동일한 디스크에서 원자가 될 가능성이 있지만 cp와 rm의 조합은 절대 없습니다.

이것은 mv가 rename()보장을 가진 호출 인을 사용하여 구현되었다고 가정합니다 . 예를 들어 POSIX를 인용하는 이 뉴스 그룹 post 를 참조하십시오 .

이 rename () 함수는 일반 파일에서 ISO C 표준으로 정의 된 것과 동일합니다. 여기에 포함하면 해당 정의가 확장되어 디렉토리에 대한 조치가 포함되고 새 매개 변수가 이미 존재하는 파일의 이름을 지정할 때의 동작을 지정합니다. 이 사양에서는 함수의 동작이 원 자성이어야합니다.


8

동일한 파일 시스템에서 mv는 동일한 inode (파일 데이터 및 메타 데이터)를 가리키는 디렉토리 참조를 변경합니다.

  • 원 자성 작업 (다른 프로세스 파일 작업으로 중단 될 수 없음)
  • 사소한 양의 추가 디스크 공간 (디렉토리의 추가 이름) 만 사용합니다.
  • 파일 권한 및 소유권 유지
  • 데이터 양에 따라 훨씬 빠를 수 있습니다

복사 및 제거

  • 원자가 아님 (다른 프로세스가 cp와 rm 명령 사이에 간섭 할 수 있음)
  • 파일 데이터를 짧은 시간 동안 디스크에 두 번 저장해야합니다 (cp 및 rm 명령 사이).
  • 파일 권한 및 소유권을 기본값으로 변경
  • 데이터 양에 따라 훨씬 느리거나 실패 할 수 있음

4

소스와 대상이 동일한 물리적 볼륨에있는 경우 첫 번째 방법은 단순히 이름을 바꾸는 것이며 파일이 매우 큰 경우에도 매우 빠릅니다.

cp& rm는 항상 필요하지 않더라도 모든 데이터를로드 / 저장해야합니다.


3

mv 는 본질적으로 "이름 바꾸기"조작입니다. 이는 파일 자체가 디스크의 동일한 지점에 남아 있음을 의미합니다. 실제 파일 작업이 수행되지 않습니다.


3

차이점은 mv는 파일 속성을 유지하지만 cp는 기본적으로 create-date를 현재 날짜로 설정하는 것과 같이 기본적으로 cp를 유지하지 않는다는 것입니다.

이 기본값을 무시하려면 "cp -p"를 사용하여 마지막 데이터 수정, 마지막 액세스 시간, 사용자 ID 및 그룹 ID (이 작업을 수행 할 권한이있는 경우에만), 파일 권한 비트 및 SUID 및 SGID를 유지하십시오. 비트.


2

예.

mv는 파일 이름 및 위치와 관련하여 파일의 파일 시스템 메타 데이터를 변경하는 반면, cp는 파일의 별도 사본을 작성합니다. cp는 첫 번째 파일을 완전히 읽은 다음 내용을 다른 파일에 기록해야하기 때문에 시간이 훨씬 오래 걸립니다.


2

cp와 rm은 디스크 사용량이 훨씬 무거 우므로 디스크 공간 때문에 실패 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.