Shell - ln

本文详细介绍了Linux系统中ln命令用于创建硬链接和软链接的操作方法及其特点。硬链接不允许跨文件系统,且不能链接目录,而软链接(符号链接)则可以。硬链接通过inode直接指向文件,不占用额外空间,软链接类似Windows快捷方式,可跨分区。硬链接在文件管理备份中有优势,软链接更灵活,适合跨文件系统。删除链接时,硬链接会影响inode引用计数,软链接只删除链接自身。
摘要由CSDN通过智能技术生成
ln - Create Links, 创建链接
ln命令用来创建硬链接或符号链接,是link的缩写。
这个命令在Linux命令行里使用,也称为shell。
Shell使用一个终端窗口来打开和操作。
主要有两种使用方式:
创建硬链接:(只能是文件)
ln [options] file link
创建符号链接或软链接:(可以是文件或文件夹)
ln -s [options] item link
注意:
ln命令不能创建新的文件夹结构,所以创建的链接所在的路径要存在。
默认情况下,ln命令执行成功后不会有输出,返回值为0.
如果省略第二个参数或第二个参数为只是一个 '.' ,则会在当前目录下生成一个与原文件相同名称的链接。
Hard Links 硬链接
硬链接是Unix创建链接的原始方式,与符号链接相比,后者更为先进。默认情况下,每个文件都有一个单一的硬链接,就是文件名本身。
当我们创建一个硬链接时,我们为一个文件创建一个额外的目录条目。硬链接有两个重要的限制:
1. 硬链接不能引用它自己的文件系统以外的文件。这意味着一个链接不能引用与链接本身不在同一磁盘分区上的文件。
2.一个硬链接不能引用一个目录。
硬链接只能用命令行来创建。它们被更广泛地整合到操作系统的内存管理和正在使用的文件系统中。硬链接是原始文件的一个镜像副本,它有自己的目录条目(directory entry)。几个硬链接可以指向同一个文件。事实上,Linux在技术上或操作上并不区分原始文件和后来产生的硬链接,这意味着所有的目录条目都被视为相同的,并且彼此独立工作。
硬链接与文件本身是没有区别的。与符号链接不同,当我们在一个包含硬链接的目录里运行ls,我们不会看到链接的特殊指示。当一个硬链接被删除时,该链接被删除,但文件本身的内容继续存在(也就是说,它的空间没有被重新分配),直到所有与该文件的硬链接被删除。
每个硬链接都指向一个唯一的inode号码,原始文件和硬链接一样,也指向相同的inode号码。Linux中文件系统使用inode来唯一识别分配给文件的存储空间,所以硬链接和原始文件只是一种记录(entry), 里面包含了指向文件内容的inode号码。所以说最开始创建的原文件和硬链接是没有区别的,除了创建方式和先后不同。每创建一个硬链接,这个inode的引用计数就会加1。反过来,每删除一个硬链接,这个inode的引用计数就会减1。当引用计数变为0时,这个文件内容才会被真正删除。如果至少一个硬链接或原始文件的记录引用了这个原始文件,或者原始文件被移到另一个目录中,对文件使用没有影响。使用哪条硬链接或原文件的记录来访问和操作这个文件,结果都是一样的,文件的各种属性包括内容,对所有硬链接都是一样的。
你可以把硬链接看作是一个现有文件的额外名称。硬链接是将两个或更多的文件名与同一个inode联系起来。你可以为一个文件创建一个或多个硬链接。
inode是一种数据结构,是一个文件的唯一描述,包含了文件的元信息(group membership, owner, access rights)和文件内容保存的存储地址。
让我们看看一个具体的例子。假设有一个视频文件,只能在 "我的视频 "目录下访问。在创建一个硬链接后,它也可以从另一个目录中检索,例如 "我的视频备份"。如果原始文件从 "我的视频 "中被删除,它仍然可以通过 "我的视频备份 "中的文件的硬链接路径完美访问。这是硬链接的一个优点--文件存储管理中的额外条目不会占用任何额外的存储空间。它只是作为访问的另一种选择(通过文件路径),而不是文件的第二个物理拷贝。
Symbolic Links  符号链接
符号链接是为了克服硬链接的限制而创建的。符号链接的工作方式是创建一种特殊类型的文件,其中包含一个指向所引用文件或目录的间接的文本指针。在这方面,它们的操作方式与Windows的快捷方式基本相同,当然,它们比Windows的功能要早很多年。
符号链接所指向的文件和符号链接本身在很大程度上是没有区别的。例如,如果我们向符号链接写东西,被引用的文件就会被写进去。然而,当我们删除一个符号链接时,只有该链接被删除,而不是文件本身。如果文件被删除或被移动,符号链接将继续存在,但将什么都不指向。在这种情况下,该链接被认为是被破坏了。在许多实现中,ls命令将以一种区别性的颜色显示不存在的链接,如红色,以区别显示。
软链接可以在Linux终端和Linux文件管理器的图形用户界面中创建。你可以通过文件图标上的箭头符号发现Linux中的软链接。
有关命令选项
-i, --interactive
创建链接时,如果文件已存在,提示是否覆盖。
否则文件已存在情况下会提示文件已存在,创建链接失败。
-f, --force
创建链接时,如果文件已存在,直接覆盖不提示。
-r, --relative
创建符号链接时,使用源文件的路径作为相对路径。此选项硬链接不适用。
ln命令使用的原文件不是绝对路径时,可以使用此参数,使用相对路径。
-t, --target-directory=DIRECTORY
指定链接生成的目录。软链接和硬链接都有效。
-v , --verbose
显示每个链接操作的文件名。这个选项一般是通用的选项,各个命令都有。
使用举例
命令
说明
$ ln -s 1.txt 2.txt
创建1.txt的软链接 - 2.txt。
$ ln 1.txt 2.txt
创建1.txt的硬链接 - 2.txt。 
$ ln -s ./dir1/1.txt /dir2/2.txt
$ readlink /dir2/2.txt
./dir1/1.txt
在不同路径下创建软链接, 使用的路径为ln命令指定的路径。
$ ln -s -r ./dir1/1.txt /dir2/2.txt
$ readlink /dir2/2.txt
../1.txt
在不同路径下创建软链接, 使用的路径为相对原文件的路径。
$ ln -s -r -t ./dir2/ *.txt
$ ln -s -r --target-directory=./dir2
在dir2目录中创建当前目录下txt类型文件的软链接。
$ ln -t ./dir2/ *.txt
在dir2目录中创建当前目录下txt类型文件的硬链接。
$ ln -r -i 1.txt  /dir/2.txt
如果链接文件已存在,询问是否覆盖。如果已存在但没用-i参数, 则直接报错。
$ ln -r -f 1.txt  /dir/2.txt
如果链接文件已存在,直接覆盖。
删除链接
使用rm或unlink命令来删除链接文件,包括软链接和硬链接。
当前路径下有两个文件,1.txt是硬链接,2.txt是软链接。
"ls -l"或"ll"命令显示的信息,第一列是权限信息,第二列是硬链接数。
所以1.txt的硬链接数是3就表示对同一个inode,有3个引用。
第一列的第一个字母是文件特殊说明符,如果是文件夹就是d, 如果是软链接就是l,如果是文件夹的软链接,也是l, 如果是普通文件,就是'-'。
$ ll
total 8
drwxrwxr-x 2 vm vm 4096 4月   4 12:18 ./
drwxrwxr-x 4 vm vm 4096 4月   4 11:59 ../
-rw-rw-r-- 3 vm vm    0 4月   4 11:56 1.txt
lrwxrwxrwx 1 vm vm    8 4月   4 12:18 2.txt -> ../1.txt
当我们使用unlink或rm命令删除链接后,结果为:
$ unlink 2.txt
$ unlink 1.txt
$ ll
total 8
drwxrwxr-x 2 vm vm 4096 4月   4 12:19 ./
drwxrwxr-x 4 vm vm 4096 4月   4 11:59 ../
两个链接文件都被删除了,硬链接的文件的引用数会减1.
应该如何使用硬链接和软链接?
对普通用户来所,软链接通常足够用了。它们可以用来跨文件系统和分区以及在各种硬盘上链接文件和目录。然而,当涉及到对引用对象进行更改(如移动和删除)时,软链接并不像硬链接那样灵活。
硬链接通常用来链接文件,而不是目录或文件夹。而且由于节点号只能在分区内管理,硬链接只能连接单个分区内的文件。然而,现代Linux系统通常包含位于不同硬盘和分区的各种文件系统。因此,如果你要使用硬链接,你应该了解你的系统,知道分区和格式化的基本知识。
硬链接的优势在涉及到备份的时候。你可以获得对原始文件的替代访问,同时节省空间并提高数据的安全性。
由于硬链接直接代表原始文件,对它进行解读时不需要额外的操作。这意味着它们可以被更快地处理,对应用程序来说是完全透明的。你也可以使用硬链接来解决特殊问题。例如,如果一个程序使用的是一个过期库,如果想更新这个库,而不改变库的名字,可以删掉这个库,再创建一个同名的硬链接,指向最新版本的库。
参考:
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
引用内容和[2]提到了一个命令"ln -f -s /bin/sh /bin/bash",这个命令的作用是创建一个软连接,将/bin/bash链接到/bin/sh。该命令中的选项-f表示强制创建连接,即如果已存在同名连接则覆盖它,选项-s表示创建符号链接。 引用内容提到了另一个命令"ln -svf /opt/shell/send_file2ftp.sh /usr/local/bin/send",该命令的作用是创建一个软连接,将/opt/shell/send_file2ftp.sh链接到/usr/local/bin/send。该命令中的选项-s表示创建符号链接,选项-v表示显示详细信息,选项-f表示强制创建连接。 综合以上引用内容,shellln命令可以用来创建软连接,以方便用户在不同的目录下访问同一个文件。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [执行ln -f -s /bin/sh /bin/bash然后 ln -f -s /bin/bash /bin/sh](https://blog.csdn.net/x763795151/article/details/99671830)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [【win10】搭建FTP服务器与上传脚本实现](https://blog.csdn.net/chenwr2018/article/details/108216782)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夜流冰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值