linux中的软链(symbolic link)

当前虚拟化技术盛行,不可避免要使用软链,之前使用公司的PaaS平台,也遇到了软链相关的问题

应用场景

在实例上运行shell脚本,shell进一步调用python脚本

通常我的做法是:
1)将python环境打包上线,目录结构如下:
/home/work
./script
./python2.7.tar.gz
2) 固定写死shell脚本目录和python环境的期望目录结构,如下

./script

   |- process.sh

./python2.7

  |-bin
  |-include

3)在实例启动时解压python2.7.tar.gz到script同一级目录
./script
./python2.7
4)在shell中确定当前目录

cwd=$(cd `dirname $0` && pwd)

3) 然后确定python的目录,启动python脚本

python_path=${cwd}/../python2.7
PATH=${python_path}:${PATH}    
python xxx.py   

通常情况下这种写法没有问题,我可以正确地找到python

但是,在上线的过程中,script不再是一个真实的目录,而是一个软链

./script -> /home/xxx/xxxx/script

这种时候,我作同样的解压操作,得到如下目录结构:

./script -> /home/xxx/xxxx/script
./python2.7.tar.gz
./python2.7

接下来的操作:

    cwd=$(cd `dirname $0` && pwd)
    python_path=${cwd}/../python2.7/bin
    PATH=${python_path}:${PATH}    
    python xxx.py   

直接报错
python: command not found

看出问题了么?

对!问题出在软链上(查了好久。。。)

pwd
-> /home/work   
cd script
cd ..
pwd
-> /home/work   
cd 命令中包含软链

没问题啊, script/.. 还是当前路径啊,应该能找到 python2.7目录啊

错!错!错! 尴尬。。

上面的实践并不能说明在 ${cwd}/../python2.7/bin路径中找到python

原因在于cd命令的特殊性,cd会默认跟随软链(follow symbolic link),即软链自身的路径,而不是链接到的目标的路径,但是当我们查看软链或者包含软链的路径下的内容时,系统会自动定位软链链接的目标路径,也就是

ls script/..
-> xxxx                        (IS this)
-> python2.7.tar.gz python2.7/ (NOT this)   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值