删除 linux的ln文件夹,详解Linux ln 命令

Linux 中的文件分为 Hard Link 和 Symbolic Link 两种。Hard Link 文件又被称为硬链接文件、实体链接文件,Symbolic Link 文件则常被称为符号链接、软链接文件。

ln 命令用来在文件之间建立链接。在介绍 ln 命令前,让我们先来搞清楚究竟什么是硬链接,什么又是软链接。

Hard Link(硬链接)

我们知道,在 Linux 系统中,每个文件对应一个 inode,文件的内容在存储在 inode 指向的 data block 中。要读取该文件的内容,需要通过文件所在的目录中记录的文件名找到文件的 inode 号,然后通过 inode 找到存储文件内容的 data block(参考《Linux 文件与目录》)。

也就是说,文件名存储在目录中,inode 号执行文件存储的内容,文件名和 inode 之间有一个对应关系。那么多个文件名可不可以同时指向同一个 inode 呢?答案是可以的,这就是硬链接!从本质上来说,硬链接只是在目录下新添加了一个文件名,这个文件名与一个已有文件的 inode 相关联。让我们也通过 /etc/crontab 文件来进行观察:

$ ll -i /etc/crontab

131213 -rw-r--r-- 1 root root 722 Nov 16 2017 /etc/crontab

使用 ln 命令在当前目录下创建一个 /etc/crontab 文件的硬链接,然后观察其文件属性:

$ sudo ln /etc/crontab .

$ ll -i /etc/crontab crontab

131213 -rw-r--r-- 2 root root 722 Nov 16 2017 crontab

131213 -rw-r--r-- 2 root root 722 Nov 16 2017 /etc/crontab

这两个文件名关联的 inode 号完全相同,都是 131213,所以它们指向的是同一个文件。同时请注意文件属性中的第三个字段,由 1 变成了 2。这个字段被称为 "链接数",它说明有多少个文件名链接到同一个文件的 inode。

另外需要注意的一点是上面所有输出中的第二个字段中的第一位,它们都是 "-",它说明这个文件的类型为普通文件,链接类型为硬链接。

我们可以通过下图来理解硬链接在文件系统中的实现方式:

fc21aa0a6a5332995041a23ee9b8b430.png

硬链接的特点

几乎不额外占用空间

只要还有一个文件名引用着文件,文件就不会被真正删除

由于硬链接只是在目录中添加了一条包含文件名和 对应 inode 的记录,所以它几乎不会消耗额外的磁盘容量。

另外在删除硬链接所关联的文件时,其实只是删除了一条目录中的记录,真正的文件并不受影响。只有在删除最后一个硬链接时才会真正删除文件的内容数据。

硬链接的局限性

不能跨文件系统创建硬链接

不能链接目录

由于这两个限制,实际使用中硬链接并没有软链接使用的广泛,下面我们看看究竟什么是软链接。

Symbolic Link(软链接)

软链接的实现方式与硬链接有本质上的不同。创建软链接时会创建一个新的文件(分配一个 inode 和对应的 data block),新文件的 data block 中存储了目标文件的路径。

还拿 /etc/crontab 文件举例子,这次创建一个软链接并查看其文件属性:

$ sudo ln -s /etc/crontab crontab2

7602b3553a299f1e4ac3a9980abd7b79.png

第一列,两个文件名对应的 inode 不同,说明这是两个文件。

第二列显示的文件权限也不一样,这一点和硬链接完全不同。注意文件类型被标记为 "l",说明这是一个软链接文件。

第三列很有意思,注意 /etc/crontab 文件的链接数量,还是 2,这和创建软链接文件 crontab2 前是一样的。也就是说创建软链接并不增加原文件的链接数。

第六列是文件大大小,注意新建的软链接文件大小为 12 Bytes,也就是字符串 "/etc/crontab" 的长度。

最后一列会友好的显示出软链接文件指向的源文件。

我们可以通过下图来理解软链接在文件系统中的实现方式:

fd02fb058395de6967421617c642e8c4.png

从上图我们可以看出,软链接文件 crontab2 是一个实实在在的文件,有自己的 inode 和 data block。但是它的 data block 中保存的是目标文件的地址:/etc/crontab。 像 open() 这样的 API 能够识别出软链接,并根据 data block 中的目标文件径把操作重定向到目标文件上。

可以链接目录是软链接的一大优势,创建目录链接的方式和普通文件一样:

$ ln -s /bin testbin

此时进入 testbin 目录和进入 /bin 目录是一样的。

更厉害的是,还可以跨文件系统创建软链接!

删除源文件

对于软链接来说,删除源链接后,链接文件就会无法找到指向的源文件了。看下面的演示:

$ echo "hello world" > hello.txt

$ ln -s hello.txt hello2

$ cat hello2

hello world

$ rm hello.txt

