好的!这里给你讲讲 Linux 命令里非常常用的 ln
命令,包括它的作用、用法和示例。
Linux 命令 ln
ln
是用来创建 链接(link) 的命令,链接相当于文件的快捷方式。
1. 硬链接(Hard Link)
- 硬链接是指多个文件名指向同一个文件的数据节点(inode)。
- 硬链接的多个文件是同等的,删除一个文件名,文件内容仍然存在,只有所有硬链接都删除了,数据才会被删除。
- 硬链接不能跨文件系统,也不能对目录做硬链接(普通用户)。
创建硬链接命令:
ln source_file hardlink_name
2. 软链接(Symbolic Link / Symlink)
- 软链接是指向另一个文件路径的特殊文件,类似 Windows 的快捷方式。
- 软链接本质是一个路径引用,目标文件被删除或移动后,软链接会失效(称为“悬挂链接”)。
- 软链接可以跨文件系统,也可以对目录做链接。
创建软链接命令:
ln -s source_file_or_dir symlink_name
3. 常用示例
假设当前目录有一个文件 file.txt
:
- 创建硬链接
file_hard
:ln file.txt file_hard
- 创建软链接
file_soft
:ln -s file.txt file_soft
- 软链接指向目录:
ln -s /usr/local/bin mybin
4. 查看链接关系
- 使用
ls -l
可以查看文件是否为链接:
-rw-r--r-- 1 user user 1234 Aug 9 10:00 file.txt
-rw-r--r-- 2 user user 1234 Aug 9 10:00 file_hard
lrwxrwxrwx 1 user user 8 Aug 9 10:01 file_soft -> file.txt
- 软链接的文件名后会跟箭头
->
指向目标。
5. 总结
类型 | 是否有独立inode | 跨文件系统支持 | 指向目录支持 | 删除目标后状态 |
---|---|---|---|---|
硬链接 | 否(共享inode) | 不支持 | 不支持 | 文件内容仍存在 |
软链接 | 是 | 支持 | 支持 | 变成悬挂链接,失效 |
好嘞!我帮你写个简单的 Bash 脚本,展示硬链接和软链接的创建、验证和删除过程,并带注释方便理解。
#!/bin/bash
# 创建一个测试文件
echo "Hello, ln command!" > original.txt
echo "创建了文件 original.txt,内容为:"
cat original.txt
echo
# 创建硬链接
ln original.txt hardlink.txt
echo "创建硬链接 hardlink.txt 指向 original.txt"
echo "查看 inode 号(硬链接共享 inode):"
ls -li original.txt hardlink.txt
echo
# 创建软链接
ln -s original.txt softlink.txt
echo "创建软链接 softlink.txt 指向 original.txt"
echo "查看软链接信息:"
ls -l softlink.txt
echo
# 修改原文件内容,验证硬链接和软链接的变化
echo "修改 original.txt 文件内容"
echo "New content for ln demo" > original.txt
echo "查看 original.txt 内容:"
cat original.txt
echo "查看 hardlink.txt 内容(硬链接同步修改):"
cat hardlink.txt
echo "查看 softlink.txt 内容(软链接同步修改):"
cat softlink.txt
echo
# 删除 original.txt,测试链接的表现
echo "删除 original.txt"
rm original.txt
echo "查看硬链接 hardlink.txt 是否存在及内容:"
if [ -f hardlink.txt ]; then
cat hardlink.txt
else
echo "硬链接文件不存在"
fi
echo
echo "查看软链接 softlink.txt 是否存在及内容:"
if [ -L softlink.txt ]; then
echo "软链接文件存在,但内容尝试访问会失败(悬挂链接):"
cat softlink.txt 2>/dev/null || echo "软链接目标文件不存在,访问失败"
else
echo "软链接文件不存在"
fi
echo
# 清理测试文件
rm -f hardlink.txt softlink.txt
echo "测试完成,已清理所有链接文件。"
运行说明:
- 保存以上脚本为
ln_demo.sh
- 赋予执行权限:
chmod +x ln_demo.sh
- 执行脚本:
./ln_demo.sh
这个脚本演示了:
- 硬链接和软链接的创建方法
- 通过 inode 号验证硬链接共享同一个数据节点
- 修改原文件内容后,两个链接文件内容同步变化
- 删除原文件后,硬链接仍然能访问数据,软链接变成了悬挂链接无法访问
发表回复