java 调用linux命令,linux软件安装命令
如何在java程序中调用linux命令或者shell脚本
这里不得不提到java的process类了。
process这个类是一个抽象类,封装了一个进程(你在调用linux的命令或者shell脚本就是为了执行一个在linux下执行的程序,所以应该使用process类)。
process类提供了执行从进程输入,执行输出到进程,等待进程完成,检查进程的推出状态,以及shut down掉进程。
至于详细的process类的介绍放在以后介绍。
另外还要注意一个类:Runtime类,Runtime类是一个与JVM运行时环境有关的类,这个类是Singleton的。
这里用到的Runtime.getRuntime()方法是取得当前JVM的运行环境,也是java中唯一可以得到运行环境的方法。(另外,Runtime的大部分方法都是实例方法,也就是说每次运行调用的时候都需要调用到getRuntime方法)
下面说说Runtime的exec()方法,这里要注意的有一点,就是public Process exec(String [] cmdArray, String [] envp);这个方法中cmdArray是一个执行的命令和参数的字符串数组,数组的第一个元素是要执行的命令往后依次都是命令的参数,envp感觉应该和C中的execve中的环境变量是一样的,envp中使用的是name=value的方式。
下面说一下,如何使用process来调用shell脚本
例如,我需要在linux下实行linux命令:sh test.sh,下面就是执行test.sh命令的方法:
这个var参数就是日期这个201102包的名字。
String shpath="/test/test.sh";//程序路径
Process process=null;
String command1=“chmod 777”+ shpath;
process= Runtime.getRuntime().exec(command1);
process.waitFor();
String var="201102";//参数
String command2=“/bin/sh”+ shpath+””+ var;
Runtime.getRuntime().exec(command2).waitFor();
注意:
1
我为什么要使用 chmod 777命令呢?在有的机器上面,可能没有设置权限问题。这是你在linux下面执行shell脚本需要注意的问题。没有的话,就需要添加权限,就用chmod 777,否则在执行到Runtime.getRuntime().exec的时侯会出现Permission denied错误。
2
waitFor()这个也是必不可缺的,如果你需要执行多行命令的话,把waitFor()这个加上。
java远程linux执行脚本java远程linux
java远程调用,具体实现?
1、使用java代码通过ssh登陆linux并执行命令,正常情况下sshd服务都会有,知道用户密码就可以使用这种方式了。
2、要在远程linux服务器上执行命令,可以在linux服务器上启动一个服务做执行脚本的代理,不断接受来自你这个项目发来的脚本信息,然后执行,再把结果返回给你项目中去。
第一种:以消息队列的方式发送这些脚本信息,linux代理不断接受,并返回结果。项目同时要不断接受结果。
第二种:项目中产生的脚本,直接记录到数据库,linux上的代理访问这个数据库,获取脚本信息,并将执行结果写入数据库。项目中轮询执行结果。上面我说的消息队列可以采用activemq,或者rabbitmq这些。命令执行,java中直接Runtime.getRuntime().exec(command);就行了。
linux远程工具?
1、Xshell
介绍:xshell是一个非常强大的安全终端模拟软件,它支持SSH1,SSH2,以及Windows平台的TELNET协议。Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。(也是我目前使用的远程连接工具)
2、secureCRT
介绍:
SecureCRT支持SSH,同时支持Telnet和rlogin协议。SecureCRT是一款用于连接运行包括Windows、UNIX和VMS的理想工具。通过使用内含的VCP命令行程序可以进行加密文件的传输
怎么在linux下调用浏览器
最近在做一个项目,是在debian的Linux环境下用Java开发的,因为系统没有安装图形界面,于是采用调用浏览器显示特定网页来实现的方案。
现在可以找到的java调用linux浏览器的方法主要有3种,
第一种是调用桌面默认浏览器的办法,如下所示:
[java] view plain copy
public static void openURL(String sURL){
try{
URI uri= new URI(sURL);
Desktop desktop= null;
if(Desktop.isDesktopSupported()){
desktop= Desktop.getDesktop();
}
if(desktop!= null)
desktop.browse(uri);
} catch(IOException ioe){
ioe.printStackTrace();
} catch(URISyntaxException e){
e.printStackTrace();
}
}
第二种是runtime的办法,如下:
[java] view plain copy
public static void openURLRuntime(String url){
try{
Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler"+ url);
} catch(Exception ex){
//ex.printStackTrace();
}
}
第三种和第二种差不多,但是可以先判断浏览器的类型,如下:
[java] view plain copy
private static void openURLlinux(String url) throws Exception{
//获取操作系统的名字
String osName= System.getProperty("os.name","");
String[] browsers={"google-chrome","firefox","opera","konqueror","epiphany","mozilla","netscape"};
String browser= null;
for(int count= 0; count< browsers.length&& browser== null; count++){
System.out.print("find:"+count+"\n");
//执行代码,在brower有值后跳出
//这里是如果进程创建成功了,==0是表示正常结束。
if(Runtime.getRuntime().exec(new String[]{
"which", browsers[count]}).waitFor()== 0){
browser= browsers[count];
System.out.print("find browser:"+browser+"\n");
}
if(browser== null)
System.out.print("Could not find web browser");
else
//这个值在上面已经成功的得到了一个进程。
Runtime.getRuntime().exec(new String[]{browser, url});
}
}
不过,可惜的是上边三种方法都没有成功调出浏览器,虽然我在ubuntu上的测试没问题,但是在那个debian上一直不行,于是就想办法,后来找到一个办法,实现调出浏览器的功能,代码如下:
[java] view plain copy
String openChrome="curl ";//调用浏览器
Runtime.getRuntime().exec(openChrome);
这个办法可以启动chrome浏览器,但是无法打开特定的网址,于是就采用了一个神一样的办法,设置chrome的默认首页,这样打开浏览器就是那个页面,当然这个办法比较弱智,但还是实现功能了。所以在这里分享一下,供大家参考。