记一次使用java操作linux命令经历
需求:在本地生成文件后,通过linux命令生成校验文件(字节码,字节数,文件名),使用命令cksum fileName > jiaoYanFile来生成校验文件
第一次接触这个命令,经过linux系统验证后,需要首先到达文件所在路径,然后使用上述命令即可,上网查询java写linux命令,很多文章,直接拿过来使用,由于本地是windows,部署到测试服务器后方可验证,结果每次验证不是未执行就是没有权限,耽误了很多时间。
例如以下这个问题:
Cannot run program “java”:error=2,No such file or direct
找了很多解决方案都没有解决,文件路径正确存在,权限也正常有,命令也没错,就是执行就出错,估计还是当时执行的方法写的不对吧,最后终于找到一个可以正确执行的方法
public static boolean executeLinux(String[] command){
try {
log.info("executeLinux param:{}", Arrays.toString(command));
Runtime currentRT = Runtime.getRuntime();
Process proc = currentRT.exec(command);
int result = proc.waitFor(); //执行
log.info("executeLinux result:{}",result);
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return true;
}
public static void main(String[] args) {
String[] commands = new String[]{"/bin/sh", "-c",new StringBuffer("cd /文件路径 ; cksum 文件名 > 校验文件名").toString()};
executeLinux(commands);
}
其中command是linux命令,数组只能三个参数,前两个是固定的,第三个是要执行的命令,如果把命令拆成两个,第二个命令放到数组第四个参数就无法执行,中间使用“;”分开,不需要引入任何依赖,全是jdk自带的。