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命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Gitlab CI-CD自动化部署SpringBoot项目的方法步骤
本文主要记录如何通过Gitlab CI/CD自动部署SpringBoot项目jar包。文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2021-07-07Spring Boot深入学习数据访问之Spring Data JPA与Hibernate的应用
Spring Data JPA是Spring Data的子项目,在使用Spring Data JPA之前,先了解一下Hibernate,因为Spring Data JPA是由Hibernate默认实现的2022-10-10Spring Boot使用Redisson实现滑动窗口限流的项目实践
滑动窗口限流是一种流量控制策略,用于控制在一定时间内的请求频率,本文主要介绍了Spring Boot使用Redisson实现滑动窗口限流的项目实践,具有一定的参考价值,感兴趣的可以了解一下2024-03-03mapstruct的用法之qualifiedByName示例详解
qualifiedByName的意思就是使用这个Mapper接口中的指定的默认方法去处理这个属性的转换,而不是简单的get set,今天通过本文给大家介绍下mapstruct的用法之qualifiedByName示例详解,感兴趣的朋友一起看看吧2022-04-04Spring boot security权限管理集成cas单点登录功能的实现
这篇文章主要介绍了Spring boot security权限管理集成cas单点登录,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2022-03-03Java System.currentTimeMillis()时间的单位转换与计算方式案例详解
这篇文章主要介绍了Java System.currentTimeMillis()时间的单位转换与计算方式案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下2021-08-08SpringBoot中干掉Whitelabel Error Page返回自定义内容的实现
这篇文章主要介绍了SpringBoot中干掉Whitelabel Error Page返回自定义内容的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2021-01-01
最新评论