• Linux 命令之软连接、硬连接详解


     https://blog.csdn.net/K_520_W/article/details/124114863

     

    一、软连接

    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 号)。

    若系统允许对目录创建硬链接,则会产生目录环。

  • 相关阅读:
    SQL ——索引、视图和事务
    流控制语句
    SQL Server 高级编程之T-SQL 编程函数
    SQL高级编程之waitfor
    数据库主键、外键、唯一等约束
    打代码会遇到的单词
    前端词云图
    docker+mysql集群+读写分离+mycat管理+垂直分库+负载均衡
    lvs+keepalived实现Mycat的负载均衡--高可用
    mycat配置数据库集群
  • 原文地址:https://www.cnblogs.com/kelelipeng/p/16546687.html
Copyright © 2020-2023  润新知