들어가기에 앞서 제가 리눅스를 공부하면서 참고한 책입니다.
(출처 : 우분투 리눅스 - 한빛미디어 이종원지음)
오늘은 하드 링크와 심볼릭 링크에 대해 알아보도록 하겠습니다.
그 전에 앞서 파일링크에 대한 내용을 먼저 얘기해보겠습니다.
1 ) 파일 링크
파일 링크는 기존에 있는 파일에 새로운 파일명을 붙이는 것입니다.
파일 링크에는 하드링크와 심볼릭 링크가 있습니다.
하드링크는 기존 파일에 새로운 파일명을 추가로 생성하는 것입니다.
심볼릭링크는 원본 파일을 가리키는 새로운 파일을 만드는 것입니다.
(윈도우 바로가기 기능과 개념이 같습니다)
2 ) 리눅스 파일의 구성
리눅스에서 파일은
'파일명 + inode + 데이터 블록'으로 구성되어있습니다.
파일명 : 사용자가 파일에 접근할 때 사용하는 파일의 이름
inode : 파일에 관한 정보를 가지고 있는 특별한 구조체로서
외부적으로 번호로 표시되고
내부적으로 파일의 종류 및 크기, 소유자, 파일 변경 시간등 파일 상세 정보와
데이터 블록의 주소가 저장되어있다.
"ls -l" 명령으로 출력되는 정보는 사실 inode에 저장되어 있는 파일 상세 정보이다.
파일의 inode 번호는 ls -i 명령으로 알 수 있다.
파일명 앞에 출력된 숫자가 inode 번호이다.
파일 이름은 다르지만 inode번호가 같다면 같은 파일이다.
3 ) 하드 링크 만들기
하드 링크는 ln 명령으로 만든다.
리눅스에서는 파이에 여러가지 이름을 붙일 수 있는데,
이 때 붙이는 파일명을 하드링크라고 한다.
(하드링크의 형식이다.)
(위 사진은 하드링크를 생성하기전 ls -l명령을 수행한 사진이다.)
"ln [원본파일명] = link [링크파일명] = link.ln" 명령을 내렸다.
그 후 ls -l 명령을 수행하니 아래와 같은 결과가 나왔다.
ln명령을 실행하기 전과 후에 link 파일의 상세 정보에서 달라진 점을 확인하자
접근 권한 다음에 나오는 숫자가 1에서 2로 바뀌었다.
이 값은 하드링크의 갯수를 의미한다.
하드링크를 생성한 뒤 ls -i 명령을 내랴보면
link와 link.ln의 inode값이 같다는 것을 알 수 있다.
즉 원본 파일에 하드링크를 붙이는 것은
이름만 다르지 결국 같은 파일이라는 것을 알 수 있다.
이때 궁금증이 하나 생긴다.
그렇다면 링크와 파일을 복사한 것의 차이는 무엇일까?
하드링크는 같은 파일에 이름만 다르게 붙이는 것이지만
복사는 완전히 독립적인 파일을 만드는 것이다.
위와 같이
link파일을 link.cp라는 파일로 복사를 해본 뒤
ls -i 명령을 통해 inode번호를 확인해보았다.
link파일과 link.cp파일 inode값이 다르다는 것을 확인할 수 있다.
즉 link파일과 link.cp파일은 서로 다른파일이다.
4 ) 심볼릭링크 만들기 : -s 옵션
심볼릭링크는 윈도우의 바로가기처럼 원본 파일을 가리키는 파일이다.
심볼릭링크는 ln -s을 사용하여 만든다
ln -s 명령을 통해 link파일의 심볼릭링크인 link.sl을 만들었다.
ls -l명령을 내리니
파일의 종류가 "l(소문자 L)"로 표시되고 파일명도 "->"를 사용하여
원본 파일이 무엇인지 알려준다.
심볼릭링크의 파일 내용은 원본 파일의 경로를 가지고 있다.
파일의 크기가 "4"로 나온 것은 link.sl 파일의 내용이 4바이트라는 의미이다.
이것은 원본 파일 경로(link)의 길이이다.
원본 파일의 경로는 ln -s명령으로 심볼릭링크를 생성할 때 지정한 경로가 저장된다.
그러나 심볼릭 링크의 내용을 출력하면 원본파일의 내용이 출력된다.
ls -i 명령을 통해서
원본 파일인 link와 심볼릭링크인 link.sl의 inode값이
다르다는 것을 알 수 있다.
* 심볼릭링크와 하드링크의 차이
1 ) 파일종류가 l로 표시된다.
2 ) 하드링크의 개수가 하나이다. 즉 원본 파일에 이름을 추가하는 것이 아니다.
3 ) 파일 이름 뒤에 원본 파일의 이름이 표시된다.
4 ) inode 번호가 원본 파일과 다르다. 즉 원본파일과 심볼릭 링크 파일은 별개의 파일이다.
5 ) 심볼릭링크는 디렉터리에도 지정할 수 있고 파일시스템이 달라도 생성할 수 있다.
6 ) 심볼링리크에서는 원본 파일이 삭제되면 심볼릭링크로 연결할 수 없다.
5 ) 요약
원본 파일로 하드 링크를 만들면, 하드 링크는 원본 파일과 동일한 inode를 직접적으로 가리킨다. 따라서 원본 파일이 사라지더라도 데이터만 살아 있다면 원본 파일에 접근이 가능하다.
하지만 심볼릭 링크를 만들게 되면 원본 파일과 다른 inode를 생성해서 이를 가리킨다.
이 inode는 원본 파일의 포인터를 가리키고, 포인터는 다시 원본 파일을 가리킨다.
따라서 심볼릭 링크를 통해 데이터에 접근하면 원본 파일을 거치게 된다.
즉 원본 파일이 사라질 경우 해당 데이터에 접근할 수 없다는 것을 의미한다.
(사진 출처 blog : http://www.leafcats.com/141)
댓글
댓글 쓰기