"UNIX 환경의 고급 프로그래밍"에 설명된 "mv" 작업

"UNIX 환경의 고급 프로그래밍"에 설명된 "mv" 작업

존재하다UNIX 환경의 고급 프로그래밍(도서)i 노드와 디렉토리를 설명하는 섹션 4.14에는 다음 단락이 있습니다.

파일 시스템을 변경하지 않고 파일 이름을 바꾸는 경우 파일의 실제 내용을 이동할 필요가 없습니다. 필요한 것은 기존 i-노드를 가리키는 새 디렉터리 항목을 추가한 다음 이전 디렉터리 항목의 링크를 해제하는 것뿐입니다. 예를 들어, 파일 이름을 로 바꾸려면 /usr/lib/foo와 디렉토리가 동일한 파일 시스템에 있으면 /usr/foofoo의 내용을 이동할 필요가 없습니다 . 이것이 일반적으로 명령이 작동하는 방식입니다./usr/lib/usrmv

이에 따르면 파일의 파일 이름에는 파일 경로가 포함되어야 하며 "mv"는 실제로 파일을 이동하지 않습니다. 그런데 같은 디렉터리에 있는 두 파일을 이동하는 데 걸리는 시간은 크기에 따라 왜 다를까요?

답변1

  1. 경로 이름은 루트 디렉토리로 다시 라우팅되는 파일의 디렉토리 항목에서 유추됩니다 /.
  2. 파일 이름은 해당 디렉토리에 저장되므로 동일한 "파일"을 두 가지 다른 항목에서 동시에 호출할 수 있습니다.
  3. 동일한 파일 시스템 내에서 파일을 이동하는 데 필요한 시간은 파일 크기와 관계가 없습니다.

귀하의 진술과 관련하여:

파일 이름에는 파일 경로가 포함되어야 합니다.

본문에는 그런 말이나 그런 말은 전혀 없습니다. 혹시 인용하지 않은 부분이 있을까요?

mv실제로 파일을 이동하지는 않습니다.

예, 맞습니다. 파일은 새 이름으로 새 디렉터리에 저장되고 이전 디렉터리에서 삭제됩니다. 이는 이동이지만 복사본은 아닙니다(파일 내용은 이동되지 않고 파일 시스템의 위치만 이동됨).

예를 들어 /usr/lib/foo 파일의 이름을 /usr/foo로 바꾸려면 /usr/lib 및 /usr 디렉터리가 동일한 파일 시스템에 있으면 foo의 내용을 이동할 필요가 없습니다.

경로는 디렉토리 내의 /usr/lib/foo파일 이름 으로 구분됩니다. 같은 내용은 다음과 같이 나누어집니다. 및가 동일한 파일 시스템에 있는 경우 이름 바꾸기는 AND 연산이 됩니다(파일 시스템의 파일 위치가 이동되고 파일 내용은 변경되지 않음).foo/usr/lib/usr/foofoo/usr/usr/usr/liblinkunlink

관련 정보