본문 바로가기
프로그래밍/Linux

[linux] 하드링크과 심볼릭 링크

by 동네로봇 2020. 5. 31.

리눅스 서버를 관리하다 보면 폴더 구조가 복잡해 cd /~~/~~/~~.....로 위치 이동을 하는 것이 너무 불편할 때가 있다.

혹은 파일명이 java_version_sth_1.2.3.4_200531 과 같이 전체 이름을 직접 입력하는 것이 불편할 때도 있다.

 

이런 상황에서 활용할 수 있는 것이 '링크'이다. 윈도우로 따지면 바로가기 같은 기능이다. 

 

링크를 생성해보자.

(해당 실습은 책 '이것이 리눅스다.'를 참고하였다.)


먼저 링크 테스트를 위한 linktest폴더를 생성하고 내용이 들어있는 basefile 을 만들어줬다.

basefile에 연결시키기 위한 링크 명령어는 다음과 같다.

 

  • 하드링크 
ln baselink hardlink

 

  • 심볼릭링크
ln -s baselink softlink

 

링크를 생성하고 basefile 이 아닌 각각의 link로 내용을 확인하였을 때, basefile과 동일한 결과값을 얻을 수 있다.

 

그렇다면 하드 링크와 심볼릭 링크의 차이점은 무엇일까??

 

위의 ls -il 을 통해 파일 목록을 확인하였을 때, basefile과 hardlink가 맨 앞에 동일한 숫자를 가지는 것을 확인할 수 있다.

이를 통해 하드링크는 연결된 파일과 동일한 inode값을 가진다는 것을 알 수 있다.

 

inode란?

 inode는 리눅스/유닉스의 파일 시스템에서 사용하는 자료구조를 말하는데, 파일이나 디렉토리의 여러 가지 정보가 있다. 모든 파일이나 디렉토리는 각자 1개씩의 inode가 있으며, 각 inode에는 해당 파일의 소유권, 허가권, 파일 종류 등의 정보와 해당 파일의 실제 데이터가 어디에 있는지 위치(=주소)도 있다.

 이러한 inode가 모여 있는 공간을 inode블록이며, 일반적으로 전체 디스크 공간의 1% 정도를 차지한다. Data 블록은 실제 데이터가 저장되어 있는 디스크 공간으로 전체 디스크의 대부분을 차지한다.

 

하드링크는 원본 파일의 직접적인 경로에 연결이 되는 것이고, 심볼릭 링크는 새로운 inode를 생성하여 원본 파일의 포인터를 저장하는 것이다. 

 

여기까지 링크 실습이었당


inode에 대해서 조금 더 자세히 알아보자면, inode블럭이 가지고 있는 정보는 다음과 같다.

  • File type: regular file, directory, pipe etc.
  • Permissions to that file: read, write, execute
  • Link count: The number of hard link relative to an inode
  • User ID: owner of file
  • Group ID: group owner
  • Size of file: or major/minor number in case of some special files
  • Time stamp: access time, modification time and (inode) change time
  • Attributes: immutable' for example
  • Access control list: permissions for special users/groups
  • Link to location of file
  • Other metadata about the file

 

df -i

위 명령어를 통해 파일 시스템 별 전체공간, 사용량, 여유공간 정보 등을 확인할 수 있다. 

저장 공간이 부족할 경우 오류가 나는 경우가 있다고 하니, inode를 확인해보는 것도 방법이겠다.