Action disabled: source

기타/미분류

리눅스 파일링크 이해하기

파일 링크 관리 Link는 하나의 파일이 복수의 이름을 갖게 한다. 파일은 실제적으로 시스템에 그들의 inode 번호로써 인식된다. (ls -i 명령어는 파일의 inode 번호를 출력한다.) 또한, 디렉토리는 각각의 파일 이름과 일치하는 inode 번호의 목록이며, 그 안에 있는 각각의 파일 이름은 특정 inode의 연결이다.

명령어 ‘ln’ 은 하나의 파일에 다중의 연결을 생성하는데 사용한다. 예를 들면, 디렉토리 안의 파일 foo가 있다 하자. ‘ls -i’ 명령을 하면, 이 파일의 inode 번호를 볼 수 있을 것이다.

  %%#%% ls -i foo
  22192 foo
  %%#%%

여기에서 파일 foo는 파일 시스템의 22192 라는 inode 번호를 가지고 있다. 우리는 foo와 연결하여 bar라는 것을 만들 수 있다.

  %%#%% ln foo bar

‘ls -i’를 해보면, 우리는 같은 inode 의 두 파일을 볼 수 있다.

  %%#%% ls -i foo bar
  22192 bar 22192 foo

그럼, foo나 bar는 같은 파일 이름으로 액세스할 수 있다. 만일, foo를 변화 시키면 bar도 또한 변하게 된다. foo나 bar는 언제나 동일한 내용을 갖으며, 다른 이름을 갖는 두개의 파일이다.

이런 연결들은 하나의 inode로 직접 생성하기 때문에 hard link라고 부른다.

rm을 사용하여 파일을 지울 때, 실제적으로 파일의 한 link만 지운다.

    # rm foo

이것은 오직, foo만 지워진 것이며, bar는 여전히 존재한다. 파일은 link가 전혀 없을 때 실제적으로 시스템에서 지워진다. 보통 파일은 하나의 link만을 가지고 있고, ‘rm’명령어로서 파일들은 지워진다. 어쨌든, 파일이 다중 연결되었을 경우 ‘rm’은 오직 하나의 link만 지우며, 파일을 완전히 지우기 위해서는 그 파일의 모든 link를 지워야 한다.

명령어 ‘ls -l’ 은 파일에 link 된 갯수를 포함하여 출력한다.

  %%#%% ls -l foo bar
  -rw-r--r-- 2 root root 12 Aug 5 16:51 bar
  -rw-r--r-- 2 root root 12 Aug 5 16:50 foo
  %%#%%

목록의 두 번째 칼럼의 “2”가 파일에 연결된 link된 수를 나타낸다.

Symbolic link는 link의 또 다른 형태이며, hard link보다 작업하기가 다소 어렵다. symbolic link는 하나의 파일에 다른 이름을 줄 수 있지만, inode에 의한 link는 아니다.

명령어 ln -s 는 파일의 symbolic link를 생성한다. 예를 들면, 아래와 같다.

  %%#%% ln -s foo bar

Symbolic link 된 bar 파일은 파일 foo를 가리키는 것으로 생성된다. ‘ls -i’ 명령을 해보면, 우리는 두 개의 파일이 서로 다른 inode를 가지를 가지고 있음을 볼 수 있다.

  %%#%% ls -i foo bar
  22195 bar 22192 foo

어쨌든, ‘ls -l’을 사용하면, 파일 bar가 foo로 symlink 를 가리키고 있음을 볼 수 있다.

  %%#%% ls -l foo bar
  lrwxrwxrwx 1 root root 3 Aug 5 16:51 bar -> foo
  -rw-r--r-- 1 root root 12 Aug 5 16:50 foo
  %%#%%

기능적으로 symbolic link는 hard link와 유사하지만, 몇 가지 다른 점이 있다. 그 하나는 파일를 link 할 수는 있지만, 존재하지 않는다. 이것은 hard link와는 완전히 같지는 않지만 유사한 것이다. Symbolic link는 hard link와는 다르게 커널에 의해 처리되는데, 이것은 기술적인면이지만, 때로는 사용자에게 중요하다. Symbolic link는 파일이 어디를 가리키고 있는지 알려주어 도움이 되며, hard link는 파일이 같은 inode로 link 되기 때문에 쉽게 결정할 수 없다.

Link는 리눅스 시스템에서 많은 장소에 사용된다. Symbolic link는 /lib의 공유 라이브러리 이미지에 필수적으로 사용되는 중요한 것이다.

역링크