好的!这里给你讲讲 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_hardln file.txt file_hard
  • 创建软链接 file_softln -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 "测试完成,已清理所有链接文件。"

运行说明:

  1. 保存以上脚本为 ln_demo.sh
  2. 赋予执行权限:chmod +x ln_demo.sh
  3. 执行脚本:./ln_demo.sh

这个脚本演示了:

  • 硬链接和软链接的创建方法
  • 通过 inode 号验证硬链接共享同一个数据节点
  • 修改原文件内容后,两个链接文件内容同步变化
  • 删除原文件后,硬链接仍然能访问数据,软链接变成了悬挂链接无法访问