幸运蛋蛋pc开奖
Linux 中的文件分为 Hard Link 和 Symbolic Link 两种。Hard Link 文件又被称为硬链接文件、实体链接文件,Symbolic Link 文件则常被称为符号链接、软链接文件。这篇文章主要介绍了Linux ln 命令 ,需要的朋友可以参考下

Linux 中的文件分为 Hard Link 和 Symbolic Link 两种。Hard Link 文件又被称为硬链接文件、实体链接文件,Symbolic Link 文件则常被称为符号链接、软链接文件。

ln 命令用来在文件之间建立链接。在介绍 ln 命令前,让我们先来搞清楚究竟什么是硬链接,什么又是软链接。

Hard Link(硬链接)

我们知道,在 Linux 系统中,每个文件对应一个 inode,文件的内容在存储在 inode 指向的 data block 中。要读取该文件的内容,需要通过文件所在的目录中记录的文件名找到文件的 inode 号,然后通过 inode 找到存储文件内容的 data block(参考《Linux 文件与目录》)。

也就是说,文件名存储在目录中,inode 号执行文件存储的内容,文件名和 inode 之间有一个对应关系。那么多个文件名可不可以同时指向同一个 inode 呢?答案是可以的,这就是硬链接!从本质上来说,硬链?#21448;?#26159;在目录下新添加了一个文件名,这个文件名与一个已有文件的 inode 相关联。让我们也通过 /etc/crontab 文件来进行观察:

$ ll -i /etc/crontab
131213 -rw-r--r-- 1 root root 722 Nov 16 2017 /etc/crontab

使用 ln 命令在当前目录下创建一个 /etc/crontab 文件的硬链接,然后观察其文件属性:

$ sudo ln /etc/crontab .
$ ll -i /etc/crontab crontab
131213 -rw-r--r-- 2 root root 722 Nov 16 2017 crontab
131213 -rw-r--r-- 2 root root 722 Nov 16 2017 /etc/crontab

这两个文件名关联的 inode 号完全相同,都是 131213,所以它们指向的是同一个文件。同时请注意文件属性中的第三个字段,由 1 变成了 2。这个字段被称为 "链接数",它说明有多少个文件名链接到同一个文件的 inode。

另外需要注意的一点是上面所有输出中的第二个字段中的第一位,它们都是 "-",它说明这个文件的类型为普通文件,链接类型为硬链接。

我们可以通过下图来理解硬链接在文件系统中的实现方式:

硬链接的特点

    几乎不额外占用空间 只要还有一个文件名引用着文件,文件就不会被真正删除

由于硬链?#21448;?#26159;在目录中添加了一条包含文件名和 对应 inode 的记录,所以它几乎不会消耗额外的磁盘容量。
另外在删除硬链接所关联的文件时,其实只是删除了一条目录中的记录,真正的文件并不受影响。只有在删除最后一个硬链接时才会真正删除文件的内容数据。

硬链接的局限性

    不能跨文件系统创建硬链接 不能链接目录

由于这两个限制,实际使用中硬链?#30828;?#27809;有软链接使用的广泛,下面我们看看究竟什么是软链接。

Symbolic Link(软链接)

软链接的实现方?#25509;?#30828;链接有本质上的不同。创建软链接?#34987;?#21019;建一个新的文件(分配一个 inode 和对应的 data block),新文件的 data block 中存储了目标文件的路径。
还拿 /etc/crontab 文件举例子,这次创建一个软链?#30828;?#26597;看其文件属性:

$ sudo ln -s /etc/crontab crontab2

第一列,两个文件名对应的 inode 不同,说明这是两个文件。

第二列显示的文件权限也不一样,这一点和硬链接完全不同。注意文件类型被标记为 "l",说明这是一个软链接文件。

第三列很有意思,注意 /etc/crontab 文件的链接数量,还是 2,这和创建软链接文件 crontab2 前是一样的。也就是说创建软链?#30828;?#19981;增加原文件的链接数。

第六列是文件大大小,注意新建的软链接文件大小为 12 Bytes,也就是字符串 "/etc/crontab" 的长?#21462;?

最后一列会友好的显示出软链接文件指向的源文件。

我们可以通过下图来理解软链接在文件系统中的实现方式:

从上图我们可以看出,软链接文件 crontab2 是一个实实在在的文件,有自己的 inode 和 data block。但是它的 data block 中保存的是目标文件的地址:/etc/crontab。 像 open() 这样的 API 能够识别出软链接,并根据 data block 中的目标文件径把操作重定向到目标文件上。

