今天看到linux的软硬链接的问题,作为新手,我看各个文章真的一头雾水,里面的各种奇怪的原理对于新手来说着实不是很友好啊,我翻看了许多科普软硬链接的区别和用法的文章后,总结出来一个身为小白的思维方式对它的理解。希望各位大佬看到后不要喷。
首先呢,我对linux的软硬链接的最浅显的总结就是,Windows对于文件的快捷方式和复制粘贴。
一、区别及各自特点
1、软链接(符号链接)相当于Windows的快捷方式。
- 占用的内存少。
- 当你动源文件的东西时,快捷方式会调你更改过的源文件,所以软链接只用更改源文件。
- 你删掉软链接,它的源文件还在。
- 软链接的源文件必须写绝对路径,否则建立的软链接文件就会报错,无法正常使用(相当于你必须在源文件的位置创建它的快捷方式)。
- 快捷方式的通病就是你的源文件位置动了的话,所有的快捷方式,也就是软链接就会失效。
- 软链接可以链接目录。
- 软链接可以跨分区。
2、 硬链接相当于Windows的复制粘贴(区别在于linux中的源文件和硬链接共联)。
- 每增加一个硬链接相当于多增加一个同样的内存。
- 增加一个硬链接相当于你复制下来,粘贴到另一个地方。这样的话删除你的源文件,它还有你刚复制的另一个同样的东西,这个东西还是存在的,如果想完全删掉文件,你就需要把接上硬链接的所有东西都删掉才算把这个文件删掉。
- 一个文件的所有的硬链接文件和源文件共享一个inode号(文件的唯一标识),这也就是说,虽然是类似Windows一样复制粘贴了,但是它们的根还是在一起,你不管是动了源文件还是硬链接文件,一个文件上的所有硬链接文件和源文件都会发生改变。(啊~ ~ 所以完全按照Windows来理解也不是完全可行的)
- 因为在不同的文件系统中,inode 号是重新计算的。所以硬链接是不可以跨文件系统(分区)建立的。(所以它的实用性就大大地降低了)
- 硬链接不可以链接目录。
二、常用命令
1、软链接:
ln -s 源文件或目录 目标文件或目录
-s 是 symbolic(符号)的意思
修改软链接:ln –snf 新的源文件或目录 目标文件或目录
找到文件夹下所有建立的软链接:ls -alR | grep ^l
2、硬链接:
ln 源文件 目标文件
找到文件夹下所有建立的硬链接:find / -inum Inode号
因为硬链接不会跨文件系统,所以源文件在哪个文件系统中,就在那里找,通过统一的inode号来查找。
3、ln命令
如果上述命令不够用,那就自己找全部命令吧:
ln [参数][源文件或目录][目标文件或目录]
必要参数:
-b 删除,覆盖以前建立的链接
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接)
-v 显示详细的处理过程
选择参数:
-S “-S<字尾备份字符串> ”或 “--suffix=<字尾备份字符串>”
-V “-V<备份方式>”或“--version-control=<备份方式>”
--help 显示帮助信息
--version 显示版本信息