파일의 '변경' 날짜를 어떻게 변경할 수 있나요?

파일의 '변경' 날짜를 어떻게 변경할 수 있나요?

파일의 "변경" 날짜를 어떻게 변경할 수 있나요? 다음을 사용하면 touch작동하지 않습니다.

$ touch -t 9901010000 테스트;stat 테스트
  파일: `테스트'
  크기: 0 블록: 0 IO 블록: 4096 일반 빈 파일
장치: fe01h/65025d Inode: 11279017 링크: 1
액세스: (0644/-rw-r--r--) Uid: ( 1000/ x) Gid: ( 1000/ x)
접속 : 1999-01-01 00:00:00.000000000 +0100
수정: 1999-01-01 00:00:00.000000000 +0100
변경 : 2012-04-08 19:26:56.061614473 +0200
 출생: -

답변1

일반적인 방법으로는 ctime을 변경할 수 없습니다. 이는 의도적으로 설계된 것입니다. 파일의 메타데이터를 변경할 때 ctime은 항상 현재 값으로 업데이트되며 다른 ctime을 적용할 수 있는 방법은 없습니다. 파일의 ctime을 변경하려면 다음 중 하나를 수행해야 합니다.

  • 시스템 시간을 적용하려는 ctime으로 설정한 다음 파일을 터치한 다음 시스템 시간을 재설정하세요.
  • ctime을 변경하려면 인터페이스를 추가하도록 커널을 수정하세요.
  • 디스크 이미지에 직접 액세스하고(예: 를 사용하여 debugfs) 디스크의 비트를 조정합니다(파일 시스템이 마운트된 동안에는 수행하지 마십시오).

답변2

extX에 대해 jw013이 지적한 관련 SO 질문에 대한 답변이 있습니다.마운트 해제된 디스크:

# Update ctime
debugfs -w -R 'set_inode_field /tmp/foo ctime 201001010101' /dev/sda1

# Drop vm cache so ctime update is reflected
echo 2 > /proc/sys/vm/drop_caches

답변3

$NOW=$(date) && date -s "2030-08-15 21:30:11" && touch file.txt && date -s "$NOW"

https://www.shellhacks.com/fake-file-access-modify-change-timestamps-linux

답변4

메타데이터가 변경되면 파일의 ctime이 업데이트됩니다.

$ ls -l x.py
-rw-rw-r--. 1 ignacio ignacio 485 Mar 26  2010 x.py
$ stat -c %z x.py
2010-03-26 11:57:56.237068175 -0400
$ chown ignacio x.py
$ stat -c %z x.py
2012-04-08 15:31:33.682383575 -0400
$ ls -l x.py
-rw-rw-r--. 1 ignacio ignacio 485 Mar 26  2010 x.py

관련 정보