터치하면 왜 새 파일이 생성되나요?

터치하면 왜 새 파일이 생성되나요?

나는 이 touch명령이 파일의 마지막 수정 날짜를 업데이트하는 데 사용된다는 것을 알고 있습니다. 요청한 파일이 파일 시스템에 존재하지 않는 경우 새 파일을 생성하는 데에도 사용됩니다.

터치(이름에서 알 수 있듯이)는 마지막 수정 날짜만 업데이트해야 하는데 왜 새 파일을 생성하려고 시도합니까?

터치코드에 체크만 적힌 건지, 아니면 파일이 생성되는 다른 원인이 있는 걸까요?

답변1

touch파일이 존재하지 않으면 새로운 빈 파일이 생성됩니다. 유틸리티에는 특히 이 상황을 처리하기 위한 코드가 포함되어 있어야 합니다. 이 유틸리티는 다음 위치에 나타납니다.유닉스 V7;그것은수동그래서 설명 :

touch — 파일이 마지막으로 수정된 업데이트 날짜

touch각각에 대해 수정된 날짜를 설정해 보세요.문서. 이는 파일에서 문자를 읽고 다시 쓰는 방식으로 수행됩니다. 파일이 존재하지 않는 경우 -c이 옵션을 지정하지 않으면 파일을 생성하려고 시도합니다.

touch( 파일이 비어 있으면 어떻게 될지 모르겠습니다 .낮은 수준의 시스템 호출나중에 왔습니다. )

왜 그 파일이 존재하기를 원하는지 잘 모르겠지만 touch아마도 그럴 것 같습니다.make. 파일 수정 시간을 현재 시간으로 설정하려는 이유는 무엇입니까? 어떤 경우에는 수정 시간을 특정 시간으로 설정하는 것이 유용할 수 있지만 이 기능은 나중에 나온 것이며 원래 버전에서는 touch수정 시간을 현재 시간으로만 설정할 수 있었습니다. 그 이유는 make이 파일에 의존하는 규칙을 다시 실행하기 위해서입니다.

foo즉, 에서 빌드 명령을 선언하는 파일 과 barmakefile이 있다고 가정합니다 foo. 입력하면 make bar명령이 실행되고 생성됩니다. 존재하고 보다 최신인 경우 bar가정 이 이미 이루어졌기 때문에 아무 작업도 수행되지 않습니다 . 그러나 make보다 오래된 경우 make는 최신이 아닌 것으로 간주하여 다시 빌드해야 합니다.barfoomake barmakebarbarfoobar

하지만 생성된 규칙이 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코드 에 있어 , 난 부르지 않을 거야확인하다하지만. 타임스탬프는 쓰기 위해 파일을 연 다음 닫으면 업데이트됩니다.

관련 정보