学习笔记--硬链接与软链接

来源:互联网 发布:有关网络暴力的名言 编辑:程序博客网 时间:2024/06/15 03:49

学习笔记:硬链接与软链接

2017.01.14

UNIX/Linux系统中除进程之外的一切皆是文件,系统并不区分文件与目录:目录是记录了其他文件名的文件。使用命令 mkdir 创建目录时,若期望创建的目录的名称与现有的文件名(或目录名)重复,则会创建失败。

unix系统中的文件类型:
├──普通文件:常见的文件类型
├──目录文件:包含其它文件的名字以及指向与这些文件有关信息的指针
├──块特殊文件:提供对设备(如磁盘)带缓冲的访问,每次访问以固定长度为单位进行
├──字符特殊文件(character special file):对设备不带缓冲的访问,每次访问长度可变
├──FIFO:用于进程间通信,有时也称为命名管道(named pipe)
├──套接字(socket):用于进程间的网络通信
├──符号链接(symbolic link):指向另一个文件

Linux 系统的顶层目录结构
/ 根目录
├── lrwxrwxrwx. 1 rootroot 7 9月 25 14:38 bin -> usr/bin 存放用户二进制文件
├── dr-xr-xr-x. 4 root root4096 9月 25 14:55 boot 存放内核引导配置文件
├── drwxr-xr-x. 20 root root3360 10月 11 19:00 dev 存放设备文件
├── drwxr-xr-x. 81 root root8192 12月 29 00:58 etc 存放系统配置文件
├── drwxr-xr-x. 11 root root4096 10月 11 18:59 home 用户主目录
├── lrwxrwxrwx. 1 rootroot 7 9月 25 14:38 lib -> usr/lib 动态共享库
├── lrwxrwxrwx. 1 rootroot 9 9月 25 14:38 lib64 -> usr/lib64 动态共享库
├── drwxr-xr-x. 2 rootroot 6 8月 12 2015 media 可卸载存储介质挂载点
├── drwxr-xr-x. 2 root root 6 8月 12 2015 mnt 文件系统临时挂载点
├── drwxr-xr-x. 2 rootroot 6 8月 12 2015 opt 附加的应用程序包
├── dr-xr-xr-x. 114 root root 0 10月 11 18:40 proc 系统内存的映射目录,提供内核与进程信息
├── dr-xr-x—. 4 root root4096 12月 9 00:19 root root 用户主目录
├── drwxr-xr-x. 23 rootroot 680 12月 17 15:52run
├── lrwxrwxrwx. 1 rootroot 8 9月 25 14:38 sbin -> usr/sbin 存放系统二进制文件
├── drwxr-xr-x. 2 rootroot 6 8月 12 2015 srv 存放服务相关数据
├── dr-xr-xr-x. 13 rootroot 0 10月 11 18:40sys sys虚拟文件系统挂载点
├── drwxrwxrwt. 9 root root4096 1月 14 03:30 tmp 存放临时文件
├── drwxr-xr-x. 14 root root4096 9月 26 17:43 usr 存放用户应用程序
└── drwxr-xr-x. 20 root root4096 10月 12 20:08 var 存放邮件、系统日志等变化文件

硬盘、分区和文件系统:
一个硬盘可以分成一个或多个分区:
————————————
| 分区0 | 分区1 | 分区2 | … |
————————————

每个分区可以包含一个文件系统,文件系统示意图:
——————————————————
| 自举块 | 超级块 | 柱面组0 | 柱面组1 | … |
——————————————————

柱面组示意图:
————————————————————————————————
| 超级块副本 | 配置信息 | i节点图 | 块位图 | i节点 | i节点 | … | i节点 | 数据块 |
———————————————————————————————

每个i节点中都有一个链接计数,其值是指向该i节点的目录项数,只有当该链接计数减少至0时,才可删除该文件,因此:“解除对一个文件的链接”操作并不总是意味着“释放该文件占用的磁盘块”,同时删除一个目录项的函数被称为unlink而不是delete。stat结构中,链接计数包含在st_nlink成员中,这种链接称为硬链接。符号链接(symbolic link):符号链接文件的实际内容包含了该符号链接所指向的文件的名字
ln -s abc cde 建立abc的软连接
ln abc cde 建立abc的硬连接

