`touch` 명령의 합법적 인 용도는 무엇입니까? 의 요점은 무엇입니까 ? 빈 파일을

touch명령 의 요점은 무엇입니까 ? 빈 파일을 만들 수 있다는 것도 알고 있지만의 경우도 마찬가지입니다 echo -n.

그렇지 않으면 왜 누군가 파일의 타임 스탬프를 변경해야합니까? 파일의 나이에 대해 잘못된 인상을주지 않으면 다른 용도는 보이지 않으며 이것은 (내 관점에서) 합법적 인 것이 아닙니다.



답변

장점 중 하나 touch는 임의의 타임 스탬프를 지정할 수 있지만 echo -n항상 현재 시간이 발생한다는 것입니다.

합법적 인 사용의 예는 소스 코드 파일의 타임 스탬프를 업데이트하여 프로그램 make이 소스 파일을 컴파일 된 객체보다 최신으로 간주하여 다시 작성하는 것입니다.

다른 용도는 존재 여부에 따라 단독으로 기능하는 파일을 작성하는 것입니다 (예 : /etc/nologin로그인이있는 경우 로그인을 허용하지 않음). 또한 형식이 짧을뿐 아니라 touch myfile보다 간단한 구성 이라고 주장합니다 echo -n >> myfile.


답변

기본 시스템 호출 ( utime)은 tar새로 복사 된 (타르 팅되지 않은) 파일의 타임 스탬프를 설정할 수있는 것과 같은 다양한 유틸리티에 중요 합니다. 일부 백업 유틸리티는 복사 한 파일의 마지막 액세스 시간을 재설정하도록 옵션을 설정할 수도 있습니다.

합법적으로 사용하는 touch것은 특정 타임 스탬프를 가진 파일을 만드는 것입니다. 그런 다음 “참조”파일을 다음과 같은 명령으로 사용할 수 있습니다 find. 예를 들어 2013 년 11 월 1 일보다 최근에 수정 된 모든 파일을 찾으려면 (예 : 2013/11/01) “

touch -amt 201311010000 myref
find . -type f -newer myref -exec ls -ld {} +

답변

touch명령의 주요 목적은 파일의 타임 스탬프를 조작하고 파일을 작성하는 것입니다.

1. 파일 만들기

$ ls -l
total 0

$ touch file{1..3}

$ ls -l
total 0
-rw-rw-r--. 1 saml saml 0 Jan 12 13:33 file1
-rw-rw-r--. 1 saml saml 0 Jan 12 13:33 file2
-rw-rw-r--. 1 saml saml 0 Jan 12 13:33 file3

참고 :total 0 에서 출력이 ls -l올바른 것입니다. 이 구현은 ls파일이 나열 될 때 파일이 사용하는 블록 수 를 보여줍니다. 에 -s스위치를 추가하여이 사실을 확신 할 수 있습니다 ls. 각 파일에서 사용중인 블록이 나열됩니다. 여기에 file1 & file2에 2자를 추가했습니다.

$ ls -ls
total 8
4 -rw-rw-r--. 1 saml saml 3 Jan 13 12:07 file1
4 -rw-rw-r--. 1 saml saml 3 Jan 13 12:09 file2
0 -rw-rw-r--. 1 saml saml 0 Jan 13 12:05 file3

2. 파일의 시간 / 날짜 정보-stat 명령

$ stat file1
  File: ‘file1’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fd02h/64770d    Inode: 11403667    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    saml)   Gid: ( 1000/    saml)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2014-01-12 13:33:38.279456149 -0500
Modify: 2014-01-12 13:33:38.279456149 -0500
Change: 2014-01-12 13:33:38.279456149 -0500
 Birth: -

touch주어진 파일에서 다양한 타임 스탬프를 조작하는 데 사용할 수 있습니다 .

3. 터치 맨 페이지에서 발췌

   -a     change only the access time
   -m     change only the modification time
   -t STAMP
          use [[CC]YY]MMDDhhmm[.ss] instead of current time

4. 액세스 시간 조작

$ touch -a -t200001010000 file1

$ stat file1
  File: ‘file1’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fd02h/64770d    Inode: 11403667    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    saml)   Gid: ( 1000/    saml)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2000-01-01 00:00:00.000000000 -0500
Modify: 2014-01-12 13:33:38.279456149 -0500
Change: 2014-01-12 13:38:52.023434696 -0500
 Birth: -

