- 浏览: 2188638 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (682)
- 软件思想 (7)
- Lucene(修真篇) (17)
- Lucene(仙界篇) (20)
- Lucene(神界篇) (11)
- Solr (48)
- Hadoop (77)
- Spark (38)
- Hbase (26)
- Hive (19)
- Pig (25)
- ELK (64)
- Zookeeper (12)
- JAVA (119)
- Linux (59)
- 多线程 (8)
- Nutch (5)
- JAVA EE (21)
- Oracle (7)
- Python (32)
- Xml (5)
- Gson (1)
- Cygwin (1)
- JavaScript (4)
- MySQL (9)
- Lucene/Solr(转) (5)
- 缓存 (2)
- Github/Git (1)
- 开源爬虫 (1)
- Hadoop运维 (7)
- shell命令 (9)
- 生活感悟 (42)
- shell编程 (23)
- Scala (11)
- MongoDB (3)
- docker (2)
- Nodejs (3)
- Neo4j (5)
- storm (3)
- opencv (1)
最新评论
-
qindongliang1922:
粟谷_sugu 写道不太理解“分词字段存储docvalue是没 ...
浅谈Lucene中的DocValues -
粟谷_sugu:
不太理解“分词字段存储docvalue是没有意义的”,这句话, ...
浅谈Lucene中的DocValues -
yin_bp:
高性能elasticsearch ORM开发库使用文档http ...
为什么说Elasticsearch搜索是近实时的? -
hackWang:
请问博主,有用solr做电商的搜索项目?
Solr中Group和Facet的用法 -
章司nana:
遇到的问题同楼上 为什么会返回null
Lucene4.3开发之第八步之渡劫初期(八)
在我们的项目中,大部分环境的服务器用的都是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如下:
输出的内容如下所示:
能够在在应用程序中,执行shell脚本是非常有用的,我们可以自己写一个shell脚本,把多个shell命令,封装起来,然后执行一次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即可。
- ganymedssh.zip (381.8 KB)
- 下载次数: 79
发表评论
-
记一次log4j不打印日志的踩坑记
2019-09-22 01:58 1588### 起因 前几天一个跑有java应用的生产集群(200多 ... -
在Java里面如何解决进退两难的jar包冲突问题?
2019-07-23 19:10 1252如上图所示: es api组件依赖guava18.0 ... -
什么是操作系统的虚拟内存?
2019-07-17 10:04 787https://mp.weixin.qq.com/s?__bi ... -
如何轻松理解二叉树的深度遍历策略
2019-07-03 23:33 1150我们知道普通的线性数据结构如链表,数组等,遍历方式单一 ... -
为什么单线程Redis性能也很出色
2019-01-21 18:02 2221高性能的服务器,不一 ... -
如何将编程语言里面的字符串转成数字?
2019-01-11 23:23 2109将字符串转成数字在很 ... -
为什么Java里面String类是不可变的
2019-01-06 18:36 1680在Java里面String类型是不可变对象,这一点毫无疑问,那 ... -
关于Java里面volatile关键字的重排序
2019-01-04 18:49 1084Java里面volatile关键字主 ... -
关于Linux进程的基础知识
2018-12-17 15:58 1299### 前言 在计算机里面,一个进程通常指的是一个运行程序的 ... -
多个线程如何轮流打印ABC特定的次数?
2018-12-11 20:42 6061之前的一篇文章,我给 ... -
聊聊Java里面的引用传递
2018-11-16 21:21 992长久以来,在Java语言里面一直有一个争论,就是Java语言到 ... -
理解计数排序算法的原理和实现
2018-10-11 10:03 2097计数排序(Counting sort) ... -
理解Java7和8里面HashMap+ConcurrentHashMap的扩容策略
2018-09-06 11:31 3394### 前言 理解HashMap和Con ... -
关于Java里面多线程同步的一些知识
2018-07-18 09:45 1111# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
Java单例模式之双检锁深入思考
2018-07-08 12:25 3297# Java单例模式之双检锁 ... -
关于Java里面多线程同步的一些知识
2018-07-08 12:23 1122# 关于Java里面多线程同步的一些知识 对于任何Java开 ... -
重新认识同步与异步,阻塞和非阻塞的概念
2018-07-06 14:30 1475# 重新认识同步与异步 ... -
线程的基本知识总结
2018-06-27 16:27 1063### (一)创建线程的方式 (1)实现Runnable接口 ... -
Java里面volatile关键字修饰引用变量的陷阱
2018-06-25 11:42 1389# Java里面volatile关键字修饰引用变量的陷阱 如 ... -
关于Java里面的字符串拼接,你了解多少?
2018-06-25 11:28 1373# 关于Java里面的字符串 ...
相关推荐
在Java开发中,有时我们需要远程连接到Linux服务器执行shell命令,比如进行系统管理、自动化运维或者数据处理等任务。在这种情况下,使用SSH(Secure Shell)协议是常见的解决方案,因为它提供了安全的网络通信。...
在IT行业中,shell脚本和bat脚本是两种常见的批处理工具,用于自动化执行一系列操作系统命令。当需要定期或按需运行Java程序时,利用这两种脚本语言可以极大地提高工作效率。下面将详细介绍如何使用shell脚本(适用...
在IT行业中,shell脚本是Linux或Unix操作系统中的一种强大工具,用于自动化任务执行和系统管理。当涉及到启动Java应用程序时,shell脚本可以提供一个方便、可重复且灵活的方法。下面我们将深入探讨如何使用shell脚本...
运行Shell脚本,使用`./InitData.sh`命令。如果一切配置正确,你将在终端看到"Hello, World!"的输出。 在实际应用中,可能会有更复杂的Java程序,例如需要传递参数、处理异常等。在Shell脚本中,你可以通过`java`...
Java执行CMD命令及MongoDB脚本是开发过程中常见的任务,特别是在集成系统或者自动化运维场景下。下面将详细讲解这两个主题。 一、Java执行CMD命令 在Java中,我们可以使用Runtime类或ProcessBuilder类来执行操作...
Java 远程调用Shell脚本客户端包是一个实用的工具,专为开发者设计,使得在Java应用程序中执行远程Shell命令变得简单而高效。这个包的主要功能是通过Java代码发起对远程服务器上的Shell脚本的调用,从而实现跨平台的...
sshxcute 就是这样一个框架工具集,它基于 JSCH 构建,允许工程师利用Java 代码通过 SSH 连接远程批量执行 Linux/UNIX 系统上的命令或者脚本,同时加入了判断成功与否,取回输出等多种实用功能。sshxcute 不管是针对...
二、Java执行Shell命令的方法 1. `Runtime.getRuntime().exec()`: 这是最常用的方法,通过Runtime类的`exec()`方法可以执行shell命令。例如: ```java Process process = Runtime.getRuntime().exec("ls /sdcard")...
2. **Runtime.exec()**:在Android应用程序中,可以通过Java的Runtime类的exec()方法来执行shell命令。例如: ```java Process process = Runtime.getRuntime().exec("ls /sdcard"); ``` 这将在设备上执行`ls /...
这个工具类可能使用了Java的`Runtime`或者`ProcessBuilder`类来执行外部命令。 `Runtime.getRuntime().exec()`方法可以用来执行系统命令,但它的使用需要注意错误流和输出流的处理,否则可能会阻塞程序的执行。这...
总的来说,这些资源为你提供了在Java环境中调用Shell脚本所需要的基础工具和示例,涵盖了SSH连接、命令执行和交互式脚本控制。通过学习和使用这些库,你将能够构建强大的系统管理工具和自动化解决方案。
通过通道的输入流,我们可以发送Shell命令,例如执行一个脚本。 ```java OutputStream commandStream = channel.getOutputStream(); PrintWriter writer = new PrintWriter(commandStream, true); writer.println...
这些库提供了API,让你能够在运行时请求Root权限,并在获得批准后执行shell命令。例如,使用SuperSU库,你可以调用`SuManager.requestSuPermissions()`来请求权限,然后在回调中处理结果。 4. **执行Shell命令**:...
JNI在各种场景下都非常有用,比如性能优化、利用系统底层功能或者如本例所示,执行系统级别的操作,例如运行shell命令。本文将深入探讨如何使用JNI在Android中执行shell命令。 首先,理解JNI的工作原理是必要的。...
在Android开发中,有时我们需要执行一些底层操作,例如与硬件交互或者进行系统级别的操作,这时候JNI(Java Native Interface)和shell命令就显得尤为重要。本文将详细介绍如何在Android应用中使用JNI来执行shell...
java执行shell或bat脚本,Java可以使用三种方式来执行.bat或.shell脚本文件:使用Runtime.exec()、使用ProcessBuilder、使用第三方工具包commonsexec.jar
综上所述,"Android程序中(APK程序)执行Adb shell命令"涉及到利用Java的Runtime或ProcessBuilder类来调用系统shell,执行特定的命令。这个过程需要理解ADB的作用,以及如何在Android应用程序中安全地使用shell命令...
2. `sh filepath`: 在Java中,使用`Runtime.getRuntime().exec()`方法执行shell命令。这里的命令是`sh`,后面跟上shell脚本的路径,意味着执行这个脚本。 3. `Runtime.getRuntime().exec(exp)`执行shell命令。`...