파일 및 디렉터리의 이름이 바뀌거나 이동될 때 깨지지 않는 파일 참조를 생성하는 방법이 있습니까?

파일 및 디렉터리의 이름이 바뀌거나 이동될 때 깨지지 않는 파일 참조를 생성하는 방법이 있습니까?

파일 및 디렉터리의 이름이 바뀌거나 이동될 때 깨지지 않는 파일 참조를 생성하는 방법이 있습니까? 예를 들어 이름 대신 inode로 파일을 참조합니까?

답변1

예, 여러 가지 방법이 있습니다.

  1. 하드 링크: ln file1 file2. 이제 이름을 로 바꾸면 file2다른 이름이 됩니다. 또는 삭제하더라도 계속 액세스할 수 있습니다(물론 이름을 바꾸거나 삭제하지 않는 한). 이는 디렉터리가 아닌 파일에 대해서만 작동하며 모든 링크는 동일한 파일 시스템에 있어야 합니다.file1file1file2
  2. 바인드 마운트: mount --bind file1 file2.디렉터리에서도 작동하고 동일한 파일 시스템 제한이 없다는 점을 제외하면 하드 링크와 유사합니다. 단점은 권한이 있는 작업이므로 루트(또는 자신의 사용자 및 마운트 네임스페이스에 있어야 함)여야 한다는 것입니다.
  3. 파일 설명자: exec {foo}</some/file.일단 이렇게 하면 /proc/self/fd/$foo파일에 대한 "마법의" 심볼릭 링크가 됩니다(일반 심볼릭 링크처럼 깨질 수 없으며 특수한 /proc 의사 파일 시스템으로 인해 가능하다는 점에서 "마법의" 심볼릭 링크입니다). 이는 파일 및 디렉터리에서 작동하며 특별한 권한이 필요하지 않으며 하위 프로세스에서 자동으로 상속되어 사용됩니다. 단점은 이를 실행하는 프로세스가 종료될 때까지만 지속되며 해당 경로를 많이 제어할 수 없다는 것입니다.
  4. name_to_handle_at/open_by_handle_at: 이는 문자 그대로의 요구 사항을 충족하지만 위의 두 가지보다 더 복잡하고 특권적인 작업입니다. 유일한 장점은 핸들이 일반 데이터이고 어떤 상태도 저장할 필요가 없다는 것입니다.

답변2

EXT 파일 시스템에서는 debugfs다음 명령을 사용하여 inode에 대한 직접 링크를 다시 생성할 수 있습니다.

debugfs -w /dev/mapper/vg0-root -R 'link <16> myfile'

그러면 inode 16을 가리키는 myfile이라는 "파일"이 생성됩니다.

그러나 파일을 삭제하면 여전히 사라지지만, 이동하면 그대로 유지됩니다.

파일의 인덱스 노드를 가져옵니다.이봐...

원천

관련 정보