stat filename 查看inode信息,inode包含了文件有关的所有信息:
*文件类型
*文件的字节数(长度)
*文件拥有者的User ID
*文件的Group ID
*文件的读、写、执行权限(访问权限)
*文件的时间戳,共有三个:ctime指inode状态的最后更改时间,mtime指文件内容最后更改时间,atime指文件数据的最后访问时间。(更改文件访问权限、用户id、更改链接数等并不会更改文件实际内容,因此mtime不会更新,但是ctime会更新,access和stat函数不会更新3个时间中的任何一个)
*链接数,即有多少文件名指向这个inode
*指向文件数据块的指针(文件数据block的位置)
只有两项数据存放在目录项中:文件名和i节点编号
目录项中的i节点编号指向同一文件系统中的相应i节点,一个目录项不能指向另一个文件系统的i节点,这也是为什么ln命令不能跨越文件系统的原因。

重新整理:
在Linux系统中,内核为每一个新创建的文件分配一个Inode(索引结点),每个文件都有一个惟一的inode号。文件属性保存在索引结点里,在访问文件时,索引结点被复制到内存,从而实现文件的快速访问。

硬链接:
(1)说白了是一个指针,指向文件索引节点,系统并不为它重新分配inode
(2)同一个文件的两个名字,它们具有同样的索引节点号和文件属性
(3)建立文件file1的硬链接,就是在当前目录上建立一个新指针,该指针指向file1的文件索引节点。
(4)每删除一次,链接数目减一

尽管硬链接节省空间,也是Linux系统整合文件系统的传统方式,但是存在一下不足之处:
(1)不可以在不同文件系统的文件间建立链接
(2)只有root用户才可以为目录创建硬链接。

软链接:
又称为符号链接,克服了硬链接的不足,没有任何文件系统的限制,任何用户可以创建指向目录的符号链接。被广泛使用,非常灵活,可以跨越不同机器、不同网络对文件进行链接。建立软链接,只要在ln后面加上选项 -s

硬链接:
原文件&链接文件公用一个inode号,说明他们是同一个文件;而软链接原文件与链接文件拥有不同的inode号,表明他们是两个不同的文件;
在文件属性上软链接明确写出了是链接文件,而硬链接没有写出来,因为在本质上硬链接文件和原文件是完全平等关系;
链接数目是不一样的,软链接的链接数目不会增加;
文件大小是不一样的,硬链接文件显示的大小是跟原文件是一样的,因为是等同的,而软链接显示的大小与原文件是不同的。

linux 软连接和硬链接的区别:
(1)软链接可以跨文件系统,硬链接接不可以。
(2)关于inode节点的问题。硬链接不管有多少个,都指向的是同一个I节点,会把结点链接数增加,只要结点的链接数不是0,文件就一直存在,不管你删除的是源文件还是链接的文件。只要有一个存在,文件就存在。当你修改源文件或者链接文件任何一个的时候,其他的文件都会做同步的修改。软链接不直接使用i节点号作为文件指针,而是使用文件路径名作为指针。所以删除连接文件对源文件无影响,但是删除源文件,链接文件就会找不到要指向的文件。软链接有自己的inode,并在磁盘上有一小片空间存放路径名.
(3)软链接可以对一个不存在的文件名进行连接。
(4)软链接可以对目录进行连接。
备注:I节点 :它是UNIX内部用于描述文件特性的数据结构。我们通常称I节点为文件索引结点(信息结点)。i节点含有关于文件的大部分的重要信息,包括文件数据块在磁盘上的地址.每一个I节点有它自己的标志号,我们称为文件顺序号。I节点包含的信息: 1.文件类型 2.文件属主关系 3.文件的访问权限 4.文件的时间截.

0 0