파일이 심볼릭 링크임을 나타내는 파일 모드는 무엇입니까?
내 사용 사례는 git 저장소(및 해당 기록) 내에서 심볼릭 링크를 감지하는 것입니다. 내 생각에 심볼릭 링크는 파일 모드 때문에 심볼릭 링크이고 파일 모드는 chmod
도구에 의해 설정된다는 것입니다.
답변1
파일 모드는 파일 유형과 파일 권한이라는 두 가지 개념을 다룹니다. 파일의 모드는 호출 st_mode
결과의 값으로 표시되며 stat(2)
함께 ls -l
표시됩니다.UNIX 권한 및 파일 유형 이해더 알아보기.
파일이 생성되면 해당 유형을 변경할 수 없습니다. 또한 Linux 시스템에서는 심볼릭 링크의 권한을 지정할 수 없습니다. 중요한 것은 대상의 권한입니다(심볼릭 링크의 동작도 결정하므로 실제로 전체 모드). 바라보다파일 권한은 심볼릭 링크에 어떻게 적용됩니까?더 알아보기. Mac OS X에서는 심볼릭 링크가 자체 권한을 가질 수 있습니다.
마지막으로 git
식별 가능한 패턴 수가 제한된 단순화된 모델을 사용합니다.
040000
디렉토리의 경우100644
일반 파일의 경우100755
실행 파일의 경우120000
심볼릭 링크의 경우
다음 명령을 사용하여 이러한 값을 볼 수 있습니다 git cat-file -p 'master^{tree}'
.Git의 프로페셔널 버전더 알아보기.
답변2
파일이 심볼릭 링크임을 나타내는 파일 모드는 무엇입니까?
POSIX API 매크로를 사용하여 파일이 심볼릭 링크인지 확인하세요 S_ISLNK
.
glibc에서는 S_ISLNK
다음과 같이 정의됩니다.
#define __S_IFMT 0170000 /* These bits determine file type. */
#define __S_IFLNK 0120000 /* Symbolic link. */
#define __S_ISTYPE(mode, mask) (((mode) & __S_IFMT) == (mask))
#define S_ISLNK(mode) __S_ISTYPE((mode), __S_IFLNK)
즉, 파일은 if ((mode & 0170000) == 0120000)
(적어도 GNU/Linux에서는) 심볼릭 링크입니다.
답변3
기호 링크(일부 파일 시스템에서는 기호 링크를 다르게 처리하지만)는 inode
다른 파일(또는 디렉터리)과 동일한 위치를 가리키는 테이블 항목입니다.
예를 들어 if foo
is inode 1234
then bar
(foo에 대한 심볼릭 링크) is 입니다 inode 1234
.
bar
실제로 존재하지 않으며 단지 "실제" 파일에 대한 포인터일 뿐입니다.
Symlinks
일반적으로 가리키는 파일의 권한 이외의 권한은 없습니다. 따라서 bar's
권한은 "동일"합니다 as foo's
. (실제 파일) bar
에만 (기호 링크) 권한을 설정할 수 없습니다 foo
.
말하자면 이것은 매우 높은 수준의 견해입니다. 파일 시스템마다 기호 링크를 다르게 처리합니다. 다른 도구는 이를 symlinks
다르게 처리합니다. 일부 파일 시스템은 이를 "표시" symlinks
하고 구체적으로 처리하지만 일부는 그렇지 않습니다.
예를 들어 chmod
on은 권한을 Linux
변경하지 않지만 권한을 얻을 수는 있습니다. 두 경우 모두 실제 파일 권한이 변경됩니다.symlinks
OSX
symlink
a가 실제 파일과 별도의 권한을 갖는 시스템은 생각할 수 없습니다(존재하지 않는다는 의미는 아닙니다) .