touch가 새 파일을 만드는 이유는 무엇입니까?


13

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

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

터치 코드로 작성된 검사입니까, 아니면 파일을 만드는 다른 것입니까?


사용 사례로, 다음에 다시 부팅 할 때 파일 시스템이 오류를 검사하도록 touch /forcefsck하는 빈 파일을 만드는 데 사용 합니다 /forcefsck. 파일 자체는 아무 것도 포함 할 필요가 없으며 단지 존재하기 만하면됩니다. 이 없으면 빈 파일 touch을 사용 vi하거나 nano저장 해야 합니다. 훨씬 빨리 사용 touch합니다.
Tim

@Tim 당신이 사용할 수 없었 >/forcefsck거나 printf '' >>/forcefsck(후자는 기존의 내용을 보존 할) 실제적인 이유가 없습니다 . 당신이 설명하는 것은 특정 방식으로 작동하는 유틸리티를 사용하는 방법이지만, 그 방식으로 작동하도록 작성된 이유와는 실제로 관련이 없습니다.
CVn

이 질문이 touch작동 방식 이 아니라 디자인에 관한 것이라면 touch파일 생성 부작용으로 단일 책임 원칙을 위반한다고 생각 합니다. 따라서 "이유"는 단순히 인기와 보급 / 사용 편의성으로 인해 초기에 디자인을 선택했기 때문입니다.
George Pantazes

답변:


15

strace touch t수확량 사용 :

open("t", O_WRONLY|O_CREAT|O_NOCTTY|O_NONBLOCK, 0666) = 3

그것은이다 touch의 코드와 나는 그것을 호출하지 않을 체크 하지만. 타임 스탬프는 파일을 쓰기 위해 연 다음 닫으면 업데이트됩니다.


14

touch파일이 존재하지 않는 경우 비어있는 새 파일을 작성합니다. 유틸리티는 해당 사례를 구체적으로 처리하기위한 코드를 포함해야합니다. 이 유틸리티는 Unix V7에 나타났습니다 . 그 설명서 따라서 설명 :

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

touch파일 의 수정 날짜를 설정하려고 시도 합니다 . 파일에서 문자를 읽고 다시 쓰면됩니다. ** 파일 *이 존재하지 않으면 파일을 만들려고 시도하지 않습니다.-c 옵션을 지정 합니다.

( touch파일이 비어 있으면 어떻게 했는지 모르겠습니다 . 기본 시스템 호출 은 나중에 나왔습니다.)

touch파일이 존재하도록 설계된 이유 는 확실하지 않지만 파일이 원인 인 것 같습니다 make. 왜 파일의 수정 시간을 현재 시간으로 설정 하시겠습니까? 수정 시간을 특정 시간으로 설정하는 것이 유용 할 수있는 경우가 있지만, 그 능력은 나중에 왔으며 원본 touch은 수정 시간을 현재 시간으로 만 설정할 수있었습니다. 그렇게하는 이유 make는 파일에 따라 규칙 을 다시 실행하기위한 것입니다.

즉, file foobarfrom에서 생성 할 명령을 선언하는 makefile이 있다고 가정하십시오 foo. 을 입력 make bar하면 명령이 실행되고 bar생성됩니다. 경우 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기능입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.