존재하다UNIX 환경의 고급 프로그래밍(도서)i 노드와 디렉토리를 설명하는 섹션 4.14에는 다음 단락이 있습니다.
파일 시스템을 변경하지 않고 파일 이름을 바꾸는 경우 파일의 실제 내용을 이동할 필요가 없습니다. 필요한 것은 기존 i-노드를 가리키는 새 디렉터리 항목을 추가한 다음 이전 디렉터리 항목의 링크를 해제하는 것뿐입니다. 예를 들어, 파일 이름을 로 바꾸려면
/usr/lib/foo
와 디렉토리가 동일한 파일 시스템에 있으면/usr/foo
foo의 내용을 이동할 필요가 없습니다 . 이것이 일반적으로 명령이 작동하는 방식입니다./usr/lib
/usr
mv
이에 따르면 파일의 파일 이름에는 파일 경로가 포함되어야 하며 "mv"는 실제로 파일을 이동하지 않습니다. 그런데 같은 디렉터리에 있는 두 파일을 이동하는 데 걸리는 시간은 크기에 따라 왜 다를까요?
답변1
- 경로 이름은 루트 디렉토리로 다시 라우팅되는 파일의 디렉토리 항목에서 유추됩니다
/
. - 파일 이름은 해당 디렉토리에 저장되므로 동일한 "파일"을 두 가지 다른 항목에서 동시에 호출할 수 있습니다.
- 동일한 파일 시스템 내에서 파일을 이동하는 데 필요한 시간은 파일 크기와 관계가 없습니다.
귀하의 진술과 관련하여:
파일 이름에는 파일 경로가 포함되어야 합니다.
본문에는 그런 말이나 그런 말은 전혀 없습니다. 혹시 인용하지 않은 부분이 있을까요?
mv
실제로 파일을 이동하지는 않습니다.
예, 맞습니다. 파일은 새 이름으로 새 디렉터리에 저장되고 이전 디렉터리에서 삭제됩니다. 이는 이동이지만 복사본은 아닙니다(파일 내용은 이동되지 않고 파일 시스템의 위치만 이동됨).
예를 들어 /usr/lib/foo 파일의 이름을 /usr/foo로 바꾸려면 /usr/lib 및 /usr 디렉터리가 동일한 파일 시스템에 있으면 foo의 내용을 이동할 필요가 없습니다.
경로는 디렉토리 내의 /usr/lib/foo
파일 이름 으로 구분됩니다. 같은 내용은 다음과 같이 나누어집니다. 및가 동일한 파일 시스템에 있는 경우 이름 바꾸기는 AND 연산이 됩니다(파일 시스템의 파일 위치가 이동되고 파일 내용은 변경되지 않음).foo
/usr/lib
/usr/foo
foo
/usr
/usr
/usr/lib
link
unlink