이것은 Linux 명령을 사용하여 만든 파일입니다.
touch tmp.txt
이제 날짜와 시간을 바꾸려고 합니다. 그래서 내가 하는 일은 다음과 같습니다.
ls -l tmp.txt
-rwrx-rx-x 1 yush guest 600 jul 10 16:58 tmp.txt
위에서 생성된 파일의 연도를 바꾸려면 다음 명령을 사용합니까?
touch -d "1 year ago" tmp.txt
지금,
ls -l tmp.txt
-rwxr-xr-x 1 yush guest 600 jul 10 2016 tmp.txt
제 질문은 Linux를 사용하여 위 작업을 수행하는 다른 명령이 있습니까?
답변1
액세스 및 수정 시간을 명시적으로 설정합니다.
# touch -t [[CC]YY]MMDDhhmm[.SS]
예를 들어
# touch -t 201212101830.55 tmp.txt
# touch -d "2012-10-19 12:12:12.000000000 +0530" tmp.txt
# touch -d "2017-10-19 14:59:12" tmp.txt
다른 파일의 타임스탬프를 사용할 수 있습니다.
# touch -r file1.txt file2.txt
답변2
이 작업을 수행하려면 아카이버를 사용할 수 있습니다(깨끗하거나 쉽지는 않지만). 실제 파일(파일 시스템 내)의 메타데이터(권한 모드, 소유자, 그룹, 수정 날짜/시간 등)는 inode(예: "시스템 데이터")에 저장되지만 파일의 메타데이터는보관됨파일은 사용자 데이터로 아카이브 파일에 저장됩니다. 이는 일반적으로 조작할 수 있지만 난이도는 다양합니다.
예를 들어 보겠습니다 . cpio
다른 보관 프로그램(예: , , , home 등)을 사용하여 ar
비슷한 효과를 얻을 수 있습니다 . 먼저, 알려진 수정 날짜/시간(재현성을 위해)을 사용하여 파일을 만든 tar
다음 해당 파일만 포함하는 cpio 아카이브를 만듭니다. 옵션에는 다음이 포함됩니다.pax
zip
tmp.txt
cpio
o
오cpio
출력( 아카이브가 기록될 것임을 의미 )하고 c
이식 가능한(씨호환) 형식을 사용하면 작동하기가 더 쉬울 수 있습니다.
$ touch -d "2017년 7월 12일 00:00" tmp.txt $ ls -l tmp.txt -rw-r--r-- 1내 사용자 이름 내 그룹 이름 0 7월 12일 00:00 tmp.txt $ 에코 tmp.txt -oc > tmp.cpio | 1 조각
아카이브를 확인하세요.
cpio -itv
파일을 읽는 것을 의미합니다 (나입력)을 생성하고V엘보스티가능한 콘텐츠.
$ cpio -itv < tmp.cpio -rw-r--r-- 1내 사용자 이름 내 그룹 이름 0 7월 12일 00:00 tmp.txt 1 조각 $ cattmp.cpio 070701000595CC000081A4000303E900030201000000015965668000000000000068E70000C36100 000000000000000000000800000000tmp.txt07070100000000000000000000000000000000000000000000000000000000000000000000000 001000000000000000000000000000000000000000000000000000000B00000000 트레일러! ! !
리버스 엔지니어링을 통해(아마 어딘가에 문서화되어 있을 것입니다. 확인하지는 않았습니다) 아카이브에 있는 첫 번째 파일의 수정된 날짜/시간이 1월 1일 이후 Unix 시간(초 수를 나타내는 32비트 정수)으로 저장되어 있음을 발견했습니다. , 1970 00: 00 GMT 이후) 형식은 문자 위치 47-54의 8자리 16진수입니다. 위의 값을 강조 표시했습니다 59656680
. 8자리 16진수 형식의 Unix 시간이라는 것을 알면 찾기가 어렵지 않습니다. 당신은 얻을 수 있습니다현재의unix time(decimal) 명령을 사용하면 date +%s
다음과 같이 16진수로 가져올 수 있습니다.
(date +%s; echo "16op") | dc
이제 메타데이터를 수정하세요! 원하는 편집기를 사용하여 아카이브를 편집합니다.
$ vi tmp.cpio 0707010005807C000081A4000303E900030201000000015965668000000000000068E70000C36100 000000000000000000000800000000tmp.txt^@^@^@0707010000000000000000000000000000000 00000000100000000000000000000000000000000000000000000000000000B00000000 트레일러 !!!^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@ ~ ~ ~ ~ ~ "tmp.cpio" [마지막 줄 불완전] 1줄, 512자
무엇으로 바꾸고 싶은지 알아보세요. 귀하의 질문에서 시계를 1년 전으로 되돌린다고 말씀하셨습니다. 그러면 정상적인 365일 1년의 초 수는 365×24×60×60 = 31536000(십진수) = 1E13380(16진수)입니다. 따라서 59656680−1E13380을 빼면 결과는 57843300입니다. 파일에서 변경합니다.
0707010005807C000081A4000303E900030201000000015784330000000000000068E70000C36100 000000000000000000000800000000tmp.txt^@^@^@0707010000000000000000000000000000000 00000000100000000000000000000000000000000000000000000000000000B00000000 트레일러 !!!^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^ @^@^@^@^@^@^@^@^@ ~ ~ ~ ~ ~ "tmp.cpio" [마지막 줄 불완전] 1줄, 512자
저장 및 종료. 변경사항을 확인하세요.
$ cattmp.cpio 070701000595CC000081A4000303E900030201000000015784330000000000000068E70000C36100 000000000000000000000800000000tmp.txt07070100000000000000000000000000000000000000 001000000000000000000000000000000000000000000000000000000B00000000 트레일러! ! ! $ cpio -itv < tmp.cpio -rw-r--r-- 1내 사용자 이름 내 그룹 이름 2012년 7월 0일 2016년tmp.txt 1 조각 $ cpio -imuv < tmp.cpio tmp.txt 1 조각 $ ls -l tmp.txt -rw-r--r-- 1내 사용자 이름 내 그룹 이름 2012년 7월 0일 2016년tmp.txt
보라, 파일의 수정 날짜/시간을 변경했습니다. ( 아카이브를 읽지 않고 파일을 추출
cpio -i
하지 않습니다 . 복원t
-m
쌀산화시간
-u
;너nconditional(이 옵션 이 없으면
cpio
새 파일은 평소와 같이 이전 파일로 덮어쓰이지 않습니다.)-v
Verbose(표시 파일 이름). )
노트:
- 와 같은 명령을 사용하여 사람이 읽을 수 있는 날짜에 대한 Unix 날짜(초 등)를 얻을 수 있습니다
date -d "Jan 1, 2001" +%s
. 앞서 보여드린 (데스크톱 계산기) 트릭을 사용하여dc
이를 16진수로 변환하세요 . - cpio 아카이브 형식에는 널 바이트가 포함되어 있습니다.
vi
( ) 의 현재 버전은vim
이를 존중하는 것 같습니다(즉, 이를 용인하고 단독으로 두는 것). 이전 버전을 포함한 다른 편집자는vi
해당 파일을 손상시키거나(null 값을 제거하여) 편집을 거부할 수도 있습니다. vi
줄바꿈 이외의 문자("[불완전한 마지막 줄]")로 끝나는 cpio 아카이브가 감지되었습니다. 파일을 저장할 때 개행 문자를 추가합니다. 다른 보관 프로그램( 제외cpio
)은 이를 변조로 감지하고 수정된 보관 파일을 거부할 수 있습니다.- 다른 아카이브 형식은 메타데이터(예: 수정 날짜/시간)를 바이너리 형식으로 저장하거나 체크섬을 가질 수 있습니다. 이러한 파일을 편집하는 것은 제가 여기서 설명하는 것보다 더 어려울 수 있습니다.