본문 바로가기
IT 공부/운영체제

[리눅스] - 심볼릭 링크와 하드 링크 정리 및 사용 용례

by exdus3156 2023. 12. 18.

1. 용어 정리

@출처

 

링크는 윈도우즈의 "바로가기" 아이콘을 만드는 것과 흡사하다.

데이터 블록은 실제 파일의 데이터를 의미하며, 하드 디스크 어딘가에 저장된 것이다.

inode는 원본 파일의 데이터에 대한 정보와 위치를 알려주는 메타데이터다. 소유자, 권한, 생성 시간 등 "ls --long"으로 알아낼 수 있는 정보들이 사실 inode에 담긴 것이다.

하드 링크 파일은 리눅스의 사용자가 파일을 이용할 수 있도록 만든 일종의 아이콘과 같은 것이다. 리눅스 사용자는 파일을 찾을 때 inode를 직접 참조할 수 없다. 대신 원본 파일에 대한 링크를 통해 접근 가능하다. 즉, 하드 링크는 사실 바로 그 파일의 이름이다. (이러한 이유로, 사실 하드 링크는 그것이 링크로 생성되었는 것인지 아니면 원본인지 구분해내기 어렵다. 위 그림에서 보듯, 원본 파일과 완전히 똑같기 때문이다!)

심볼릭 링크 파일은 비교적 최신 유닉스 방식으로서 기존의 하드 링크 방식의 단점을 극복하기 위해 만들어진 기능이다. 완전히 새로운 파일을 만드는 방식인데, 그 본질은 하드 링크를 가리키는 포인터다.

cp 명령어와 링크는 완전히 다른 의미다. 링크는 원본 데이터 파일은 그대로 두지만, cp(복사) 명령어는 원본 데이터 자체를 아예 새롭게 만들어버리는 기능이다.

 

 

2. 링크는 왜 사용하는가?

윈도우에서 바로가기 아이콘을 만드는 것과 비슷한 이유로도 사용할 수 있다. 하지만 리눅스를 서버로 사용하는 경우에는 이러한 이유로 링크를 사용하진 않는 편이다. 대신 서버용 리눅스는 "프로그램 리졸빙"용으로서 링크를 활용한다.

리눅스 bash는 프로그램을 실행하기 위해서 콘솔에 프로그램 이름을 쓰고 인자를 이어 붙여 실행한다. 이 과정에서 bash가 프로그램을 찾기 위해 다음과 같은 resolving(프로그램 찾기) 과정이 진행된다. (단, 아래 예시는 실행 프로그램의 절대 경로를 입력하지 않은 경우를 말한다.)

  1. 현재 디렉토리(.)에서 찾는다.
  2. 없으면, $PATH 환경변수에 등록된 경로에서 프로그램을 찾는다.
  3. 없으면, 리눅스에 내장된 프로그램인지 확인한다. (내장된 프로그램은 보통 /usr/bin 시스템 디렉토리에 있다)
  4. 이 마저도 없으면 에러(command not found)를 뱉어내고 끝낸다.

 

만약 apt 설치 프로그램을 사용하지 않고 사용자가 직접 프로그램을 다운받아 압축을 풀거나 혹은 설치한다면, 해당 프로그램을 실행하고 싶을 때마다 일일이 설치 디렉토리에 접근해 실행해야 할 것이다.

이를 해결하기 위해선 시스템의 모든 사용자가 사용할 수 있도록 먼저 파일의 위치를 시스템 디렉토리에 옮긴다. (만약 시스템 전체 사용자가 아니라 나만 사용하고 싶다면 굳이 설치 파일을 옮기지 않아도 되며 권한도 설정할 필요가 없을 것이다.)

이동 위치는 원하는 어느 곳이든 상관이 없으나, /usr/bin에 직접 넣기보단 본인이 관리할 수 있는 곳이나 시스템에서 약속한 장소(예를 들어, /usr/local/...)에 옮긴다.

해당 파일의 링크를 만든다. (심볼릭 링크) 이것을 환경변수 PATH에 등록된 경로 중 하나인 /usr/bin에 넣는다. 혹은 링크를 만들어 사용하는 이 방법을 피하고 싶다면 직접 PATH 경로에 추가할 수도 있다. 단지 이런 방식도 있음을 알려주는 것이다.