컴퓨팅(computing)에서, 심볼릭 링크 (symbolic link, 역시 symlink 또는 soft link))는 절대 또는 상대 경로의 형식에서 또 다른 파일이나 디렉토리로의 참조를 포함하고 경로이름 확인에 영향을 미치는 임의의 파일에 대해 용어입니다.
심볼릭 링크는 1978년에 이미 DEC와 Data General의 RDOS로부터 미니컴퓨터 운영 시스템에 존재했습니다. 오늘날 그것들은 POSIX 운영 시스템 표준, FreeBSD, Linux, 및 macOS와 같은 대부분의 유닉스-계열 운영 시스템에 의해 지원됩니다. 제한된 지원은 역시 Windows Vista, Windows 7과 같은 윈도우 운영 시스템에 존재하고 Windows 2000와 Windows XP에서는 바로 가기 파일 형태로 어느 정도 존재합니다.
Overview
심볼릭 링크는 자동으로 해석되고 운영 시스템이 또 다른 파일이나 디렉토리에 대한 경로로 뒤따르는 텍스트 문자열을 포함합니다. 이 다른 파일 또는 디렉토리는 "대상(targt)"이라고 불립니다. 심볼릭 링크는 그것의 대상과 독립적으로 존재하는 두 번째 파일입니다. 만약 심볼릭 링크가 삭제되면, 그것의 대상은 영향을 받지 않습니다. 만약 심볼릭 링크가 대상을 가리키고, 때때로 나중에 해당 대상이 이동, 이름 변경, 또는 삭제되면, 심볼릭 링크는 자동으로 업데이트되거나 삭제되지 않지만, 계속 존재하고 여전히 이전 대상, 현재 존재하지 않는 위치 또는 파일을 가리킵니다. 이동했거나 존재하지 않는 대상을 가리키는 심볼릭 링크는 때때로 깨진(broken), 고아된(orphaned), 죽은(dead), 또는 매달린(dangling) 것이라고 불립니다.
심볼릭 링크는 하드 링크와 다릅니다. 하드 링크는 다른 볼륨이나 파일 시스템의 경로를 연결하지 않고, 반면에 심볼릭 링크는 링크와 대상이 있는 볼륨에 관계없이 임의의 파일이나 디렉토리를 가리킬 수 있습니다. 하드 링크는 항상 기존 파일을 참조하고, 반면에 심볼릭 링크는 어떤 것도 가리키지 않는 임의적인 경로를 포함할 수 있습니다.
심볼릭 링크는 많은 동작에서 투명하게 작동합니다: 심볼릭 링크에 의해 이름-지정된 파일을 읽거나 쓰는 프로그램은 대상 파일에서 직접 작동하는 것처럼 행동할 것입니다. 어쨌든, 그것들은 계층적 파일 시스템을 트리에서 방향화된 그래프로 변경하는 효과가 있으며, 이는 프로세스의 현재 디렉토리를 결정하는 것과 같은 그러한 간단한 작업에 대해 결과를 초래할 수 있습니다. 심지어 디렉토리의 상위 디렉토리로 이동하기 위한 유닉스 표준조차도 심볼릭 링크에 직면하여 더 이상 안정적으로 작동하지 않습니다. 일부 쉘은 경험적 방법으로 트리-모양의 계층 구조의 환상을 유지하려고 시도하지만, 그렇게 할 때, 이것은 대신 운영 시스템에 의존하여 그러한 경험적 방법 없이 경로이름을 조작하는 다른 프로그램과 다른 결과를 생성하게 되는 원인이 됩니다. 따라서 특별히 심볼릭 링크를 처리해야 하는 프로그램 (예를 들어, 셸과 백업 유틸리티)은 직접 그것들을 식별하고 조작해야 합니다.
일부 유닉스와 리눅스 배포판은 파일 시스템 계층 구조를 재정렬하기 위해 심볼릭 링크를 광범위하게 사용합니다. 이것은 변종, 문맥-의존 심볼릭 링크와 같은 여러 메커니즘으로 달성됩니다. 이것은 시스템 기능과 유틸리티의 핵심 집합을 재설계할 필요없이 보다 직관적이거나 응용 프로그램-별 디렉토리 트리를 생성하고 시스템을 재구성할 수 있는 기회를 제공합니다.
POSIX and Unix-like operating systems
POSIX-호환 운영 시스템에서, 심볼릭 링크는 symlink 시스템 호출로 생성됩니다. ln 셸 명령은 통상적으로 하드 링크를 생성하는 link 시스템 호출을 사용합니다. ln -s 플래그가 지정될 때, symlink() 시스템 호출이 대신 사용되며, 심볼릭 링크를 생성합니다. 심볼릭 링크는 U.C. 버클리에서 4.2BSD 유닉스에 도입되었습니다.
다음 명령은 명령-줄 인터페이스 (쉘)에서 심볼릭 링크를 만듭니다:
ln -s target_path link_path
여기서 target_path는 심볼릭 링크가 가리켜야 하는 상대 또는 절대 경로입니다. 보통 대상은 존재할 것이지만, 심볼릭 링크는 존재하지 않는 대상에 대해 생성될 수 있습니다. link_path는 심볼릭 링크의 경로입니다.
심볼릭 링크를 만든 후, 그것은 일반적으로 대상에 대해 별칭으로 처리될 수 있습니다. 임의의 파일 시스템 관리 명령 (예를 들어, cp, rm)은 심볼릭 링크에서 사용될 수 있습니다. 파일 내용을 읽거나 쓰는 명령은 대상 파일의 내용에 접근할 것입니다. rm (파일 삭제) 명령은, 어쨌든, 대상 파일이 아닌 링크 자체를 제거합니다. 마찬가지로, mv 명령은 대상이 아닌 링크를 이동하거나 이름-변경합니다.
POSIX 디렉토리 목록 응용 프로그램, ls는 긴 디렉토리 목록이 요청될 때 (-l 옵션), 대상 파일의 이름을 가리키는 이름 뒤에 화살표가를 갖는 심볼릭 링크를 나타냅니다 (다음 예제를 참조하십시오). 디렉토리를 가리키는 심볼릭 링크의 디렉토리 목록이 요청될 때, 링크 자체만 표시될 것입니다. 연결된 디렉토리의 목록을 얻기 위해, 그 경로는 후행하는 디렉토리 구분 문자 ('/', 슬래시)를 포함해야 합니다.
주목: 아래 예제에서 /tmp 디렉토리에 링크를 생성하기 전에 "three" 디렉토리를 생성하지 않습니다.
$ mkdir -p /tmp/one/two
$ echo "test_a" >/tmp/one/two/a
$ echo "test_b" >/tmp/one/two/b
$ cd /tmp/one/two
$ ls -l
-rw-r--r-- 1 user group 7 Jan 01 10:01 a
-rw-r--r-- 1 user group 7 Jan 01 10:01 b
$ cd /tmp
$ ln -s /tmp/one/two three
$ ls -l three
lrwxrwxrwx 1 user group 12 Jul 22 10:02 /tmp/three -> /tmp/one/two
$ ls -l three/
-rw-r--r-- 1 user group 7 Jan 01 10:01 a
-rw-r--r-- 1 user group 7 Jan 01 10:01 b
$ cd three
$ ls -l
-rw-r--r-- 1 user group 7 Jan 01 10:01 a
-rw-r--r-- 1 user group 7 Jan 01 10:01 b
$ cat a
test_a
$ cat /tmp/one/two/a
test_a
$ echo "test_c" >/tmp/one/two/a
$ cat /tmp/one/two/a
test_c
$ cat a
test_c
Storage of symbolic links
심볼릭 링크의 초기 구현은 심볼릭 링크 정보를 정규 파일에서 데이터로 저장했습니다. 그 파일은 링크 대상으로의 텍스트 참조가 포함되어 있었고, 파일 모드 비트는 파일의 유형이 심볼릭 링크임을 나타냅니다.
이 방법은 작은 시스템에서 느리고 디스크-공간을 비효율적으로 사용했습니다. 고속 심볼릭 링크(fast symlinks)라고 불리는 개선 사항은 디스크 (inode)에 파일 정보를 저장하는 데 사용되는 데이터 구조 내에서 대상 경로의 저장을 허용했습니다. 이 공간은 통상적으로 파일에 할당된 디스크 블록 주소의 목록을 저장합니다. 따라서, 짧은 대상 경로를 갖는 심볼릭 링크는 빠르게 접근됩니다. 빠른 심볼릭 링크를 갖는 시스템은 종종 대상 경로가 사용 가능한 inode 공간을 초과하면 원래 방법을 사용하는 것으로 돌아갑니다. 원래 스타일은 소급되어 느린 심볼릭 링크(slow symlink)라고 합니다. 그것은 역시 다른 또는 이전 버전의 운영 시스템과의 디스크 호환성을 위해 사용됩니다.
비록 inode 내부에 링크 값을 저장하는 것이 디스크 블록과 디스크 읽기를 저장하더라도, 운영 시스템은 여전히 링크에서 경로 이름을 구문 분석해야 하며, 항상 추가 inode를 읽어야 하고, 일반적으로 다른고, 링크의 경로 구성 요소와 일치하는 것을 찾을 때까지 파일 목록과 각 파일의 inode를 모두 처리하는 잠재적으로 많은 디렉터리를 읽어야 합니다. 링크가 같은 디렉토리에서 파일을 가리키는 경우에만 "빠른 심볼릭 링크"가 다른 심볼릭 링크보다 훨씬 더 나은 성능을 제공합니다.
대다수의 POSIX-호환 구현은 빠른 심볼릭 링크를 사용합니다. 어쨌든, POSIX 표준은 정규 파일에 공통적인 전체 파일 상태 정보 집합을 심볼릭 링크에 대해 구현되도록 요구하지 않습니다. 이것은 구현을 디렉터리 엔트리에 심볼릭 링크 데이터를 저장하는 것과 같은 다른 해를 사용하는 것을 허용합니다.
심볼릭 링크의 파일 시스템 허가권은 사용되지 않습니다; 대상 파일의 접근 모드는 대상 파일의 자체 권한에 의해 제어됩니다. FreeBSD와 같은 일부 운영 시스템은 각각 lchmod와 lchflags 시스템 호출을 통해 심볼릭 링크의 파일 허가권과 파일시스템 속성을 수정하는 기능을 제공합니다.
보고된 심볼릭 링크 크기는 심볼릭 링크가 가리키는 경로에서 문자의 개수입니다.
Mac OS aliases
Mac OS에서, 같은 볼륨에서 또 다른 위치로 이동하더라도 대상을 추적하는 더해진 기능을 가지는 aliases을 응용 프로그램이나 사용자가 사용할 수도 있습니다. 이것은 쉘 명령 별칭(alias)과 혼동되어서는 안됩니다.
Summary
Property/action | Symbolic link | Junction | Hard link | |
When the link is deleted | Target remains unchanged | Target is deleted (except when using special tools) | Reference counter is decremented; when it reaches 0, the target is deleted | |
When target is moved | Symbolic link becomes invalid | Junction becomes invalid | Hard link remains valid | |
Relative path | Allowed | Not allowed (on saving, becomes an absolute path) | N/A | |
Crossing filesystem boundaries |
Supported | Supported | Not supported (target must be on same filesystem) | |
Windows | For files | Windows Vista and later (administrator rights required) |
No | Yes |
Yes | No | |||
For folders | ||||
Unix | For files | Yes | N/A | Yes |
For directories |
Yes | N/A | Partial |
- The Windows implementation is not POSIX-compliant.
- POSIX permits hard links on directories but does not require them. Modern file systems tend to not support it.
Variable symbolic links
심볼릭 링크는 구성 매개변수, 런타임 매개변수, 또는 기타 순간적인 조건에 따라 링크가 다양한 대상을 가리키도록 문맥-종속 또는 변수 방식으로 구현될 수 있습니다.
변수(variable) 또는 변종 심볼릭 링크(variant symbolic link)는 그것 내에 삽입된 변하는 이름을 가지는 심볼릭 링크입니다. 이것은 표준 심볼릭 링크로는 가능하지 않은 파일시스템 순서에서 유연성을 허용합니다. 심볼릭 링크에 삽입된 변수는 사용자와 환경 관련 정보를 포함할 수 있습니다.
변종 심볼릭 링크를 사용하는 운영 시스템은 NetBSD, DragonFly BSD, Domain/OS를 포함합니다. Tru64는 문맥이 클러스터 구성원 숫자인 문맥 종속 심볼릭 링크(context dependent symbolic link)를 사용합니다.
Pyramid Technology의 OSx 운영 시스템은 프로그램이 실행되는 유니버스에 따라 다른 위치를 가리키는 조건부 심볼릭 링크(conditional symbolic links)를 구현했습니다. 지원되는 유니버스는 AT&Ts의 SysV.3와 Berkeley Software Distribution (BSD 4.3)이었습니다. 예를 들어: 만약 ps 명령이 att 유니버스에서 실행되면, /bin 디렉토리에 대한 심볼릭 링크가 /.attbin을 가리키고 /.attbin/ps 프로그램이 실행될 것입니다. 반면에 ps 명령이 ucb 유니버스에서 실행되면 /bin은 /.ucbbin을 가리키고 /.ucbbin/ps가 실행될 것입니다. 유사한 조건부 심볼릭 링크가 역시 /lib, /usr/lib, /usr/include와 같은 다른 디렉토리에 대해 생성되었습니다.
External links
- Q & A: The difference between hard and soft links as applied to Linux
- Junction: maintain NTFS junction points (for Windows 2000 and above)
- FSUtil Hardlink: Microsoft Technet page on using the command-line tool FSUtil to create hardlinks (for Windows 2000 and above)
- Link Shell Extension: Windows Explorer context menu, overlay icons and property sheet handler to maintain hardlinks, NTFS junction points, symbolic links etc.
- Symbolic Drivers for Windows XP (in Japanese): file system drivers to enable Symbolic Links for Windows XP (also mirrored on Link Shell Extension site). Sources available.