软链接 ln -s a.c b.c
可以看到执行完这条命令后,新生成一个文件b.c且查看文件类型为lrwxrwxrwx 1 lj lj 3 6月 24 22:01 b.c -> a.c 开头的l表示其为链接文件
查看b.c中内容cat b.c ,和a.c中内容一模一样
lj@ubuntu ~ % ls [0] a.c Desktop Downloads install_zsh.sh Pictures Templates a.out Documents install_vim.sh Music Public Videos lj@ubuntu ~ % ln -s a.c b.c [0] lj@ubuntu ~ % ls [0] a.c b.c Documents install_vim.sh Music Public Videos a.out Desktop Downloads install_zsh.sh Pictures Templates lj@ubuntu ~ % ls -l [0] 总用量 72 -rw-rw-r-- 1 lj lj 328 6月 23 23:02 a.c -rwxrwxr-x 1 lj lj 16696 6月 23 22:54 a.out lrwxrwxrwx 1 lj lj 3 6月 24 22:01 b.c -> a.c drwxr-xr-x 2 lj lj 4096 6月 21 20:52 Desktop drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Documents drwxr-xr-x 2 lj lj 4096 4月 28 02:59 Downloads -rw-rw-r-- 1 lj lj 1837 4月 20 02:34 install_vim.sh -rw-rw-r-- 1 lj lj 8457 4月 22 14:43 install_zsh.sh drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Music drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Pictures drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Public drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Templates drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Videos lj@ubuntu ~ % cat b.c [0] #includeint main(){ printf("helloworld!n"); return 0; }
硬链接 ln a.c c.c
执行完该语句后新生成一个文件c.c,查看文件类型时发现和a.c一模一样。可以看作是对a.c的复制。其内容也和a.c中相同。
lj@ubuntu ~ % ln a.c c.c [0] lj@ubuntu ~ % ls [0] a.c b.c Desktop Downloads install_zsh.sh Pictures Templates a.out c.c Documents install_vim.sh Music Public Videos lj@ubuntu ~ % ls -l [0] 总用量 76 -rw-rw-r-- 2 lj lj 328 6月 23 23:02 a.c -rwxrwxr-x 1 lj lj 16696 6月 23 22:54 a.out lrwxrwxrwx 1 lj lj 3 6月 24 22:01 b.c -> a.c -rw-rw-r-- 2 lj lj 328 6月 23 23:02 c.c drwxr-xr-x 2 lj lj 4096 6月 21 20:52 Desktop drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Documents drwxr-xr-x 2 lj lj 4096 4月 28 02:59 Downloads -rw-rw-r-- 1 lj lj 1837 4月 20 02:34 install_vim.sh -rw-rw-r-- 1 lj lj 8457 4月 22 14:43 install_zsh.sh drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Music drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Pictures drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Public drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Templates drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Videos lj@ubuntu ~ % cat c.c [0] #includeint main(){ printf("helloworld!n"); return 0; }
更改a.c文件
查看b.c
查看c.c
lj@ubuntu ~ % vim a.c [0] lj@ubuntu ~ % cat b.c [0] #includeint main(){ printf("helloworld!n"); printf("现在对源文件进行更改!n"); return 0; } lj@ubuntu ~ % cat c.c [0] #include int main(){ printf("helloworld!n"); printf("现在对源文件进行更改!n"); return 0; } lj@ubuntu ~ %
现在,先将a.c更改回来后再删除a.c文件
lj@ubuntu ~ % rm a.c [0] lj@ubuntu ~ % ls [0] a.out c.c Documents install_vim.sh Music Public Videos b.c Desktop Downloads install_zsh.sh Pictures Templates lj@ubuntu ~ % ls -l [0] 总用量 72 -rwxrwxr-x 1 lj lj 16696 6月 23 22:54 a.out lrwxrwxrwx 1 lj lj 3 6月 24 22:01 b.c -> a.c -rw-rw-r-- 1 lj lj 328 6月 23 23:02 c.c drwxr-xr-x 2 lj lj 4096 6月 21 20:52 Desktop drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Documents drwxr-xr-x 2 lj lj 4096 4月 28 02:59 Downloads -rw-rw-r-- 1 lj lj 1837 4月 20 02:34 install_vim.sh -rw-rw-r-- 1 lj lj 8457 4月 22 14:43 install_zsh.sh drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Music drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Pictures drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Public drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Templates drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Videos
可以发现b.c标红
链接文件b.c->a.c同样标红
再次查看b.c和c.c中内容
发现b.c执行错误,cat: b.c: 没有那个文件或目录
c.c中内容可以正常查看
lj@ubuntu ~ % cat b.c [0] cat: b.c: 没有那个文件或目录 lj@ubuntu ~ % cat c.c [1] #includeint main(){ printf("helloworld!n"); return 0; }
现在,将c.c更名为a.c(即恢复a.c文件)
lj@ubuntu ~ % mv c.c a.c [0] lj@ubuntu ~ % ls [0] a.c b.c Documents install_vim.sh Music Public Videos a.out Desktop Downloads install_zsh.sh Pictures Templates lj@ubuntu ~ % ls -l [0] 总用量 72 -rw-rw-r-- 1 lj lj 328 6月 23 23:02 a.c -rwxrwxr-x 1 lj lj 16696 6月 23 22:54 a.out lrwxrwxrwx 1 lj lj 3 6月 24 22:01 b.c -> a.c drwxr-xr-x 2 lj lj 4096 6月 21 20:52 Desktop drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Documents drwxr-xr-x 2 lj lj 4096 4月 28 02:59 Downloads -rw-rw-r-- 1 lj lj 1837 4月 20 02:34 install_vim.sh -rw-rw-r-- 1 lj lj 8457 4月 22 14:43 install_zsh.sh drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Music drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Pictures drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Public drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Templates drwxr-xr-x 2 lj lj 4096 4月 28 00:43 Videos
可以发现 a.c b.c不再标红
再次查看b.c中内容,这次执行成功
lj@ubuntu ~ % cat b.c [0] #includeint main(){ printf("helloworld!n"); return 0; }
总结:
- 软链接语句为ln -s 源文件 软链接文件
硬链接语句为 ln 源文件 硬链接文件 - 软链接文件相当于指针,指向源文件,文件大小一般较小
硬链接文件相当于复制,文件大小和源文件相同 - 软链接指向的源文件被删除后,指针失效,软链接文件内容无法查看
硬链接被创造的源文件被删除后,对硬链接文件无影响,可以正常使用 - 若软链接文件指向的源文件被恢复,软链接文件内容同样恢复
- 若源文件发生变动,软链接和硬链接文件同步更新



