java远程执行命令报错java.io.IOException: Cannot run program “ifconfig“: error=2, No such file or directory

直接执行ifconfig没问题,但是在java代码里远程执行ifconfig就找不到命令。

session = conn.openSession();
session.execCommand(cmd);

// Cannot run program "ifconfig": error=2, No such file or directory

解决办法:

在 用户的  home 目录下的 文件 .bashrc 加入
export PATH=$PATH:/sbin 
然后执行
source   .bashrc  就可以执行 ifconfig 命令了

解决办法二:

在用户目录的.bashrc文件里加上 source /etc/profile

 

原因分析:java远程执行shell应该是非登录shell。非登录shell与登录shell加载的配置文件不同,环境变量不同。

因为非登录shell方式的 .bashrc中的path没有将/sbin目录加入到path中,导致找不到下面的ifconfig命令。只要在用户.bashrc文件中将/sbin目录配置上就行了。

区分方法
如何区分登录 shell 和非登录 shell 呢,可以通过查看 $0 的值,登录 shell 返回 -bash,而非登录 shell 返回的是 bash 。

注意:
执行 exit 命令, 退出的 shell 可以是登录 或者 非登录 shell ;
执行 logout 命令,则只能退出登录 shell,不能退出非登录 shell 
 

附录:登录shell和非登录shell的区别

登录shell配置

  • 用户登陆时,输入用户名和密码后启动的shell
  • 通过带--login参数的命令:bash  --login而启动的shell
  • 加载文件顺序
    • 1. ~/.bash_profile
    • 2. ~/.bash_login
    • 3. ~/.profile
  • 加载
    • 登录即加载
    • 主动加载
      • source
      • .

 

非登陆shell配置

  • ~/.bashrc
    • /etc/bashrc
  • 用户登录后,直接运行bash命令启动的shell
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值