ln命令 – 为文件创建链接
ln命令是linux系统中一个非常重要命令,英文全称是“link”,即链接的意思,它的功能是为某一个文件在另外一个位置建立一个同步的链接。 一种是hard link,又称为硬链接;另一种是symbolic link,又称为符号链接。 通俗一点理解,可以把硬链接当成源文件的副本,他和源文件一样的大小,但是事实上却不占任何空间。符号链接可以理解为类似windows一样的快捷方式。
-
命令语法:
ln [参数] [源文件或目录] [目标文件或目录]
-
命令功能:
软链接: 1.软链接,以路径的形式存在。类似于Windows操作系统中的快捷方式 2.软链接可以 跨文件系统 ,硬链接不可以 3.软链接可以对一个不存在的文件名进行链接 4.软链接可以对目录进行链接 硬链接: 1.硬链接,以文件副本的形式存在。但不占用实际空间。 2.不允许给目录创建硬链接 3.硬链接只有在同一个文件系统中才能创建 注意: 1.ln命令会保持每一处链接文件的同步性,动了一处,其它文件都会发生相同的变化。 2.ln指令用在链接文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。
-
常用参数:
参数 | 描述 |
---|---|
-b | 为每个已存在的目标文件创建备份文件 |
-d | 此选项允许“root”用户建立目录的硬链接 |
-f | 强制创建链接,即使目标文件已经存在 |
-n | 把指向目录的符号链接视为一个普通文件 |
-i | 交互模式,若目标文件已经存在,则提示用户确认进行覆盖 |
-s | 对源文件建立软链接(符号链接),而非硬链接 |
-v | 详细信息模式,输出指令的详细执行过程 |
-
参考实例:
-
给文件创建软链接
[root@master1 home]# cat log2021.log hello world [root@master1 home]# ln -s log2021.log link2022 [root@master1 home]# ll 总用量 4 drwx------. 2 dev_1 git_p1 62 11月 12 09:10 dev_1 lrwxrwxrwx. 1 root root 11 1月 6 09:34 link2022 -> log2021.log -rw-r--r--. 1 root root 0 1月 6 09:34 log2021.log -rw-r--r--. 1 root root 10 1月 4 09:40 number.txt [root@master1 home]# cat link2022 hello world [root@master1 home]# rm log2021.log rm:是否删除普通文件 "log2021.log"?y [root@master1 home]# cat link2022 cat: link2022: 没有那个文件或目录 # 给log2021.log文件创建软链接link2021,如果文件删除,链接将失效
-
给文件创建硬链接
[root@master1 home]# touch file.txt [root@master1 home]# ln file.txt lnfile.txt [root@master1 home]# ll 总用量 4 drwx------. 2 dev_1 git_p1 62 11月 12 09:10 dev_1 -rw-r--r--. 2 root root 0 1月 6 09:55 file.txt -rw-r--r--. 2 root root 0 1月 6 09:55 lnfile.txt -rw-r--r--. 1 root root 10 1月 4 09:40 number.txt [root@master1 home]# ln -s file.txt linkfile.txt [root@master1 home]# ll 总用量 4 drwx------. 2 dev_1 git_p1 62 11月 12 09:10 dev_1 -rw-r--r--. 2 root root 0 1月 6 09:55 file.txt lrwxrwxrwx. 1 root root 8 1月 6 09:56 linkfile.txt -> file.txt -rw-r--r--. 2 root root 0 1月 6 09:55 lnfile.txt -rw-r--r--. 1 root root 10 1月 4 09:40 number.txt [root@master1 home]# cat lnfile.txt hostnamebaidu=baidu.com hostnamesina=sina.com hostnames=true [root@master1 home]# cat linkfile.txt hostnamebaidu=baidu.com hostnamesina=sina.com hostnames=true #硬链接和软链接跟本文件都是一致的内容
-
链接完成后,删除和重建链接原文件
[root@master1 home]# ls -l 总用量 12 drwx------. 2 dev_1 git_p1 62 11月 12 09:10 dev_1 -rw-r--r--. 2 root root 61 1月 6 09:58 file.txt lrwxrwxrwx. 1 root root 8 1月 6 09:56 linkfile.txt -> file.txt -rw-r--r--. 2 root root 61 1月 6 09:58 lnfile.txt -rw-r--r--. 1 root root 10 1月 4 09:40 number.txt [root@master1 home]# rm file.txt rm:是否删除普通文件 "file.txt"?y [root@master1 home]# ll 总用量 8 drwx------. 2 dev_1 git_p1 62 11月 12 09:10 dev_1 lrwxrwxrwx. 1 root root 8 1月 6 09:56 linkfile.txt -> file.txt -rw-r--r--. 1 root root 70 1月 6 10:03 lnfile.txt -rw-r--r--. 1 root root 10 1月 4 09:40 number.txt [root@master1 home]# touch file.txt [root@master1 home]# ll 总用量 8 drwx------. 2 dev_1 git_p1 62 11月 12 09:10 dev_1 -rw-r--r--. 1 root root 0 1月 6 10:05 file.txt lrwxrwxrwx. 1 root root 8 1月 6 09:56 linkfile.txt -> file.txt -rw-r--r--. 1 root root 70 1月 6 10:03 lnfile.txt -rw-r--r--. 1 root root 10 1月 4 09:40 number.txt [root@master1 home]# vim file.txt [root@master1 home]# cat file.txt 121 221 131 331121 221 131 [root@master1 home]# cat linkfile.txt 121 221 131 331121 221 131 331121 221 131 [root@master1 home]# cat lnfile.txt hostnamebaidu=baidu.com hostnamesina=sina.com hostnames=true newline #源文件被删除后,并没有影响硬链接文件;软链接文件在centos系统下不断的闪烁,提示源文件已经不存在。重建源文件后,软链接不在闪烁提示,说明已经链接成功,找到了链接文件系统;重建后,硬链接文件并没有受到源文件影响,硬链接文件的内容还是保留了删除前源文件的内容,说明硬链接已经失效。
-
将文件链接为另一个目录中的相同名字
[root@master1 home]# mkdir test [root@master1 home]# cd test/ [root@master1 test]# ll 总用量 0 [root@master1 test]# cd .. [root@master1 home]# ln -v file.txt test "test/file.txt" => "file.txt" [root@master1 home]# ll 总用量 12 drwx------. 2 dev_1 git_p1 62 11月 12 09:10 dev_1 -rw-r--r--. 2 root root 181 1月 6 10:05 file.txt lrwxrwxrwx. 1 root root 8 1月 6 09:56 linkfile.txt -> file.txt -rw-r--r--. 1 root root 70 1月 6 10:03 lnfile.txt -rw-r--r--. 1 root root 10 1月 4 09:40 number.txt drwxr-xr-x. 2 root root 22 1月 6 10:23 test [root@master1 home]# cd test [root@master1 test]# ll 总用量 4 -rw-r--r--. 2 root root 181 1月 6 10:05 file.txt [root@master1 test]# cat file.txt 121 221 131 331121 221 131 331121 221 131 331121 221 131 331121 221 131 331121 221 131 331121 221 131 331 [root@master1 test]# vi file.txt [root@master1 test]# cat file.txt 121 221 131 331121 [root@master1 test]# cd .. [root@master1 home]# ll 总用量 12 drwx------. 2 dev_1 git_p1 62 11月 12 09:10 dev_1 -rw-r--r--. 2 root root 57 1月 6 10:24 file.txt lrwxrwxrwx. 1 root root 8 1月 6 09:56 linkfile.txt -> file.txt -rw-r--r--. 1 root root 70 1月 6 10:03 lnfile.txt -rw-r--r--. 1 root root 10 1月 4 09:40 number.txt drwxr-xr-x. 2 root root 22 1月 6 10:24 test [root@master1 home]# cat file.txt 121 221 131 331121 #在test目录中创建file.txt硬链接,修改test目录中的file.txt文件,同时也会同步到源文件
-
给目录创建软链接
[root@master1 test]# mkdir test1 test2 [root@master1 test]# ll 总用量 4 -rw-r--r--. 3 root root 19 1月 6 10:27 file.txt drwxr-xr-x. 2 root root 6 1月 6 10:31 test1 drwxr-xr-x. 2 root root 6 1月 6 10:31 test2 [root@master1 test]# cd test2 [root@master1 test2]# ll 总用量 0 [root@master1 test2]# ln -sv ../test1 ../test2 "../test2/test1" -> "../test1" [root@master1 test2]# ll 总用量 0 lrwxrwxrwx. 1 root root 8 1月 6 10:32 test1 -> ../test1 [root@master1 test2]# cd test1/ [root@master1 test1]# ll 总用量 0 [root@master1 test1]# cd .. [root@master1 test2]# cd .. [root@master1 test]# ls file.txt test1 test2 [root@master1 test]# cd test1 [root@master1 test1]# touch {1..8}.test [root@master1 test1]# ll 总用量 0 -rw-r--r--. 1 root root 0 1月 6 10:33 1.test -rw-r--r--. 1 root root 0 1月 6 10:33 2.test -rw-r--r--. 1 root root 0 1月 6 10:33 3.test -rw-r--r--. 1 root root 0 1月 6 10:33 4.test -rw-r--r--. 1 root root 0 1月 6 10:33 5.test -rw-r--r--. 1 root root 0 1月 6 10:33 6.test -rw-r--r--. 1 root root 0 1月 6 10:33 7.test -rw-r--r--. 1 root root 0 1月 6 10:33 8.test [root@master1 test1]# cd ../test2 [root@master1 test2]# cd test1/ [root@master1 test1]# ll 总用量 0 -rw-r--r--. 1 root root 0 1月 6 10:33 1.test -rw-r--r--. 1 root root 0 1月 6 10:33 2.test -rw-r--r--. 1 root root 0 1月 6 10:33 3.test -rw-r--r--. 1 root root 0 1月 6 10:33 4.test -rw-r--r--. 1 root root 0 1月 6 10:33 5.test -rw-r--r--. 1 root root 0 1月 6 10:33 6.test -rw-r--r--. 1 root root 0 1月 6 10:33 7.test -rw-r--r--. 1 root root 0 1月 6 10:33 8.test # 目录只能创建软链接,目录创建链接必须用绝对路径,在源目录中文件变化链接目录也会同步变化。
-