第三课linux命令之ln的使用

时间 : 14-10-31 栏目 : linux精讲 作者 : 老薛 评论 : 0 点击 : 4,654 次

指令详细说明

指令名称 : ln

使用权限 : 所有使用者

功能:

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

用法:

ln [选项]… [-T]源文件 链接名    (第一种格式)

ln [选项]… 源文件        (第二种格式)

ln [选项]… 源文件 … 目录    (第三种格式)

ln [选项]… -t 源文件夹 链接名…    (第四种格式)

在第一种格式中,创建指定名称的链接且指向指定的源文件。

在第二种格式中,在当前目录创建指向源文件的链接。

在第三、四种格式中,在指定目录中创建指向源文件的链接。

参数:

-f : 链结时先将与 dist 同档名的档案删除
-d : 允许系统管理者硬链结自己的目录
-i : 在删除与 dist 同档名的档案时先进行询问
-n : 在进行软连结时,将 dist 视为一般的档案
-s : 进行软链结(symbolic link)
-v : 在连结之前显示其档名
-b : 将在链结时会被覆写或删除的档案进行备份
-S SUFFIX             将备份的档案都加上 SUFFIX 的字尾

-t, –target-directory=目录    在指定目录中创建链接

-T, –no-target-directory     将链接名当作普通文件(在对目录进行符号链接时要用到此选项)
-V METHOD : 指定备份的方式–help : 显示辅助说明

–version : 显示版本

注意:

1. ln命令会保持每一处链接文件的同步性,也就是说,不论你改动了哪一处,其它的文件都会发生 相同的变化,当我删除目标文件时,源文件不会删除!

2. ln的链接又符号链接和硬链接两种,符号链接就是ln -s ** **,它只会在你选定的位置上生成一个文件的镜像,不会占用磁盘空间,硬链接ln ** **,没有参数-s, 它会在你选定的位置上生成一个和源文件大小相同的文件,无论是符号链接还是硬链接,文件都保持同步变化。

3. 对于ln命令默认是建立硬链接的.

4. -s不是soft(软)的意思,而是symbolic(符号)的意思,因此应该是符号链接。

5. 当为 -s 标志指定 SourceFile 参数的时候,必须使用绝对路径。如果没有指明绝对路径,那么当SourceFile 和 TargetFile 参数位于不同的目录中的时候,可能会发生意外的结果。在创建符号链接前,不需要存在源文件。

6.用ls -l命令去察看,就可以看到显示的link的路径了。

[root@A home]# ls -l

total 1

lrwxrwxrwx 1 root   root     14 Dec 26 19:45 aa.sh -> /home/kk/ss.sh

说明:建立软链接之后目标文件显示为青绿色

 

7.源文件是目录的不可以做硬链接

 

举例:

  1. 对某个文件创建一个连接

[root@A ~]# ln -s /home/kk/ss.sh ~   #如果不写目标地址,即在当前目录建接立链接

[root@A ~]# ls

CentOS-Base.repo.oldboy anaconda-ks.cfg install.log install.log.syslog ss.sh此命令表示在家目录下创建与源文件同名的链接到/home/kk/ss.sh 符号连接

 

[root@A ~]# ln -s /home/kk/ss.sh ~/dd

[root@A ~]# ls

CentOS-Base.repo.oldboy anaconda-ks.cfg dd install.log install.log.syslog

此命令表示在家目录下建立链接到/home/kk/ss.sh 并且名字为dd的符号连接(前提是在家目录下没有abc这个目录)

 

  1. 对某个目录创建符号连接

[root@A home]# ln -s /home/kk /home/abc

[root@A home]# ls

abc apache kk oldboy

[root@A home]# cd abc

[root@A abc]# ls

ss.sh

此命令表示在/home目录下创建一个链接到/home/kk目录的名字为abc的符号连接。

 

[root@A home]# rm abc

