分享

Linux文件也有快捷方式?有的,你会用吗?

 苏醒的贝壳 2019-08-19

1. 前言

本文主要讲解linux软链接与硬链接的原理以及使用的方法。Linux的链接包括软链接和硬链接,类似于Linux的快捷方式。

Linux文件也有快捷方式?有的,你会用吗?

linux怎么建立软链接和硬链接

一个文件由文件名和数据组成,在 Linux 系统上也是被分成两个部分:用户数据 (user data) 与元数据 (metadata)。用户数据,即文件数据块 (data block),数据块是记录文件真实内容的地方;而元数据则是文件的附加属性,如文件大小、创建时间、所有者等信息。在 Linux系统中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名。文件名仅是为了方便人们的记忆和使用,系统或程序通过 inode 号寻找正确的文件数据块。下图展示了程序通过文件名获取文件内容的过程。

Linux文件也有快捷方式?有的,你会用吗?

通过文件名打开文件

2. 查看文件对应的inode号码

在 Linux 系统中查看 inode 号可使用命令 stat 或 ls -i。

[root@CentOS7 ~]# stat anaconda-ks.cfg

文件:'anaconda-ks.cfg'

大小:1408 块:8 IO 块:4096 普通文件

设备:fd00h/64768d Inode:67146830 硬链接:1

权限:(0600/-rw-------) Uid:( 0/ root) Gid:( 0/ root)

环境:system_u:object_r:admin_home_t:s0

最近访问:2019-05-31 17:36:00.109184712 +0800

最近更改:2019-05-31 17:36:00.110184571 +0800

最近改动:2019-05-31 17:36:00.111184429 +0800

创建时间:-

查看文件anaconda-ks.cfg的inode号

[root@zcwyou ~]# ls -i -F anaconda-ks.cfg 

67146830 anaconda-ks.cfg

使用mv命令对文件anaconda-ks.cfg移动

[root@zcwyou ~]# mv anaconda-ks.cfg 123.cfg

再次查看文件的inode号

[root@zcwyou ~]# ls -i -F 123.cfg

67146830 123.cfg

可以看出在Linux系统中使用命令 mv 移动并重命名文件123.cfg,其结果不影响文件的用户数据及 inode 号,文件移动前后 inode 号均为:67146830。

为解决文件的共享使用,Linux 系统引入了两种链接:硬链接 (hard link) 与软链接(又称符号链接,即 soft link 或 symbolic link)。链接为 Linux 系统解决了文件的共享使用,还带来了隐藏文件路径、增加权限安全及节省存储等好处。若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名。hard link 就是 file 的一个别名,他们有共同的 inode)。硬链接可由命令 link 或 ln 创建。如下是对文件 oldfile 创建硬链接。

执行命令

link 旧文件名 新文件名

或者

ln 旧文件名 新文件名

由于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:

  • 文件有相同的 inode 及 data block;
  • 只能对已存在的文件进行创建;
  • 不能交叉文件系统进行硬链接的创建;
  • 不能对目录进行创建,只可对文件创建;
  • 删除一个硬链接文件并不影响其他有相同 inode 号的文件。

3. Linux创建硬链接

[root@CentOS7 ~]# ls -li

总用量 4

67146830 -rw-------. 1 root root 1408 5月 31 17:36 123.cfg

只能对已存在的文件创建硬连接

命令格式

link old.file hard.link

操作案例:

[root@zcwyou ~]# cp 123.cfg anaconda-ks.cfg[root@zcwyou ~]# link anaconda-ks.cfg hard-link.cfg | ls -li

总用量 8

67146830 -rw-------. 1 root root 1408 5月 31 17:36 123.cfg

67146843 -rw-------. 2 root root 1408 6月 2 09:36 anaconda-ks.cfg

[root@CentOS7 ~]# ls -li

总用量 12

67146830 -rw-------. 1 root root 1408 5月 31 17:36 123.cfg

67146843 -rw-------. 2 root root 1408 6月 2 09:36 anaconda-ks.cfg

67146843 -rw-------. 2 root root 1408 6月 2 09:36 hard-link.cfg

文件 anaconda-ks.cfg与 hard-link.cfg 有着相同的 inode 号:67146843及文件权限,inode 是随着文件的存在而存在,因此只有当文件存在时才可创建硬链接,即当 inode 存在且链接计数器(link count)不为 0 时。inode 号仅在各文件系统下是唯一的,当 Linux 挂载多个文件系统后将出现 inode 号重复的现象,文件比如文件系统1(比如/dev)的1.txt、文件系统2(比如/root)的2.txt 并无关联,却有着相同的 inode 号),因此硬链接创建时不可跨文件系统。设备文件目录 /dev 使用的文件系统是 devtmpfs,而 /root(与根目录 / 一致)使用的是磁盘文件系统 ext4。

