디렉토리는 개념적으로 이름 목록과 해당 이름이 가리키는 inode 번호를 포함하는 특수한 "파일"입니다. 일부 이름은 하위 디렉토리 일 수 있습니다. ..
부모 디렉토리를 가리키는 특별한 항목 이 있습니다.
따라서 파일 이름을 명확하게 변경하는 것은 쉽습니다. 디렉토리 항목의 이름 만 변경하면됩니다. 파일이 실제로 파일인지 또는 다른 디렉토리의 내용을 저장하는 데 사용되는 "파일"인지 여부를 유지합니다. 실제로 동일한 rename
syscall이 둘 다 수행합니다.
그러나 복사는 훨씬 덜 간단한 작업입니다. 당신은 할 수 단지 디렉토리 "파일을"복사,하지만 당신은 파일 (그들은 하드 링크 것) 동일한 두 개의 디렉토리가 것입니다. 디렉토리에 대한 하드 링크를 허용하는 시스템이 있다면, 그렇게 할 수 있지만, 최신 시스템에서는 루트가 아닌 루트를 허용하지 않으므로 각 서브 디렉토리에 대해 해당 사본을 작성해야합니다. 당신은 실제로 요청할 수 있습니다 cp
이 행동 cp -lR
: -l
하드 링크, -R
그 재귀하십시오.
그러나 모든 것을 연결된 상태로 두는 것은 당신이 원하는 것이 아닐 것입니다. 대신 cp
각 파일을 복사 하려고 합니다. 상당히 비싼 작업입니다. 각 파일을 메모리로 읽고 두 번째 위치에서 디스크에 다시 써야합니다. 실제로 파일을 열고, 읽고, 쓰고, 닫으려면 몇 번의 syscall이 필요하며 각 파일마다 반복해야합니다.
전통적인 파일 시스템도 디스크에서 이런 방식으로 작동합니다. 각 파일을 개별적으로 복사하여 복사하는 것 외에 여러 파일을 복사하는 방법은 없으며 기본 명령 줄 유틸리티를 디자인 할 때 사용 된 파일 시스템 유형입니다.
mv
"디렉토리 항목에 단지 변경 이름"다른 하나의 파일 시스템에서 동일하게 보내고?