linux的软链接"ln -s"命令

 ln命令是一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步的链接。当我们需要在不同的目录,用到相同的文件时,我们不需要在每一个需要的目录下都放一个必须相同的文件,我们只要在某个固定的目录,放上该文件,然后在 其它的目录下用ln命令链接(link)它就可以,不必重复的占用磁盘空间。

命令功能 : 
    软链接(symbolic link)它可以作用在不同级别的文件或目录可以将它视为文件或的目录别名,而软链接的方式则是创建一个文件或目录并将这个文件或目录的内容指向另一个文件或目录的位置。软链接都不会将原本的文件或目录复制一份,只会占用非常少量的磁碟空间。可以做大节省磁盘空间。

语法:

ln [参数选项] [源文件或目录] [目标文件]

参数选项:

    -b或--backup:删除,覆盖目标文件之前的备份;


    -d或-F或——directory:建立目录的硬连接;


     -f或——force:强行建立文件或目录的连接,不论文件或目录是否存在;


     -i或——interactive:覆盖既有文件之前先询问用户; 


    -n或--no-dereference:把符号连接的目的目录视为一般文件; 


    -s或——symbolic:对源文件建立符号连接,而非硬连接; 


    -S<字尾备份字符串>或--suffix=<字尾备份字符串>:用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它; 


    -v或——verbose:显示指令执行过程; 


    -V<备份方式>或--version-control=<备份方式>:用“-b”参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,这个字符串不仅可用“-S”参数变更,当使用“-V”参数<备份方式>指定不同备份方式时,也会产生不同字尾的备份字符串; 


    --help:在线帮助; 

    

--version:显示版本信息。

在这里常用选项只有“-s”的参数选项。

    ln -s 源文件 目标文件

  • 源文件:指定连接的源文件。“源文件”可以是文件或者目录。

  • 目标文件:指定源文件的目标连接文件。

实例:

如linux中的/bin目录,如下图:

image.png

这个“/usr/bin”才是他真正的目录路径,而“/bin”则是软链接文件,我们知道这个“/bin”目录是存放常用的命令,比如“ls”,实际上他是存放在“/usr/bin/ls”,而“/bin/ls”只是他的软连接文件,如下图:

image.png

而平时我们可以直接使用“ls”是因为拥有“alias”命令设置了别名,详情请了解“alias命令”。

软链接的创建:

比如当一个程序需要在“/tmp/111/”目录下使用“1.txt”文件,因某种原因该“1.txt”文件被放置到“/root/123/"目录下被另一个程序在使用,这两个程序都使用了同一个“1.txt”文件,当然可以拷贝一份到“/tmp/111/”目录下使用,拷贝的话第一会占空间,第二它们使用的都是相同文件,当你文件更改的时候是不是还得再次拷贝,这样多麻烦?  如何解决呢?这回软链接派上用场了 ,这个程序想要在“/tmp/111/”目录下找到并使用“1.txt”,而真正存放的文件路径则是“/root/123/"目录下,我们知道创建的语法:“ln -s 源文件  目标文件”,那这个源文件就是该文件真正所存放的路径“/root/123/1.txt”,目标文件就是要创建的软链接文件路径“/tmp/111/1.txt”,如下图:

image.png

可以看到粉绿色的就是软链接文件“1.txt”而他真正的所在路径则是“/root/123/1/txt”。软链接不仅可以作用在文件也可以作用在目录上,如下图:

image.png

如上图为什么会报错提示“不是一个目录:没有那个文件或目录”呢?那是我自己犯了一个错误,因为软链接是一个文件而不是目录,我却习惯性的多敲了一个“/”。我们都知道linux中一个名称后边跟随了一个“/”,那它就是目录所以报错。正确的命令如下:

image.png

源目录可以桥上“/”。因为它就是一个目录,也可以不用加上“/”。但还是加上好一些吧,看看它的真正路径就知道了“/tmp/ln/”。

现在所设置的都是绝对路径,那能不能设置相对路径呢?答案是可以的,如“/lib64/”相对路径比较多,如下图:

image.png

很多都是相对路径,我们都知道相对路径的意思,它们关系都是在当前目录下,但这样做有一些弊端,什么弊端呢?假如说做了一个相对路径的软链接,假如把所有文件拷贝到另一个机器上,结果发现这个文件不存在也就是源文件不存在,或者说更改了软链接文件的名称或其他原因,就会导致所做的这个软链接出现问题,所有说尽量做绝对路径,比如在root目录下做了一个相对路径的软链接“ln -s 1.txt 11111.txt”,如下图:

image.png

当软链接文件“11111.txt”被移动后,如下图:

image.png

这回所做的软链接文件的源文件一直在闪,说明源文件不存在,我们把它修改成绝对路径看看,如下图:

image.png

再移动这个软链接文件到“tmp”目录下,如下图:

image.png

它依然没有问题。所以尽量做绝对路径。

举一反三:

    假如“/boot”目录的空间快被用完,但是有一个进程或服务必须要在“/boot/user1.log”日志文件下一直写数据且不能边度它路劲,本来“/boot”分区本来快满了,如果继续写就会写入“user1.log”日志文件,那会撑爆这个“/boot”分区,导致这个服务或进程包括系统都有可能出现问题,那能不能把这个日志文件“user1.log”放到其他路径下呢?答案是可以的,前提是不能更改源文件的路劲,可以先把“user1.log”拷贝到分区目录空间大的目录下,如下图:

image.png

这个“df -h”往后再说,现在只需要知道明白各个分区的可用大小是多少,我们看到“/”分区很大,我们就把“user1.log”拷贝在“/”目录下吧。如下图:

image.png

成功复制放置到“/”分区目录下,然后删除占用空间大的“/boot/user1.log”文件并立马创建软链接文件指向源文件“/user1.log”文件上,如下图:

image.png

这样这个进程或服务在写日志的时候,它写的内容保存在“/user1.log”文件里,因为他是靠路径去查找这个文件的,但实际上它操作写的是“/boot/user1.log”文件,但内容保存的是“/user.log”文件。

注意的是这个软链接,它的源文件必须也存在是不能删除的,否则软链接文件失效,软链接的文件大小与你源文件或目录的长度有关,路径也长,软链接文件的大小也就也大。


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://gzievs.net.cn/post/49.html

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。