나는 이 touch
명령이 파일의 마지막 수정 날짜를 업데이트하는 데 사용된다는 것을 알고 있습니다. 요청한 파일이 파일 시스템에 존재하지 않는 경우 새 파일을 생성하는 데에도 사용됩니다.
터치(이름에서 알 수 있듯이)는 마지막 수정 날짜만 업데이트해야 하는데 왜 새 파일을 생성하려고 시도합니까?
터치코드에 체크만 적힌 건지, 아니면 파일이 생성되는 다른 원인이 있는 걸까요?
답변1
touch
파일이 존재하지 않으면 새로운 빈 파일이 생성됩니다. 유틸리티에는 특히 이 상황을 처리하기 위한 코드가 포함되어 있어야 합니다. 이 유틸리티는 다음 위치에 나타납니다.유닉스 V7;그것은수동그래서 설명 :
touch — 파일이 마지막으로 수정된 업데이트 날짜
touch
각각에 대해 수정된 날짜를 설정해 보세요.문서. 이는 파일에서 문자를 읽고 다시 쓰는 방식으로 수행됩니다. 파일이 존재하지 않는 경우-c
이 옵션을 지정하지 않으면 파일을 생성하려고 시도합니다.
touch
( 파일이 비어 있으면 어떻게 될지 모르겠습니다 .낮은 수준의 시스템 호출나중에 왔습니다. )
왜 그 파일이 존재하기를 원하는지 잘 모르겠지만 touch
아마도 그럴 것 같습니다.make
. 파일 수정 시간을 현재 시간으로 설정하려는 이유는 무엇입니까? 어떤 경우에는 수정 시간을 특정 시간으로 설정하는 것이 유용할 수 있지만 이 기능은 나중에 나온 것이며 원래 버전에서는 touch
수정 시간을 현재 시간으로만 설정할 수 있었습니다. 그 이유는 make
이 파일에 의존하는 규칙을 다시 실행하기 위해서입니다.
foo
즉, 에서 빌드 명령을 선언하는 파일 과 bar
makefile이 있다고 가정합니다 foo
. 입력하면 make bar
명령이 실행되고 생성됩니다. 존재하고 보다 최신인 경우 bar
가정 이 이미 이루어졌기 때문에 아무 작업도 수행되지 않습니다 . 그러나 make보다 오래된 경우 make는 최신이 아닌 것으로 간주하여 다시 빌드해야 합니다.bar
foo
make bar
make
bar
bar
foo
bar
하지만 생성된 규칙이 bar
변경되면 어떻게 될까요? 그런 다음 두 가지 옵션이 있습니다.
rm bar; make bar
touch foo; make bar
foo
생성하려면 존재 해야 합니다 bar
. 그렇지 않으면 일반적으로 명령이 작동하지 않습니다.
"터치"라는 용어는 다음에도 나타납니다.make
유틸리티: make -t bar
명령을 실행하는 척만 합니다. 즉, bar
생성될 명령을 실제로 실행하지 않고 수정 시간을 현재 시간으로 설정합니다( bar
변경 사항이 영향을 미치지 않아야 한다고 생각하는 경우 foo
이 작업을 수행할 수 있습니다 bar
). 따라서 이 touch
유틸리티는 이 기능의 독립 실행형 버전입니다 make -t
.
답변2
사용 strace touch t
수익률:
open("t", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3
touch
코드 에 있어 , 난 부르지 않을 거야확인하다하지만. 타임스탬프는 쓰기 위해 파일을 연 다음 닫으면 업데이트됩니다.