ln - make links
hard link
symbolic link
(symlink
, -s
)hard link
로 복사된 파일은 다른 개체로 보이지만, 같은 파일
이다.C++
의 pointer
, 참조자
를 생각하자.symlink
는 특정 파일의 위치만 가리키는 다른 파일
i-node
를 1개 가지고 있다.파티션
내 유일한 식별자파티션
이 다르면 의미 없는 숫자hard link
는 같은 i-node
를 가리키므로, 동일 파티션
내에서만, regular file
만 생성 가능symlink
는 위치만 가리키므로, 다른 파티션
, 모든 종류의 file
에 생성 가능$ ls -li # 파일 정보 출력
출력 : 18866062 -rw-rw-r--.
1
… hello.txt
$ ln hello.txt hardlink.txt # hard link 생성
$ ls -li
출력 : 18866062 -rw-rw-r--.
2
… hello.txt
hard link
를 생성하자, file info
의 링크 갯수
가 1
에서 2
로 변경되었다.$ ln -s hardlink.txt symlink.txt # symlink 생성
$ ls -l
출력 : -rw-rw-r--.
2
… hello.txt
`lrwxrwxrwx.` `1` … `symlink.txt → hardlink.txt`
symlink
로 생성된 파일은 링크 갯수
가 1
인 것을 볼 수 있다.$ ln -s hello.txt ../symhello.txt # hello.txt의 symlink를 이전 디렉토리에 생성
# ! 오류 발생 (깨진 링크)!
hello.txt
는 현재 디렉토리
에, symhello.txt
는 이전 디렉토리
에 있지만Linux
는 hello.txt
와 symlink.txt
가 같은 디렉토리
에 있다고 가정하고 명령을 수행한다.
해결하기 위해 -r
명령어를 사용하자
$ ln -sr hello.txt ../symhello.txt # hello.txt의 symlink를 이전 디렉토리에 생성
PATH에 존재하는 명령어를 검색
find
, bash
, where
이런거 한 번씩 쳐 보자which
명령어로 symlink
도 찾을 수 있다symlink
가 여러 단계로 가리키는 파일이 있을 때, canonical path
를 따라가 원본 파일의 위치를 알려 준다.
상대 주소를 통해 따라간다는 뜻
# 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 : 마지막 링크가 살아있어야 출력
# (출력 없음)