1. 하드 링크
- 파일의 고유번호인 inode에 연결됨
- 디렉토리가 아닌 일반 파일에만 생성 가능
$ ln file newfile
: 하드링크 생성
jsg@jsg-ubuntu:~/testdir$ ln hello.txt hello2.txt
jsg@jsg-ubuntu:~/testdir$ ls -li
total 8
1175795 -rw-rw-r-- 2 jsg jsg 8 Dec 11 01:18 hello2.txt
1175795 -rw-rw-r-- 2 jsg jsg 8 Dec 11 01:18 hello.txt
# inode가 같고 link가 2개임을 볼 수 있음
jsg@jsg-ubuntu:~/testdir$ echo "Changed" > hello.txt
jsg@jsg-ubuntu:~/testdir$ cat hello2.txt
Changed
2. 심볼릭 링크
- 파일의 경로를 참조함
- 디렉토리를 포함한 모든 파일에 생성 가능
$ ln -s file newfile
: 심볼릭 링크 생성
jsg@jsg-ubuntu:~/testdir$ ln -s hello.txt hello3.txt
jsg@jsg-ubuntu:~/testdir$ ls -li
total 8
1175795 -rw-rw-r-- 2 jsg jsg 8 Dec 11 01:18 hello2.txt
1175830 lrwxrwxrwx 1 jsg jsg 9 Dec 11 01:31 hello3.txt -> hello.txt
1175795 -rw-rw-r-- 2 jsg jsg 8 Dec 11 01:18 hello.txt
# hello3은 inode가 다름을 볼 수 있음
- 경로를 참조하기 때문에 참조한 파일이 삭제되면 링크가 깨짐
jsg@jsg-ubuntu:~/testdir$ rm hello.txt
jsg@jsg-ubuntu:~/testdir$ cat hello2.txt
Changed
jsg@jsg-ubuntu:~/testdir$ cat hello3.txt
cat: hello3.txt: No such file or directory
$ readlink [option] link
: 링크 따라가기
jsg@jsg-ubuntu:~/testdir$ readlink hello3.txt
hello.txt
jsg@jsg-ubuntu:~/testdir$ readlink -f hello3.txt # canonical path
/home/jsg/testdir/hello.txt
jsg@jsg-ubuntu:~/testdir$ readlink -e hello3.txt # 원본이 존재하지 않음