JAVA 修改win/linux 系统时间,JAVA 修改系统时间 ,JAVA调用shell

41 篇文章 0 订阅
22 篇文章 0 订阅

原创 :https://blog.csdn.net/qq2531246791/article/details/84898221

转载请标明出处 https://blog.csdn.net/qq2531246791/article/details/84898221

添加了 shell 脚本执行后获取返回值

import java.io.IOException;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;

/**
 * 作者 : LZ
 * time : 2017/6/8
 */
public class SynSystemDateUtils {

    public static void main(String[] args) {
        String date = "2017-11-11";
        String time = "11:11:11"  ;
        updateSysDateTime(date,time);
    }

    /**
     * 修改系统时间
     * yyyy-MM-dd HH:mm:ss
     * @param DataStr_   2017-11-11   yyyy-MM-dd
     * @param TimeStr_   11:11:11     HH:mm:ss
     */
    public static void updateSysDateTime(String dataStr_,String timeStr_){
        try {
            String osName = System.getProperty("os.name");
            // Window 系统
            if (osName.matches("^(?i)Windows.*$")) {
                String cmd;
                // 格式:yyyy-MM-dd
                cmd = " cmd /c date " + dataStr_;
                Runtime.getRuntime().exec(cmd);
                // 格式 HH:mm:ss
                cmd = " cmd /c time " + timeStr_;
                String res = runAndResult(cmd);
                System.out.println("windows 时间修改" + res);
            } else if (osName.matches("^(?i)Linux.*$")) {
                // Linux 系统 格式:yyyy-MM-dd HH:mm:ss   date -s "2017-11-11 11:11:11"
                FileWriter excutefw = new FileWriter("/usr/updateSysTime.sh");
                BufferedWriter excutebw=new BufferedWriter(excutefw);
                excutebw.write("date -s \"" + dataStr_ +" "+ timeStr_ +"\"\r\n");
                excutebw.close();
                excutefw.close();
                String cmd_date ="sh /usr/updateSysTime.sh";
                String res = runAndResult(cmd_date);
                System.out.println("cmd :" + cmd_date + " date :" + dataStr_ +" time :" + timeStr_);
                System.out.println("linux 时间修改" + res);
            } else {
                System.out.println("操作系统无法识别");
            }
        } catch (IOException e) {
            e.getMessage();
        }
    }



     /**
     * 执行 脚本命令  关心结果
     * @param cmd
     * @return
     */
    public static String runAndResult(String cmd) throws Exception{
        StringBuilder sb = new StringBuilder();
        BufferedReader br = null;
        boolean execFlag = true;

        String uuid = UUID.randomUUID().toString().replace("-","");
        String tempFileName = "./temp" + uuid +".sh";
        try {
            String osName = System.getProperty("os.name").toUpperCase(Locale.ENGLISH);

            if (osName.matches("^(?i)LINUX.*$") || osName.contains("MAC")) {
                FileWriter excutefw = new FileWriter(tempFileName);
                BufferedWriter excutebw=new BufferedWriter(excutefw);
                excutebw.write(cmd + "\n");
                excutebw.close();
                excutefw.close();
                String command ="bash " + tempFileName;

                Process p = Runtime.getRuntime().exec(command);
                p.waitFor();

                br = new BufferedReader(new InputStreamReader(p.getInputStream()));
                String line;
                while ((line = br.readLine()) != null) {
                    //sb.append("<br/>");
                    sb.append(System.lineSeparator());
                    sb.append(line);
                }
                br.close();

                br = new BufferedReader(new InputStreamReader(p.getErrorStream()));
                while ((line = br.readLine()) != null) {
                    //sb.append("<br/>");
                    sb.append(System.lineSeparator());
                    sb.append(line);
                    if (line.length() > 0){
                        execFlag = false;
                    }
                }
                br.close();

                if (execFlag){
                    LOGGER.info("exec [ {} ]  OK , result : [ {} ]",cmd ,sb.toString());
                }else {
                    throw new RuntimeException(sb.toString());
                }
            }else {
                throw new RuntimeException("不支持的操作系统类型");
            }
        } catch (Exception e) {
            LOGGER.error("exec [ {} ]  fail : {}",cmd ,e.getMessage());
            throw e;
        }finally {
            if (br != null){
                br.close();
            }
            FileUtils.deleteQuietly(new File(tempFileName));
        }
        return sb.toString();
    }


}

 

linux系统需设置:

root用户执行chmod 4755 /bin/date

备注:也就是给date命令增加s权限位即设置setuid(4000),这样普通用户就可以执行date命令了,缺点也是很明显的,相当于去掉了date命令的root权限限制。

 

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值