Jav程序执行Linux命令
方法一:
本地执行,也是是代码必须放在Lunix服务器上才能通过java代码执行Linux命令。
package com.xdja.dsc.common.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @ClassName: ExecuteLinuxCommandUtils * @Description: 执行Linux命令工具类 * @author niugang * @date 2018年8月30日 */ public class ExecuteLinuxCommandUtils { private static Logger logger = LoggerFactory.getLogger(ExecuteLinuxCommandUtils.class); /** * 执行命令如:<br> * cd /usr/local/openresty/nginx/conf/ngx_conf/ && tar czf /tmp/ngx.tar.gz * <br> * cp /usr/local/openresty/nginx/conf/nginx.conf /tmp <br> * @param command:执行命令 * @return * @author niugang * @date 2018年8月30日 * @throws NullPointerException */ public static String exc(String command) { String result = null; Process ps = null; BufferedReader br = null; try { if (command == null || "".equals(command)) { throw new NullPointerException("command is not null"); } List<String> comList = new ArrayList<String>(3); comList.add("/bin/sh"); comList.add("-c"); comList.add(command); logger.info("execute command is:{}", comList.toString()); String[] commandArray = comList.toArray(new String[comList.size()]); ps = Runtime.getRuntime().exec(commandArray); ps.waitFor(); br = new BufferedReader(new InputStreamReader(ps.getInputStream())); StringBuffer sb = new StringBuffer(); String line; while ((line = br.readLine()) != null) { sb.append(line).append("\n"); } result = sb.toString(); br.close(); logger.info("execute linux command result:{}", result); } catch (Exception ex) { logger.error("execute linux command error:{}", ex); } finally { if (br != null) { try { br.close(); } catch (IOException e) { e.printStackTrace(); } } } return result; } }
方法二:远程连接
pom.xml
<!--操作ssh --> <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>0.1.50</version> </dependency>
代码:
package com.xdja.dsc;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import com.jcraft.jsch.ChannelShell;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
/**
*
* @ClassName: TestSsh
* @Description: ssh测试
* @author niugang
* @date 2018年8月28日
*/
public class TestSsh {
/**
* 远程执行JSch
* @param args
* @throws JSchException
* @throws IOException
* @author niugang
* @date 2018年8月30日
* @throws
*/
public static void main(String[] args) throws JSchException, IOException {
JSch jsch = new JSch();
Session session = jsch.getSession("root", "11.12.115.206", 22);
session.setPassword("123456");
session.setConfig("StrictHostKeyChecking", "no");
session.setConfig("userauth.gssapi-with-mic", "no");
session.connect();
ChannelShell channel = (ChannelShell) session.openChannel("shell");
channel.connect();
InputStream inputStream = channel.getInputStream();
OutputStream outputStream = channel.getOutputStream();
String cmd2 = "cd /home/xdja \n\r";
outputStream.write(cmd2.getBytes());
String cmd = "ll \n\r";
outputStream.write(cmd.getBytes());
outputStream.flush();
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
String msg = null;
while ((msg = in.readLine()) != null) {
String encoding = getEncoding(msg);
System.out.println(new String(msg.getBytes(encoding), encoding));
}
in.close();
}
public static String getEncoding(String str) {
String encode = "GB2312";
try {
if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是GB2312
String s = encode;
return s; // 是的话,返回“GB2312“,以下代码同理
}
encode = "ISO-8859-1";
if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是ISO-8859-1
String s1 = encode;
return s1;
}
encode = "UTF-8";
if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是UTF-8
String s2 = encode;
return s2;
}
encode = "GBK";
if (str.equals(new String(str.getBytes(encode), encode))) { // 判断是不是GBK
String s3 = encode;
return s3;
}
} catch (Exception exception3) {
}
return "";
}// 如果都不是,说明输入的内容不属于常见的编码
}
微信公众号


浙公网安备 33010602011771号