开发者学堂课程【Linux文件管理命令:软链接和硬链接 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/591/detail/8345
软链接和硬链接
内容介绍
一.节点表概念及节点表结构
二.硬链接
三.软链接
一.节点表概念及节点表结构
[root@centos7 boot] #cd
[root@centos7 ~] #
[root@centos7 ~] #
[root@centos7 ~] #1s -di /
64 /
[root@centos7 ~] #1s -di / /boot /data
64 / 64 /boot 64 /boot
[root@centos7 ~] #
[root@centos6 data] #cd
[root@centos6 ~] #1s -di /boot /data/ /
2 / 2 /boot 2 /data/
[root@centos6 ~] #1s -di /proc
1 /proc
[root@centos6 ~] #1s -di /proc /sys
1 /proc 1 /sys
[root@centos6 ~] #
二.硬链接
(1)硬链接
1.创建硬链接会增加额外的记录项以引用文件
2.对应于同一文件系统上一个物理文件
3.每个目录引用相同 inode 号
4.创建时链接数递增
5.删除文件时
rm 命令递减计数的链接
文件要存在时,至少有一个链接数
当连接数为零时,该文件被删除
6.不能跨越驱动器或分区
7.语法:
In filename [linkname]
Windows 中快捷方式的概念 当双击桌面,对应的打开了快捷方式
8. 指向的文件夹或者文件。
(2)硬链接:
对一个文件,起多个名字。
针对硬链接起多个名字
[root@centos7~] #cd / data
[root@centos7 data] #1s
dir1 f1 f2
[root@centos7 data] #11-i
total o
16777344 drwxr-xr-x 2 root root 26 sep 24 23:10 dir1
67-rw-r--r-- 1 root root 0 sep 24 22:49 f1
68-rw-r--r—1 root root 0 sep 24 22:50 f2[root@centos7 data] #1n f1 f11
total o
16777344 drwxr-xr-x 2 root root 26 sep 24 23:10 dir1
67-rw-r--r-- 2 root root0 sep 24 22:49 f1
67-rw-r--r-- 2 root root0 sep 24 22:49f11
68-rw-r--r-- 1 root root0 sep 24 22:50 f2
[root@centos7 data] #
f1跟 f11是同一个文件,只是名字不一样,理论上打开一个文件改动
[root@centos7 data] #cat f1
f1
[root@centos7 data] #cat f11f1
[root@centos7 data] #17-i
total 8
1677744drwxr-xr-x 2 root root 26 sep 24 23:10 dir1
67-rw-r--r—2 root root 3 sep 24 23:55 f1
68-rw-r--r-- 2 root root 3 sep 24 23:55 f11
68-rw-r--r-- 1 root root 0 sep 24 22:50 f2
[root@centos7 data] #
画图理解:相当于两个文件指向的文件是同一个,最外圈大矩形代表硬盘空间,小矩形代表 f1的内容,f1跟 f11都是它的文件名,它们的节点编号都是同一个,指向的内容也是同一个
,所以通过 f1去访问的数据,改变数据,通过的f2看的的数据也会改变,因为两者指向的是同一数据。
(3)链接数
提问:f1在硬盘中占三个字节,f1跟 f11占据的总空间是多大
答案:三个字节(公用空间)
链接数:未创建 f11之前链接数是1,创建 f11之后,链接数变为2(本质上有几个名称)
删除链接 f11之后,链接数又变成1
硬链接会增长链接数,本质上,硬链接就是对一个文件起多个名字,所以同一个文件有多个名字,链接数就是同一个文件名称有几个,因此,创建一个链接会增长链接数,硬链接和原始文件没有主次之分,都是文件名称.
[ root@centos7 data] #11 -i
total 4
16777344 drwxr-xr-x 2 root root 26 Sep 24 23:10 dir1
67 -rw-r—r—1 root root 3 sep 24 23:55 f11
68 -rw-r—r—1 root root 0 sep 24 22:50 f2
[ root@centos7 data] #1n f2 /root/f22
1n: failed to create hard link
‘/root/f22’=>‘f2’:Invalid cross-device link
[ root@centos7 data] #
(4) 硬链接不能跨越驱动器或分区
命令错误的原因:跨目录
硬链接不能跨越驱动器或分区
[ root@centos7 data] #1n /data/ f2 /root/f222
ln: failed to create hard link
‘/root/f222’=>‘f2’:Invalid cross-device link
命令错误的原因:分区不同
[ root@centos7 data] #1n /data/ f2 /data/dir1/f22
(5)硬链接不能针对目录实现
[ root@centos7 data] #1n dir1 dir1 2
1n:
‘dir1’:hard 1ink not allowed for directory
16777344 drwxr-xr-x 2 root root 37 sep 25 00:01 dir1
67-rw-r--r-- 1 root root3 sep 24 23:55 f11
68-rw-r--r-- 2 root root0 sep 24 22:50 f2
[root@centos7 data]#11-i dir1/ -a
total o
16777344 drwxr-xr-x2 root root 37 sep 25 00:01.
64drwxr-Xr-x. 3 root root 39 sep 24 23:57..
16777344-rw-r--r--i root rooto sep 2422:57f2
-rw-r--r--2 root root o sep 24 22:50 f22
16777344-rw-r--r--1 root rooto sep 24 23:10f3
[root@centos7 data]#
dirl 下有个点,点也是16777344,所以每个文件夹都有自己的目录,而且每个目录下都有点和两个点,所以每个文件至少都有两个链接数
[root@centos7 data]#mkdir dir1/dirl
16777344 drwxr-xr-x 3 root root 37 sep 25 00:01 dir1
67-rw-r--r-- 1 root root3 sep 24 23:55 f11
68-rw-r--r-- 2 root root0 sep 24 22:50 f2
文件夹的链接数变成3是因为在 dir1下建了一个子文件夹,dir2 中有两个隐藏的点,这点就是 dir1。
三.软链接
(1)符号(或软)链接
1.一个符号链接指向另一个文件
2.1s-1的显示链接的名称和引用的文件夹
3.一个符号链接的内容是它引用文件的名称
4.可以对目录进行
5.可以跨分区
6.指向的是另一个文件的路径,其大小为指向的的路径字符串的长度,
7.不增加或减少目标文件 inode 的引用计数
8.语法:
1n-s filename [linkname]
(2)创捷软连接:
[root@centos7 data]#1n -s f2 f2-1ink
[root@centos7 data]#11
Tota1 4
drwxr-xr-x 3 root root 49 sep 25 00:05 dir1
-rw-r—r--1 root root 3 sep 24 23:55 f11
-rw-r—r--2 root root 0 sep 24 23:55 f2
1rwxrwxrwwx 1root root 2 sep 25 00:07 f2-link ->f2
[root@centos7 data]#
创建软链接后,链接数并没有改变,并且 f2 和 f2link 不是同一个文件,因为属性都不同,节点号不同,所以软链接本质上不是同一个链接,通过 f2 和 f2link 访问的都是同一个链接。
将 f2链接文件删除后,文件不存在。因为软链接本质上是一个箭头,当文件夹消失后,就打不开文件夹,这时新建一个与原名称相同的新文件夹,即可打开新文件夹。
(3)软链接支持文件夹
Dir1 f11 f2 f2-1ink
[ root@centos7 data]#1n -S dir1 dir1-link
[ root@centos7 data]#11
total 8
drwxr-xr-x 3 root root 49 Sep 25 00:05 dir1
1 rwxrwxrwx 1 root root 4Sep 25 00:10 dir1-link
→dir1
-rw—r—r—1 root root 3 sep 24 23:55 f11
-rw—r—r—1 root root 595 sep 25 00:09 f2
1 rwxrwxrwx 1 root root 2Sep 25 00:07 f2-link →f2
(4)软链接针对文件支持跨分区
[ root@centos7 data]#1n -S /data/f2/root/f2222
data
跟 root 是不同的分区
[ root@centos7 data]#11/data/f2/root/f2222
-rw—r—r—1 root root 595 sep 25 00:09 /data/f2
1 rwxrwxrwx 1 root root 8ep 25 00:11 /root/f2222
→/data/f2
所以软链接相对于硬链接应用更广泛,因为它限制更少
理解:外边大方框代表的是硬盘,f1 跟 f11都是创建的硬链接,两者指向的是同一个文件,而 f1link 指向的是文件名,假如 f1被删除,则通过软链接不能直接访问文件。
(5)软链接支持各种路径(相对路径和绝对路径)
例如绝对路径:dir1 dir1-link f11 f2 f2link
[ root@centos7 data]#1n -S /data/f2 /d1/d2/d3/f2-link
[ root@centos7 data]#11 /data/f2 /d1/d2/d3/f2-1ink
1 rwx rwxrwx 1 root root 8 sep 25 00:14 /d1/d2/d3/f2-link
→、data/f2
-rw-r--r-- 1 root root 595 Sep 25 00:09 /data/f2
[ root@centos7 data ]#pwd
/data
[root@centos7 data]#1s
相对路径:
dir1 dir1-link f11 f2 f2link
[ root@centos7 data]#rm -f /d1/d2/d3/f2-link
[ root@centos7 data ]#pwd
/data
[ root@centos7 data]#ls
dir1 dir1-link f11 f2 f2link
[ root@centos7 data]#In -S f2 . . /d1/d2/d3/f2-link
[ root@centos7 data]#11 /d1/d2/d3/f2-1ink
i rwxrwxrwx 1 root root 2 Sep 25 00:16 /d1/d2/d3/f2-link -> f2
错误原因:认为 f2 和 f2link 处于同一目录下,相对路径要写对
相对路径:[ root@centos7 data]#In -S../../../data/f2 . . /d1/d2/d3/f2-link
[ root@centos7 data]#11 /data/f2 /d1/d2/d3/f2-1ink
1 rwx rwxrwx 1 root root 8 sep 25 00:18 /d1/d2/d3/f2-link→../../../data/f2
生产中相对路径应用多余绝对路径
例如:[ root@centos7 data]#11 /etc/grub2.cfg
1 rwx rwxrwx 1 root root 22 sep 19 19:48 /etc/grub2.cfg→../boot/grub2/grub.ctg
软链接:原始文件一般路径用相对路径,相对路径一定是相对于软链接文件的路径
(6)硬链接和软连接的区别:
1.是否是同一个文件(根本区别)
2.能否跨分区
3.链接数是否增长
4.inode number 是否相同
5.原始文件删除,链接文件是否可以访问
6.原始文件与链接文件的大小
7.是否支持目录
8.相对路径写法不一样
(7)确定文件内容
1.文件可以包含多种类型的数据
2.检查文件的类型,然后确定适当的打开命令或应用程序使用
3.file[options]<filename>…
4.常用选项
-b 列出文件辨识结果时,不显示文件名称
-f filelist 列出文件 filelist 中文件名得文件类型
-F 使用指定分隔符号替换输出文件名后默认的“:”分隔符
-L查看对应软链接对应文件的文件类型
--help 显示命令在线帮助
(8)应用
1.用 file 确定文件类型
[ root@centos7 data]#file /dev/sd
如果不确定文件类型,直接就用 cat 查看文件,则可能造成乱码.
机制:file 命令可以分析文件类型,并非看文件后缀,而是通过查看文件信息查查看,这个叫做 magic number (魔数),不同文件头部会有体现文件不同类型的信息,这个就叫做“魔数”,file即是查看这个文件得格式来查看文件
2.加-b 的应用
[ root@centos7 ~]#file /etc/profile
/etc/profile
:ASCII text
[ root@centos7 ~]#file -b / etc/profile
ASCII text
3.加-F 的应用
[root@centos7~]#file /etc/profile /dev /sda
/etc/ profile: ASCII text
/dev/sda :b7ock special
[root@centos7 ~]#file'-F"+" /etc/profile /dev/sdaetc/profile+ ASCII text
/dev/sda+b7ock special
[root@centos7~]#file'-F"l"/etc/profile /dev/sdaetc/ profilel ASCII text
/dey'dalblock special
4.-L 的应用
[root@centos7~]#file_(etclgrub2 .cfg.
/etc/grub2.cfg:symboliclinkto ../boot/grub2/grub.cfg'
[root@centos7~]#fi7e -Ll/etc/grub2.cfg
/etc/ grub2 .cfg: ASCII text
也可以同时判断几个文件,将几个文件写在一个文件中,之后调取这个文件就可以直接判断各个文件。
本章新学到的命令
1.ln(ln-s) 6.rm(删除文件)
2.rename 7.mv(移动文件)
3.file 8.tree(显示目录数结构)
4.mkdir(删除空文件夹) 9.lsof
5.rmdir(删除空文件) 10.dd
11.reset
面试的一个题目:
mv /dir1/f1 /dir2/fe和 ln-s /dir1/f1 /dir2/f2 的区别(必须搞懂原理)