1. Resolve symlink的意思
在ln指令的內部處理,似乎不會去檢查symlink target的有效性(resolve & validate symlink)
例如:
[me@ArchLinux-CB project]$ ls -l
total 12
drwxr-xr-x 2 me users 4096 Mar 6 23:26 build
drwxr-xr-x 2 me users 4096 Mar 6 23:09 src1
drwxr-xr-x 2 me users 4096 Mar 6 23:16 src2
1.1 假設需求是要在build目錄下,新增symlink src1->../src1,一般做法(至少我以前只知道這個方式):
[me@ArchLinux-CB project]$ cd build
[me@ArchLinux-CB build]$ ln -s ../src1 src1
[me@ArchLinux-CB build]$ ls -l
total 0
lrwxrwxrwx 1 me users 7 Mar 6 23:30 src1 -> ../src1
1.2 但其實,不進到build目錄下,一樣能做,以再新增symlink src2->../src2為例:
[me@ArchLinux-CB project]$ ls -l
total 12
drwxr-xr-x 2 me users 4096 Mar 6 23:30 build
drwxr-xr-x 2 me users 4096 Mar 6 23:09 src1
drwxr-xr-x 2 me users 4096 Mar 6 23:16 src2
[me@ArchLinux-CB project]$ ls -l build/
total 0
lrwxrwxrwx 1 me users 7 Mar 6 23:30 src1 -> ../src1
[me@ArchLinux-CB project]$ ln -s ../src2 build/src2
[me@ArchLinux-CB project]$ ls -l build
total 0
lrwxrwxrwx 1 me users 7 Mar 6 23:30 src1 -> ../src1
lrwxrwxrwx 1 me users 7 Mar 6 23:33 src2 -> ../src2神奇了,在project目錄下,"ln -s ../src2 build/src2",事實上../src2這個target是不存在的。
1.3 推測,ln指令內部,並不會去做resolve & validate symlink target的動作。