软连接和硬链接
符号链接 :ln
用ln命令对一个已经存在的文件再建立一个新的链接,而不复制文件的内容。
存在两种不同类型的链接,软链接和硬链接。硬连接指向的是节点(inode),而软连接指向的是路径(path)
软链接文件
软链接又叫符号链接,这个文件包含了另一个文件的路径名。可以是任意文件或目录,可以链接不同文件系统的文件。和win下的快捷方式差不多。链接文件甚至可以链接不存在的文件,这就产生一般称之为”断链”的问题(或曰“现象”),链接文件甚至可以循环链接自己。类似于编程语言中的递归。
命令格式:
代码:
ln [-s] source_path target_path
硬链接文件
info ln 命令告诉您,硬链接是已存在文件的另一个名字,硬连接的命令是
代码:
ln -d existfile newfile
引用:
硬链接文件有两个限制
1、不允许给目录创建硬链接;
2、只有在同一文件系统中的文件之间才能创建链接。
对硬链接文件进行读写和删除操作时候,结果和软链接相同。但如果我们删除硬链接文件的源文件,硬链接文件仍然存在,而且保留了愿有的内容。这时,系统就“忘记”了它曾经是硬链接文件。而把他当成一个普通文件。修改其中一个,与其连接的文件同时被修改
代码:
$umask 022
$ cp /etc/httpd/conf/httpd.conf /usr/sam
原来前面做的试验,改变了系统默认的umask值,现在改回来为022,
举个httpd.conf文件做例 子
代码:
$ ln httpd.conf httpd1.conf
$ ln -s httpd.conf httpd2.conf
第一条为硬链接,第二条为软链接
代码:
$ ls -li
代码:
总用量 80
1077669 -rw-r–r– 2 sam adm 34890 10月 31 00:57 httpd1.conf
1077668 lrwxrwxrwx 1 sam adm 10 10月 31 00:58 httpd2.conf ->; httpd.conf
1077669 -rw-r–r– 2 sam adm 34890 10月 31 00:57 httpd.conf
可以看到,使用ls -li,软连接只产生了10字节的快捷而已,硬连接却实实在在的的拷贝。最前面的inode硬链接和源文件是一样的,而软链接不一样,具体看一下回复
对http1.conf进行编辑,可以发现httpd.conf也发生了一样的变化
代码:
$ rm httpd.conf
现在删除链接的源文件,来比较不同之处
代码:
$ ls -l
总用量 44
drw-r–r– 2 sam adm 4096 10月 30 20:14 file6
-rw-r–r– 1 sam adm 34890 10月 31 00:57 httpd1.conf
lrwxrwxrwx 1 sam adm 10 10月 31 00:58 httpd2.conf ->; httpd.conf
发现,httpd2.conf实际已经不存在了,是断链,而httpd1.conf变也了普通文件
另解:
语法:ln [options] source dist
source 源文件名
dist 链接文件名
硬链接:
1、它只能对文件创建链接;
2、源文件和链接文件必须位于同一个文件系统中;
3、两个的节点号相同;
4、一个改变了,另一个也跟着变了(包括内容和权限);
5、删除其中一个,另一个还存在。
软链接:
1、它可以对文件和目录创建链接;
2、源文件和链接文件可以位于不同的文件系统中;
3、两个的节点号不同;
4、所创建的链接文件,它的权限是777,改变链接文件的权限,等于是改了源文件的权限;
5、删除了源文件,链接文件没有意义;
总结几点硬链接和软链接的区别:
1.硬链接文件和原文件指向同样的数据,两者就像科隆一样,inode号也相同,当删除原文件时,硬链接文件仍然存在有效。但硬链接文件不同于文件的复制。应该说硬链接文件的产生只是原文件所在目录文件的内容发生改变,原文件的数据并没有得到复制,而复制文件,磁盘上有两份数据。简单说,硬链接就是一个类似于别名的概念。当原来的名字没有了,别名照样可以使用。
2.软连接和windows系统的快捷方式含义一样,不做多的解释。软链接和原文件的inode不同,该文件的内容是指向原文件的路径信息。软链接就好像是指针一样。而硬链接就是引用。
No related posts.