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