$ mkdir linktest
$ cd linktest
$ mkdir sd
$ echo “a” > sd/a.txt
$ mkdir sd/subsd
2. 创建2个源文件。
$ echo “test1” > sf1.txt
$ echo “test2” > sf2.txt
$ ls -il
total 8
523364 drwxrwxr-x. 3 user user 4096 Jun 20 12:30 sd
523369 -rw-rw-r--. 1 user user 6 Jun 20 12:30 sf1.txt
523370 -rw-rw-r--. 1 user user 6 Jun 20 12:30 sf2.txt
3. 为目录创建一个硬链接和软链接。
$ ln sd hardsd
ln: ‘sd’: hard link not allowed for directory
目录不能创建硬链接。
$ln -s sd softsd
为目录创建软链接,目录softsd之前不存在。
$ ls -il
total 8
523364 drwxrwxr-x. 3 user user 4096 Jun 20 12:30 sd
523369 -rw-rw-r--. 1 user user 6 Jun 20 12:30 sf1.txt
523370 -rw-rw-r--. 1 user user 6 Jun 20 12:30 sf1.txt
523371 lrwxrwxrwx. 1 user user 2 Jun 20 12:30 softsd-> sd
第一列为inode,软链接的inode和源目录的inode不相同。
第二列为访问属性,l代表是软链接,后面的访问权限并非真正的权限,权限和源文件一样。$ ls -il sd
total 8
523367 -rw-rw-r--. 1 user user 2 Jun 20 12:30 a.txt
523368 drwxrwxr-x. 2 user user 4096 Jun 20 12:30 subsd
$ cd softsd
$ ls -il
total 8
523367 -rw-rw-r--. 1 user user 2 Jun 20 12:30 a.txt
523368 drwxrwxr-x. 2 user user 4096 Jun 20 12:30 subsd
$ cd ../
软链接的子目录和源文件一模一样。
$ ln sf1.txt hardsf.txt
$ ln -s sf2.txt sotfsf.txt
$ ls -li
total 12
523369 -rw-rw-r--. 2 user user 6 Jun 20 12:30 hardsf.txt
523364 drwxrwxr-x. 3 user user 4096 Jun 20 12:30 sd
523369 -rw-rw-r--. 2 user user 6 Jun 20 12:30 sf1.txt
523370 -rw-rw-r--. 1 user user 6 Jun 20 12:30 sf2.txt
523371 lrwxrwxrwx. 1 user user 2 Jun 20 12:30 softsd-> sd
523372 lrwxrwxrwx. 1 user user 7 Jun 20 12:30 softsf.txt-> sf2.txt
硬链接的inode、访问属性都和源文件一模一样,硬链接会增加引用计数,引用计数都变成了2。
5. 访问权限。
$ chmod 000 softsf.txt
$ chmod 000 hardsf.txt
$ ls -li
total 12
$ ln sf1.txt hardsf.txt
$ ln -s sf2.txt sotfsf.txt
$ ls -li
total 12
523369 ----------. 2 user user 6 Jun 20 12:30 hardsf.txt
523364 drwxrwxr-x. 3 user user 4096 Jun 20 12:30 sd
523369 ----------. 2 user user 6 Jun 20 12:30 sf1.txt
523370 ----------. 1 user user 6 Jun 20 12:30 sf2.txt
523371 lrwxrwxrwx. 1 user user 2 Jun 20 12:30 softsd-> sd
523372 lrwxrwxrwx. 1 user user 7 Jun 20 12:30 softsf.txt-> sf2.txt
硬链接的访问权限直接影响自己和源文件的访问权限。
软链接自身的访问权限不会改变,但是会改变源文件的访问权限。
$ cat sotfsf.txt
cat: sotfsf.txt: Permission denied
软链接的访问权限取决于源文件
$ chmod 664 sf1.txt
$ chmod 664 sf2.txt
6. 修改文件内容。
$ echo “test1-m” > hardsf.txt
$ echo “test2-m” > softsf.txt
$ cat hardsf.txt
test1-m
$ cat sf1.txt
test1-m
$ cat softsf.txt
test2-m
$ cat sf2.txt
test2-m
源文件和引用文件都变化了。
7. 移动源文件位置。
$ mkdir temp
$ mv sf1.txt temp/
$ mv sf2.txt temp/
$ cat hardsf.txt
test1-m
$ cat softsf.txt
cat: sotfsf.txt: No such file or directory
$ mv temp/sf1.txt .
$ mv temp/sf2.txt .
$ rm -r temp
8. 删除源文件
$ rm sf1.txt
$ ls -li
523369 -rw-rw-r--. 1 user user 6 Jun 20 12:30 hardsf.txt
523364 drwxrwxr-x. 3 user user 4096 Jun 20 12:30 sd
523370 -rw-rw-r--. 1 user user 6 Jun 20 12:30 sf2.txt
523371 lrwxrwxrwx. 1 user user 2 Jun 20 12:30 softsd-> sd
523372 lrwxrwxrwx. 1 user user 7 Jun 20 12:30 softsf.txt-> sf2.txt
$ cat hardsf.txt
test1-m
删除一个文件,需要引用计数为0,则能真正删除。删除sf1.txt之后,硬链接文件的引用计数为1,再次删除才能真正删掉。
$ rm sf2.txt
$ ls -li
523369 -rw-rw-r--. 1 user user 6 Jun 20 12:30 hardsf.txt
523364 drwxrwxr-x. 3 user user 4096 Jun 20 12:30 sd
523371 lrwxrwxrwx. 1 user user 2 Jun 20 12:30 softsd-> sd
523372 lrwxrwxrwx. 1 user user 7 Jun 20 12:30 softsf.txt-> sf2.txt
$ cat softsf.txt
cat: sotfsf.txt: No such file or directory
删除软链接指向的文件,由于sf2.txt的引用计数为1,可以直接删除,软链接的文件还在,只是找不到目标。