ln - make links
hard linksymbolic 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 : 마지막 링크가 살아있어야 출력
# (출력 없음)