Tuesday, April 3, 2018

CentOS 6.6 리눅스 기초] 12. 심볼릭 링크(Symbolic Link)와 하드 링크(Hard Link)


안녕하세요. 썬구루입니다. 이번 이 게시물에서는 심볼링 링크(Symbolic Link)와 하드 링크(Hard Link)에 대해 알아보도록 하겠습니다. 하나는 파일의 한 종류이며 다른 하나는 파일 이름과 Inode와의 관계를 말합니다. 그럼 이것에 대해 알아보도록 할까요?

■ 심볼릭 링크(Symbolic Link)

심볼릭 링크(Symbolic Link)는 다른 파일이나 디렉터리를 가리키는 파일이다. 아래와 같이 ls -l 명령의 결과값 첫 필드의 첫 문자가 l이라 되어 있으면 링크 파일이라고 한번 언급을 한 적이 있는데 심볼릭 링크 파일을 말하는 것이다.


관련된 파일은 파일 이름, Inode, Data Block로 구성되어 있으며 Data Bloack에는 이 파일이 가리키는 파일 또는 디렉터리 경로 이름이 저장되어 있다. 그림으로 나태내면 아래와 같다.


다른 파일시스템에 있는 파일 또는 디렉터리를 가리키는 심볼릭 링크 파일을 만들 수 있다. 이를 위해 ln 명령을 사용하는데 하드 링크 설명 후 알아보자.




■ 하드 링크(Hard Link)

하드 링크는 위 그림에서 보이는 것처럼 Inode와 파일 이름의 연결 관계이다.

그래서 하드 링크는 파일이 아니라 관계일 뿐이다. 예를 들어보자. 어떠한 사람이 있다. 그 사람을 호출하기 위해서는 이름이라는 것을 사용한다. 홍길동이라는 이름을 가지고 있는 사람. 그럼 사람과 이름은 서로를 연결 짓는 관계를 가진다. 친구들은 그의 이름을 부를 수 있지만 다른 이름 즉 별명을 부를 수도 있다. 길똥이 말똥이 홍길이 이런 식으로.. 그러면 사람 개체에 이름이 총 4개이네? 각 이름은 사람 개체에 관계를 가지고 있다. 어떠한 이름을 사용하던 동일한 개체를 접근하게 된다.

사람은 태어나면 반드시(?) 하나의 이름을 가지게 된다. 리눅스에서 파일도 마찬가지다. 파일은 적어도 하나의 하드 링크를 가져야 한다. 그리고 그 파일의  inode에 대해 다른 이름을 부여할 수 있다. 그리고 호출되는 파일 이름에 따라 다르게 동작하도록 프로그램을 만들 수도 있다. Inode는 파일시스템의 자원이기 때문에 이를 절약하는 차원에서 하드 링크를 사용할 수 있다. 하지만 하드 링크는 다른 파일시스템에 존재하는 파일에 대해 연결 지을 수 없다. Inode는 파일시스템의 자원 /a라는 파일시스템에 500번의 inode가 있고 /b라는 파일시스템에도 500번의 inode가 있기 때문이다.

너무 어렵게 설명한 것 같은데 간단하게..

심볼릭 링크는 다른 파일이나 디렉터리를 가리키는 파일이다. 하드 링크는 파일 이름과 inode와의 관계이다. 심볼릭 링크는 파일시스템을 넘나들 수 있지만 하드 링크는 넘나들 수 없다. 이 정도만 알아두자.

심볼링 링크와 하드 링크를 만들기 위해 ln 명령을 사용한다. 이 명령 사용 방법에 대해 알아보자.

■ ln 명령

심볼링 링크와 하드 링크를 만들기 위해 사용하는 명령이다. -s 옵션 없이 만들면 하드 링크, -s 옵션을 사용하여 만들면 심볼릭 링크 파일을 만든다.

1). 명령 형식

ln [옵션] Target  Link_Name

2). 옵션

옵 션
내 용
 -s
 심볼릭 링크 파일을 만들기 위해 사용하는 옵션이다.

3). 예제

테스트 용으로 사용하고 있는 CentOS 시스템에  /boot, / 파일시스템이 있는 것을 df 명령으로 확인하였다. 그리고 ls 명령에서 -i 옵션은 파일의 Inode 번호를 알기 위해 사용한다. ln -s 명령으로 심볼릭 링크 파일을 만들었을 때 서로 다른 Inode 번호를 가지는 것을 보고 서로 다른 파일이라는 것을 알 수 있다. 그리고 심볼릭 링크는 파일시스템을 넘나들 수 있다는 것을 예제를 통해 알 수 있다.

그림의 마지막 명령에서 ln 명령으로 하드 링크를 만든 것을 알 수 있다. 그리고 /Hard.lnk와 /userlist는 동일한 Inode 번호를 참조하는 것을 알 수 있다. 그리고 하나의 Inode에 2개의 이름을 가지기 때문에 ls -li 명령의 결과값에서 Link Count가 2가 되어 있는 것을 확인할 수 있다.


아래는 파일 이름에 따라 실행 시 다른 결과 값을 출력하는 쉘 스크립트 파일의 실행 예이다.







No comments:

Post a Comment