Java操作Linux工具类 引言 Linux是一种常用的操作系统,在日常开发和运维工作中,我们经常需要通过Java程序来操作Linux系统的一些工具和命令。本文将介绍如何使用Java操作Linux工具类,包
Java操作Linux工具类
引言
Linux是一种常用的操作系统,在日常开发和运维工作中,我们经常需要通过Java程序来操作Linux系统的一些工具和命令。本文将介绍如何使用Java操作Linux工具类,包括调用系统命令、执行Shell脚本、远程连接等。
调用系统命令
Java提供了Runtime
类和ProcessBuilder
类,可以方便地调用系统命令。
使用Runtime
类执行系统命令的代码示例:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class CommandExecutor {
public static void main(String[] args) {
String command = "ls -l";
try {
Process process = Runtime.getRuntime().exec(command);
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
使用ProcessBuilder
类执行系统命令的代码示例:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.List;
public class CommandExecutor {
public static void main(String[] args) {
ProcessBuilder processBuilder = new ProcessBuilder("ls", "-l");
try {
Process process = processBuilder.start();
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
执行Shell脚本
除了调用系统命令,我们还可以使用Java执行Shell脚本。
使用Java执行Shell脚本的代码示例:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
public class ShellExecutor {
public static void main(String[] args) {
String command = "sh script.sh";
try {
Process process = Runtime.getRuntime().exec(command);
InputStream inputStream = process.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
远程连接
有时候我们需要通过Java程序与远程Linux服务器进行交互,可以借助SSH协议进行远程连接。
使用Java进行远程连接的代码示例:
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Properties;
public class SSHExecutor {
public static void main(String[] args) {
String host = "192.168.0.100";
String username = "root";
String password = "123456";
int port = 22;
try {
JSch jSch = new JSch();
Session session = jSch.getSession(username, host, port);
session.setPassword(password);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.connect();
Channel channel = session.openChannel("exec");
((ChannelExec) channel).setCommand("ls -l");
InputStream inputStream = channel.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
channel.disconnect();
session.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
}
}
类图
使用Mermaid语法绘制的类图如下所示:
classDiagram
class Runtime {
+exec(String command) : Process
}
class Process {
+getInputStream() : InputStream
+getErrorStream() : InputStream
}
class InputStream {
+readLine() : String
}
class BufferedReader {
+BufferedReader(InputStreamReader in) : void
+readLine() : String
+close() : void
}
class ProcessBuilder {
+ProcessBuilder(String... command) : void
+start() : Process
}
class Channel {
+getInputStream() : InputStream
+getOutputStream() : OutputStream
}
class ChannelExec {
+setCommand(String command) : void
}
class JSch {
+getSession(String username, String host, int port) : Session
}