关于Java运行Linux命令需要root权限问题

其实这个问题就是对小白不是很友好,百度上基本都是一个答案就是用Runtime().getRuntime().exec("/bin/bash/","-c","chmod 777 fileName"),当然当这个文件属于当前用户的时候这个命令是可以执行的,但当这个文件属于root用户,那么就会操作失败,原因也很简单就是当前用户无权限修改root用户的文件权限,如图

那么就需要使用sudo chmod 777 test1.sh。来修改文件的执行权限,这个操作需要用户输入密码才会被允许执行,但是我们使用Java来直接执行Linux命令是无法手动输入密码的,在思考之后,发现Linuxshell脚本文件中可以直接输入密码,而且在运行shell脚本时是可以从外部进行传参的,因此可以使用Java来运行Linux中的某个脚本并把需要修改的文件的全路径加文件名当作参数传递进去,就可以完成对root用户文件的权限修改,例如我在/home/xiaoxu/Desktop/test/下编写了一个changeMode.sh的可执行脚本,脚本内容为

此时使用Java执行这个脚本,并在执行的同时将需要修改权限的文件名当作参数传递进去就可以完成权限的修改,具体代码如下

private List executeCommand(String filePath, String command) {

        int runStatus = 0;//命令执行的状态码,除0外都是运行失败,具体数字对应Linux的错误码

        List list = new ArrayList<>();//定义一个数组用来存储命令执行结果

        List errList = new ArrayList<>();//用来存储命令执行失败的结果

        ProcessBuilder builder = new ProcessBuilder(command);//使用ProcessBuilder来运行Linux命令

        Process process = null;

        builder.directory(new File(filePath));//Linux命令执行环境

        try {

            process = builder.start();//开始执行,返回的是一个Process对象,通过这个对象可以读取执行结果

            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));

            BufferedReader error = new BufferedReader(new InputStreamReader(process.getErrorStream()));

            String line = "";

            while ((line = reader.readLine()) != null) {

                list.add(line);

            }

            String errorStr = "";

            while ((errorStr = error.readLine()) != null)

                errList.add(errorStr);

            runStatus = process.waitFor();

            System.out.println(runStatus);

        } catch (IOException | InterruptedException e) {

            list.add(e.getMessage());

            list.add("请检查你的命令或shell文件的正确性!或许是权限不足的问题");

        } finally {

            if (process != null) {

                process.destroy();

            }

        }

       return list;

    }

executeCommand( filePath, command);

filePath是上面说的修改权限的脚本路径,command是该脚本的名字加上需要修改的文件全路径加名称。

纯属自己研究出来的,如果还用同学不明白,可以留言,我也是小白,可以一起研究。。。。。

你可能感兴趣的:(关于Java运行Linux命令需要root权限问题)