심볼릭 링크와 하드 링크의 차이점은 무엇입니까?

심볼릭 링크와 하드 링크의 차이점은 무엇입니까?

언제 다른 것을 사용 하시겠습니까?

답변1

하드 링크와 소프트 링크의 의미가 다르기 때문에 서로 다른 용도에 적합합니다.

하드 링크:

  • 다른 디렉토리 항목과 구별할 수 없기 때문에모든디렉토리 항목은 하드 링크입니다.
  • 동일한 inode에 대한 다른 하드 링크를 끊지 않고도 "원본"을 이동하거나 삭제할 수 있습니다.
  • 동일한 파일 시스템에서만 사용할 수 있습니다.
  • 권한은 "원본"과 동일해야 합니다(권한은 디렉토리 항목이 아닌 inode에 저장됨).
  • 만 만들 수 있습니다디렉토리가 아닌 파일

심볼릭 링크(소프트 링크)

  • 다른 파일 경로를 가리키는 것을 기록하면 됩니다. ( ls -l심볼릭 링크가 가리키는 경로가 표시됩니다)
  • 원본을 이동하거나 삭제하면 이 작업이 중단됩니다. (어떤 경우에는 실제로 현재 특정 위치를 차지하고 있는 파일을 가리키는 링크를 원할 수도 있습니다.)
  • 다른 파일 시스템의 파일을 가리킬 수 있음
  • 디렉토리를 가리킬 수 있음
  • 일부 파일 시스템 형식에서는 심볼릭 링크가 가리키는 파일과 다른 권한을 가질 수 있습니다(이는 일반적이지 않음).

답변2

두 가지 유형의 링크의 목적은 파일이 동시에 두 위치에 표시되는 방법을 제공하는 것입니다. 이것은 많은 용도로 사용됩니다. 10번 중 9번은 기호 링크를 사용하고 싶을 것입니다.

기호 링크 또는 "symlink"는 Windows 바로 가기와 약간 유사하게 작동합니다. 심볼릭 링크의 내용은 파일/디렉토리의 실제 위치에 대한 포인터입니다. 실제 파일을 삭제하면 심볼릭 링크가 "매달려" 작동하지 않게 됩니다. 심볼릭 링크를 삭제해도 실제 파일은 삭제되지 않습니다. 단일 파일에 대한 심볼릭 링크(또는 다른 심볼릭 링크)를 원하는 만큼 가질 수 있습니다.

그러나 Windows와 달리 셸이나 애플리케이션 수준이 아닌 파일 시스템 수준에서 작동하므로 거의 모든 애플리케이션이 예상대로 심볼릭 링크를 "따릅니다". ls -al기호 링크가 "가리키는" 위치를 확인하는 빠른 방법으로 사용할 수 있습니다.

하드 링크는 낮은 수준에서도 작동합니다. 하드 링크는 파일에 대한 실제 물리적 파일 시스템 수준 디렉터리 항목입니다. 기술적으로 디렉토리 항목은 하드 링크이므로 모든 파일에는 디렉토리 어딘가에 적어도 하나의 하드 링크가 있습니다. 하드 링크는 해당 파일이 가리키는 파일과 분리되지 않습니다. 파일에 서로 다른 디렉터리에 여러 개의 하드 링크가 있는 경우 유사한 유틸리티를 사용하여 하드 링크를 삭제하면 rm모든 하드 링크가 사라질 때까지 파일이 실제로 삭제되지 않습니다.

의도적으로 파일이 삭제되는 것을 방지하거나 파티션이나 기타 파일 시스템 관련 작업으로 이상한 하위 수준 작업을 수행하지 않는 한 하드 링크를 사용하는 것이 일반적이거나 필수라고 상상할 수 없습니다. 편집: 하지만 이 질문에 대한 다른 답변에는 훌륭한 아이디어가 있습니다!

답변3

하드 링크는 디스크 기반 백업 메커니즘에 유용합니다. 왜냐하면 변경되지 않은 파일에 대한 공간을 공유하면서 각 백업에 대해 완전한 디렉터리 트리를 가질 수 있고 파일 시스템이 참조 카운트를 추적하므로 백업으로 인해 마지막 참조가 생성된 시기를 알 수 있기 때문입니다. 공간 문제로 인해 만료/삭제된 버전으로, 해당 버전이 사라지면 해당 버전이 사용한 공간이 자동으로 회수됩니다. 같은 이유로 일부 메일 클라이언트에서는 메일을 여러 폴더에 보관하는 데에도 사용합니다.

답변4

하드 링크는 동일한 디스크 공간에 대한 참조일 뿐이므로 다른 파일 시스템의 항목을 하드 링크할 수 없습니다.

심볼릭 링크는 동일한 파일 시스템에 있을 수도 있고 아닐 수도 있는 다른 파일(Windows 바로 가기)에 연결되는 파일입니다.

편집: 더 자세히 설명하겠습니다. 존재하는 모든 파일에는 적어도 하나의 하드 링크가 있습니다. 하드링크는방법파일 시스템의 inode 내용에 액세스합니다. 파일의 inode 번호 ls -i와 하드 링크 수를 얻을 수 있습니다. stat이 예는 다음과 같습니다.

$ stat plantilla-disenos.odt 
  File: «plantilla-disenos.odt»
  Size: 12367       Blocks: 32         IO Block: 4096   fichero regular
Device: 803h/2051d  Inode: 319875      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/   d4rio)   Gid: ( 1000/   d4rio)
Access: 2011-02-11 21:36:19.000000000 -0300
Modify: 2010-03-02 23:27:28.000000000 -0300
Change: 2010-04-10 17:46:27.000000000 -0300

이 참조에 대해 @geekosaur에게 감사드립니다.

커널은 기호 링크를 확장하기 위해 경로명을 inode로 변환(디렉토리 트리 탐색)을 다시 시작해야 하는 반면, 하드 링크는 모두 동일한 inode를 사용합니다. (기존 Unix에서 이 작업을 수행하는 커널 함수의 이름에서 namei라는 이름을 자주 볼 수 있습니다.)

그리고 이것은 (편집됨):

하드 링크는 디스크 기반에 유용합니다.증가백업 메커니즘애플의 타임머신처럼, 변경되지 않은 파일에 대한 공간을 공유하면서 각 백업에 대한 완전한 디렉터리 트리를 가질 수 있고 파일 시스템은 참조 수를 추적하므로 특정 버전에 대한 마지막 참조가 백업 만료/공간 삭제로 인해 사라지는 경우 이유로 사용된 공간은 자동으로 회수됩니다. 같은 이유로 일부 메일 클라이언트에서는 메일을 여러 폴더에 보관하는 데에도 사용합니다.

건배

관련 정보