摘要: 转自 恋猫大鲤鱼 https://dablelv.blog.csdn.net/article/details/103065438
1. 命令简介
ln 命令用来为文件创建链接, 分为软链接(symbolic link)和硬链接 (hard link), 默认创建硬链接。如果要创建软连接,使用 -s 选项。本文介绍 GNU 版本实现。
注意:
1) 硬链接不是一个独立的文件,只是一个文件名。一个文件可以有多个文件名,只有将最后一个文件名从磁盘上删除,才能把这个文件删掉。
2)软连接可以跨文件系统,但是硬链接不能跨文件系统,因为硬链接只是文件的别名,而非独立的文件。
3)不能给目录建立硬链接,因为硬链接连接到目录可能会导致目录的 inode 和 实体的 block 形成环状。此时,如果删除目录,会导致目录实体 block 无法被系统访问,产生孤立的目录 (从根目录无法再访问)。
4) 创建硬链接时,每个目标必须存在,创建软链接时, 目标文件可以不存在。
5)软链接是一个包含了路径信息的独立文件, 类似于windows的快捷方式,他的许多属性依赖于源文件,所以给软链接文件设置权限是无意义的。
2. 命令格式
ln [OPTIONS] ... [-T] TARGET LINK_NAME (1st form) ln [OPTION] ... TARGET (2st form) ln [OPTION] ... TARGET ... DIRECTORY (3st form) ln [OPTION] ... -t DIRECTORY TARGET (4st form)
第一种格式,为指定的目标文件建立指定名称的链接,-T 选项可以省略, LINK_NAME 为目录时可以省略链接名称,此时链接与目录文件同名,该格式最为常用。
第二种格式,为指定的目标文件在当前目录下建立同名链接
第三种第四种, 分别为每一个目标文件在指定的目录下建立同名链接。
3. 参数解析
--backup[=CONTROL] 备份每一个存在的目标文件 -b 类似于 --backup, 但不接受参数 -d, -F, --directory 允许超级用户尝试为目录建立硬链接 -f, --force 强行建立文件或者目录的链接,与链接同名的文件或目录将被覆盖 -i, --interactive 覆盖既有文件之前先询问用户 -L, --logical 建立硬链接时,当目标文件是软链接时,进行解引用,指向软链接的目标文件 -n, --no-dereference 把软链接视为一般文件,不进行解引用 -P, physical 建立硬链接时,直接指向软链接本身,而不是指向软链接的目标文件(默认)。 -r, --relative 创建相对于链接位置的符号链接
-s, --symbolic
创建软链接
-S, --suffix=SUFFIX
修改备份文件后缀。用 -b 参数备份目标文件后,备份文件后缀默认为 ~
-t, --target-directory=DIRECTORY
指定存放链接文件的目录
-T, --no-target-directory
将 LINK_NAME 视为链接文件而非存放链接文件的目录
-V, --verbose
显示指令执行过程
--help
显示帮助并退出
--version
显示版本并退出
选项 --backup 的参数 CONTROL 控制文件备份后的版本生成方式,可取值如下:
none, nil 不进行备份 number, t 使用数字后缀进行滚动。备份文件名后缀一次递增 ~1~、 existing, nil 如果有使用数字后缀则使用数字,否则使用简单的备份方式 simple, never 只是用简单的备份方式。
使用选项 -s 生产软链接时,将忽略选项 -L, -P,建立硬链接, 默认使用 -P 选项,将硬链接指向软链接本身,相当于给软链接起了个别名。
4. 常用示例
1)给 /etc/passwd 建立软链接
pi@raspberrypi:~ $ ln -s /etc/passwd passwdsoftlink pi@raspberrypi:~ $ ls -l passwdsoftlink lrwxrwxrwx 1 pi pi 11 Jan 19 14:15 passwdsoftlink -> /etc/passwd
2)给 /etc/passwd 多次建立软链接, 软链接的名称相同,采用数字表示备份文件的版本号,多次备份,版本号依次递增
pi@raspberrypi:~ $ ls -l passwdsoftlink lrwxrwxrwx 1 pi pi 11 Jan 19 14:15 passwdsoftlink -> /etc/passwd pi@raspberrypi:~ $ ln -s --backup=number /etc/passwd passwdsoftlink pi@raspberrypi:~ $ ls -l passwdsoftlink* lrwxrwxrwx 1 pi pi 11 Jan 19 14:17 passwdsoftlink -> /etc/passwd lrwxrwxrwx 1 pi pi 11 Jan 19 14:15 passwdsoftlink.~1~ -> /etc/passwd pi@raspberrypi:~ $ ln -s --backup=number /etc/passwd passwdsoftlink pi@raspberrypi:~ $ ls -l passwdsoftlink* lrwxrwxrwx 1 pi pi 11 Jan 19 14:18 passwdsoftlink -> /etc/passwd lrwxrwxrwx 1 pi pi 11 Jan 19 14:15 passwdsoftlink.~1~ -> /etc/passwd lrwxrwxrwx 1 pi pi 11 Jan 19 14:17 passwdsoftlink.~2~ -> /etc/passwd