0%

Linux的快捷方式的创建ln

Linux ln 命令

ln 命令是一个非常重要的命令,可以为某一个文件或目录在其他不同的位置建立一个同步的链接。部分功能与Windows的快捷方式类似。但更加强大。

官方解释为:

ln - make links between files

当我们需要在不同的目录,或者不同的工程,甚至是不同的人员需要用到同一个文件的时候,此时不需要每个位置都通过cp来拷贝一份,因为在源文件更新的时候,这个文件是不会同步更新的 。而此时ln命令就不一样了,通过该命令链接到源文件或目录,不仅可以不用占用重复的更多的磁盘空间,还可以同步更新。NICE

使用格式

1
$ ln [参数][源文件或目录][目标文件或目录]

其中参数的格式为

  • -b ,或 like –backup but does not accept an argument
  • -f,或 --force : 强制执行,这个在链接已经存在的情况下必用
  • -s,或 --symbolic:创建符号链接

在Linux文件系统中,又有两种链接类型:

  1. 硬链接(hard link)
  2. 软链接(symbolic link):又称符号链接,类似于Windows的快捷方式

硬链接会复制一份相同大小的源文件,而软链接是一种特殊的文件,占用很小的磁盘空间。

创建硬链接

默认情况下,不加任何参数,创建的是硬链接,如下,创建源文件a.log的硬链接a1.log

1
2
3
4
5
$ ln a.log a1.log

$ ll
-rw-rw-r--. 3 user user 85710 Apr 5 21:29 a.log
-rw-rw-r--. 3 user user 85710 Apr 5 21:29 a1.log

这个时候修改源文件a.log的部分内容,可以看到硬链接也同步更新。

1
2
3
4
5
$ vim a.log

$ ll
-rw-rw-r--. 3 user user 85716 Apr 5 21:34 a.log
-rw-rw-r--. 3 user user 85716 Apr 5 21:34 a1.log

创建软链接

如果需要创建软链接,就需要参数-s,如下,创建源文件a.log的软链接a1.log

1
2
3
4
5
$ ln -s a.log a1.log

$ ll
-rw-rw-r--. 3 user user 85710 Apr 5 21:29 a.log
lrwxrwxrwx. 1 user user 5 Apr 5 21:30 a1.log -> a.log

这个时候修改源文件a.log的部分内容,可以看到软链接没有更新,不过其指向的内容依然更新了。

1
2
3
4
5
$ vim a.log

$ ll
-rw-rw-r--. 3 user user 85716 Apr 5 21:34 a.log
lrwxrwxrwx. 1 user user 5 Apr 5 21:30 a1.log -> a.log

此时可以看到,对于软链接a1.log而言,其仅为一个符号链接,用file看一下:

1
2
$ file a1.log
a1.log: symbolic link to `a.log'

删除源文件后的情况

此时通过ln创建a.log的硬链接ah.log和软链接as.log,然后看一下如果删除源文件会发生什么情况。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 创建软硬链接
$ ln a.log ah.log
$ ln -s a.log as.log
$ ll
-rw-rw-r--. 2 user user 85716 Apr 5 21:34 a.log
lrwxrwxrwx. 1 user user 5 Apr 5 21:30 as.log -> a.log
-rw-rw-r--. 2 user user 85716 Apr 5 21:34 ah.log

# 删除源文件
$ rm a.log

# 此时如果有颜色显示,as.log应该会是红色的警告色
$ ll
lrwxrwxrwx. 1 user user 5 Apr 5 21:30 as.log -> a.log
-rw-rw-r--. 2 user user 85716 Apr 5 21:34 ah.log

# 此时看一下as.log的状态
$ file as.log
as.log: broken symbolic link to `a.log'

可以看到如果删除了源文件,硬链接不受影响,但是软链接已经提示链接损坏了。

强制更新软链接

在软链接存在的情况下,如果再创建一个同名的,会报错,此时就需要强制创建了,加上-f参数即可。

1
2
3
4
5
6
7
8
9
10
11
$ ln -s b.log as.log
ln: failed to create symbolic link 'as.log': File exists

# 强制创建
$ ln -sf b.log as.log

$ ll
-rw-rw-r--. 1 user user 85716 Apr 5 22:16 a.log
-rw-rw-r--. 2 user user 85716 Apr 5 21:34 ah.log
lrwxrwxrwx. 1 user user 5 Apr 5 22:21 as.log -> b.log
-rw-rw-r--. 1 user user 85716 Apr 5 22:17 b.log
处无为之事,行不言之教;作而弗始,生而弗有,为而弗恃,功成不居!

欢迎关注我的其它发布渠道