开发者

Java执行Linux命令简单代码举例

目录
  • 一、本地执行 linux 命令
    • 1. 执行单条命令
    • 2. 执行含有管道符(|)的多级命令
    • 3. 执行多条命令
  • 二、远程执行 Linux 命令
    • 总结 

      一、本地执行 Linux 命令

      1. 执行单条命令

      import Java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.InputStreamReader;
      
      public class ShellUtil {
      
          public void execCmd(String cmd) throws IOException {
              Runtime run = Runtime.getRuntime();
              Process proc = null;
              BufferedReader br = null;
              InputStream in = null;
      
              try {
                  proc = run.exec(cmd, null, null);
                  in = proc.getInputStream();
                  br = new BufferedReader(new InputStreamReader(in));
      
                  String result;
                  while ((result = br.readLine()) != null) {
                      System.out.println("job result [" + result + "]");
                  }
      
                  proc.waitFor();
              } catch (Exception e) {
                  e.printStackTrace();
              } finally {
                  if (proc != null)
                      proc.destroy();
                  if (in != null)
                      in.close();
                  if (br != jsnull)
                      br.close();
              }
          }
      }
      

      2. 执行含有管道符(|)的多级命令

      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.InputStreamReader;
      import java.util.ArrayList;
      import java.util.List;
      
      public class ShellUtil {
      
          public List<String> execCmd(String cmd) throws IOException {
              List<String> list = new ArrayList<>();
              Runtime run = Runtime.getRuntime();
              Process proc = null;
              BufferedReader br = null;
              InputStream in = null;
      
              try {
                  proc = run.exec(new String[]{"/bin/sh", "-c", cmd});
                  in = proc.getInputStream();
                  br = new BufferedReader(new InputStreamReader(in));
      
                  String result;
                  while ((result = br.readLine()) != null) {
                      System.out.println("job result [" + result + "]");
                      list.add(result);
                  }
      
                  proc.waitFor();
                  return list;
              } catch (Exception e) {
                  e.printStackTrace();
              } finally {
                  if (proc != null)
                      proc.destroy();
                  if (in != null)
                      in.close();
                  if (br != null)
                      br.close();
              }
              return list;
          }
      }
      

      3. 执行多条命令

      import java.io.*;
      import java.util.ArrayList;
      import java.util.List;
      
      public class ShellUtil {
      
          /**
           * 命令集合
           */
          public static List<String> getCommandList() {
              String path = "/root";
              List<String> commands = new ArrayList<>();
              commands.add("cd " + path);
              commands.add("ls");
              return commands;
          }
      
      
         编程客栈 /**
           * 执行命令
           */
          public static List<String> execCommands(List<String> commands) throws IOException {
              List<String> list = new ArrayList<>();
              Runtime run = Runtime.getRuntime();
              Process proc = null;
              BufferedReader in = null;
              PrintWriter out = null;
      
              try {
                  proc = run.exec("/bin/bash", null, null);
                  in = new BufferedReader(new InputStreamReader(proc.getInputStream()));
                  out = new PrintWriter(new Bufferedwriter(new OutputStreamWriter(proc.getOutputStream())), true);
      
                  // 写入执行命令
                  for (String line : commands) {
                      out.println(line);
                  }
                  // 这个命令必须执行,否则 in 流不结束
                  out.println("exit");
      
                  String line;
                  while ((line = in.readLine()) != null) {
                      System.outhttp://www.devze.com.println("readLine: " + line);
                      list.add(line);
                  }
      
                  // 释放资源
                  proc.waitFor();
              } catch (Exception e) {
                  e.printStackTrace();
              } finally {
                  if (proc != null)
                      proc.destroy();
                  if (in != null)
                      in.close();
                  if (out != null)
                      out.close();
              }
              return list;
          }
      }
      

      二、远程执行 Linux 命令

      <dependency>编程
          <groupId>ch.ethz.ganymed</groupId>
          <aphprtifactId>ganymed-ssh2</artifactId>
          <version>262</version>
      </dependency>
      
      import ch.ethz.ssh2.Connection;
      import ch.ethz.ssh2.Session;
      import ch.ethz.ssh2.StreamGobbler;
      
      import java.io.BufferedReader;
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.InputStreamReader;
      
      public class LinuxUtil {
          public static void main(String[] args) {
      
              String hostname = "127.0.0.1";
              String username = "root";
              String password = "123456";
      
              try {
                  Connection conn = new Connection(hostname);
                  conn.connect();
                  boolean isAuthenticated = conn.authenticateWithPassword(username, password);
                  if (!isAuthenticated) {
                      throw new IOException("Authentication failed");
                  }
                  Session sess = conn.openSession();
      
                  // 命令语句,必须使用绝对路径否则无效(环境变量也不可以)。如:java --version
                  sess.execCommand("pwd");
      
                  InputStream stdout = new StreamGobbler(sess.getStdout());
                  BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
                  while (true) {
                      String line = br.readLine();
                      if (line == null) {
                          break;
                      }
                      
                      // 输出命令执行结果
                      System.out.println(line);
                  }
                  sess.close();
                  conn.close();
              } catch (IOException e) {
                  e.printStackTrace(System.err);
                  System.exit(2);
              }
          }
      }

      总结 

      到此这篇关于Java执行Linux命令的文章就介绍到这了,更多相关Java执行Linux命令内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

      0

      上一篇:

      下一篇:

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      最新开发

      开发排行榜