可以链接目录是软链接的一大优势,创建目录链接的方式和普通文件一样:

$ ln -s /bin testbin

此时进入 testbin 目录和进入 /bin 目录是一样的。

更厉害的是,还可以跨文件系统创建软链接!

删除源文件

对于软链接来说,删除源链接后,链接文件就会无法找到指向的源文件了。看下面的演示:

$ echo "hello world" > hello.txt
$ ln -s hello.txt hello2
$ cat hello2
hello world
$ rm hello.txt
$ cat hello2
cat: hello2: No such file or directory

删除原文件后,操作链接文件时的提示是:"No such file or directory"。

文件的链接数

从上文中的示例我们可以看到,当创建硬链接文件时,文件的链接数会增加 1,而创建软链接时文件的链接数却不发生变化。

下面让我们看一个目录文件的链接数,先创建一个空目录:

$ mkdir /home/nick/testdir
$ ll /home/nick | grep testdir
drwxr-xr-x 2 nick nick 4096 Jul 10 08:58 testdir/

新建的空目录有两个硬链接,分别是:

/home/nick/testdir
/home/nick/testdir/.

而 /home/nick/testdir 目录下还有一个指向其父目录的硬链接:/home/nick/testdir/..
也就是说当我们创建一个目录时,其父目录的硬链接数会增加 1。

ln 命令

ln 命令用来在文件之间建立链接,其的常用方式为:

ln source target
ln -s source target

它们分别用来创建硬链接文件和软链接文件。还有一个比较常用的选项是 f,它会强制删除已经存在的目标文件。

总结

以上所述是小编给大家介绍的Linux ln 命令,希望对大家有所帮助,如果大家有任?#25105;晌是?#32473;我留言,小编会及?#34987;馗创?#23478;的。在此也非常?#34892;?#22823;家对爱安网网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

最新资讯
小罐茶杜国楹谈“科学创业?#20445;?#36873;择要顺势而为

小罐茶杜国楹谈“科学

第十二届创?#23548;?#24180;会暨产?#23548;?#36895;大会上,小罐茶创始人、董
小鹏P7启动预售:价格区间27-37万元 续航超650公里

小鹏P7启动预售:价格区

小鹏汽?#24403;?#31034;,P7智能音乐座舱不是功能和配置的简单叠加
威马EX6 Plus正式上市 综合补贴后售价23.99万元

威马EX6 Plus正式上市

威马汽车旗下长续航智能5座SUV——威马EX6 Plus于广州
邬贺铨:工业互联网牵引5G 5G赋能数字转型

邬贺铨:工业互联网牵引

邬贺铨在演讲中表示,1G-4G主要面向消费,5G则扩展到智慧
中国工程院公布2019年院士增选结果:阿里王坚等当选

中国工程院公布2019年

2019年,中国工程院开展了第14次院士增选和第13次外籍院
杨元庆回应产品安全:在任何市场都会符合法律要求

杨元庆回应产品安全:在

联想集团董事长兼CEO杨元庆22日在创新经济论坛上表示,
最新文章
shell脚本将Oracle服务器中数据定时增量刷新到ftp服务器中

shell脚本将Oracle服

这篇文章主要介绍了shell脚本将Oracle服务器中数据定
详解Linux ln 命令

详解Linux ln 命令

Linux 中的文件分为 Hard Link 和 Symbolic Link 两种
Linux 查看端口的占用情况并?#39029;?#24182;杀死占用进程的方法

Linux 查看端口的占用

这篇文章主要介绍了Linux 查看端口的占用情况并?#39029;?#24182;
shell中长命令的换行处理方法示例

shell中长命令的换行

这篇文章主要给大家介绍了关于shell中长命令的换行处
详解在dotnet core实现类似crontab的定时任务

详解在dotnet core实

这篇文章主要介绍了在dotnet core实现类似crontab的定
Linux忘记root密码进入单用户模式?#35874;?#36816;行级别?#35874;?#29992;户

Linux忘记root密码进

这篇文章主要介绍了Linux忘记root密码进入单用户模式
幸运蛋蛋pc开奖 舟山飞鱼基本走势图 新疆时时彩和值走势图 福彩欢乐生肖走势图 湖南幸运赛车彩票 极速时时彩谁开奖 五分彩走势图分析 北京时时彩计划软件 分析预测 炒股融资系统 2012年大乐透开奖结果历史记录