제가 개발 중인 유틸리티의 경우 디렉터리의 파일과 관련된 세 가지 명명된 날짜를 모두 과거의 특정 날짜로 설정할 수 있다면 편리할 것입니다.
나는 이것을 사용하여 touch
액세스 및 수정 날짜를 설정할 수 있다는 것을 알고 있지만 세 가지가 모두 동일해야 합니다(참조 지점/날짜로 사용하려면).
이를 수행할 수 있는 방법이 있습니까(루트 액세스 가능)
편집하다:
나는 이것을 찾았다:http://blog.commandlinekungfu.com/2010/02/episode-80-time-bandits.html권장 사항(ext2/3/4에만 해당):
# debugfs -w -R 'set_inode_field /pathtofile ctime 200901010101' 파일 장치
여기서 "200901010101"은 날짜/시간의 예입니다.https://stackoverflow.com/a/5518031/15161위에서 필요한 "파일 장치"를 찾으십시오.
df /pathtofile | awk 'NR == 2 {print $1}'
테스트 파일에서 이것을 시도했지만 debugfs 호출이 너무 오래 걸려서 Ctrl-C를 눌렀습니다. (그래서 이것이 효과가 있는지는 잘 모르겠습니다 ...)
또 다른 아이디어는 시스템 날짜를 내가 원하는 과거 날짜로 설정하는 가상 머신을 사용하는 것일 수도 있지만 설정 방법을 모르겠습니다.
이는 (2)와 관련이 있지만 VM을 사용하지 않고http://www.shellhacks.com/en/Faking-a-Files-Access-Modify-and-Change-TimeStamps-in-Linux:
가능한 해결 방법으로 시스템 시간을 적용하려는 ctime으로 설정한 다음 파일을 터치한 다음 시스템 시간을 복원할 수 있습니다.
NOW=$(date) && date -s "2030-08-15 21:30:11" && touch file.txt && date -s "$NOW"
그러나 이것이 얼마나 안전하고 위험한지는 잘 모르겠습니다.
답변1
루트 권한이 필요한 "속임수" 없이는 ctime을 변경할 수 없습니다. 바라보다파일의 "변경된" 날짜를 변경하는 방법은 무엇입니까?
테스트 중이므로 가상 머신 접근 방식을 사용하겠습니다. 가상 머신에서 프로그램을 실행하세요. 가상 머신 내부의 시스템 날짜를 원하는 값으로 설정할 수 있습니다(NTP를 설정하지 않는 것을 기억하세요).
또는 전체 시스템이 아닌 애플리케이션을 테스트하는 경우 다음을 통과할 수 있습니다 LD_PRELOAD
(유사한 예) 또는 ptrace(더 어렵지만 정적으로 링크된 바이너리에서도 작동함). 이는 모든 시나리오에 적합하지 않으며 실제로 테스트 중인 잠재적인 버그 유형에 따라 다릅니다.libfaketime프로그램을 실행하고 다른 시간에 실행된 것처럼 보이게 할 수 있습니다. 또한 가짜 타임스탬프를 기억하므로 추가 하위 수준 코드를 작성하지 않고도 프로그램을 활용할 수 있습니다.