나는 ls -l
파일의 수정된 시간을 제공할 것이라는 것을 알고 있지만 파일이 닫히지 않고 열린 시간을 제공하고 있습니다( Ctrl+ D등을 사용하여).
파일이 닫힌 시간을 찾는 방법을 알려주세요
[BASH]$date
Wed May 7 10:33:01 EEST 2014
[BASH]$cat >aa
adf
adsf
#waited 8 mins before closing file (time of closing: 10:41)
[BASH]$ls -l aa
-rw------- 1 orclschd staff 9 May 7 10:33 aa
[BASH]$date
Wed May 7 10:41:47 EEST 2014
[BASH]$stat aa
bash: stat: command not found
[BASH]$uname
AIX
여기서는 이라는 파일을 만들었습니다 aa
.
파일 생성 시간은 10시 33분인데, 파일을 닫고 파일 수정 날짜를 확인해보니 여전히 10시 33분으로 표시되어 있었습니다.
단, 파일 생성 종료일(종료 시간)은 10:41 입니다.
파일이 닫히는 시기를 찾는 명령이 AIX에 있습니까? 아니면 파일을 자동으로 추적하기 위해 bash 스크립트를 작성할 수 있습니까?
답변1
파일에 대해 일반 파일 시스템에서 얻을 수 있는 유일한 정보는 수정( ls -l
), 액세스( ls -lu
) 및 상태 수정( ls -lc
) 횟수입니다.
파일을 닫아도 변경되지 않으므로 이를 반영하는 파일 상태가 없습니다. 현재 디렉토리 stat
정보는 이러한 종료를 반영하지 않으며 파일의 수정 및 변경 시간을 반영합니다(디렉토리에서 다른 항목이 변경될 때까지).
파일에 버퍼링되지 않은 쓰기를 수행하는 경우 실제 디스크 액세스와 마찬가지로 수정 시간이 다를 수 있습니다.~할 것 같다, 그러나 파일이 닫히는 순간에 있을 필요는 없습니다. 하지만 명령줄에서 이를 확인할 수 있는 쉬운 방법은 없습니다.
그런데. 초 단위로 세분화되므로 이러한 실험에 사용하기가 더 쉽습니다 stat
. 즉, 눈에 띄는 차이를 얻기 위해 오래 기다릴 필요가 없습니다. ;-)
답변2
ls -l
파일 수정 시간을 나열합니다. 이는 파일이 열린 시간이나 파일이 닫힌 시간이 아니라 파일이 마지막으로 쓰여진 시간입니다. 이는 일반적으로 파일이 닫힌 시간과 매우 비슷하지만 반드시 동일하지는 않습니다.
당신은 아마도잘못된 질문을 하는 것. 프로그램이 파일 쓰기를 마쳤을 때 반응하려면(예: 프로그램이 파일을 닫았을 때 작업을 수행) 시간은 중요하지 않습니다. 필요한 것은 파일이 닫혔다는 알림입니다.
리눅스는inotify
이를 위해 BSD는kqueue
, 그러나 AIX에는 내가 아는 한 비슷한 것이 없습니다. 간접적인 방법이 있을 수도 있습니다.심사시스템이지만 이는 대부분의 사용 사례에서 작동할 가능성이 있는 접근 방식이 아닙니다.
프로그램 A가 쓰기를 마쳤을 때 프로그램 B가 반응하도록 하는 가장 간단한 방법은 프로그램 A가 프로그램 B에 알림을 보내도록 하는 것입니다. 신호, 파이프나 소켓의 바이트 또는 단순히 A 실행 등 원하는 모든 것이 가능합니다. B 또는 A를 실행한 다음 B를 실행하는 스크립트가 있습니다.
이것이 가능하지 않다면 적어도 A가 파일을 임시 이름에 쓰도록 마련한 다음 쓰기가 끝나면 최종 이름으로 이동하십시오. 그런 다음 B가 임시가 아닌 파일만 감시하도록 합니다.