ln - make links

  • hard link
  • symbolic link (symlink, -s)
  • hard link로 복사된 파일은 다른 개체로 보이지만, 같은 파일이다.
  • C++pointer, 참조자를 생각하자.
  • symlink는 특정 파일의 위치만 가리키는 다른 파일

i-node

  • 파일의 메타 정보 및 관리 용 개체
  • 파일마다 고유한 i-node를 1개 가지고 있다.
  • 파티션 내 유일한 식별자
    • 파티션이 다르면 의미 없는 숫자
  • hard link는 같은 i-node를 가리키므로, 동일 파티션 내에서만, regular file만 생성 가능
  • symlink는 위치만 가리키므로, 다른 파티션, 모든 종류의 file에 생성 가능

링크 예시

$ ls -li # 파일 정보 출력

출력 : 18866062 -rw-rw-r--. 1hello.txt

$ ln hello.txt hardlink.txt # hard link 생성
$ ls -li

출력 : 18866062 -rw-rw-r--. 2hello.txt

  • hard link를 생성하자, file info링크 갯수1에서 2로 변경되었다.
$ ln -s hardlink.txt symlink.txt # symlink 생성
$ ls -l

출력 : -rw-rw-r--. 2hello.txt

`lrwxrwxrwx.` `1` … `symlink.txt → hardlink.txt`
  • symlink로 생성된 파일은 링크 갯수1인 것을 볼 수 있다.
$ ln -s hello.txt ../symhello.txt # hello.txt의 symlink를 이전 디렉토리에 생성
# ! 오류 발생 (깨진 링크)!
  • hello.txt현재 디렉토리에, symhello.txt이전 디렉토리에 있지만
    • Linuxhello.txtsymlink.txt같은 디렉토리에 있다고 가정하고 명령을 수행한다.

    • 해결하기 위해 -r 명령어를 사용하자

      $ ln -sr hello.txt ../symhello.txt # hello.txt의 symlink를 이전 디렉토리에 생성

which

PATH에 존재하는 명령어를 검색

  • find, bash, where 이런거 한 번씩 쳐 보자
  • which 명령어로 symlink도 찾을 수 있다

symlink가 여러 단계로 가리키는 파일이 있을 때, canonical path를 따라가 원본 파일의 위치를 알려 준다.

canonical path

상대 주소를 통해 따라간다는 뜻

  • ex)
    • 옆집 → 누구의 옆집?
    • 철수의 옆집 → 아 철수의 옆집이구나!
  • sym3 → sym2 → sym1 → hardlink 형태라고 할 때,
# sym3 → sym2 → sym1 → hardlink
$ readlink -f symlink.txt # -f : 마지막 링크 이전까지 출력
# /home/user/hardlink
$ readlink -e symlink.txt # -e : 마지막 링크가 살아있어야 출력
# /home/user/hardlink

$ rm hardlink # hardlink 삭제, sym3 → sym2 → sym1 →

$ readlink -f symlink.txt # -f : 마지막 링크 이전까지 출력
# /home/user/hardlink
$ readlink -e symlink.txt # -e : 마지막 링크가 살아있어야 출력
# (출력 없음)
profile
올해로 26세

0개의 댓글