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


내 사용 사례는 심볼릭을 감지하는 것입니다. git 저장소 내부의 링크 (및 해당 기록). 파일 모드 때문에 심볼릭 링크가 심볼릭 링크라는 인상을 받았습니다. 그 파일 모드는 도구 chmod가 설정하는 것입니다.

댓글

  • superuser.com/questions/303040/ … 참조
  • 제 질문이 ' git의 심볼릭 링크 인 파일 모드 '에 대한 질문이 더 나은 것 같습니다.
  • stackoverflow.com/questions/15465436/git-how-to-handle-symlinks
  • chmod는 권한 비트 (rwx 및 sticky / setuid / setgid 비트, …)를 설정합니다. 이것이 " 모드 . 하지만 대신 파일 유형 을 참조하는 것 같습니다.
  • @JohnWHSmith 파일 모드와 파일 유형의 차이점을 구분하는 문서에 대한 링크를 찬성하고 싶습니다! : D

답변

파일 모드는 파일 유형과 파일 권한이라는 두 가지 다른 개념을 다룹니다. 파일 모드는 stat(2) 호출 및 ls -l

값으로 표시됩니다.

는 이들을 모두 함께 제공합니다. 자세한 내용은 UNIX 권한 및 파일 유형 이해 를 참조하세요.

파일이 생성되면 파일 유형이 “변경하지 마십시오. 또한 Linux 시스템에서는 “심볼 링크”권한을 지정할 수 없습니다. 중요한 것은 대상의 권한뿐입니다 (심볼 링크의 동작도 결정하므로 사실상 전체 모드). 자세한 내용은 파일 권한이 심볼릭 링크에 어떻게 적용 되나요? 를 참조하세요. Mac OS X에서 심볼릭 링크는 자체 권한을 가질 수 있습니다.

마지막으로 git는 제한된 수의 인식 모드가있는 단순화 된 모델을 사용합니다.

  • 040000 디렉터리 용
  • 100644 일반 파일 용
  • 100755 실행 파일 용
  • 120000 심볼릭 링크 용

이러한 값은 git cat-file -p "master^{tree}"와 같은 명령을 사용하여 볼 수 있습니다. 자세한 내용은 Pro Git 를 참조하세요.

답변

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

확인할 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에서는)입니다.

답변

심볼 링크 (일부 파일 시스템에서는 심볼릭 링크를 다르게 처리하지만)는 다른 파일 (또는 디렉토리)과 같은 위치를 가리키는 inode 테이블 항목입니다.

예를 들어 fooinode 1234이면 bar (a foo에 대한 심볼릭 링크)는 inode 1234입니다.

bar는 실제로 존재하지 않습니다. “실제”파일.

Symlinks 일반적으로 그들이 가리키는 파일의 권한 이외의 권한은 없습니다. 따라서 bar"s 권한은 “동일”as foo"s. foo

(심볼 링크)에 대한 권한을 설정할 수 없습니다.

(실제 파일).

즉, “정말 높은 수준의보기입니다. 다른 파일 시스템은 심볼릭 링크를 다르게 처리합니다. 다른 도구는 symlinks를 다르게 처리합니다. 일부 파일 시스템은”flag “symlinks 특수하게 처리하지만 일부는 그렇지 않습니다.

예를 들어 Linuxchmodsymlinks 권한이 있지만 OSX에서 얻을 수 있습니다. 두 경우 모두 실제 파일 권한이 변경됩니다.

나는 어떤 시스템도 생각할 수 없습니다. 즉, symlink에 실제 파일과는 별도의 권한이 있습니다.

댓글

  • 아니요, 심볼릭 링크는 일반 파일이 아닌 파일 이름을 포함하는 파일 유형 (" 모든 것이 파일 ")입니다. 일반적으로이 파일 이름은 기존 파일을 참조합니다. '는 심볼릭 링크를 갖는 전체 지점을 의미하지만 사실이 보장되지는 않습니다. 예, 심볼릭 링크 (다른 모든 파일과 마찬가지로 inode가 있습니다. 아니요, 심볼릭 링크와 다른 inode 번호를 가진 별도의 inode를 갖는 파일을 가리 킵니다. 하드 링크는 동일한 inode를 가지므로 동일한 inode 번호 ber.
  • 높은 수준을 의미했지만 최신 시스템에서는 ' inode 테이블에 문자열이 포함되고 실제 파일이없는 하드 드라이브에 파일을 만들지 않습니다. 만들어진. '는 " 빠른 심볼릭 링크 "
  • 라고 생각합니다. ' foo ' 및 ' bar '는 모두 노드 1234에 대한 포인터이고 ' 심볼 링크가 아닌 HARD 링크입니다. " bar "가 SYMlink이면 문자 그대로 문자열 "입니다. 노드 대신 foo " (또는 foo에 대한 경로). 실제로 ' 아무 의미도없는 심볼릭 링크를 만들 수 있습니다 (예 : ln -s 'this is not a real file' bar
  • 또한, BSD (Mac OS X 포함)에는 심볼릭 링크 자체의 권한을 설정할 수있는 lchmod () 시스템 호출이 있습니다. 그 용도가 무엇인지 전혀 모르겠습니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다