하드 링크
Hard link컴퓨팅에서 하드링크는 이름과 파일을 연관짓는 디렉토리 엔트리(디렉토리 기반 파일시스템 내)입니다.따라서 각 파일에는 적어도1개의 하드링크가 필요합니다.파일에 대한 추가 하드 링크를 만들면 추가 경로(즉, 다른 이름 또는 다른 디렉토리)[1]를 통해 해당 파일의 내용에 액세스할 수 있습니다.이로 인해 에일리어스 효과가 발생합니다.프로세스에서는 임의의 경로로 파일을 열고 내용을 변경할 수 있습니다.반면 파일에 대한 소프트 링크 또는 "바로 가기"는 데이터 자체에 대한 직접 링크가 아니라 하드 링크 또는 다른 소프트 링크에 대한 참조입니다.
모든 디렉토리는 파일 이름 목록을 포함하는 특수한 파일입니다.따라서 디렉토리에 대한 여러 하드링크가 가능하며, 이는 트리처럼 분기 구조가 아닌 순환 디렉토리 구조를 만들 수 있습니다.이러한 이유로 일부 파일 시스템에서는 디렉토리에 대한 하드 링크 작성을 금지하고 있습니다.
Linux, Android, macOS 및 Windows NT [2]패밀리와 같은 POSIX 호환 운영체제는 파일 시스템에 따라 동일한 파일에 대한 여러 하드 링크를 지원합니다.예를 들어 NTFS는 하드 링크를 지원하지만 FAT 및 ReFS는 지원하지 않습니다.
작동
"LINK A"라는 이름의 두 개의 하드 링크를 사용합니다.TXT' 및 'LINK B'입니다.TXT"는 동일한 물리적 데이터를 가리킵니다.텍스트 편집기가 "LINK A"를 엽니다.TXT"에서 수정하고 저장합니다.에디터(또는 다른 앱)가 "LINK B"를 열었을 때TXT"는 "LINK A"에 변경된 내용을 볼 수 있습니다.TXT"를 선택합니다.두 파일 이름이 같은 데이터를 가리키기 때문입니다.따라서 사용자의 관점에서 이것은 여러 개의 파일 이름을 가진 하나의 파일입니다.파일 이름을 편집하면 "모든" 파일이 수정되지만 마지막 파일 이름을 제외한 "모든" 파일 이름은 삭제됩니다.
그러나 GNU Emacs와 같은 일부 에디터는 하드 링크 개념을 깨기도 합니다.예를 들어 "LINK B"와 같은 파일을 편집하기 위해 열 때.TXT", emacs의 이름을 "LINK B"로 변경합니다.TXT'에서 'LINK B'로 이동합니다.TXT~", 로드 "LINK B.TXT~"를 에디터에 삽입하여 새로 작성한 "LINK B"에 변경 내용을 저장합니다.'TXT' 이제 'LINK A'TXT' 및 'LINK B'입니다.TXT"는 더 이상 동일한 데이터를 공유하지 않습니다.(이 동작은 emacs 변수를 사용하여 변경할 수 있습니다.backup-by-copying
.)
물리 데이터에 대한 하드링크는 얼마든지 생성할 수 있습니다.데이터에 액세스하려면 사용자는 기존 링크 이름만 지정하면 됩니다.운영체제는 실제 데이터의 위치를 확인합니다.사용자가 하드 링크 중 하나를 삭제하더라도 나머지 링크를 통해 데이터에 액세스할 수 있습니다.사용자가 모든 링크를 삭제하면 파일이 열려 있는 프로세스가 없는 경우 운영체제는 파일이 사용하던 디스크 공간을 비웁니다.
참조 카운트

