본문 바로가기

카테고리 없음

하드링크와 심볼릭링크

파일은 한 inode를 가리키는 여러 디렉토리 엔트리를 만들 수 있다.

 

#include <unistd.h>

int link(const char *existingpath, const char *newpath);

int linkat(int efd, const char *existingpath, int nfd, const char *newpath,
           int flag);

이 함수는 새로운 디렉토리 엔트리(newpath)를 만들어서 존재하는 파일을 참조하게 한다.

newpath가 이미 있는 파일이면 에러를 리턴한다.

 

unlink를 하면 그 파일의 링크는 없어지나, 다른 곳에서 링크되어있다면 계속 접근 가능하다.

(= 링크 횟수가 0에 도달해야 파일 내용을 삭제할 수 있다.)

 

 

하드링크

inode를 같게 한다는 의미

동일한 파일시스템 안에서만 링크가 가능

superuser만 링크가 가능

심볼릭 링크

심볼릭 링크(symbolic link)는 파일의 i-노드를 직접 가리킨 하드 링크와는 달리 파일에 대한 간접 포인터이다.

하드 링크의 한계를 벗어나기 위해 도입되었다.

 

특정 디렉토리에서 파일명의 텍스트를 따라 서로 다른 파일 시스템 간 링크 가능

 

Q1. softlink를 unlink한다 → 해당 심볼릭 링크 파일만 삭제되며, 실제 데이터는 보존됨

Q2. softlink된 원본 파일을 지운다 → 심볼릭 링크 파일은 삭제 안되나, 빨갛게 나타남

Q3. 원본 파일의 위치가 바뀌어도 계속 원본 파일을 가리키는가? → X

https://www.notion.so/124c9ad94c824a64b6cd85f08c184e18

 

이런 경우에는 어떤 계층 구조가 나타날까?

계속 무한루프를 돌게 된다.