菜鸟科技网

aix ln命令如何创建硬链接与软链接?

ln 命令是 "link" 的缩写,它的核心功能是为文件或目录创建链接,在 AIX(以及所有遵循 POSIX 标准的 Unix-like 系统,如 Linux)中,链接分为两种主要类型:硬链接符号链接(也称为软链接),理解这两者的区别是掌握 ln 命令的关键。

aix ln命令如何创建硬链接与软链接?-图1
(图片来源网络,侵删)

硬链接

工作原理

硬链接是为文件在文件系统中创建一个额外的名称入口,它不创建一个新文件,而是创建一个新的目录项,指向同一个 inode,inode 是存储文件元数据(如所有者、权限、大小、数据块位置等)的数据结构。

特点

  • 指向同一个 inode:多个硬链接指向同一个 inode,因此它们是完全等价的。
  • 不能跨越文件系统:因为 inode 是特定于文件系统的,所以硬链接不能在不同的文件系统(/home/var)之间创建。
  • 不能为目录创建:在 AIX 和大多数 Unix 系统中,出于文件系统结构完整性的考虑,普通用户不能为目录创建硬链接。
  • 与原文件互为镜像:删除任何一个硬链接,只要还有其他硬链接存在,文件的数据和元数据就不会受影响,只有当所有指向该 inode 的链接都被删除后,文件空间才会被释放。

语法

ln [源文件] [链接名称]

示例

假设我们有一个文件 report.txt

# 创建一个名为 report_backup.txt 的硬链接
$ ln report.txt report_backup.txt
# 查看文件信息,可以看到它们拥有相同的 inode 号
$ ls -li
total 8
123456 -rw-r--r--  2 myuser mygroup  1024 Oct 26 10:30 report.txt
123456 -rw-r--r--  2 myuser mygroup  1024 Oct 26 10:30 report_backup.txt
# 注意:这里的 "2" 表示有两个链接指向这个 inode。

符号链接

工作原理

符号链接(软链接)更像是一个快捷方式或一个指针,它是一个特殊的文件,其内容包含了另一个文件或目录的路径名

特点

  • 指向路径名:它存储的是一个指向目标文件路径的字符串,而不是 inode。
  • 可以跨越文件系统:因为它是路径,所以可以链接到任何文件系统中的任何文件或目录。
  • 可以为目录创建:可以轻松地为目录创建符号链接。
  • 与原文件不是镜像:如果删除原始文件,符号链接会失效(变成 "dangling link"),因为它指向的路径已经不存在了,此时尝试访问符号链接会得到 "No such file or directory" 错误。
  • 有自己的 inode 和权限:符号链接本身是一个文件,有自己的 inode 和权限(通常是 lrwxrwxrwx)。

语法

ln -s [源文件或目录] [链接名称]

重要提示:在 AIX 中,-s 选项是创建符号链接的标准方式。

aix ln命令如何创建硬链接与软链接?-图2
(图片来源网络,侵删)

示例

假设我们有一个目录 project_alpha

# 为目录 project_alpha 创建一个名为 pa 的符号链接
$ ln -s project_alpha pa
# 查看文件信息,可以看到它们有不同的 inode,pa 的类型是 'l' (link)
$ ls -li
total 8
234567 drwxr-xr-x  5 myuser mygroup  4096 Oct 26 10:35 project_alpha
345678 lrwxrwxrwx  1 myuser mygroup    12 Oct 26 10:36 pa -> project_alpha
# 注意:pa 的链接数是 "1",它本身就是一个文件,箭头 -> 显示了它指向的目标。

ln 命令的主要选项

选项 描述 示例
-s 创建符号链接(软链接),这是最常用的选项。 ln -s target_file soft_link
-f 强制,如果目标链接名称已存在,则先删除它,再创建新的链接。 ln -f source_file existing_link
-n 不覆盖符号链接,如果目标是一个已存在的符号链接,则不进行覆盖,与 -f 相对。 ln -n source_file existing_symlink
-v 详细,显示创建链接的详细信息。 ln -v source_file new_link
-F 智能处理,如果目标是一个目录,则在该目录中创建链接,如果目标是一个符号链接,则跟随链接指向的文件。 ln -F source_file destination

实用场景和示例

场景1:为常用命令创建别名(符号链接)

你希望系统中有 vim 命令,但系统中只有 vi

# 创建一个指向 /usr/bin/vi 的符号链接 vim
$ ln -s /usr/bin/vi /usr/local/bin/vim

/usr/local/bin 目录下执行 vim 命令,实际运行的就是 vi

场景2:将文件移动到不同位置但保持路径可用(符号链接)

一个应用程序将其日志文件存储在 /var/log/myapp/,但你想将它移动到 /home/myuser/logs/ 以节省根分区空间。

aix ln命令如何创建硬链接与软链接?-图3
(图片来源网络,侵删)
# 1. 移动文件
$ mv /var/log/myapp/app.log /home/myuser/logs/
# 2. 在原位置创建一个指向新位置的符号链接
$ ln -s /home/myuser/logs/app.log /var/log/myapp/app.log

应用程序仍然可以往 /var/log/myapp/app.log 写日志,但实际数据存储在 /home/myuser/logs/ 中。

场景3:节省磁盘空间(硬链接)

你有一个很大的日志文件 large_file.log,需要创建一个备份用于分析,但不想占用双倍磁盘空间。

# 创建硬链接
$ ln large_file.log large_file_backup.log
# 两个文件占用完全相同的磁盘空间
$ du -sh *
1G    large_file.log
1G    large_file_backup.log
# 总共只占 1G,而不是 2G

AIX 中的注意事项

  1. 权限:创建硬链接需要对源文件所在的目录有读和执行权限,创建符号链接只需要对源文件所在的目录有读和执行权限。
  2. ln -s 的默认行为:在 AIX 中,ln -s 的目标名称是一个已存在的目录,默认行为是在该目录下创建一个与源文件同名的链接,这与某些 Linux 发行版的行为可能不同(后者可能会报错或覆盖)。
    • 示例
      $ mkdir mydir
      $ echo "hello" > my_file.txt
      # 在 mydir 目录下创建一个名为 my_file.txt 的符号链接,指向外部的 my_file.txt
      $ ln -s my_file.txt mydir/
      $ ls -l mydir/
      lrwxrwxrwx  1 myuser mygroup  9 Oct 26 10:40 my_file.txt -> my_file.txt

      如果你想强制覆盖一个已存在的目录,需要使用 -f 选项。

如何选择?

特性 硬链接 符号链接
本质 同一个文件的多个名字 指向另一个文件路径的快捷方式
跨文件系统
链接目录
删除源文件 其他链接不受影响 链接失效
空间占用 共享,不增加 链接本身占用少量空间
适用场景 同一文件系统内,需要多个等价入口,节省空间 跨文件系统、创建目录别名、在不移动文件的情况下改变访问路径

掌握 ln 命令,特别是硬链接和符号链接的区别,是进行高效 AIX 系统管理和文件操作的基础技能。

分享:
扫描分享到社交APP
上一篇
下一篇