하드 링크를 지원하는 대부분의 파일 시스템은 참조 카운트를 사용합니다.시스템은 각 논리 데이터 섹션에 데이터를 가리키기 위해 작성된 하드 링크의 총 수를 나타내는 정수 값을 저장합니다.새 링크가 생성되면 이 값은 1씩 증가합니다.링크가 삭제되면 값이 1씩 감소합니다.카운터가 0이 되면 운영체제는 논리 데이터 섹션을 해방합니다.(예를 들어 미결 파일핸들이 열려 있는 경우, 퍼포먼스상의 이유로 또는 undelete 명령어를 유효하게 하는 경우 등 OS는 즉시 그렇게 하지 않을 수 있습니다).
0 값은 빈 공간을 나타내며 0 이외의 값은 사용된 공간을 나타내므로 파일 시스템이 주어진 스토리지 영역의 사용을 추적하는 간단한 방법입니다.이 값을 유지하면 하드링크가 아무 곳이나 가리키지 않게 됩니다.데이터 섹션 및 관련 inode는 단일 하드 링크(디렉토리 참조)가 데이터 섹션을 가리키거나 프로세스가 관련 파일을 열어 두는 한 유지됩니다.
POSIX 준거 운영체제시스템에서는 파일 또는 디렉토리의 참조 카운트는 의 stat() 또는 fstat() 시스템콜에 의해 반환됩니다.st_nlink
의 분야struct stat
.
제한 사항
파일 시스템에서 루프를 방지하고 ""의 해석을 유지하기 위해..
파일(부모 디렉토리)과 일관성이 있는 운영체제는 디렉토리에 대한 하드링크를 허용하지 않습니다.UNIX System V는 이러한 링크를 허용했지만 이러한 [3]링크를 만들 수 있는 권한을 가진 것은 슈퍼 사용자뿐입니다.Mac OS X v10.5(Leopard) 이후에는 디렉토리의 하드 링크를 Time Machine 백업 메커니즘에만 [4]사용합니다.
하드 링크는, 같은 파일 시스템내에 있는 같은 볼륨의 파일에만 작성할 수 있습니다.(볼륨마다 파일 시스템이 다를 수 있습니다.타겟 볼륨의 파일 시스템이 하드 링크와 호환된다는 보장은 없습니다.)
단일 파일에 대한 최대 하드 링크 수는 참조 카운터의 크기에 따라 제한됩니다.UNIX 유사 시스템에서는 카운터는 4,294,967,295(32비트머신) 또는 18,446,744,073,709,551,615(64비트머신)입니다.일부 파일 시스템에서는 하드 링크의 수가 온디스크 포맷에 의해 엄격하게 제한됩니다.예를 들어 Linux 3.11 이후 ext4 파일시스템에서는 파일의 하드링크 수가 65,[5]000개로 제한됩니다.Windows 제한에서는 NTFS [6]볼륨의 파일에 대한 하드 링크를 1024개로 제한합니다.
Linux Weekly News에서 Neil Brown은 하드 링크는 아카이브 서버 및 디스크 사용 도구를 포함한 디렉토리 트리를 처리하는 프로그램의 설계를 복잡하게 하기 때문에 유지 보수 수준이 높다고 비판했습니다.이러한 앱은 계층에서 여러 번 연결된 파일의 중복 제거에 주의해야 합니다.브라운은 Unix의 후속 제품인 Bell Labs의 Plan 9에는 하드 [7]링크의 개념이 포함되어 있지 않다고 지적합니다.
플랫폼 지원
Windows NT 3.1 이상은 NTFS 파일 시스템에서 [8]하드 링크를 지원합니다.Windows 2000 에는,CreateHardLink()
하드 링크를 생성하는 기능을 수행하지만 디렉토리가 [9]아닌 파일에만 사용할 수 있습니다.그DeleteFile()
기능을 통해 제거할 수 있습니다.
Windows 에 하드 링크를 작성하려면 , 최종 사용자는 다음의 조작을 실시할 수 있습니다.
- 그
fsutil
유틸리티(Windows [10]2000에서 도입) - 그
mklink
Windows 명령 프롬프트의 내부 명령어(Windows Vista 및 Windows Server [11]2008에서 도입) - 그
New-Item
PowerShell의[12] cmdlet
파일의 하드 링크를 조사하려면 최종 사용자는 다음을 사용할 수 있습니다.
- 그
fsutil
효용[10] - 그
Get-Item
그리고.Get-ChildItem
PowerShell의 cmdlets.이러한 cmdlet은 개체가 있는 각 파일을 나타냅니다. PowerShell은 각 파일에 읽기 전용 LinkType 속성을 추가합니다.이 속성은 "를 포함합니다.HardLink
관련 파일에 여러 개의 하드 [13]링크가 있는 경우 string.
Windows 컴포넌트 스토어는 하드 링크를 사용하여 하드 디스크 드라이브에 저장된 다양한 버전의 컴포넌트를 추적합니다.
Unix와 같은 시스템에서는link()
시스템 콜을 통해 기존 파일에 대한 추가 하드링크가 작성될 수 있습니다.하드 링크를 작성하기 위해 최종 사용자는 다음을 사용할 수 있습니다.
파일의 하드 링크를 조사하려면 최종 사용자는 다음을 사용할 수 있습니다.
Microsoft Windows 상에서 동작하는 Unix 계열의 에뮬레이션 또는 호환성 소프트웨어(Cygwin 및 Subsystem for UNIX 기반 응용 프로그램)에서는 POSIX 인터페이스를 사용할 수 있습니다.
OpenVMS는 ODS-5 파일시스템상의 [14]하드링크를 지원합니다.Unix 와는 달리, VMS 는 디렉토리에의 하드 링크를 작성할 수 있습니다.
「 」를 참조해 주세요.
- 심볼릭 링크: 파일 데이터 자체가 아닌 하드 링크를 가리킵니다.따라서 볼륨과 파일 시스템 전체에서 작동합니다.
- NTFS 링크:NTFS가 지원하는 4가지 링크 유형(하드 링크, 심볼릭 링크, 연결 지점 및 볼륨 마운트 지점)에 대해 자세히 설명합니다.
- 바로 가기:로컬 또는 원격 위치에 있는 다른 파일을 가리키는 작은 파일
- freedup –
freedup
명령어는 중복된 데이터스토어를 자동으로 생성된 하드 링크로 대체하여 디스크 공간을 확보합니다.
레퍼런스
- ^ Pitcher, Lew. "Q & A: The difference between hard and soft links".
- ^ "Link Shell Extension".
- ^ Bach, Maurice J. (1986). The Design of the UNIX Operating System. Prentice Hall. p. 128. ISBN 9780132017992.
- ^ Pond, James (August 31, 2013). "How Time Machine Works its Magic". File System Event Store, Hard Links. Retrieved May 19, 2019.
- ^ "Linux kernel source tree, fs/ext4/ext4.h, line 229".
- ^ "CreateHardLinkA function (winbase.h)". Windows App Development. 13 October 2021 – via Microsoft Docs.
- ^ Brown, Neil (23 November 2010). "Ghosts of Unix past, part 4: High-maintenance designs". Linux Weekly News. Retrieved 20 April 2014.
- ^ "How hard links work". Microsoft Docs.
- ^ "CreateHardLink Function". Windows Development. Microsoft. 10 March 2011. Archived from the original on 2 July 2011 – via MSDN.
Establishes a hard link between an existing file and a new file. This function is only supported on the NTFS file system, and only for files, not directories.
{{cite web}}
: CS1 유지보수: 부적합한 URL(링크) - ^ a b "Fsutil hardlink". Windows App Development. Microsoft. 18 April 2012 – via Microsoft Docs.
- ^ "Mklink". Microsoft Docs. Microsoft. 18 April 2012.
- ^ a b "New-Item (PowerShell 3.0)". Microsoft Docs. Microsoft. 22 June 2020.
If your location is in a FileSystem drive, the following values are allowed: If your location is in a FileSystem drive, the following values are allowed: File[,] Directory[,] Junction[,] HardLink
- ^ a b "FileSystemProvider.cs". PowerShell / PowerShell repo. Microsoft. 20 November 2021. Lines 8139–8234 – via GitHub.
- ^ "OpenVMS System Manager's Manual, Vol. I" (PDF). VSI. August 2019. Retrieved 2021-01-23.