파일은 한 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
이런 경우에는 어떤 계층 구조가 나타날까?
계속 무한루프를 돌게 된다.