리눅스는 어떻게 이동 명령을 처리합니까


12

리눅스는 어떻게 이동 명령을 처리합니까?

집에 이사를한다고 가정 해 봅시다

/home/me

나는 이것을 다른 디렉토리로 옮긴다.

/home/foo/me

모든 파일 및 디렉토리 경로는 어떻게 me변경됩니까? 나는 내 Desktop디렉토리 me가 지금 /home/foo/me/Desktop뿐만 아니라 Documents /home/foo/me/Documents파일 시스템 me이 변경 사항을 반영하기 위해 모든 경로를 명시 적으로 업데이트 하는지 알고 있습니까? 그것은 매우 효율적으로 들리지 않으며 아마도 이것이 아닐 것입니다.

이에 대한 자세한 정보는 어디서 얻을 수 있습니까?


5
효율성에 대해서는 : 아니요, 비효율적입니다. 데이터를 다른 디렉토리로 이동하면 실제로 한 곳에서 데이터를 읽거나 다른 곳에서 쓰지 않습니다. 파일 시스템은 데이터 블록에 대한 포인터 세트를 포함합니다. 이동하는 경우 포인터 만 업데이트됩니다.
Jos

아, 그것은 아마도 제프가 의미했던 것입니다.
Jacob Vlijm

@Jos 조각화는 어디에서 오는가?
zero298

3
@ zero298 아니요, 조각화는 일반적으로 완전히 다르고 관련이없는 문제입니다. 조각화는 폴더 구조의 내용이 아니라 단일 파일의 내용이 물리적 디스크 플래터 전체에 흩어져있어 (단일 연속 행이 아닌) 읽기를 줄입니다. 그러한 파일의 / write 성능. 큰 / 깊은 / 분기 폴더 트리의 내용은 일반적으로 연속적인 방식으로 예상되지 않으며 그러한 방식으로 이동하지 않습니다.
Peteris

답변:


21

폴더 이동 방법을 이해하려면 Linux에서 파일 시스템에 대해 약간의 이해가 필요할 수 있습니다. 모든 파일과 폴더는 " inode " 라는 데이터 구조의 일부로 저장됩니다 . 각 파일에는 inode 번호가 있으며 폴더도 있습니다.

폴더의 inode를 보려면 명령을 사용하십시오 ls -ial foldername. 첫 번째 열은 파일의 inode 번호를 보여줍니다. 각 폴더에 대해 두 개의 고유 한 이름이 있습니다 ...제품에 대한 각각의 자신의 디렉토리 및 상위 디렉토리를 나타내는이.

하위 디렉토리 및 파일이있는 디렉토리 (예 : / home / me / source)를 다른 디렉토리 (예 : / home / me / somewhere / else)로 이동하는 실험을 시도 할 수 있습니다. / home / me / source의 inode 수와 모든 내용은 이동 전후에 동일하게 유지됩니다. 유일한 차이는 inode 수입니다 ... 원래 inode 수는 / home / me이며 이제 inode 수는 / home / me / somewhere / else가됩니다. 간단히 말해서, 리눅스는 디렉토리 소스에 대한 링크를 업데이트하면 완료됩니다.

하드 디스크의 내용은 어쨌든 수정되지 않으며 폴더를 이동할 때 inode 색인 만 업데이트됩니다. 물론 폴더를 다른 실제 위치로 이동하는 경우에는 해당되지 않습니다.


3
이동이 파일 시스템 경계를 넘지 않는 한 맞습니다.
kojiro

3

어떻게 프로그램에 같은 관심을하는 경우 mvcp작품을, 그들이있는 거 오픈 소스를 기억하고 당신은 코드를 읽고 가장 정확한 설명을 얻을 수 있습니다. 여기 에 모든 핵심 유틸리티에 대한 링크가 있습니다. 구체적으로, 여기에서 mv 를 찾을 수 있습니다


6
you can get the most accurate explanation by reading through the code.나는달라고 간청한다. 오랫동안 나는 C에 대한 경험이 없었으며 지금까지도 그것을 좋아하지 않습니다. 또한 소스 코드는 종종 최적화되며 필요한 것보다 많은 대소 문자를 포함합니다. 상징적 인 설명은 종종 더 도움이됩니다.
Shelvacu

1
@shelvacu는 "필요한 것보다 더 많은 경우를 포함합니다". 강력한 코드 존재할 수있는 모든 에지 사례를 처리 합니다. 그러나 개념에 대한 첫 번째 설명에서 모든 주요 사례를 제시 할 필요는 없습니다.
OregonTrail

@OregonTrail 죄송합니다. 코드에 더 많은 케이스가 있으며 설명이 필요합니다.
Shelvacu

나는 당신의 원래의 정서가 기뻤지 만 여전히 " 손잡이 "에 대한 나의 강조를 놓친 것 같았습니다 . 잘 작성된 코드 에는 엣지 케이스 가 없으며 엣지 케이스를 처리합니다 . ;) 나는 당신이 여기 올바른 곳에서오고 있다는 것을 알고 있지만, 동사에주의해야합니다.
OregonTrail
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.