java调用sudo命令_java:执行linux sudo命令

我们知道java中执行控制台命令,都是通过 Runtime.exec系列方法。

如果要执行root权限的命令需要用到sudo,需要输入sudo密码,这个也好解决,使用echo可以向sudo输入密码,同时sudo要加-S参数指定从标准输入读取密码,示例如下:

echo ‘sudopassword’ | sudo -S cat /etc/profile

但是在java中通过 Runtime.exec方法执行上面的命令,还是会无效。错误提示可能是。

sudo:抱歉,您必须拥有一个终端来执行 sudo

sudo: sorry, you must have a tty to run sudo

sudo:没有终端存在,且未指定 askpass 程序

sudo: no tty present and no askpass program specified

解决这个问题需要修改/etc/sudoers

# 给 sudoers 增加写权限

sudo chmod +w /etc/sudoers

# 编辑 sudoers

vi /etc/sudoers

找到 Defaults requiretty改为Defaults !requiretty或者直接注释掉#Defaults requiretty

找到Defaults !visiblepw改为Defaults visiblepw或者增一行 Defaults visiblepw

如下图。

0818b9ca8b590ca3270a3433284dd417.png

修改后 wq保存,记得要sudo chmod -w /etc/sudoers删除写权限

为了简化sudo命令的执行,我封装一了个CmdExceuor类,允许执行多条命令。

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.LineNumberReader;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.Collections;

import java.util.List;

import java.util.logging.Logger;

/** * linux命令行执行器 *@a

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值