리눅스 touch 명령어를 알아봅시다.

OS/리눅스 2023. 1. 17. 07:30

 안녕하세요. 이번에는 touch 명령어에 대해 알아보겠습니다.

 


 먼저 touch는 파일의 timestamp를 바꿉니다.

 

 

 설명을 보면, access와 modification time을 바꾼다고 되어 있어요. 여기서 접근 시간이랑 수정 시간이랑 구분하는 것이 중요해요. 파일을 읽기만 하면 access한 시간만 업데이트 되지만, 수정을 하면 수정 시간까지 같이 업데이트가 되는 셈입니다. 여기서 질문. 빈 파일인 1.txt를 vi로 열었습니다. 그리고 1을 적은 다음에 wq:를 입력해서 나갔습니다. 이 경우, 접근 시각과 수정 시각이 같이 업데이트 됩니다.

 


 기본적으로 touch는 atime, mtime을 업데이트 합니다. -a 옵션을 주면 접근 시각만 업데이트 할 수 있어요. 그럴 때 어떻게 되는지 보겠습니다.

 

 ls -ail을 입력하면 2개의 파일이 있을 거에요. 하나는 2:38에 생성된 1.txt이고, 다른 하나는 2:37에 생성된 2.txt입니다. make 파일을 보겠습니다.

 

 1.txt를 하기 위해 2.txt라는 선결 조건이 필요하다 되어 있습니다. 그런데, 1.txt가 가장 최신의 것이면 echo 1이 실행이 안 됩니다.

 

정말 그런지 보니, 그렇군요?

 

 다시 touch -a 2.txt를 입력한 다음에 다시 make를 실행해 봅시다. 그랬는데도 1.txt가 up to date라면서 실행이 되지 않습니다. 이는, 접근 시각만 최신일 뿐이지 수정 시각이 최신이 아니기 때문입니다.

 

 각 파일의 atime을 봅시다. ls -l --time=atime을 입력하면 됩니다. 보면, 1.txt보다 2.txt가 더 뒤에 접근했습니다. 그런데 수정 시각은 1.txt가 더 뒤에 있으니 up to date가 뜨게 됩니다.

 


 이제, touch 2.txt를 입력해 봅시다.

 그러면 아까와는 다르게, 수정 시각이 2:41로 업데이트 되었습니다.

 

 고로, 2.txt가 1.txt보다 최신이기에, echo 1이 실행되게 됩니다.

 


 물론 파일이 없는 경우, 빈 파일을 생성할 수도 있습니다.

 

 제 작업 디렉토리에는 3.txt가 없었습니다. touch 3.txt를 입력해 보겠습니다.

 

 

 다시 ls -ail로 조회해 보면 방금 전까지만 해도 없었던 3.txt가 생성되었음을 볼 수 있습니다.