携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第14天,点击查看活动详情
软连接和硬链接 最近本地测试node包,听到了软连接的概念,学习了一下相关知识,
Linux 系统中有软链接和硬链接两种特殊的 "文件"
软连接概念 可以看成是 Windows 中的快捷方式, 可以让你快速链接到目标文件或目录, 它找到的是原文件名, 通过原文件 名再找到真实的数据, 它自身有 inode 软连接的语法 链接文件甚至可以链接不存在的文件,这就产生一般称之为”断链”的现象,链接文件甚至可以循环链接自己。类似于编程语言中的递归。
软链接文件只是其源文件的一个标记,当删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但却不能查看软链接文件的内容了。
ln -s [源文件/目录路径] [软连接放置的路径及名字]
绝个例子 创建文件./main.js
console.log('main')
创建main.js的软连接ruan.js
ln -s main.js ruan.js
执行ls -li
ls -li
可以看到ruan.js指向main.js这个文件名
查看文件内容,得到内容是相同的,可以确定二者现在读到是同一份数据,
cat main.js
cat ruan.js
那究竟是怎么存储的呢,修改一下内容,看看是否两个文件内容都会改变
修改 main.js
console.log('change main')
可以看到两个都变了,说明两个文件目录指向的是在一个引用
再修改ruan.js试试
console.log('ruan change main')
结果还是一样的,足以证明两个文件指向同一份数据
那这个关系的主要来源是是什么呢?继续测试
方法1创建src目录,将main.js移动到src目录,再次查看ruan.js,报错提示,找不到文件或者目录。
方法2重命名main.js为main1.js,再次查看ruan.js报错同方法1,
综上所述,软链接间的连接关系是软连接执行了被软链接的磁盘路径,一旦这个路径改变,或者文件名改变,这层关系就丢失了,大概意思是我保存一个磁盘路径,这个磁盘路径指向的地址是我的数据,我可以修改和编辑它,但是这个路径一旦没有对应地址,那我就无效了
硬链接
硬链接
硬链接(hard link,也称链接)就是一个文件的一个或多个文件名。再说白点,所谓链接无非是把文件名和计算机文件系统使用的节点号链接起来。因此我们可以用多个文件名与同一个文件进行链接,这些文件名可以在同一目录或不同目录。
硬链接创建方式
ln [源文件] [软连接放置的路径及名字]
举例子
ln main.js ying.js
查看一下ll -li,发现main.js和ying.js指向了同一地址,这个和js中创建应用类型,浅拷贝一摸一样,创建一个
var main={name:"tom"};
var ying=main;
ying.name='tom改名了'
console.log(main.name);//"tom改名了"
删除main.js和ying.js之间的一个,另一个也可以正常访问,因为他们指向的是地址,所有能找到数据,当他们都被删除后,磁盘才会被释放,就像js中把没有被引用的内存回收数据清空。
copy就是复制一个文件,地址和源文件不同,会在磁盘中新开辟一个空间存储这份数据,所有修改copy的东西,源文件不回被修改,
软硬的区别
ln -s 创建软连接, ln 创建硬链接 目录不能创建硬链接, 且不能跨分区系统创建 软连接支持文件和目录, 且能跨分区系统, 常用 硬链接文件与源文件 inode 相同, 而软连接是不同的