rm: remove symbolic link `abc'? y   #删除所作目录链接时的提示

[root@A ~]# ln -s /tmp ~/

[root@A ~]# ls

CentOS-Base.repo.oldboy anaconda-ks.cfg install.log install.log.syslog tmp

此命令表示在家目录下创建一个与源文件夹同名的符号连接

 

  1. 对某个文件创建一个硬连接

[root@A ~]# ln /home/kk/ss.sh ~/

[root@A ~]# ls -l

total 60

-rw-r--r-- 1 root root 2239 Oct 24 09:30 CentOS-Base.repo.oldboy

-rw------- 1 root root 1074 Nov 10 12:28 anaconda-ks.cfg

-rw-r--r-- 1 root root 26403 Nov 10 12:28 install.log

-rw-r--r-- 1 root root 4378 Nov 10 12:28 install.log.syslog

-rw-r--r-- 2 root root   82 Dec 26 14:31 ss.sh

此命令表示在家目录下创建与源文件同名的链接到/home/kk/ss.sh硬链接,而且目标文件的颜色和原来一样,

ls –l也无法显示链接的路径

 

[root@A ~]# ln /home/kk/ss.sh ~/abc

[root@A ~]# ls

CentOS-Base.repo.oldboy abc anaconda-ks.cfg install.log install.log.syslog

此命令表示在家目录下建立链接到/tmp/abc.txt 并且名字为abc的硬链接(前提是在家目录下没有abc这个目录)

 

abc目录己存在的情况

[root@A ~]# mkdir abc

[root@A ~]# ls

CentOS-Base.repo.oldboy abc anaconda-ks.cfg install.log install.log.syslog

[root@A ~]# ln /home/kk/ss.sh ~/abc   #做硬链接

[root@A ~]# ls

CentOS-Base.repo.oldboy abc anaconda-ks.cfg install.log install.log.syslog

[root@A ~]# cd abc

[root@A abc]# ls

ss.sh

 

源文件是目录不可以做硬链接

[root@A ~]# ln /home/kk ~/abc

ln: `/home/kk': hard link not allowed for directory

  1. 参数 -v的用法

硬链接:

[root@A home]# ln -v /home/kk/ss.sh /home   #加上参数v后,

create hard link `/home/ss.sh' to `/home/kk/ss.sh' #会用文字显示源文件到目标的链接

[root@A home]# ls

apache kk oldboy ss.sh

[root@A home]# ln -vs /home/kk/ss.sh /home #创建名子相同的软链接

create symbolic link `/home/ss.sh' to `/home/kk/ss.sh' #会用文字显示源文件到目标的链接

ln: creating symbolic link `/home/ss.sh' to `/home/kk/ss.sh': File exists #同时也出现了己存在提示

软链接

[root@A home]# ln -vs /home/kk/ss.sh /home/dd #加上参数v后的软链接

create symbolic link `/home/dd' to `/home/kk/ss.sh' #会用文字显示源文件到目标的链接

[root@A home]# ls

apache dd kk oldboy ss.sh

青绿色的软链接,跟原来颜色一样的是硬链接

5.-f的用法

[root@A home]# ls

apache dd kk oldboy ss.sh       #dd 是己存在软链接;ss.sh是己存在硬链接

[root@A home]# ln -s -f /home/kk/ss.sh /home   #创建/home/kk/ss.sh的软链接

[root@A home]# ls

apache dd kk oldboy ss.sh            #上面加了f参数,ss.sh现在是软链接

 

[root@A home]# ln /home/kk/ss.sh /home/dd   #创建/home/kk/ss.sh 的硬链接,名子同样是dd

ln: creating hard link `/home/dd' to `/home/kk/ss.sh': File exists     #提示出现了,己存在

[root@A home]# ln -f /home/kk/ss.sh /home/dd #加上f参数后,提示没有了

[root@A home]# ls

apache dd kk oldboy ss.sh             #dd变成链接了,

-f的主要过程:先将同名的软链接dd删除,然后再创建硬链接dd

6.-d-b的用法

[root@A home]# ln /home/kk /home/dd       #创建硬链接不允许

ln: `/home/kk': hard link not allowed for directory #不允许对目录创建硬链接

[root@A home]# ln -F /home/kk /home/dd     #加上-d参数

ln: creating hard link `/home/dd' to `/home/kk': Operation not permitted    #为什么还是不行呀?

7.-i的用法

[root@A home]# ln -s /home/kk/ss.sh #创建软链接

[root@A home]# ls                 #查看

apache kk oldboy ss.sh

[root@A home]# ln -fi /home/kk/ss.sh   #加上-f参数删除同名的,加上-i参数-在删除之前给出提示

ln: replace `./ss.sh'?   #提示

 

[root@A home]# ln -fi /home/kk/ss.sh

ln: replace `./ss.sh'? n                #我选择了n

[root@A home]# ls                  #查看

apache kk oldboy ss.sh             #还存在

[root@A home]# ln -fb /home/kk/ss.sh     #加上参数b

[root@A home]# ls                   #查看

apache kk oldboy ss.sh ss.sh~     #之前存在的软链接被更名备份了,然后创建同名的硬链接

本文标签

除非注明,文章均为( 老薛 )原创,转载请保留链接: http://www.bdkyr.com/operation/419.html

第三课linux命令之ln的使用:等您坐沙发呢!

发表评论

7 + 7 = ?


博主微信号,很高兴为您提供帮助

随便看看

为您推荐

0