Examples

-s : symbolic link 생성

ln 명령과 함께 가장 자주 사용하는 옵션.

다음 명령은 /home/src라는 심볼릭 링크를 생성하고, /usr/src를 가리키게 한다.

ln -s /usr/src /home/src

주의할 점

흔히 발생하는 실수 중 하나는 ln -s 명령의 첫 번째 인수가 현재 작업 디렉터리에 상대적이라고 해석하는 것이다. 하지만 실제로 ln은 첫 번째 인수를 파일명으로 해독하지 않으며 심볼릭 링크의 타깃이 되는 하나의 문자열로 인식할 뿐이다. 1

옵션 없이 사용 : hard link 생성

다음 명령은 /usr/local/bin/fooprog-1.0 파일이 지시하는 inode를 참조하는 하드 링크 /usr/local/bin/fooprog를 생성한다.

ln  /usr/local/bin/fooprog-1.0  /usr/local/bin/fooprog

한 파일의 이름은 파일 자체에 저장되는 게 아니라 그 파일의 부모 디렉터리에 저장된다. 실제로 한 개 이상의 디렉터리가(또는 단일 디렉터리 안에서 한 개 이상의 항목이 동시에 한 파일을 참조할 수 있으며 다른 이름을 가질 수 있다. 그와 같은 편성은 하나의 파일이 동시에 여러 곳에 존재하는 듯한 환상을 낳는다.

이런 추가적인 참조는 다음에 설명하겠지만 심볼릭 링크symbolic link와 구분하고자 '링크link' 또는 '하드 링크hard link'라 부르며 원본 파일과 동일한 것을 의미한다. 파일 시스템에 관한 한 파일에 대한 모든 링크는 동일하다. 파일 시스템은 각 파일을 가리키는 링크의 개수를 관리하며 마지막 링크가 삭제되기 전에는 파일의 데이터 블록을 해제하지 않는다. 하드 링크는 파일 시스템 경계를 넘어 교차될 수 없다.

하드 링크는 ln 명령으로 생성하고 rm 명령으로 삭제할 수 있다. ln 명령의 구문은 cp를 그대로 반영하고 있기 때문에 기억하기 쉽다. cp oldfile newfile 명령은 oldfile의 복사본으로 newfile이란 이름의 새 파일을 만들며, ln oldfile newfile 명령은 oldfile를 참조하는 또 다른 이름으로 newfile이란 이름을 생성한다.

대부분의 파일 시스템 구현에서는 보통 파일만이 아니라 디렉터리에 대한 하드링크를 만드는 것이 기술적으로 가능하다. 하지만 디렉터리 링크는 파일 시스템에 루프loop를 발생시키거나 여러 개의 모호한 부모를 갖게 되는 등의 악조건을 만들게 된다. 대부분의 경우에는 하드 링크보다는 심볼릭 링크를 선택하는 것이 좋다.

어떤 파일에 대해 몇 개의 링크가 존재하는지 알려면 ls -l 명령을 사용한다. 상세한 내용은 ls 명령의 출력 사례를 보기 바란다. ls -i 명령에 관한 설명에도 유의하기 바란다. 이 옵션은 하드 링크를 식별하는 데 특히 도움이 되기 때문이다.

하드 링크는 파일 유형 중 하나가 아니다. 파일 시스템은 하드 링크라 불리는 '것'을 따로 정의하지 않고 대신 한 개 이상의 디렉터리 항목이 동일한 파일을 가리키게 허용할 뿐이다. 파일의 내용만이 아니라 소유권이나 사용 권한 같은 내부 속성 까지도 공유된다. 2

모든 디렉터리는 최소한 두 개의 하드 링크를 갖는다. 하나는 부모 디렉터리로부터의 링크이고, 다른 하나는 디렉터리 자신의 내부에 있는 '.'이라 불리는 특별한 파일로부터의 링크다. 3

참고문헌

  • 유닉스·리눅스 시스템 관리 핸드북 5/e / 에비 네메스, 가스 스나이더, 트렌트 헤인, 벤 웨일리, 댄 맥킨 저 외 2명 / 에이콘출판사 / 발행: 2022년 01월 03일 / 원제: UNIX and Linux System Administration Handbook, 5th Edition

주석

  1. 유닉스·리눅스 시스템 관리 핸드북 5/e. 5장. 240쪽. 

  2. 유닉스·리눅스 시스템 관리 핸드북 5/e. 5장. 235쪽. 

  3. 유닉스·리눅스 시스템 관리 핸드북 5/e. 5장. 244쪽.