每天一个Linux命令(30)ln命令

Posted MenAngel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每天一个Linux命令(30)ln命令相关的知识,希望对你有一定的参考价值。

      ln命令用来为文件创建链接,连接类型分为硬链接和符号链接两种,默认的连接类型是硬连接。如果要创建符号连接必须使用"-s"选项。

     

      (1)用法:

      用法:  ln  [options]  source  dist

 

      (2)功能:

      功能:  在文件之间建立连接 

      注意: 符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。

 

      (3)选项参数:

      1) -s          软链接(符号链接)

      2) -v          显示详细的处理过程

      3) -d          允许超级用户制作目录的硬链接


      (4)实例:

      1)[[email protected] Documents]# ln -s findDir finDir_link        为目录创建软连接

[[email protected] Documents]# ll
总用量 0
dr--r--r--. 3 root sunjimeng 16 5月  24 07:52 findDir
drwxr-xr-x. 2 root root      51 5月  21 07:10 NoPdir
drwxr-xr-x. 2 root root      51 5月  21 07:09 Pdir
[[email protected] Documents]# ln -s findDir finDir_link
[[email protected] Documents]# ll
总用量 0
dr--r--r--. 3 root sunjimeng 16 5月  24 07:52 findDir
lrwxrwxrwx. 1 root root       7 5月  27 06:04 finDir_link -> findDir
drwxr-xr-x. 2 root root      51 5月  21 07:10 NoPdir
drwxr-xr-x. 2 root root      51 5月  21 07:09 Pdir

      当源文件失效后,链接文件将失效。

[[email protected] Documents]# ll
总用量 0
dr--r--r--. 3 root sunjimeng 16 5月  24 07:52 findDir
lrwxrwxrwx. 1 root root       7 5月  27 06:04 finDir_link -> findDir    //有效时的颜色
drwxr-xr-x. 2 root root      51 5月  21 07:10 NoPdir
drwxr-xr-x. 2 root root      51 5月  21 07:09 Pdir
[[email protected] Documents]# cd finDir_link
[[email protected] finDir_link]# ll
总用量 0
dr-xr-xr-x. 3 root sunjimeng 60 5月  24 08:01 Dir
[[email protected] findDir]# rmdir Dir
[[email protected] findDir]# cd ../
[[email protected] Documents]# rmdir findDir
[[email protected] Documents]# ll
总用量 0                                   //无效时的颜色
lrwxrwxrwx. 1 root root  7 5月  27 06:04 finDir_link -> findDir 
drwxr-xr-x. 2 root root 51 5月  21 07:10 NoPdir
drwxr-xr-x. 2 root root 51 5月  21 07:09 Pdir
[[email protected] Documents]# cd finDir_link
bash: cd: finDir_link: 没有那个文件或目录

      2)[[email protected] Documents]# ln newFile newLink          给文件创建硬链接

[[email protected] Documents]# ll
总用量 0
drwxr-xr-x. 2 root root 51 5月  21 07:10 NoPdir
drwxr-xr-x. 2 root root 51 5月  21 07:09 Pdir
[[email protected] Documents]# touch newFile             //创建文件
[[email protected] Documents]# ln -s newFile newLink_s   //创建文件符号链接
[[email protected] Documents]# ln newFile newLink        //创建文件硬链接
[[email protected] Documents]# ln -s Pdir PdirLink_s     //创建目录符号链接
[[email protected] Documents]# ln Pdir PdirLink          //不允许创建目录硬链接
ln: "Pdir": 不允许将硬链接指向目录
[[email protected] Documents]# ll
总用量 0
-rw-r--r--. 2 root root  0 5月  27 06:18 newFile
-rw-r--r--. 2 root root  0 5月  27 06:18 newLink          
lrwxrwxrwx. 1 root root  7 5月  27 06:19 newLink_s -> newFile
drwxr-xr-x. 2 root root 51 5月  21 07:10 NoPdir
drwxr-xr-x. 2 root root 51 5月  21 07:09 Pdir
lrwxrwxrwx. 1 root root  4 5月  27 06:19 PdirLink_s -> Pdir

      创建的文件硬链接newLink与源文件newFile具有相同的权限,并且没有箭头。而文件软链接newLink_s的权限要多得多,而且有指向符号。

      3)综合实例,比较硬链接与符号链接的差别

[[email protected] Documents]# cat >newFile <<EOF
> This is original file!
> 
> Im test the hard link and the symbol link!
> EOF                                                     //到这里新建一个文件
总用量 4
[[email protected] Documents]# ln -s newFile newFile_link_s
[[email protected] Documents]# ln newFile newFile_link
[[email protected] Documents]# rm newFile                   //删除源文件
rm:是否删除普通文件 "newFile"?y
[[email protected] Documents]# ll
总用量 4
-rw-r--r--. 1 root root 68 5月  27 06:30 newFile_link    
lrwxrwxrwx. 1 root root  7 5月  27 06:31 newFile_link_s -> newFile
drwxr-xr-x. 2 root root 51 5月  21 07:10 NoPdir
drwxr-xr-x. 2 root root 51 5月  21 07:09 Pdir
[[email protected] Documents]# cat newFile_link              //查看硬链接,完全不受影响,但符号链接已经失效
This is original file!

