심볼릭 링크 파일의 실제 내용

심볼릭 링크 파일의 실제 내용

검색했지만 아무것도 찾을 수 없습니다. ext 파일 시스템에서 심볼릭 링크의 파일 구조(바이트 단위)에 대한 세부 정보를 찾고 있습니다.

나는 심볼릭 링크 파일을 생성한 다음 hexdump해당 심볼릭 링크를 사용해 보았지만 디렉토리(폴더를 가리키는 링크)라고 불평했기 때문에 링크 자체가 아닌 링크가 가리키는 파일/폴더를 덤프하려고 한 것 같습니다.

답변1

자세한 내용을 제공하지 않았으므로 이 설명은 현재 Linux에서 일반적인 EXT 파일 시스템에 중점을 둡니다.

예를 들어 에서 제공하는 심볼릭 링크의 "크기"를 보면 ls -l크기가 가리키는 대상 이름만큼 길다는 것을 알 수 있습니다. 따라서 "실제" 파일에는 링크 대상에 대한 경로만 텍스트로 포함되어 있고 심볼릭 링크의 해석이 파일 유형 메타데이터(특히 S_IFLINK링크된 파일의 inode 필드에 있는 플래그) i_mode에 첨부되어 저장되므로 추론할 수 있습니다. 권한 비트도 저장되어 있습니다.이 커널 문서 참조).

i_block성능을 향상시키고 장치 IO를 줄이기 위해 기호 링크가 60바이트보다 짧은 경우 inode 자체의 필드 에 저장됩니다 (참조:여기). 이렇게 하면 별도의 블록 액세스가 필요하지 않으므로 이러한 링크를 "빠른 기호 링크"라고 합니다. 이는 더 긴 경로를 가리키는 기호 링크와 달리 외부 데이터 블록의 텍스트로 링크 대상의 "전통적인" 저장소로 돌아갑니다. "방법.

답변2

그것은 모두 파일 시스템에 따라 다릅니다.

일반적으로 심볼릭 링크 대상은 작은 디렉터리나 작은 파일처럼 inode 블록의 추가 공간에 있는 그대로 저장됩니다. 특별한 데이터 형식은 필요하지 않습니다. 파일 모드 비트는 이미 심볼릭 링크임을 결정하고 심볼릭 링크로 취급해야 합니다. 목표는 "실제 콘텐츠"입니다. readlink -n /path/to | hexdump정말로 사용하고 싶다면 사용하면 됩니다 hexdump.

기호 링크에서 lstat(2)가 호출되면 st.st_size대상의 길이가 포함됩니다(종료되는 NUL 바이트 제외).

답변3

심볼릭 링크를 사용하면 hexdumpext4 파일 시스템이 전혀 확인되지 않습니다. 이는 애플리케이션 지향 추상화에 중점을 둡니다. 이 수준에서는 볼 것이 없습니다. 심볼릭 링크를 열면 경로 확인 의미에 따라 해당 링크가 참조하는 콘텐츠 열기(no O_NOFOLLOW) 또는 실패( )를 시도합니다. O_NOFOLLOW이 추상화 계층의 내용을 읽는 방법은 readlink이를 생성하기 위해 전달된 바이트 시퀀스를 제공하는 것입니다. symlink이것은 디스크에 어떻게 표현되는지에 대해서는 아무 것도 알려주지 않습니다.

디스크상의 표현을 검사하려면 블록 장치를 열고(또는 여는 도구를 사용하여) 보려는 심볼릭 링크에 도달할 때까지 파일 시스템 구조를 살펴봐야 합니다. 나는 ext4가 작은 콘텐츠 심볼릭 링크를 inode 구조(디스크에 별도의 데이터 블록 없음)에 인라인으로 저장하고, 큰 콘텐츠를 링크 콘텐츠를 포함하는 파일처럼 저장하지만 심볼릭 링크 유형이라고 생각합니다.

관련 정보