Java执行Linux命令简单代码举例
更新时间:2023年12月09日 10:39:06 作者:baihb1024
这篇文章主要给大家介绍了关于Java执行Linux命令的相关资料,在开发的过程中要善于利用JAVA面向对象编程的优势,与Linux/Unix命令或Shell脚本的优势,并将二者相结合,需要的朋友可以参考下
一、本地执行 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 != null) 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.out.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> <artifactId>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命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java使用pulsar-flink-connector读取pulsar catalog元数据代码剖析
这篇文章主要介绍了Java使用pulsar-flink-connector读取pulsar catalog元数据代码剖析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-08-08springboot max-http-header-size最大长度的那些事及JVM调优方式
这篇文章主要介绍了springboot max-http-header-size最大长度的那些事及JVM调优方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-09-09使用Maven Archetype插件构建Maven工程原型模板的实例
下面小编就为大家分享一篇使用Maven Archetype插件构建Maven工程原型模板的实例,具有很好的参考价值,希望对大家有所帮助2017-12-12Spring Data JPA实现排序与分页查询超详细流程讲解
在介绍Spring Data JPA的时候,我们首先认识下Hibernate。Hibernate是数据访问解决技术的绝对霸主,使用O/R映射技术实现数据访问,O/R映射即将领域模型类和数据库的表进行映射,通过程序操作对象而实现表数据操作的能力,让数据访问操作无须关注数据库相关的技术2022-10-10
最新评论