Im test the hard link and the symbol link!
[[email protected] Documents]# cat >newFile <<EOF            再新建一个文件newFile   
> The Second Test!
> 
> EOF
[[email protected] Documents]# ll
总用量 8
-rw-r--r--. 1 root root 18 5月  27 06:33 newFile
-rw-r--r--. 1 root root 68 5月  27 06:30 newFile_link
lrwxrwxrwx. 1 root root  7 5月  27 06:31 newFile_link_s -> newFile   //符号链接已经恢复
drwxr-xr-x. 2 root root 51 5月  21 07:10 NoPdir
drwxr-xr-x. 2 root root 51 5月  21 07:09 Pdir
[[email protected] Documents]# cat newFile_link            //分别查看符号链接和硬链接发现硬链接内容不变,符号链接内容变为新建的文件内容了。
This is original file!

Im test the hard link and the symbol link!
[[email protected] Documents]# cat newFile_link_s
The Second Test!

      4)[[email protected] Documents]# ln newFile ln_dir          在另一个目录创建同名硬链接

[[email protected] Documents]# mkdir ln_dir
[[email protected] Documents]# ln newFile ln_dir
[[email protected] Documents]# cd ln_dir
[[email protected] ln_dir]# ll
总用量 4
-rw-r--r--. 2 root root 18 5月  27 06:33 newFile

      修改newFile硬链接目录文件,也会导致源文件被修改。

      5)[[email protected] Documents]# ln -sv a.c ./Pdir           在指定目录创建链接

[[email protected] Documents]# touch a.c
[[email protected] Documents]# ll
总用量 0
-rw-r--r--. 1 root root  0 5月  27 07:03 a.c
lrwxrwxrwx. 1 root root  6 5月  27 06:58 No_link -> NoPdir
drwxr-xr-x. 2 root root 51 5月  21 07:10 NoPdir
drwxr-xr-x. 2 root root 51 5月  21 07:09 Pdir
[[email protected] Documents]# ln -sv a.c ./Pdir
"./Pdir/a.c" -> "a.c"
[[email protected] Documents]# ln -sv a.c ./Pdir/b.c
"./Pdir/b.c" -> "a.c"
[[email protected] Documents]# ln -v a.c ./Pdir/c.c
"./Pdir/c.c" => "a.c"
[[email protected] Documents]# ls -l Pdir
总用量 8
lrwxrwxrwx. 1 root root   3 5月  27 07:04 a.c -> a.c
lrwxrwxrwx. 1 root root   3 5月  27 07:04 b.c -> a.c
-rw-r--r--. 2 root root   0 5月  27 07:03 c.c
-r--r--r--. 1 root root   0 5月  19 04:16 find
-rw-r--r--. 1 root root  85 5月  19 04:25 t3.txt
--w-------. 1 root root   0 5月  15 18:34 uText
-rw-r--r--. 1 root root 105 5月  21 06:35 vf

 

      (5)其他:

      扩展知识:

      Linux具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不同的目录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改。对于某个文件的各链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全性。 文件链接有两种形式,即硬链接和符号链接。
      硬链接:

      建立硬链接时,在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在多个目录中。

      创建硬链接后,己经存在的文件的I节点号(Inode)会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的链接数为l。 在默认情况下,ln命令创建硬链接。ln命令会增加链接数,rm命令会减少链接数。一个文件除非链接数为0,否则不会从文件系统中被物理地删除。

      对硬链接有如下限制:

      1.不能对目录文件做硬链接。

      2.不能在不同的文件系统之间做硬链接。就是说,链接文件和被链接文件必须位于同一个文件系统中。
      软链接:

      符号链接也称为软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,它只是一个文本文件,其中包含它提供链接的另一个文件的路径名,如图中虚线箭头所示。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际的文件。

      与硬链接不同的是,符号链接确实是一个新文件,当然它具有不同的I节点号;而硬链接并没有建立新文件。 符号链接没有硬链接的限制,可以对目录文件做符号链接,也可以在不同文件系统之间做符号链接。
      用ln -s命令建立符号链接时,源文件最好用绝对路径名。这样可以在任何工作目录下进行符号链接。而当源文件用相对路径时,如果当前的工作路径与要创建的符号链接文件所在路径不同,就不能进行链接。 符号链接保持了链接与源文件或目录之间的区别: 删除源文件或目录,只删除了数据,不会删除链接。一旦以同样文件名创建了源文件,链接将继续指向该文件的新数据。 在目录长列表中,符号链接作为一种特殊的文件类型显示出来,其第一个字母是l。 符号链接的大小是其链接文件的路径名中的字节数。

以上是关于每天一个Linux命令(30)ln命令的主要内容,如果未能解决你的问题,请参考以下文章

每天一个linux命令(30): chown命令

Linux中ln -s命令为啥会失败?

每天一个linux命令30)--chgrp命令

linux ln命令

Linux命令-ln

如何使用ln命令在linux下创建快捷方式