어딘가에 하드링크된 파일을 편집 해서 저장하려고 할 때마다 mcedit
편집자는 하드링크를 삭제할 것인지 묻습니다. 이는 Linux에서 일반적인 동작입니까, 아니면 mcedit
"특별한" 동작입니까? fsck나 기타 관리 도구가 아닌 일반 응용 프로그램이 하드 링크에 관심을 갖는 이유는 무엇입니까?
답변1
파일을 수정하려는 경우 두 가지 옵션이 있으며 각 옵션에는 장단점이 있습니다.
- 해당 위치에 파일을 덮어쓸 수 있습니다. 이는 추가 공간을 사용하지 않으며 기존 파일 콘텐츠 이외의 하드 링크, 권한 및 기타 속성을 보존합니다. 이 방법의 가장 큰 단점은 파일이 기록되는 동안 어떤 일이 발생하면(응용 프로그램이 충돌하거나 정전이 발생하는 경우) 파일이 부분적으로 기록된다는 점입니다.
- 파일의 새 버전을 다른 이름의 새 파일에 쓴 다음 해당 위치로 이동할 수 있습니다. 이는 더 많은 공간을 사용하고 하드 링크를 깨뜨리며, 파일에 대한 쓰기 권한은 있지만 파일에 포함된 디렉토리가 없는 경우에는 이 작업을 수행할 수 없습니다. 반면, 이전 버전의 파일은 자동으로 새 버전으로 대체되므로 모든 시점에서 파일 이름은 파일의 유효하고 완전한 버전을 가리킵니다.
Mcedit에서는 어떤 전략을 선택할지 묻고 있습니다. 그러나 이상하게도 단일 디렉토리 항목이 있는 파일에 대한 mcedit의 기본 정책은 기존 파일을 잘라내어 데이터를 위험에 빠뜨리는 것입니다. 보안 정책으로 인해 하드 링크가 중단되는 경우에만 이를 사용할 수 있습니다. 옵션 메뉴의 저장 모드 편집 대화 상자에서 이 설정을 변경할 수 있습니다. "빠른 저장"은 덮어쓰기를 의미하고, "안전 저장"은 임시 파일에 저장한 다음 이름을 바꾸는 것을 의미합니다. 안전 모드를 선택하면 심볼릭 링크를 끊지 않을 수 있는 옵션이 없습니다.
(mc 4.8.3에서 관찰한 내용입니다. 이것이 최신 버전에 여전히 존재하는 경우 설계 버그로 보고하는 것을 고려해 보십시오. "안전 모드"가 기본값이어야 하며 해당 모드에서 실행할 수 있는 옵션이 있어야 합니다. 다음은 하드 링크 케이스를 파손하지 마십시오).
Vim이나 Emacs와 같은 좋은 편집기를 사용하면 기본 전략을 선택할 수 있습니다.
답변2
이것은 드문 일입니다. 계속해서 자신의 발을 쏘는 개발자가 디자인 한 것 같습니다.
여러 링크가 있는 파일("일반" 파일이 해당 디렉터리에 연결되어 있음)에 쓰면 다른 경로에 존재할 수 있는 파일이 변경됩니다. 심볼릭 링크에서도 동일한 문제가 발생하지만 연결하려는 파일은 자신을 가리키는 심볼릭 링크가 있다는 것을 모릅니다.
다중 링크 파일에 쓰면 다중 링크의 핵심인 다른 파일 경로를 통해 표시되는 내용이 변경됩니다.
답변3
이는 저장하기 전에 백업 파일을 생성할 때 심각한 영향을 미칩니다(제 생각에는 mcedit
그렇습니다). 하드 링크가 처리되는 방식에 따라 해당 inode에 대한 다른 경로가 잘못된 파일을 가리킬 수 있습니다.이것 좀 봐.
이것이 백업 파일과 아무 관련이 없다면 아마도 단지 경고일 것입니다. 다음과 같이 읽어 보십시오. "잊었을 경우: /foo/bar만 변경하는 것이 아니라 /bar/baz도 변경합니다."