파일이 하나 있습니다. 이 경우 이름을 로 지정하겠습니다 $HOME/Documents/hello.txt
.
Hello, welcome to my text file
이 파일을 여기에 하드 링크하겠습니다: $HOME/Documents/Backup/hello.txt
.
좋아요, 좋습니다. 이제 이것은 하드 링크되었습니다. 원본 파일에 쓰면 하드 링크가 업데이트됩니다.
echo "Hello again" >> $HOME/Documents/hello.txt
cat $HOME/Documents/hello.txt
Hello, welcome to my text file
Hello again
cat $HOME/Documents/Backup/hello.txt
Hello, welcome to my text file
Hello again
이제 내 문제는 임시 파일을 생성하는 많은 프로그램을 사용하여 두 파일 중 하나(하드 링크 복사본)를 열 때마다 링크 관계가 끊어지고 두 파일 모두 다른 파일을 업데이트하지 않는다는 것입니다.
그렇다면 이런 상황에서 어떻게 해야 할까요?
참고: 일부 파일을 백업하기 위해 Github의 하드 링크를 사용하고 있고 Git은 기호 링크를 따르지 않기 때문에 이 경우 기호 링크를 사용할 수 없습니다.
답변1
모스비가 말했듯이이 댓글, 대부분의 편집자는 원본 파일의 복사본을 편집한 다음 이를 대체(삭제)합니다. 이렇게 하면 보안이 향상되지만 하드 링크가 끊어집니다.
그러나 GNU Emacs와 같은 일부 편집기는 파일 편집을 수행하도록 구성할 수 있습니다.제자리에즉, 셸에서 하는 것처럼 원본 파일을 직접 변경한다는 의미입니다. 예를 들어이 문제해당 답변은 Gnu Emacs에 대한 귀하의 질문을 정확하게 설명합니다. 따라서 편집기 구성을 가장 먼저 고려해야 합니다.
Git에 대한 하드 링크(?)만 필요하기 때문에 불행히도 작업 흐름에 대해 자세히 설명하지 않으므로 푸시하려는 항목을 커밋하기 직전에 Git 후크를 사용하여 올바른 하드 링크를 다시 설정할 가능성이 높습니다. GitHub: 이 pre-commit
후크는 유망한 후보인 것 같습니다. 매뉴얼 페이지를 참조하세요힘내 후크(5)더 알아보기.
답변2
이미 설명했듯이유르겐그리고모스비, 하드 링크의 문제는 대부분의 편집자가 원본 파일의 복사본을 편집한 다음 나중에 이를 대체(삭제)하여 변경 사항을 전파하는 대신 두 개의 다른 복사본으로 끝난다는 것입니다.
이를 방지하기 위한 간단한 해결책은 다른 경로에 링크된 파일에 대한 "색인"과 동일한 디렉토리에 하드 링크 세트를 배치한 다음 새 inode가 해당 디렉토리에 기록되는 것을 방지하는 것입니다.
권한을 읽기 전용으로 설정하면 됩니다.
chmod a-w .
또는 잠금 속성을 설정하여(HFS+/APFS 파일 시스템에만 해당):
SetFile -a L .
이렇게 하면 사용자/편집자는 이 "인덱스 디렉터리"에 다른 파일을 쓸 수 없지만 편집자가 허용하는 경우 기존 하드 링크를 수정할 수 있습니다(예: 하드 링크를 올바르게 편집할 수 있는 VIM 사용). 다른 하드 링크를 추가하려면 반대 명령( chmod u+w .
또는)을 사용하여 쓰기 모드를 재설정하면 됩니다 SetFile -a l .
.