【每天一个Linux命令】27. 创建链接命令ln

时间:2022-12-25 09:43:37
什么是链接(link)?
Linux文件系统中,有所谓的链接(link),我们可以将其视为档案的别名
链接又可分为两种 : 硬链接(hard link)与软链接(symbolic link)
硬链接是存在同一个文件系统中,而软链接却可以跨越不同的文件系统。
什么是硬链接?
硬链接的意思是一个档案可以有多个名称
它会在你选定的位置上生成一个和源文件大小相同的文件,无论是软链接还是硬链接,文件都保持同步变化。
命令格式: ln 源文件 目标文件
关于硬链接你应该知道:

1.硬链接,以文件副本的形式存在。但不占用实际空间。
2.不允许给目录创建硬链接
3.硬链接只有在同一个文件系统中才能创建
什么是软链接?
软链接的方式则是产生一个特殊的档案,该档案的内容是指向另一个档案的位置。
它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间
命令格式: ln -s 源文件 目标文件

关于软链接你应该知道:

1.软链接以路径的形式存在。类似于Windows操作系统中的快捷方式
2.软链接可以 跨文件系统,硬链接不可以
3.软链接可以对一个不存在的文件名进行链接
4.软链接可以对目录进行链接
作者: 毕小朋   来往ID: hello_xiaopeng  Blog:   http://blog.csdn.net/wirelessqa

ln命令的功能是什么?

ln命令的功能是为某一个文件在另外一个位置建立一个同步的链接.
ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生相同的变化;
什么时候使用ln命令?
当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。
命令格式:
 ln [参数][源文件或目录][目标文件或目录]
命令参数:
-b 删除,覆盖以前建立的链接
-d 允许超级用户制作目录的硬链接
-f 强制执行
-i 交互模式,文件存在则提示用户是否覆盖
-n 把符号链接视为一般目录
-s 软链接(符号链接)
-v 显示详细的处理过程

创建软链接

#新建一个文件symboliclink.logbixiaopeng@bixiaopengtekiMacBook-Pro test$ touch symboliclink.log
#查看文件属性
bixiaopeng@bixiaopengtekiMacBook-Pro test$ ls -l
total 0
-rw-r--r-- 1 bixiaopeng wheel 0 11 9 11:51 symboliclink.log
#给symboliclink.log创建软链接 symboliclink
bixiaopeng@bixiaopengtekiMacBook-Pro test$ ln -s symboliclink.log symboliclink
#再次查看文件属性,链接已经创建成功,相当于给symboliclink.log创建了一个快捷方式
bixiaopeng@bixiaopengtekiMacBook-Pro test$ ls -l
total 8
lrwxr-xr-x 1 bixiaopeng wheel 16 11 9 11:51 symboliclink -> symboliclink.log
-rw-r--r-- 1 bixiaopeng wheel 0 11 9 11:51 symboliclink.log
#编辑源文件symboliclink.log
bixiaopeng@bixiaopengtekiMacBook-Pro test$ vim symboliclink.log
bixiaopeng@bixiaopengtekiMacBook-Pro test$ cat symboliclink.log
i am symbolic link
#软件链接symboliclink也同样被修改了
bixiaopeng@bixiaopengtekiMacBook-Pro test$ cat symboliclink
i am symbolic link

#删除源文件 symboliclink.log
bixiaopeng@bixiaopengtekiMacBook-Pro test$ rm symboliclink.log
#查看文件属性,链接还在
bixiaopeng@bixiaopengtekiMacBook-Pro test$ ls -ln
lrwxr-xr-x 1 501 0 16 11 9 11:51 symboliclink -> symboliclink.log
#查看软链接,链接失效
bixiaopeng@bixiaopengtekiMacBook-Pro test$ cat symboliclink
cat: symboliclink: No such file or directory
#重建源文件
bixiaopeng@bixiaopengtekiMacBook-Pro test$ touch symboliclink.log
#重建后自动链接上了
bixiaopeng@bixiaopengtekiMacBook-Pro test$ cat symboliclink


创建硬链接

#新建源文件hardlink.log
bixiaopeng@bixiaopengtekiMacBook-Pro test$ touch hardlink.log
#查看源文件属性
bixiaopeng@bixiaopengtekiMacBook-Pro test$ ls -l
total 16
-rw-r--r-- 1 bixiaopeng wheel 0 11 9 11:54 hardlink.log
#创建硬链接hardlink
bixiaopeng@bixiaopengtekiMacBook-Pro test$ ln hardlink.log hardlink
#查看属性,它会在你选定的位置上生成一个和源文件大小相同的文件
bixiaopeng@bixiaopengtekiMacBook-Pro test$ ls -l
total 16
-rw-r--r-- 2 bixiaopeng wheel 0 11 9 11:54 hardlink
-rw-r--r-- 2 bixiaopeng wheel 0 11 9 11:54 hardlink.log

#此时源文件是空的,编辑— 加入文本i am hardlink
bixiaopeng@bixiaopengtekiMacBook-Pro test$ vim hardlink.log
bixiaopeng@bixiaopengtekiMacBook-Pro test$ cat hardlink.log
i am hardlink
bixiaopeng@bixiaopengtekiMacBook-Pro test$ cat hardlink
i am hardlink
#删除源文件
bixiaopeng@bixiaopengtekiMacBook-Pro test$ rm hardlink.log
bixiaopeng@bixiaopengtekiMacBook-Pro test$ ls -l
total 8
-rw-r--r-- 1 bixiaopeng wheel 14 11 9 11:55 hardlink
#硬链接没有受任何影响
bixiaopeng@bixiaopengtekiMacBook-Pro test$ cat hardlink
i am hardlink
#重建源文件
bixiaopeng@bixiaopengtekiMacBook-Pro test$ touch hardlink.log
#硬链接没有受任何影响,说明硬链接已经失效
bixiaopeng@bixiaopengtekiMacBook-Pro test$ cat hardlink
i am hardlink
#重新链接会告诉你文件已经存在
bixiaopeng@bixiaopengtekiMacBook-Pro test$ ln hardlink.log hardlink
ln: hardlink: File exists



创建目录链接

1.目录只能创建软链接
2.目录创建链接必须用绝对路径,相对路径创建会不成功,会提示:符号连接的层数过多 这样的错误
3.在链接目标目录中修改文件都会在源文件目录中同步变化
#给目录创建链接
bixiaopeng@bixiaopengtekiMacBook-Pro test$ ln -sv /Volumes/warehouse/test/srcdir /Volumes/warehouse/test/targetdir
/Volumes/warehouse/test/targetdir/srcdir -> /Volumes/warehouse/test/srcdir
#查看链接是否成功
bixiaopeng@bixiaopengtekiMacBook-Pro test$ ls -l targetdir/
total 8
lrwxr-xr-x 1 bixiaopeng wheel 30 11 13 09:58 srcdir -> /Volumes/warehouse/test/srcdir
#修改源文件目录
bixiaopeng@bixiaopengtekiMacBook-Pro test$ mkdir srcdir/test

#目标文件目录会同步修改
bixiaopeng@bixiaopengtekiMacBook-Pro test$ ls targetdir/srcdir
test



注意点:
ln指令用在链接文件或目录时:
若同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则会把前面指定的所有文件或目录复制到该目录中。
若同时指定多个文件或目录,且最后的目的地并非是一个已存在的目录,则会出现错误信息。

作者: 毕小朋   来往ID: hello_xiaopeng  Blog:   http://blog.csdn.net/wirelessqa