不能交叉文件系统

[root@zcwyou ~]# ln /dev/input/event5 /root/bfile.txt

ln: 无法创建硬链接'/root/bfile.txt' => '/dev/input/event5': 无效的跨设备连接

不能对目录进行创建硬连接

[root@CentOS7 ~]# mkdir -p test_dir/test[root@CentOS7 ~]# ln test_dir/ test2.dir

ln: 'test_dir/': 不允许将硬链接指向目录

3.1 查找有相同 inode 号的文件

查看文件系统

[root@zcwyou ~]# df -i --print-type

文件系统 类型 Inode 已用(I) 可用(I) 已用(I)% 挂载点

/dev/mapper/centos-root xfs 19394560 29924 19364636 1% /

devtmpfs devtmpfs 229908 394 229514 1% /dev

tmpfs tmpfs 232906 1 232905 1% /dev/shm

tmpfs tmpfs 232906 738 232168 1% /run

tmpfs tmpfs 232906 16 232890 1% /sys/fs/cgroup

/dev/sda1 xfs 524288 334 523954 1% /boot

tmpfs tmpfs 232906 1 232905 1% /run/user/0

[root@zcwyou ~]# find / -inum

/root/anaconda-ks.cfg

/root/hard-link.cfg

找到两个文件具有相关的inode号67146843,实际上是同一文件

硬链接不能对目录创建是受限于文件系统的设计。现 Linux 文件系统中的目录均隐藏了两个特殊的目录:当前目录(.)与父目录(..)。查看这两个特殊目录的 inode 号可知其实这两目录就是两个硬链接(注意目录 /mnt/lost+found/ 的 inode 号)。若系统允许对目录创建硬链接,则会产生目录环。

4. Linux创建软链接

软链接与硬链接不同,若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接。软链接就是一个普通文件,只是数据块内容有点特殊。软链接有着自己的 inode 号以及用户数据块。

Linux文件也有快捷方式?有的,你会用吗?

Linux创建软链接

因此软链接的创建与使用没有类似硬链接的诸多限制:

  • 软链接有自己的文件属性及权限等;
  • 可对不存在的文件或目录创建软链接;
  • 软链接可交叉文件系统;
  • 软链接可对文件或目录创建;
  • 创建软链接时,链接计数 i_nlink 不会增加;
  • 删除软链接并不影响被指向的文件,但若被指向的原文件被删除,则相关软连接被称为死链接(即 dangling link,若被指向路径文件被重新创建,死链接可恢复为正常的软链接)。

4.1 Linux软链接命令

命令格式:ln -s 源文件 软链接新文件

[root@zcwyou ~]# ln -s anaconda-ks.cfg soft-link.cfg

查看软链接文件

[root@CentOS7 ~]# ll soft-link.cfg

lrwxrwxrwx. 1 root root 15 6月 2 09:47 soft-link.cfg -> anaconda-ks.cfg

创建目录软链接命令格式

ln -s 源目录路径 软链接路径

[root@CentOS7 ~]# ln -s test_dir/ soft_link_dir

查看软链接目录结果:

bash [root@CentOS7 ~]# ll soft_link_dir ¨G16G bash [root@CentOS7 ~]# ls -li

总用量 12

67146830 -rw-------. 1 root root 1408 5月 31 17:36 123.cfg

67146843 -rw-------. 2 root root 1408 6月 2 09:36 anaconda-ks.cfg

67146843 -rw-------. 2 root root 1408 6月 2 09:36 hard-link.cfg

67146844 lrwxrwxrwx. 1 root root 15 6月 2 09:47 soft-link.cfg -> anaconda-ks.cfg

67146845 lrwxrwxrwx. 1 root root 9 6月 2 09:49 soft_link_dir -> test_dir/

100673615 drwxr-xr-x. 3 root root 34 6月 2 09:51 test_dir

5. 总结

硬链接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同一索引节点是存在的。一般这种连接就是硬连接。硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。

另外一种连接称之为符号连接(Symbolic Link),也叫软连接。软链接文件有类似于Windows的快捷方式。它实际上是一个特殊的文件。在符号连接中,文件实际上是一个文本文件,其中包含的有另一文件的位置信息。

本文已同步至博客站,尊重原创,转载时请在正文中附带以下链接:

https://www./rmxx/1023.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多