UNIX의 링크에 대해 몇 가지 질문이 있습니다.
- UNIX의 소프트 링크가 Windows의 바로 가기와 유사하다고 말할 수 있습니까?
- 복사와 하드링크의 차이점은 무엇인가요?
- 복사보다 하드 링크를 선호하는 사용 사례를 알려줄 수 있는 사람이 있나요?
나는 지금 혼란스럽다. 어떤 도움이라도 대단히 감사하겠습니다.
답변1
기본적인 것은 복사는 파일의 복사본을 만드는 반면 링크(소프트 또는 하드)는 그렇지 않다는 것입니다.
추상 모델로서 디렉터리를 다음을 포함하는 테이블로 생각하세요.
filename where the file is content of the file
---------------------------------------------------------
a.txt sector 13456 abcd
b.txt sector 67679 bcde
파일을 복사하면 cp a.txt c.txt
다음과 같은 결과가 나타납니다.
filename where the file is content of the file
---------------------------------------------------------
a.txt sector 13456 abcd
b.txt sector 67679 bcde
c.txt sector 79774 abcd
파일을 하드 링크하면 ln b.txt d.txt
다음과 같은 결과가 나타납니다.
filename where the file is content of the file
---------------------------------------------------------
a.txt sector 13456 abcd
b.txt sector 67679 bcde
c.txt sector 79774 abcd
d.txt sector 67679 bcde
이제 b.txt
와 d.txt
파일은 완전히 동일합니다. f
여기에 문자를 추가 하면 d.txt
다음에도 나타납니다.b.txt
하드 링크의 문제점은 동일한 파일 시스템에서만 만들 수 있다는 것입니다. 따라서 대부분의 사람들은 다음과 같은 소프트 링크를 사용합니다 ln -s a.txt e.txt
.
filename where the file is content of the file
---------------------------------------------------------
a.txt sector 13456 abcd
b.txt sector 67679 bcde
c.txt sector 79774 abcd
d.txt sector 67679 bcde
e.txt sector 81233 "Look at where a.txt is located"
첫 번째 근사치로 소프트 링크는 Windows의 바로 가기와 약간 비슷합니다. 그러나 소프트 링크는 파일 시스템의 일부이므로 모든 프로그램에서 사용할 수 있습니다. Windows 바로 가기는 explore.exe
(및 일부 다른 프로그램)에 의해 해석되는 파일일 뿐입니다. 그러나 Windows 프로그램은 바로가기를 해석할 때 어떤 작업을 수행해야 하지만 Linux에서는 소프트 링크가 자동으로 처리됩니다.
대부분의 링크 사용은 더 유연하고, 다른 파일 시스템을 가리킬 수 있고, NFS 등과 함께 사용할 수 있기 때문에 소프트 링크를 사용합니다.
제가 본 하드 링크의 사용 사례 중 하나는 사용자가 파일을 삭제하지 않도록 하는 것입니다. 시스템 관리자는 "포인터" 디렉토리에 하드 링크를 생성하고 사용자가 실수로 rm
파일을 편집한 경우(자주 발생하는 것으로 보임) 테이프를 사용하지 않고 디스크 공간을 두 배로 늘리는 등의 작업 없이 즉시 파일을 복원할 수 있습니다.
작동 방식은 다음과 같습니다.
filename where the file is content of the file
---------------------------------------------------------
a.txt sector 13456 abcd
b.txt sector 67679 bcde
사용자가 를 입력하면 rm a.txt
양식은 다음과 같습니다.
filename where the file is content of the file
---------------------------------------------------------
b.txt sector 67679 bcde
모든 참조가 a.txt
손실됩니다. 다른 파일을 위해 디스크 공간을 회수할 수 있습니다.
그러나 시스템 관리자가 중요한 파일 링크의 복사본을 보관한 경우 형식은 다음과 같습니다.
filename where the file is content of the file
---------------------------------------------------------
a.txt sector 13456 abcd
b.txt sector 67679 bcde
link.a.txt sector 13456 abcd
link.b.txt sector 67679 bcde
이제 사용자가 입력하면 rm a.txt
테이블은 다음과 같이 됩니다.
filename where the file is content of the file
---------------------------------------------------------
b.txt sector 67679 bcde
link.a.txt sector 13456 abcd
link.b.txt sector 67679 bcde
13456부터 시작하는 파일에 대한 참조가 여전히 있기 때문에 해당 파일의 디스크 공간은 여유 공간으로 표시되지 않습니다. 따라서 파일이 여전히 존재합니다. 이제 사용자가 파일을 어떻게든 복원할 수 있는지 묻는 경우 a.txt
시스템 관리자는 그렇게 하면 ln link.a.txt a.txt
파일이 a.txt
다시 나타납니다! 그리고 최신 편집 내용. (물론 link.a.txt
동일한 파일 시스템의 다른 디렉터리에 있으므로 백업을 잊어버릴 수 있다는 의미는 아니지만 당시와 장소에서는 유용한 옵션이었습니다).
답변2
아니요, 바로가기는 먼저 Windows 탐색기/셸에서 열어야 하는 별도의 파일이며, 그런 다음 바로가기를 처리하는 응용 프로그램이 열리거나 실행됩니다. 반면 Unix 응용 프로그램은 기호 링크를 직접 열고 이를 실제 파일로 사용할 수 있습니다.
복사는 파일의 복사본을 생성하는 반면, 하드 링크는 단순히 디스크의 동일한 데이터에 연결된 새 inode를 생성합니다. 하드 링크는 디스크에서 거의 공간을 차지하지 않습니다.
나는 하드 링크를 어느 정도 사용한 적이 없기 때문에 어떤 예도 드릴 수 없습니다. 다음은 Unix의 심볼릭 링크와 하드 링크를 잘 비교한 것입니다.https://blog.usejournal.com/what-is-the-difference-Between-a-hard-link-and-a-symbolic-link-8c0493041b62 https://www.geeksforgeeks.org/soft-hard-links-unixlinux/