`
qindongliang1922
  • 浏览: 2183280 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117508
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:125908
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:59878
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71284
社区版块
存档分类
最新评论

JAVA执行shell命令小工具

阅读更多
在我们的项目中,大部分环境的服务器用的都是Linux,从而使用JAVA与Linux shell通讯,就成了一项很常见的事情。

Ganymed SSH是一个Java实现SSH的项目
Java 实现SSH协议的项目有很多,如JFTP,trilead SSH,JSCH,ganymed SSH等
下面我们主要说的是关于ganymed SSH的一些小使用。
Ganymed SSH-2 for Java是用纯Java实现SSH-2协议的一个项目。可以通过它直接在Java程序中连接SSH服务器,实现基于SSH协议的服务访问。 如远程命令执行和shell访问,本地和远程端口转发,本地数据流转发,X11转发,SCP,SFTP等功能。



散仙测试的demo如下:

package com.qin.shell;

 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import org.mortbay.log.Log;
 

import ch.ethz.ssh2.Connection;
import ch.ethz.ssh2.Session;
import ch.ethz.ssh2.StreamGobbler;

public class ExecShell{
	private String IP;//要远程登录的IP地址
	private String username;//用户名
	private String password;//密码
	
	public ExecShell(String IP, String username,String password){
		this.IP=IP;
		this.username=username;
		this.password=password;
	}
	
	//命令执行
	public boolean exec( String command ) throws InterruptedException{
		Log.info("command: "+command);
		boolean rtn = false;
		try {
			Connection conn = new Connection(IP);
			conn.connect();
			boolean isAuthenticated = conn.authenticateWithPassword(username, password);
			if (isAuthenticated == false){
				throw new IOException("Authentication failed.");
			}
			Session sess = conn.openSession();
			sess.execCommand(command);
			
			InputStream stdout = new StreamGobbler(sess.getStdout());
			BufferedReader br = new BufferedReader(new InputStreamReader(stdout));
			
			InputStream stderr = new StreamGobbler(sess.getStderr());
			BufferedReader stderrReader = new BufferedReader(new InputStreamReader(stderr));
			
			String line = null;
			while ( (line = br.readLine())!=null )
			{
				Log.info("GanyMedUtil out> "+line);
			}
			
			while (true)
			{
				line = stderrReader.readLine();
				if (line == null)
					break;
				Log.info("GanyMedUtil out> "+line);
			}
			
			/* Show exit status, if available (otherwise "null") */  
			Log.info("ExitCode: " + sess.getExitStatus()+" "+IP+":"+command);
			sess.close();
			conn.close();
			rtn = new Integer(0).equals(sess.getExitStatus());
			return rtn;
		}
		catch (IOException e)
		{
			Log.warn("Error ......................",e);
			e.printStackTrace();
			System.exit(2);
			return rtn;
		}
	}

 
	
	
	
	public static void main(String[] args) throws InterruptedException {
	
		ExecShell es = new ExecShell("192.168.75.130","root","dongliang");
		System.out.println("==========================================单个命令测试执行==========================================");
		es.exec("ls");//执行单行命令
		System.out.println("==========================================多个命令测试执行==========================================");
		es.exec("cd /root/apache-nutch-1.8/ && ls && date");//多个命令之间使用&&隔开
		//ganyMedUtil.execMoreShellCommand("");
		//ganyMedUtil.exec("ls");
	
	}

}

输出的内容如下所示:
2014-05-28 15:27:19.076:INFO::Logging to STDERR via org.mortbay.log.StdErrLog
2014-05-28 15:27:19.076:INFO::command: ls
2014-05-28 15:27:19.454:INFO::GanyMedUtil out> 2
2014-05-28 15:27:19.454:INFO::GanyMedUtil out> abc.txt
2014-05-28 15:27:19.454:INFO::GanyMedUtil out> anaconda-ks.cfg
2014-05-28 15:27:19.454:INFO::GanyMedUtil out> apache-ant-1.9.2
2014-05-28 15:27:19.454:INFO::GanyMedUtil out> apache-ant-1.9.2-bin.tar.gz
2014-05-28 15:27:19.454:INFO::GanyMedUtil out> apache-nutch-1.8
2014-05-28 15:27:19.454:INFO::GanyMedUtil out> apache-nutch-1.8-src.zip
2014-05-28 15:27:19.454:INFO::GanyMedUtil out> a.sh
2014-05-28 15:27:19.454:INFO::GanyMedUtil out> bb.sh
2014-05-28 15:27:19.454:INFO::GanyMedUtil out> b.sh
2014-05-28 15:27:19.454:INFO::GanyMedUtil out> case.sh
2014-05-28 15:27:19.454:INFO::GanyMedUtil out> cip.sh
2014-05-28 15:27:19.454:INFO::GanyMedUtil out> c.sh
2014-05-28 15:27:19.454:INFO::GanyMedUtil out> date
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> d.sh
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> e.sh
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> f.sh
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> ganglia_20140327155418.zip
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> ganglia-3.1.7-3.el6.rf.x86_64.rpm
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> ganglia-devel-3.1.7-3.el6.rf.x86_64.rpm
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> ganglia-gmetad-3.1.7-3.el6.rf.x86_64.rpm
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> ganglia-gmond-3.1.7-3.el6.rf.x86_64.rpm
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> ganglia-gmond-python-3.1.7-3.el6.rf.x86_64.rpm
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> ganglia-web-3.1.7-3.el6.rf.x86_64.rpm
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> gg.sh
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> hadoop1.2
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> hadoop-1.2.0.tar.gz
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> installganglia.sh
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> install.log
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> install.log.syslog
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> jdk1.7
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> jdk-7u51-linux-x64.tar.gz
2014-05-28 15:27:19.455:INFO::GanyMedUtil out> jmxtrans-20121016.145842.6a28c97fbb-0.noarch.rpm
2014-05-28 15:27:19.456:INFO::GanyMedUtil out> libconfuse-2.7-6.2.x86_64.rpm
2014-05-28 15:27:19.456:INFO::GanyMedUtil out> libevent-2.0.21-stable
2014-05-28 15:27:19.456:INFO::GanyMedUtil out> libevent-2.0.21-stable.tar.gz
2014-05-28 15:27:19.456:INFO::GanyMedUtil out> memcached-1.4.15
2014-05-28 15:27:19.456:INFO::GanyMedUtil out> memcached-1.4.15.tar.gz
2014-05-28 15:27:19.456:INFO::GanyMedUtil out> my.sh
2014-05-28 15:27:19.456:INFO::GanyMedUtil out> pp
2014-05-28 15:27:19.456:INFO::GanyMedUtil out> solr-4.3.1.tgz
2014-05-28 15:27:19.456:INFO::GanyMedUtil out> test.jar
2014-05-28 15:27:19.456:INFO::GanyMedUtil out> test.py
2014-05-28 15:27:19.456:INFO::GanyMedUtil out> zookeeper
2014-05-28 15:27:19.456:INFO::GanyMedUtil out> zookeeper.zip
2014-05-28 15:27:19.456:INFO::ExitCode: 0 192.168.75.130:ls
==========================================多个命令测试执行==========================================
2014-05-28 15:27:19.458:INFO::command: cd /root/apache-nutch-1.8/ && ls && date
2014-05-28 15:27:19.789:INFO::GanyMedUtil out> bb.sh
2014-05-28 15:27:19.789:INFO::GanyMedUtil out> build
2014-05-28 15:27:19.789:INFO::GanyMedUtil out> build.xml
2014-05-28 15:27:19.789:INFO::GanyMedUtil out> CHANGES.txt
2014-05-28 15:27:19.789:INFO::GanyMedUtil out> conf
2014-05-28 15:27:19.789:INFO::GanyMedUtil out> default.properties
2014-05-28 15:27:19.789:INFO::GanyMedUtil out> docs
2014-05-28 15:27:19.789:INFO::GanyMedUtil out> ivy
2014-05-28 15:27:19.789:INFO::GanyMedUtil out> lib
2014-05-28 15:27:19.789:INFO::GanyMedUtil out> LICENSE.txt
2014-05-28 15:27:19.789:INFO::GanyMedUtil out> NOTICE.txt
2014-05-28 15:27:19.789:INFO::GanyMedUtil out> README.txt
2014-05-28 15:27:19.789:INFO::GanyMedUtil out> runtime
2014-05-28 15:27:19.789:INFO::GanyMedUtil out> src
2014-05-28 15:27:19.790:INFO::GanyMedUtil out> 2014年 05月 28日 星期三 23:27:19 CST
2014-05-28 15:27:19.790:INFO::ExitCode: 0 192.168.75.130:cd /root/apache-nutch-1.8/ && ls && date


能够在在应用程序中,执行shell脚本是非常有用的,我们可以自己写一个shell脚本,把多个shell命令,封装起来,然后执行一次shell即可。
分享到:
评论

相关推荐

    java连接linux,执行shell命令的工具类 sshxcute.jar

    在Java开发中,有时我们需要远程连接到Linux服务器执行shell命令,比如进行系统管理、自动化运维或者数据处理等任务。在这种情况下,使用SSH(Secure Shell)协议是常见的解决方案,因为它提供了安全的网络通信。...

    shell,bat脚本运行java程序

    在IT行业中,shell脚本和bat脚本是两种常见的批处理工具,用于自动化执行一系列操作系统命令。当需要定期或按需运行Java程序时,利用这两种脚本语言可以极大地提高工作效率。下面将详细介绍如何使用shell脚本(适用...

    shell脚本启动Java程序测试工程

    在IT行业中,shell脚本是Linux或Unix操作系统中的一种强大工具,用于自动化任务执行和系统管理。当涉及到启动Java应用程序时,shell脚本可以提供一个方便、可重复且灵活的方法。下面我们将深入探讨如何使用shell脚本...

    shell 脚本调用Java类

    运行Shell脚本,使用`./InitData.sh`命令。如果一切配置正确,你将在终端看到"Hello, World!"的输出。 在实际应用中,可能会有更复杂的Java程序,例如需要传递参数、处理异常等。在Shell脚本中,你可以通过`java`...

    java 执行cmd命令及mongodb脚本

    Java执行CMD命令及MongoDB脚本是开发过程中常见的任务,特别是在集成系统或者自动化运维场景下。下面将详细讲解这两个主题。 一、Java执行CMD命令 在Java中,我们可以使用Runtime类或ProcessBuilder类来执行操作...

    java 远程调用Shell脚本客户端包

    Java 远程调用Shell脚本客户端包是一个实用的工具,专为开发者设计,使得在Java应用程序中执行远程Shell命令变得简单而高效。这个包的主要功能是通过Java代码发起对远程服务器上的Shell脚本的调用,从而实现跨平台的...

    Java 调用 Linux shell 命令执行框架:sshxcute

    sshxcute 就是这样一个框架工具集,它基于 JSCH 构建,允许工程师利用Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种实用功能。sshxcute 不管是针对...

    Android中级篇之用JAVA代码执行shell命令.rar_Android 执行shell_android_effectoh

    二、Java执行Shell命令的方法 1. `Runtime.getRuntime().exec()`: 这是最常用的方法,通过Runtime类的`exec()`方法可以执行shell命令。例如: ```java Process process = Runtime.getRuntime().exec("ls /sdcard")...

    android执行shell命令

    2. **Runtime.exec()**:在Android应用程序中,可以通过Java的Runtime类的exec()方法来执行shell命令。例如: ```java Process process = Runtime.getRuntime().exec("ls /sdcard"); ``` 这将在设备上执行`ls /...

    java在win下启动bat和在linux下启动shell脚本

    这个工具类可能使用了Java的`Runtime`或者`ProcessBuilder`类来执行外部命令。 `Runtime.getRuntime().exec()`方法可以用来执行系统命令,但它的使用需要注意错误流和输出流的处理,否则可能会阻塞程序的执行。这...

    java调用shell脚本

    总的来说,这些资源为你提供了在Java环境中调用Shell脚本所需要的基础工具和示例,涵盖了SSH连接、命令执行和交互式脚本控制。通过学习和使用这些库,你将能够构建强大的系统管理工具和自动化解决方案。

    (接上篇博客)Java SSH远程执行Shell脚本实现

    通过通道的输入流,我们可以发送Shell命令,例如执行一个脚本。 ```java OutputStream commandStream = channel.getOutputStream(); PrintWriter writer = new PrintWriter(commandStream, true); writer.println...

    android 给app授权 执行shell命令

    这些库提供了API,让你能够在运行时请求Root权限,并在获得批准后执行shell命令。例如,使用SuperSU库,你可以调用`SuManager.requestSuPermissions()`来请求权限,然后在回调中处理结果。 4. **执行Shell命令**:...

    android通过jni执行shell命令

    JNI在各种场景下都非常有用,比如性能优化、利用系统底层功能或者如本例所示,执行系统级别的操作,例如运行shell命令。本文将深入探讨如何使用JNI在Android中执行shell命令。 首先,理解JNI的工作原理是必要的。...

    java调用shell向DataX传参,带where条件,特殊字符

    在Java程序中调用Shell命令并传入带有特殊字符的参数时,会遇到一些挑战,因为Shell和DataX对特殊字符的处理方式可能不同。 首先,让我们理解Java如何调用Shell命令。在Java中,我们可以使用Runtime或者...

    andorid使用jni执行shell命令例子

    在Android开发中,有时我们需要执行一些底层操作,例如与硬件交互或者进行系统级别的操作,这时候JNI(Java Native Interface)和shell命令就显得尤为重要。本文将详细介绍如何在Android应用中使用JNI来执行shell...

    java执行shell或bat脚本

    java执行shell或bat脚本,Java可以使用三种方式来执行.bat或.shell脚本文件:使用Runtime.exec()、使用ProcessBuilder、使用第三方工具包commonsexec.jar

    Android程序中(APK程序)执行Adb shell 命令

    综上所述,"Android程序中(APK程序)执行Adb shell命令"涉及到利用Java的Runtime或ProcessBuilder类来调用系统shell,执行特定的命令。这个过程需要理解ADB的作用,以及如何在Android应用程序中安全地使用shell命令...

Global site tag (gtag.js) - Google Analytics