• Linux命令之ln


    ln [选项] … [-T] 目标 链接名    (第一种格式)

    ln [选项] … 目标                       (第二种格式)

    ln [选项] … 目标 … 目录         (第三种格式)

    ln [选项] … -t 目录 目标 …      (第四种格式)

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

      在第二种格式中,在当前目录创建指向目标位置的同名链接。

      在第三第四种格式中,在指定目录中创建指定目标的同名链接。

      默认创建硬链接。创建软链接(符号链接)时必须使用使用-s或--symbolic选项。

      注意:同一位置不能出现相同的文件名。创建链接时需要注意软硬链接的特性。

      硬链接与软链接详见:硬链接与软链接

    (1).选项

    --backup[=CONTROL] 为每个已存在的目的地文件(链接同地址同名文件)创建备份文件
    -b 类似--backup,但不接受任何参数
    -d,-F,--directory 创建指向目录的硬链接(只适用于超级用户)
    -f,--force 强行删除任何已存在的目标文件
    -i,--interactive 删除文件前进行确认
    -L,--logical 将硬链接创建为符号链接引用
    -n,--no-dereference 如果目的地是一个链接至某目录的符号链接,会将该符号链接当作普通文件处理,先将该已存在的链接备份或删除
    -s,--symbolic 创建符号链接而非硬链接
    -S,--suffix=后缀 自行指定备份文件的后缀
    -t,--target-directory=目录 在指定目录中创建链接
    -T,--no-target-directory 将链接名称当作普通文件
    -v,--erbose 链接前先列出每个文件的名称

    (2).实例

      首先展示四种格式创建链接,以便更好的理解四种格式间的差异

    [xf@xuexi ~]$ ls
    公共  模板  视频  图片  文档  下载  音乐  桌面
    [xf@xuexi ~]$ touch 1
    [xf@xuexi ~]$ mkdir newDir Dir1 Dir2
    //第一种格式,创建指定名称的目标链接
    [xf@xuexi ~]$ ln 1 link1
    [xf@xuexi ~]$ ls -l link1 
    -rw-rw-r--. 2 xf xf 0 3月  11 10:51 link1
    //目标和链接都可以使用绝对或相对路径
    [xf@xuexi ~]$ ln /home/xf/1 ./newDir/link2
    [xf@xuexi ~]$ ls -l newDir/link2
    -rw-rw-r--. 3 xf xf 0 3月  11 10:51 newDir/link2
    [xf@xuexi ~]$ cd newDir/
    [xf@xuexi newDir]$ ls -l link2 
    -rw-rw-r--. 3 xf xf 0 3月  11 10:51 link2
    //第二种格式,在当前目录下创建目标的同名链接
    [xf@xuexi newDir]$ ln /home/xf/1
    [xf@xuexi newDir]$ ls -l
    总用量 0
    -rw-rw-r--. 4 xf xf 0 3月  11 10:51 1
    -rw-rw-r--. 4 xf xf 0 3月  11 10:51 link2
    //第三种格式与第四中格式,在指定目录下创建同名链接
    [xf@xuexi newDir]$ ln ../1 ../Dir1/
    [xf@xuexi newDir]$ ln -t ../Dir2/ ../1
    [xf@xuexi newDir]$ cd ../Dir1
    [xf@xuexi Dir1]$ ls -l
    总用量 0
    -rw-rw-r--. 6 xf xf 0 3月  11 10:51 1
    [xf@xuexi Dir1]$ cd ../Dir2
    [xf@xuexi Dir2]$ ls -l
    总用量 0
    -rw-rw-r--. 6 xf xf 0 3月  11 10:51 1
    //像控制台不太好看到是否是硬链接,那么可以查看所有文件的inode号
    [xf@xuexi Dir2]$ stat /home/xf/1 | grep Inode
    设备:803h/2051d	Inode:52016343    硬链接:6
    [xf@xuexi Dir2]$ stat /home/xf/link1 |grep Inode
    设备:803h/2051d	Inode:52016343    硬链接:6
    [xf@xuexi Dir2]$ stat /home/xf/newDir/link2 |grep Inode
    设备:803h/2051d	Inode:52016343    硬链接:6
    [xf@xuexi Dir2]$ stat /home/xf/newDir/1 |grep Inode
    设备:803h/2051d	Inode:52016343    硬链接:6
    [xf@xuexi Dir2]$ stat /home/xf/Dir1/1 |grep Inode
    设备:803h/2051d	Inode:52016343    硬链接:6
    [xf@xuexi Dir2]$ stat /home/xf/Dir2/1 |grep Inode
    设备:803h/2051d	Inode:52016343    硬链接:6
    

      为文件创建硬链接和软链接

    [xf@xuexi ~]$ touch File  //创建测试文件
    [xf@xuexi ~]$ ln File link1  //创建硬链接
    [xf@xuexi ~]$ ln -s File link2  //创建软链接
    [xf@xuexi ~]$ ls -l link*
    -rw-rw-r--. 2 xf xf 0 Mar 11 11:33 link1
    lrwxrwxrwx. 1 xf xf 4 Mar 11 11:33 link2 -> File
    

      根据硬链接与软链接的特性,比较差异

    //第一个特性,硬链接与源文件具有相同inode号和data block,修改文件属性或文件数据会应影响所有硬链接(包括源文件);
    //软链接虽然有自己的inode号和data block,但修改的其实还是源文件
    [xf@xuexi ~]$ stat File |grep Inode  //也可使用ls -i File查看
    Device: 803h/2051d	Inode: 52016343    Links: 2
    [xf@xuexi ~]$ stat link1 |grep Inode
    Device: 803h/2051d	Inode: 52016343    Links: 2
    [xf@xuexi ~]$ stat link2 |grep Inode
    Device: 803h/2051d	Inode: 52016746    Links: 1
    [xf@xuexi ~]$ echo aaaa >> link1  //硬链接修改文件数据
    [xf@xuexi ~]$ cat File 
    aaaa
    [xf@xuexi ~]$ echo aaaa >> link2  //软链接修改文件数据 
    [xf@xuexi ~]$ cat File 
    aaaa
    aaaa
    [xf@xuexi ~]$ ll File link2
    -rw-rw-r--. 2 xf xf 0 3月 11 14:27 File
    lrwxrwxrwx. 1 xf xf 4 3月 11 14:28 link2 -> File
    [xf@xuexi ~]$ chmod +x link2  //软链接修改文件属性
    [xf@xuexi ~]$ ll File link2
    -rwxrwxr-x. 2 xf xf 0 3月 11 14:27 File
    lrwxrwxrwx. 1 xf xf 4 3月 11 14:28 link2 -> File
    [xf@xuexi ~]$ stat File 
    文件:"File"
    大小:0 块:0 IO 块:4096 普通空文件
    设备:803h/2051d	Inode:52016343 硬链接:2
    权限:(0775/-rwxrwxr-x) Uid:( 1000/ xf) Gid:( 1000/ xf)
    环境:unconfined_u:object_r:user_home_t:s0
    最近访问:2019-03-11 14:27:29.750638827 +0800
    最近更改:2019-03-11 14:27:29.750638827 +0800
    最近改动:2019-03-11 14:38:22.936661898 +0800
    创建时间:-
    [xf@xuexi ~]$ stat link2
    文件:"link2" -> "File"
    大小:4 块:0 IO 块:4096 符号链接
    设备:803h/2051d	Inode:52016746 硬链接:1
    权限:(0777/lrwxrwxrwx) Uid:( 1000/ xf) Gid:( 1000/ xf)
    环境:unconfined_u:object_r:user_home_t:s0
    最近访问:2019-03-11 14:28:37.354054265 +0800
    最近更改:2019-03-11 14:28:37.353054303 +0800
    最近改动:2019-03-11 14:28:37.353054303 +0800
    创建时间:-
    //第二个特性,硬链接不能对不存在的文件进行创建,但软链接可以(包括目录文件)
    [xf@xuexi ~]$ ls
    File  link1  link2  公共  模板  视频  图片  文档  下载  音乐  桌面
    [xf@xuexi ~]$ ln File1 link3
    ln: failed to access "File1": 没有那个文件或目录
    [xf@xuexi ~]$ ln -s File1 link4
    [xf@xuexi ~]$ ls -l link4
    lrwxrwxrwx. 1 xf xf 5 3月  11 11:50 link4 -> File1  //这是一个死链接
    //第三个特性,硬链接不可以跨文件系统(即分区)创建,软链接可以
    [xf@xuexi ~]$ su -
    密码:
    上一次登录:一 3月 11 13:16:55 CST 2019pts/0 上
    [root@xuexi ~]# file -s /dev/sdb1  //查看分区文件系统类型
    /dev/sdb1: SGI XFS filesystem data (blksz 4096, inosz 512, v2 dirs)
    [root@xuexi ~]# mount /dev/sdb1 /sdb1  //挂载分区
    [root@xuexi ~]# ln /home/xf/File /sdb1/link5  //硬链接无法跨文件系统创建
    ln: 无法创建硬链接"/sdb1/link5" => "/home/xf/File": 无效的跨设备连接
    [root@xuexi ~]# ln -s /home/xf/File /sdb1/link6  //软链接可以,但源文件必须是绝对路径,否则为死链接
    [root@xuexi ~]# ls -l /sdb1/link6 
    lrwxrwxrwx. 1 root root 13 3月  11 13:19 /sdb1/link6 -> /home/xf/File
    //第四个特性,硬链接不能对目录创建链接,但软链接可以
    [root@xuexi ~]# exit
    登出
    [xf@xuexi ~]$ ls
    File  link1  link2  link4  公共  模板  视频  图片  文档  下载  音乐  桌面
    [xf@xuexi ~]$ mkdir newDir
    [xf@xuexi ~]$ ln newDir link7
    ln: "newDir": 不允许将硬链接指向目录
    [xf@xuexi ~]$ ln -s newDir link8
    [xf@xuexi ~]$ ll link8
    lrwxrwxrwx. 1 xf xf 6 3月  11 13:26 link8 -> newDir
    [xf@xuexi ~]$ cd link8  //link8可以执行cd命令
    [xf@xuexi link8]$
    //第五个特性,删除源文件,硬链接没有影响;软链接变成死链接,但在相同位置重新创建同名文件,软链接变成指向新文件的链接
    [xf@xuexi link8]$ cd ..
    [xf@xuexi ~]$ cat File 
    aaaa
    aaaa
    [xf@xuexi ~]$ rm File  //删除源文件
    [xf@xuexi ~]$ cat link1  //硬链接没有影响
    aaaa
    aaaa
    [xf@xuexi ~]$ cat link2  //软链接变为死链接
    cat: link2: 没有那个文件或目录
    [xf@xuexi ~]$ touch File  //相同位置创建同名文件
    [xf@xuexi ~]$ echo bbbb >> File
    [xf@xuexi ~]$ cat link1  //硬链接没有影响
    aaaa
    aaaa
    [xf@xuexi ~]$ cat link2  //软链接指向新建立的同名文件
    bbbb

      如果文件名已存在,可以使用-f选项强制删除已存在的文件

    [xf@xuexi ~]$ touch File link1
    [xf@xuexi ~]$ ln File link1
    ln: 无法创建硬链接"link1": 文件已存在
    [xf@xuexi ~]$ ln -f File link1 
    

      要是不知道文件是否有用,可以使用-b或--backup选项备份已存在的文件。还可使用-S选项指定后缀名。

    [xf@xuexi ~]$ touch File link1
    [xf@xuexi ~]$ echo aaaa >> link1
    [xf@xuexi ~]$ ln -bf File link1  //对已存在的同名文件备份
    [xf@xuexi ~]$ ls  //备份文件默认~结尾
    File  link1  link1~  公共  模板  视频  图片  文档  下载  音乐  桌面
    [xf@xuexi ~]$ cat link1~
    aaaa
    [xf@xuexi ~]$ touch link2
    [xf@xuexi ~]$ echo bbbb >> link2
    [xf@xuexi ~]$ ln -bf -S .txt File link2  //指定备份文件的后缀名
    [xf@xuexi ~]$ ls
    File link1~ link2.txt 模板 图片 下载 桌面
    link1 link2 公共 视频 文档 音乐
    [xf@xuexi ~]$ cat link2.txt
    bbbb
    

      另外说明一下backup的有效值:none和off这两个值是不进行备份;numbered和t这两个值是备份文件加上数值,例如文件link3,备份后是link3.~1~;existing和nil这两个值是如有数字备份文件则使用数字,否则使用普通方式备份,例如使用有效值t已经备份过一次的link3,此时存在硬链接link3与备份文件link3.~1~,那么再使用有效值nil时会生成一个新的link3,原有的硬链接link3被备份为link3.~2~;simple和never永远使用普通方式备份(结尾~)。

      

  • 相关阅读:
    sqlserver2012附加数据库2005版本时出现的问题
    jQuery实现评论还剩多少个字
    在mvc3中经常使用身份验证实现
    Windows Phone学习(1):棋子未动,先观全局
    使用jquery.pagination.js实现无刷新分页
    Javascript和JQuery中常用的随机数产生函数(很好用)
    网页打印样式设置(页眉,页脚,页边距)
    rdlc到设置宽度后自动换行(转)
    VSS忘记Admin密码和修改默认登陆用户
    解决jquery 修改onclick事件后IE兼容模式下立刻执行的问题
  • 原文地址:https://www.cnblogs.com/diantong/p/9283910.html
Copyright © 2020-2023  润新知