5. 수정 시간 조작

$ touch -m -t200001010000 file1

$ stat file1
  File: ‘file1’
  Size: 0           Blocks: 0          IO Block: 4096   regular empty file
Device: fd02h/64770d    Inode: 11403667    Links: 1
Access: (0664/-rw-rw-r--)  Uid: ( 1000/    saml)   Gid: ( 1000/    saml)
Context: unconfined_u:object_r:user_home_t:s0
Access: 2000-01-01 00:00:00.000000000 -0500
Modify: 2000-01-01 00:00:00.000000000 -0500
Change: 2014-01-12 13:39:31.060432026 -0500
 Birth: -

변경 시간 (ctime)이 궁금 할 수 있습니다. 을 사용하여 조작 할 수 없습니다 touch. 메타 데이터가 파일을 건드린 시간을 추적합니다. “변경”타임 스탬프를 트리거하지 않고 파일에 대해 무엇을 할 수 있습니까? 라는 제목의 자세한 내용은이 U & L Q & A를 참조하십시오 . .


답변

당신이 얻은 다른 두 가지 좋은 대답 외에도, 또 다른 용도는

파일의 나이에 대한 잘못된 인상을 주다

예를 들어 백업 구성표 에 사용 합니다 . 백업이 동일하거나 백업이 원격 호스트에 느린 회선으로 업데이트되는 비용에 비해 변경 사항이 관련이 없기 때문에 최신 백업으로 백업을 업데이트하지 않을 수 있습니다. 이를 위해, 당신은, 새로운 타임 스탬프와 백업 파일을 표시하지 않는 단순 옵션이 날조 하지만 선언 해당 파일의 유효성 타임 스탬프는 지금 다른 하나라고합니다.

파일의 나이에 대한 인상은 이제 거짓이지만 그 의미 는 실제적이고 합법적입니다.


답변

가장 일반적인 용도 중 하나는 touch코드 재 구축을 트리거하는 것입니다.

일반적인 빌드 도구 make와 그 파생물은 파일을 생성 한 파일 중 하나가 변경되지 않은 경우 (예 : .o 파일이 .c보다 최신 파일 인 경우) 파일을 다시 컴파일 / 재 빌드하지 않고 작업을 저장하려고합니다. 소스 파일을 생성하기 위해 컴파일 된 이후 C 소스가 변경되지 않았다고 가정하는 것이 일반적으로 안전합니다.

그러나 무언가를 재건하기를 원할 때가 있습니다. 소스 파일 중 하나를 불필요하게 수정할 수 있지만 실수로 무언가를 손상시킬 위험이 있습니다. 대신, touch파일을 변경하여 내용을 변경할 위험없이 새 것처럼 보이게 할 수 있으며 make파일에 의존하는 모든 것을 다시 빌드 할 시간 임을 확신하기에 충분 합니다.

다른 용도가 있지만 역사적으로 큰 것이 었습니다.


답변

개발 모드에서 소스 코드 파일의 변경 사항을보고 그 일이 발생했을 때 응용 프로그램을 다시로드하는 적어도 하나의 웹 프레임 워크 (어떤 것을 기억할 수 없는지)로 작업했습니다.

물론 때로는보고 있지 않은 것을 변경 한 후 다시로드하기를 원했습니다.이 경우 touch기본 구성 파일을 사용하여 트릭을 수행했습니다.

따라서 일반적으로 실제로 파일을 변경하지 않고 파일 변경으로 트리거 된 프로세스를 시작하려고 할 때마다.


답변

합법적 인 터치 사용 :

  • 이미지 파일 (GIF / JPG / etc)의 타임 스탬프를 촬영 한 시간으로 업데이트합니다. 모든 렌더러가 EXIF ​​정보를 읽거나주의하지는 않습니다.
  • 파일 번들에 타임 스탬프가 중요한 파일 세트를 대량 업데이트 할 때는 c / m- 시간을 유지하십시오.
  • 실패 후 다른 가져 오기를 수행해야하는 경우 배치 (예 : CSV) 파일의 시간을 설정하고 가져 오기 프로그램은 타임 스탬프에 따라 다릅니다 (토론을 다른 주제 🙂
  • 보관 목적, 즉 연도를 기준으로 폴더에 백업 한 다음 간편한 정렬을 위해이 폴더의 시간을 1 월 1 일 YYYY로 설정