Linux 命令之软连接、硬连接详解
一、软连接
1、创建语法
ln -s target source
解释下:
ln -s
:表示创建一个软连接;target
:表示目标文件(夹)【即被指向的文件(夹)】source
:表示当前目录的软连接名。【源文件(夹)】2、具体示例
step 1.创建测试文件及文件夹
[root@server6 ~]# mkdir test_chk [root@server6 ~]# touch test_chk/test.txt [root@server6 ~]# echo "hello spark" > test_chk/test.txt [root@server6 ~]# cat test_chk/test.txt hello spark [root@server6 ~]# ll 总用量 84 -rw-------. 1 root root 1257 6月 16 01:17 anaconda-ks.cfg drwxr-xr-x. 25 root root 4096 11月 1 10:28 azkabanJob -rw-r--r--. 1 root root 67322 11月 4 10:24 azkabanJob.zip drwxr-xr-x. 4 root root 37 7月 13 11:01 hadoop_temp -rw-r--r--. 1 root root 54 7月 4 14:11 HelloLinux.txt drwxr-xr-x. 2 root root 22 11月 4 10:41 test_chk -rw-r--r--. 1 root root 67 10月 8 15:52 zookeeper.out
[root@server6 ~]# ln -s test_chk/ test_chk_ln [root@server6 ~]# ll 总用量 84 -rw-------. 1 root root 1257 6月 16 01:17 anaconda-ks.cfg drwxr-xr-x. 25 root root 4096 11月 1 10:28 azkabanJob -rw-r--r--. 1 root root 67322 11月 4 10:24 azkabanJob.zip drwxr-xr-x. 4 root root 37 7月 13 11:01 hadoop_temp -rw-r--r--. 1 root root 54 7月 4 14:11 HelloLinux.txt drwxr-xr-x. 2 root root 22 11月 4 10:41 test_chk lrwxrwxrwx. 1 root root 9 11月 4 10:42 test_chk_ln -> test_chk/ -rw-r--r--. 1 root root 67 10月 8 15:52 zookeeper.out [root@server6 ~]# cd test_chk_ln/ [root@server6 test_chk_ln]# ll 总用量 4 -rw-r--r--. 1 root root 12 11月 4 10:41 test.txt [root@server6 test_chk_ln]# cat test.txt hello spark [root@server6 test_chk_ln]# ll 总用量 4 -rw-r--r--. 1 root root 12 11月 4 10:41 test.txt [root@server6 test_chk_ln]# cat test.txt hello spark
3、命令示例解释
执行的命令是:
ln -s /storage/lawson/scores scor
其含义就是:将scor指向 /storage/lawson/scores/目录下这里是当前的scor 指向 /storage/lawson/scores 中。这里显示红色,是因为
/storage/lawson/scores
这个目录不存在,如果创建该目录,那就可以得到蓝色的显示了。
需要注意的是,当前所有目录下的文件都不能重名,因为我之前有一个文件夹是
scores
,所以这里就简单的命名成了scor
。4、软连接的删除
rm -rf ./test_chk_ln/
会删除文件夹下的所有内容,但是没有删除这个链接;rm -rf ./test_chk_ln
则是仅删除这个软链接,不会删除下面的内容。
错误示范
[root@server6 test_chk_ln]# cd .. [root@server6 ~]# ll 总用量 84 -rw-------. 1 root root 1257 6月 16 01:17 anaconda-ks.cfg drwxr-xr-x. 25 root root 4096 11月 1 10:28 azkabanJob -rw-r--r--. 1 root root 67322 11月 4 10:24 azkabanJob.zip drwxr-xr-x. 4 root root 37 7月 13 11:01 hadoop_temp -rw-r--r--. 1 root root 54 7月 4 14:11 HelloLinux.txt drwxr-xr-x. 2 root root 22 11月 4 10:41 test_chk lrwxrwxrwx. 1 root root 9 11月 4 10:42 test_chk_ln -> test_chk/ -rw-r--r--. 1 root root 67 10月 8 15:52 zookeeper.out [root@server6 ~]# rm -rf ./test_chk_ln/ [root@server6 ~]# ll 总用量 84 -rw-------. 1 root root 1257 6月 16 01:17 anaconda-ks.cfg drwxr-xr-x. 25 root root 4096 11月 1 10:28 azkabanJob -rw-r--r--. 1 root root 67322 11月 4 10:24 azkabanJob.zip drwxr-xr-x. 4 root root 37 7月 13 11:01 hadoop_temp -rw-r--r--. 1 root root 54 7月 4 14:11 HelloLinux.txt drwxr-xr-x. 2 root root 6 11月 4 10:42 test_chk lrwxrwxrwx. 1 root root 9 11月 4 10:42 test_chk_ln -> test_chk/ -rw-r--r--. 1 root root 67 10月 8 15:52 zookeeper.out [root@server6 ~]# cd test_chk [root@server6 test_chk]# ll 总用量 0 [root@server6 test_chk]# ll 总用量 0可以发现该文件夹下的内容都被删了。。。
- 正确删除软连接
[root@server6 ~]# rm -rf ./test_chk_ln [root@server6 ~]# ll 总用量 84 -rw-------. 1 root root 1257 6月 16 01:17 anaconda-ks.cfg drwxr-xr-x. 25 root root 4096 11月 1 10:28 azkabanJob -rw-r--r--. 1 root root 67322 11月 4 10:24 azkabanJob.zip drwxr-xr-x. 4 root root 37 7月 13 11:01 hadoop_temp -rw-r--r--. 1 root root 54 7月 4 14:11 HelloLinux.txt drwxr-xr-x. 2 root root 22 11月 4 10:44 test_chk -rw-r--r--. 1 root root 67 10月 8 15:52 zookeeper.out [root@server6 ~]# cd test_chk/ [root@server6 test_chk]# ll 总用量 4 -rw-r--r--. 1 root root 12 11月 4 10:44 test.txt
二、硬连接
Linux 链接分两种,一种被称为硬链接(Hard Link),另一种被称为符号链接(Symbolic Link)。默认情况下,ln 命令产生硬链接。
硬连接指通过索引节点来进行连接。
在 Linux 的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号,称为索引节点号(Inode Index)。
在 Linux 中,多个文件名指向同一索引节点是存在的。比如:A 是 B 的硬链接(A 和 B 都是文件名),则 A 的目录项中的 inode 节点号与 B 的目录项中的 inode 节点号相同,即一个 inode 节点对应两个不同的文件名,两个文件名指向同一个文件,A 和 B 对文件系统来说是完全平等的。删除其中任何一个都不会影响另外一个的访问。
硬连接的作用是允许一个文件拥有多个有效路径名,这样用户就可以建立硬连接到重要文件,以防止“误删”的功能。
其原因如上所述,因为对应该目录的索引节点有一个以上的连接。只删除一个连接并不影响索引节点本身和其它的连接,只有当最后一个连接被删除后,文件的数据块及目录的连接才会被释放。也就是说,文件真正删除的条件是与之相关的所有硬连接文件均被删除。1、硬连接的特点
若一个 inode 号对应多个文件名,则称这些文件为硬链接。换言之,硬链接就是同一个文件使用了多个别名
硬链接可由命令 link 或 ln 创建:
link oldfile newfile ln oldfile newfile
由于硬链接是有着相同 inode 号仅文件名不同的文件,因此硬链接存在以下几点特性:
文件有相同的 inode 及 data block; 只能对已存在的文件进行创建; 不能交叉文件系统进行硬链接的创建; 不能对目录进行创建,只可对文件创建; 删除一个硬链接文件并不影响其他有相同 inode 号的文件。
示例1:文件有相同的 inode 及 data block
示例2:只能对已存在的文件创建硬连接
示例3:不能对目录进行创建硬连接
硬链接不能对目录创建是受限于文件系统的设计。现 Linux 文件系统中的目录均隐藏了两个个特殊的目录:当前目录(.)与父目录(…)。
查看这两个特殊目录的 inode 号可知其实这两目录就是两个硬链接(注意目录 /mnt/lost+found/ 的 inode 号)。
若系统允许对目录创建硬链接,则会产生目录环。