[Linux] 아이노드, 하드 링크, 심볼릭 링크

HYEOB KIM·2022년 8월 18일
1

Linux

목록 보기
6/11

아이노드(inode)

  • 파일의 정보들이 저장되어 있습니다.

  • Accessed Time, Size, UID, GID, Blk1, Blk2

  • name + inode + data : 하나의 파일을 이룹니다.

아이노드 넘버 확인

먼저 파일 하나를 생성합니다.

% vim pineapple
안녕하세요
% ls -ali
258218 -rw-rw-r-- 1 ubuntu ubuntu   16 Aug 18 08:20 pineapple

결과로 나오는 파일 리스트의 첫 번째 열이 inode 넘버입니다.
세 번째 열은 하드 링크의 개수를 의미합니다.

하드 링크

  • 원본 파일의 inode를 공유합니다.
  • 따라서 하드 링크의 fileName(hard link) + inode1(원본파일) + fileData(원본파일)을 통해 원본 파일과 쌍둥이 격인 파일이 됩니다.
  • 원본, 복사본의 의미가 없습니다.

하드 링크 파일 만들기

pineapple이란 파일을 원본으로 두고 hello라는 하드 링크 파일 만들기

% ln pineapple hello

% ls -ali
258218 -rw-rw-r-- 2 ubuntu ubuntu   16 Aug 18 08:20 hello
258218 -rw-rw-r-- 2 ubuntu ubuntu   16 Aug 18 08:20 pineapple

만들어진 하드 링크 파일(hello)은 원본 파일 pineapple과 완벽히 똑같습니다.

만약 하드 링크 파일 hello의 내용을 수정해도 원본 파일인 pineapple에 그대로 적용됩니다.

% vim hello
안녕하세요
hello

% cat pineapple
안녕하세요
hello

심볼릭 링크(소프트 링크)

  • 윈도우의 바로가기와 같습니다.
  • 하나의 파일로 생성되고 원본 파일과는 다른 inode를 가지고 있습니다.
  • 심볼릭 링크의 파일의 Link Data에 원본 파일 이름(name)의 경로가 저장되어 있어 원본 파일을 가리킬 수 있게 됩니다.

심볼릭 링크 파일 만들기

심볼릭 링크는 화살표로 원본 파일을 나타냅니다.

% ln -s pineapple hello_symbolic

% ls -ali
258197 lrwxrwxrwx 1 ubuntu ubuntu    9 Aug 18 08:30 hello_symbolic -> pineapple
258218 -rw-rw-r-- 2 ubuntu ubuntu   16 Aug 18 08:20 pineapple

링크를 생성할 때 절대 경로상대 경로로 생성할 수도 있습니다.

% ln -s /home/test/pineapple hello

하드 링크과 심볼릭 링크의 차이

심볼릭 링크 파일이 생성되어 있는 상태에서 원본 파일 pineapple을 지우면
기존 심볼릭 링크 파일의 링크가 깨집니다.

% rm pineapple

% ls -ali

이전에 지운 파일과 같은 이름으로 파일을 생성하면 다시 연결됩니다.

% touch pineapple

% ls -ali
258218 -rw-rw-r-- 1 ubuntu ubuntu   16 Aug 18 08:20 hello
258197 lrwxrwxrwx 1 ubuntu ubuntu    9 Aug 18 08:30 hello_symbolic -> pineapple
258220 -rw-rw-r-- 1 ubuntu ubuntu    0 Aug 18 08:31 pineapple

그리고 심볼릭 링크는 경로로 원본을 알 수 있기 때문에
링크 파일이나 원본 파일이 기존과 다른 곳으로 이동되면 링크가 깨지게 됩니다.

% mv hello_symbolic /tmp/hello_symbolic
% cd /tmp
:/tmp% ls -ali

만약 심볼릭 링크를 생성할 때 절대 경로로 지정해줬다면 링크 파일을 이동해도 여전히 링크와 연결된 경로가 절대경로이므로 링크는 살아있게 됩니다.

$ ln -s /home/ubuntu/pineapple hello
$ ls -ali
258220 lrwxrwxrwx 1 ubuntu ubuntu   22 Aug 18 08:49 hello -> /home/ubuntu/pineapple
258219 -rw-rw-r-- 1 ubuntu ubuntu    6 Aug 18 08:44 pineapple

$ mv hello /tmp
$ cd /tmp
/tmp$ ls -ali

반면 하드 링크의 경우 원본 파일을 지워도, 이동해도 하드 링크는 여전히 살아있습니다.

% mv pineapple /tmp/
% ls -ali

이전에 tmp로 이동했던 심볼릭 링크 파일은 이제 원본 파일이 같은 경로에 왔으므로 다시 링크가 살아납니다.

% cd /tmp
:/tmp% ls -ali

profile
Devops Engineer

0개의 댓글