심볼릭 링크는 어떤 파일 모드입니까?

심볼릭 링크는 어떤 파일 모드입니까?

파일이 심볼릭 링크임을 나타내는 파일 모드는 무엇입니까?


내 사용 사례는 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 foois inode 1234then bar(foo에 대한 심볼릭 링크) is 입니다 inode 1234.

bar실제로 존재하지 않으며 단지 "실제" 파일에 대한 포인터일 뿐입니다.

Symlinks일반적으로 가리키는 파일의 권한 이외의 권한은 없습니다. 따라서 bar's권한은 "동일"합니다 as foo's. (실제 파일) bar에만 (기호 링크) 권한을 설정할 수 없습니다 foo.

말하자면 이것은 매우 높은 수준의 견해입니다. 파일 시스템마다 기호 링크를 다르게 처리합니다. 다른 도구는 이를 symlinks다르게 처리합니다. 일부 파일 시스템은 이를 "표시" symlinks하고 구체적으로 처리하지만 일부는 그렇지 않습니다.

예를 들어 chmodon은 권한을 Linux변경하지 않지만 권한을 얻을 수는 있습니다. 두 경우 모두 실제 파일 권한이 변경됩니다.symlinksOSX

symlinka가 실제 파일과 별도의 권한을 갖는 시스템은 생각할 수 없습니다(존재하지 않는다는 의미는 아닙니다) .

관련 정보