IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 20.目录与链接——概念 -> 正文阅读

[系统运维]20.目录与链接——概念

目录和硬链接

在文件系统中,目录的存储方式类似于普通文件,区别有:

  • 在目录的i-node条目中,会将其标记为一种不同的文件类型
  • 目录是经特殊组织而成的文件。本质上就是一个表格,包含文件名和i-node编号。

进程能够打开一个目录,但却不能用read()去读取目录的内容。同样也不能使用write()来改变目录内容。仅能借助于open()link()mkdir()symlink()unlink()以及rmdir()之类的系统调用来间接改变其内容。

i-node表的编号始于1,而非0,因为若目录条目的i-node字段值为0,则表明该条目尚未使用。

能够在相同或者不同目录中创建多个名称,每个均指向相同的i-node节点。也将这些名称称为链接。有时也称为硬链接。
可在shell中利用ln命令为一个已经存在的文件创建新的硬链接:

$ln <file> <link>
  • 仅当i-node的链接技术降为0时,也就是移除了文件的所有名字时,才会删除文件的i-node记录和数据块。
  • 同一文件的所有名字(链接)地位平等,没有一个名字会优于其他名字。在移除与文件相关的第一个名称后,物理文件继续存在,直到移除所有名字。

对硬链接的限制:

  • 因为目录条目(硬链接)对文件的指代采用了i-node编号,而i-node编号的唯一性仅在一个文件系统之内才能得到保障,所以硬链接必须与其所指代的文件驻留在同一文件系统中。
  • 不能为目录创建硬链接,从而避免出现诸多令诸多系统程序陷于混乱的链接环路。

符号链接(软链接)

符号链接,也称为软链接,是一种特殊的文件类型,其数据是另一文件的名称。
在shell中,符号链接是由ln -s命令创建的。ln -F命令输出结果中会在符号链接的尾部标记@

符号链接的内容既可以是绝对路径,也可以是相对路径。解释相对符号链接时可以链接本身的位置作为参照点。

符号链接的地位不如硬链接。尤其是,文件的链接计数中未将符号链接计算在内。
因此,如果移除了符号链接所指向的文件名,符号链接本身还将继续存在,尽管无法解引用,也将此类链接称之为悬空链接。甚至,可以为并不存在的文件名创建一个符号链接。

因为符号链接指代一个文件名,而非i-node编号,所以可以用其来链接不同文件系统中的一个文件。也可以为目录茶ungj符号链接。

符号链接之间可能会形成链路。当在各个文件相关的系统调用中指定了符号链接时,内核会对一系列链接层层解去引用,直抵最终文件。(Linux将对一个完整路径名的解引用此书限制为40次。防止内核代码在解析符号链接时引发堆栈溢出。)

系统调用对符号链接的解释

许多系统调用都会对符号链接进行解引用处理,从而对链接所指向的文件展开操作。还有一些系统调用对符号链接则不作处理,直接操作于链接文件本身。总结如下:

函数是否对链接解引用备注
access()
acct()
bind()UNIX域套接字带有路径名
chdir()
chmod()
chown()
chroot()
creat()
exec()
getxattr()
lchown()N
lgetxattrN
link()N
listxattr()
llistxattr()N
lremovexattr()N
lsetxattrN
lstat()N
lutimes()N
open()除非指定了O_NOFOLLOW或者O_EXCL|O_CREAT
opendir()
pathconf()
pivot_root()
quotactl()
readlink()N
removexattr()
rename()N无论那个参数中的链接,都不会对其进行解引用
rmdir()N若参数为符号链接,则调用失败,并将errno置为ENOTDIR
setxattr()
stat()
statfs(), statvfs()
swapon(), swapoff()
truncate()
unlink()N
uselib()
utime(), utimes()

参考资料:《Linux/UNIX系统编程手册》

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-03-03 16:53:58  更:2022-03-03 16:55:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 3:50:00-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码