$ cat hello2

cat: hello2: No such file or directory

删除原文件后,操作链接文件时的提示是:"No such file or directory"。

文件的链接数

从上文中的示例我们可以看到,当创建硬链接文件时,文件的链接数会增加 1,而创建软链接时文件的链接数却不发生变化。

下面让我们看一个目录文件的链接数,先创建一个空目录:

$ mkdir /home/nick/testdir

$ ll /home/nick | grep testdir

drwxr-xr-x 2 nick nick 4096 Jul 10 08:58 testdir/

新建的空目录有两个硬链接,分别是:

/home/nick/testdir

/home/nick/testdir/.

而 /home/nick/testdir 目录下还有一个指向其父目录的硬链接:/home/nick/testdir/..

也就是说当我们创建一个目录时,其父目录的硬链接数会增加 1。

ln 命令

ln 命令用来在文件之间建立链接,其的常用方式为:

ln source target

ln -s source target

它们分别用来创建硬链接文件和软链接文件。还有一个比较常用的选项是 f,它会强制删除已经存在的目标文件。

总结

以上所述是小编给大家介绍的Linux ln 命令,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

<think>嗯,用户想了解Linux中的ln命令的功能和用法。首先,我需要回忆一下ln命令的基本作用。记得ln是用来创建链接的,分为硬链接和软链接两种。软链接也叫符号链接,类似于Windows的快捷方式,而硬链接则是文件的一个别名,指向同一个inode。这点需要明确区分。 接下来,用户可能想知道具体怎么使用这个命令。参数方面,常见的-s选项是创建软链接,而默认不带参数则是硬链接。还有其他的参数比如-f强制覆盖,-i交互提示,这些也需要提到。比如用户想覆盖已有文件时,可以用-f,避免提示。而如果想备份被覆盖的文件,可以用-b,这时候会生成一个带~的备份文件。 然后,用户可能关心两种链接的区别。比如硬链接不能跨文件系统,不能链接目录,而软链接可以。硬链接和原文件的inode相同,删除原文件后,硬链接依然有效,但软链接会失效。这些区别对用户来说很重要,需要详细说明。 还要举一些例子,比如创建软链接的命令格式:ln -s 源文件 目标文件。例如将nginx的可执行文件链接到全局bin目录下,方便调用。这样的例子能让用户更直观地理解用法。 另外,用户可能遇到常见问题,比如链接文件显示红色或@符号,这时候可以用ls -l查看链接指向是否正确。如果链接失效,可能需要检查源文件是否存在或路径是否正确。 还要注意,引用中提到的参数如-n的作用,把软链接视为一般目录,但实际应用中可能较少使用,可以简要说明。同时,备份参数-S和-V可能用户不太常用,但需要提及以备参考。 最后,确保回答结构清晰,先介绍功能,再分点讲用法,接着比较两种链接,给出示例,最后常见问题解答。这样用户能逐步理解ln命令的各个方面,满足他们的需求。</think>### Linux ln命令详解 #### 一、核心功能 `ln`命令用于在Linux系统中创建文件或目录的**链接**,分为两种类型: 1. **硬链接**:通过共享inode实现文件同步更新,不能跨文件系统,不可链接目录[^3] 示例:`ln file1.txt file2.txt` 2. **软链接(符号链接)**:类似快捷方式,存储源文件路径,可跨文件系统[^2] 示例:`ln -s /path/to/source /path/to/link` #### 二、参数详解 | 参数 | 作用 | |------|------| | `-s` | 创建符号链接(必选参数) | | `-f` | 强制覆盖已有文件 | | `-i` | 覆盖前交互确认 | | `-b` | 覆盖前自动备份 | | `-v` | 显示操作过程 | #### 三、典型应用场景 1. **全局命令访问** ```bash ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx ``` 将nginx可执行文件创建全局软链接[^1] 2. **共享配置文件** ```bash ln -s ~/config/.vimrc /etc/vim/vimrc ``` 保持多环境配置同步 3. **磁盘空间优化** ```bash ln /mnt/disk1/large_file.dat /home/user/backup.dat ``` 创建硬链接避免重复存储 #### 四、技术对比 | 特性 | 硬链接 | 软链接 | |-------------|----------------------------|---------------------------| | inode | 与源文件相同 | 独立新inode | | 跨文件系统 | ❌ | ✔️ | | 链接目录 | ❌ | ✔️ | | 源文件删除 | 仍可访问 | 链接失效 | | 文件大小 | 与原文件相同 | 路径字符数(较小) | #### 五、常见问题排查 1. **链接失效(红色显示)** 检查源文件是否存在:`ls -l /path/to/link` 2. **@符号含义** 使用`ls -F`查看时,`@`表示符号链接 3. **"Too many levels"错误** 检查是否形成循环链接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值