首页 > 解决方案 > 伪造子进程的日期/时间

问题描述

在 Unix 系统上,有没有办法伪造子进程的感知日期和时间?

即,想象:

$ date 
Fri Jun 28 10:50:35 CEST 2019

$ with_date 10/05/2019 date
Fri May 10 10:50:36 CEST 2019

如何执行with_date命令?

典型的用例是测试与日期/时间相关的软件,模拟各种条件。

标签: unixposix

解决方案


有图书馆libfaketime。它使用库预加载机制来拦截要运行的程序的系统调用。一个用例(来自手册)是:

user@host> 日期
2016 年 11 月 23 日星期二 12:01:05 CEST

user@host> LD_PRELOAD=/usr/local/lib/libfaketime.so.1 FAKETIME="-15d" 日期
Mon Nov 8 12:01:12 CEST 2016

user@host> LD_PRELOAD=/usr/local/lib/libfaketime.so.1 FAKETIME="-15d" FAKETIME_DONT_FAKE_MONOTONIC=1 java -version
java version "1.8.0_111"
Java(TM) SE Runtime Environment (build 1.8.0_111- b14) Java HotSpot(TM) 64 位服务器 VM(构建 25.111-b14,混合模式)


推荐阅读