忆枫Ing 2018-07-05 06:14 采纳率: 0%
浏览 1818
已结题

java远程执行linux命令?

笔者之前用java写了一个远程连接执行Linux命令的工具,之前的命令都可以正常执行,最近公司搭建了一个hadoop环境,但是当我
去执行hadoop命令的时候它却告诉我说:bash: hadoop: command not found
(但是xshell工具是可以执行的),报了这个错我就在网上百度了,我按照网上说的检查了etc\profile文件,没有问题,后来我又修改了一hadoop的配置文件,最后结果还是这样的,所以我觉得是我写的代码里面可能是却什么东西,代码如下:
package com.qykj.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;
/**

  • @类功能说明:
  • @类修改者:
  • @修改日期:
  • @修改说明:
  • @公司名称:青云科技
  • @作者:wxj
  • @Email:18772118541@163.com
  • @TEL:18772118541
  • @创建时间:2017-12-22 下午5:25:12
  • @版本:V1.0
    */
    public class XshellUtil {

    // 代码执行-远程shell,8
    /**

    • @方法说明:对获取的linux控制台上的数据进行解析,封装
    • @方法名称:urlCharset
    • @作者:wxj
    • @param str
    • @return
    • @创建时间:2017-12-23 下午2:48:16 */ public static List dataAnalysis(String str) { List list = new ArrayList(); String[] split = str.split("\n");//将字符串用回车符给分割成字符串数组 for (String string : split) { if (string.contains("+ ERROR: /")) {//判断是不是错误信息,如果里面包含+ ERROR: /就是错误信息 int start = string.indexOf("+ ERROR: /") + "+ ERROR: /".length(); String substring = string.substring(start, start + 1); //返回的错误信息里面有的没有任务价值的错误信息,这里我们通过判断+ ERROR: / //后面的一个字符是不是空格,如果是,那么这就是一条没用价值的,如果不是,我们就给它用一个list集合装进来,返回去 if (!substring.equals(" ")) { int end = string.indexOf("returned");//在这条错误信息的有一段是没有用的信息,我们需要把那一段给它截掉 //而它的分割点就是returned 前面的就是我们真正所需要的错误信息 substring = string.substring(start, end); if(!list.contains(substring)){ list.add(substring.trim()); } } } } return list; }

    /**

    • @方法说明:通过一个连接,用户名,密码,nikto的命令,获取这个命令在linuxdos窗口里面打印出来的东西
    • 用一个String 类型的东西返回去
    • @方法名称:getCommondMsg
    • @作者:wxj
    • @param conn
    • @param username
    • @param password
    • @param commond
    • @return
    • @throws IOException
    • @创建时间:2017-12-23 下午12:17:02
      */
      public static String getCommondMsg(Connection conn,String commond,boolean isAuthenticated) throws IOException {
      StringBuffer sb = new StringBuffer("");

      if (isAuthenticated == false)
      throw new IOException("Authentication failed.");
      // 创建一个session
      Session sess = conn.openSession();
      // 执行linux命令
      sess.execCommand(commond);
      // 建立一个输入流
      InputStream stdout = new StreamGobbler(sess.getStdout());
      // 建立一个字节流
      BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
      while (true) {
      String line = br.readLine();
      if (line == null)
      break;
      sb.append(line.trim() + "\n");
      }
      br.close();
      stdout.close();
      // 关闭session
      sess.close();
      return sb.toString();
      }

    /**

    • @方法说明:创建一个linux的连接
    • @方法名称:getLinuxConnect
    • @作者:wxj
    • @param hostname
    • @return
    • @创建时间:2017-12-23 下午2:46:26 */ public static Connection getLinuxConnect(String hostname) { Connection conn = new Connection(hostname); return conn; } }

知道问题的麻烦告知。谢谢!

  • 写回答

11条回答 默认 最新

  • lly_1277146430 2018-07-05 06:26
    关注

    很多命令都用不到,常用的也就那么几种

    评论

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R