[001] 리눅스 - 명령어 ln (하드링크와 심볼릭(소프트)링크의 차이점)
안녕하세요~ totally 개발자입니다.
오늘 포스팅에서는 링크 명령어인 ln에 대해서, 특히 하드링크와 소프트링크의 차이점에 관하여 살펴보고자 합니다.
기본 개념
링크(ln)의 사용 목적은 기존에 이미 존재하는 파일에 새로운 이름을 부여하는 개념으로, 하드 링크와 심볼릭(소프트) 링크가 있습니다. 링크의 기본적인 사용 방법은 영어 소문자 i가 아니라 link의 l을 사용한 ln 이며 ln original_file.txt new_file.txt 이렇게 작성합니다.
사용법 (ln 다음에 -s를 붙이면 심볼릭 링크로 만들게 됩니다)
ln [-s] 원본파일명 새로운파일명 또는 디텍토리명
만약 ln original_file.txt new_file.txt를 터미널에 입력하면 original_file.txt의 새로운 이름으로 new_file.txt가 만들어집니다.
사용하는 목적과 cp(복사)와의 차이점
링크로 기존 파일에 새 이름을 부여하여 새로운 파일이 만들어지는 경우에는 사본을 변경하던, 원본을 변경하던 원본과 사본 모두 변경사항이 반영됩니다. cp로 복사한 경우에는 별개의 파일로 분리되므로 이러한 변경사항이 반영되지 않습니다.
하드링크와 심볼릭(소프트)링크의 차이점
이 차이점을 알기 위해서 i-node(아이노드)를 먼저 이해해야 합니다. 아이노드는 파일이 생성될 때 고유의 번호를 말하며, 여기에는 파일의 주소, 권한, 소유자 및 그룹 등 파일에 대한 모든 데이터들이 존재합니다. ls -i 키워드를 사용하면 보이는 번호가 바로 i-node입니다.
하드 링크는 inode라는 자료구조 자체로 참조하여 링크합니다. (리눅스는 여러 파일 시스템이 존재하기 때문에 다른 파일 시스템에 있는 경우 사용 불가능)
심볼릭 링크는 inode를 가리키는 주소를 저장하여 링크합니다. (다른 파일 시스템에 있더라도 사용 가능)
하드링크를 만들기 위해 아래 명령어를 순차적으로 입력합니다.
touch original_file.txt
ln original_file.txt new_file.txt
ls -il
하드링크의 예시로 ls -il 명령어로 표시해본 모습으로 맨 앞에 있는 고유번호가 서로 같음을 알 수 있습니다.
이번에는 심볼릭 링크를 만들기 위해 아래 명령어를 순차적으로 입력합니다.
touch original_file2.txt
ln -s original_file2.txt new_symbolic_link_file.txt
ls -il
위를 보면 하드링크와 달리 new_symbolic_link_file.txt -> original_file2.txt를 가리키는 것으로 표현이 되었습니다. 이 심볼릭 링크는 파일이 추가적으로 생성되며, 원본의 아이노드를 가리키는 주소를 갖게 됩니다. (바로가기로 생각하면 됩니다)
삭제를 하게 되면 하드 링크의 경우에는 원본이 사라져도 같은 아이노드를 가지고 있는 사본을 열 수 있지만 심볼릭 링크는 원본이 사라지면 그 원본 주소가 없어지기 때문에 원본을 열 수 없습니다. 예를 들어, 바탕화면 바로가기를 만들 때, 원본이 지워지면 바로가기로 열 수 없는 것과 동일합니다.