shell命令:ln -s 创建软链接采用相对路径时的奇怪用法

目前基于测试结果得到结论,暂时无权威资料显示出原因
参考了 https://blog.csdn.net/weixin_42183399/article/details/80498750
但是这个博客给的结果只是特殊用法,无法归结至一般结论
下面开始正式介绍
 

文件及目录说明
/home/
/home/xxx.txt
/home/source/
/home/source/aaa.txt    --想要创建软链接的源文件
/home/source/ln.sh    --执行软链接命令的脚本
/home/source/file
/home/source/file/file2
/home/source/linkresult
/home/file/


名词解释
    相对路径写法的深度
        ../bbb.txt 深度为1层
        file/ 深度为1层
        ../file/ 深度为2层
        ../file/bbb.txt 深度为2层
        深度=/的个数
    
    ln -s [源路径] [目标路径]

规则一:
使用相对路径时,目标路径能够获取的层次不超过执行脚本所在的目录层次,也就是说目标相对路径不可使用..

规则二:
目标路径如果想对目标路径使用多层文件夹的形式创建链接,则源路径必须带..

    依旧使用上面的aaa.txt创建软链接
    采用命令 ln -s aaa.txt  bbb.txt,成功创建
    采用命令 ln -s aaa.txt file/bbb.txt 一定失败
    采用命令 ln -s aaa.txt file/bbb.txt 一定失败
    采用命令 ln -s aaa.txt file/file2/bbb.txt 一定失败
    也就是说,源路径没有..,目标路径只能是以脚本所在目录为基准,无法获取更深层目录

    采用 ln -s ../aaa.txt file/bbb.txt 一定成功
    但是 再采用 ln -s ../aaa.txt bbb.txt 一定失败
    但是 再采用 ln -s ../aaa.txt ../bbb.txt 一定失败(违反规则一)


而采用 ln -s ../aaa.txt file/bbb.txt成功,则涉及到另一个机制了
aaa.txt和准备执行的脚本/home/source/ln.sh是同一个目录,那么对原路径采用../aaa.txt 与 aaa.txt有何区别?

规则三:
源路径中".."的总数量 - ".."能够正常索引到对应文件的数量=目标相对路径写法必须使用的深度
    这时候aaa.txt与脚本路径已经相同,".."能够正常索引到对应文件的数量 = 0,".."的数量 = 1,差值为1,则目标文件夹的深度必须为一层
    所以采用命令 ln -s aaa.txt  bbb.txt,成功创建,ln -s ../aaa.txt file/bbb.txt 成功,并且ln -s ../aaa.txt bbb.txt失败(目标相对路径写法的深度为0层,而不是1层)
    同理ln -s ../../aaa.txt file/file2/bbb.txt 成功(多出了两组..,则目标相对路径写法的深度必须为二层,且不可为其他层次,例如一层,零层)

    继续,对脚本的上层目录的文件进行软连接
        ln -s ../xxx.txt yyy.txt 成功
        这里..是正常搜索目录,所以多出0组,则目标文件夹深度必须0层
        如果尝试更深深度 ln -s ../xxx.txt file/yyy.txt 失败
            尝试更深深度 ln -s ../xxx.txt file/file2/yyy.txt 失败
        
        正确做法,增加..
        ln -s ../../xxx.txt file/yyy.txt,因为..多出1组(../xxx.txt正常搜索到xxx.txt(1组..),..总数量为2,得到2-1=1),所以目标相对路径写法的深度必须为1层,不可为其他层次

规则四:
    "文件夹名/文件名" 等同于 "文件夹名/"  (因为深度相同)
    但使用"文件夹名/" 时 在目标路径生成的软链接的名字同源路径的文件名或文件夹名
    例如"ln -s ../aaa.txt file/" ,则会在/home/file目录下生成名为aaa.txt的软链接
    "ln -s ../aaa.txt file/bbb.txt" ,则会在/home/file目录下生成名为bbb.txt的软链接
    
规则五:
    对文件夹进行软链接,同上述规则(测试下面指令时,同名的软链接记得需要先删除旧的,否则提示file exit)
    ln -s file filecopy 成功
    ln -s ../file linkresult/filecopy 成功
    ln -s ../file linkresult/ 成功
    ln -s ../source filecopy 成功
    ln -s ../../source linkresult/filecopy 成功
    ln -s ../../source linkresult/ 成功
    
经过这么多规则后,如果没有必要,建议建软链接时源路径采用绝对路径的写法,目标路径相对绝对都可以,真的省心省事(不受规则一二三限制)
    目标路径相对路径写法
        ln -s /home/source/aaa.txt bbb.txt 成功
        ln -s /home/source/aaa.txt ../bbb.txt 成功(我可以到脚本上级目录,甚至是通过..到任意目录都可以)

    目标路径相对绝对写法
        ln -s /home/source/aaa.txt home/bbb.txt 成功
        ln -s /home/source/aaa.txt home/ 成功
        ln -s /home/source/aaa.txt /home/source/file/file2 成功

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值