나는 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와 유사한 것은 없습니다. 간접적인 방법이 있을 수 있습니다.심사시스템이지만 이는 대부분의 사용 사례에 적합한 접근 방식이 아닙니다.
프로그램 B가 반응하는 가장 쉬운 방법은 프로그램 A가 쓰기를 마쳤을 때 프로그램 A가 프로그램 B에 알림을 보내도록 하는 것입니다. 신호, 파이프, 소켓의 바이트 등 원하는 것이 무엇이든 될 수 있습니다. 또는 A가 B를 시작하도록 하거나 A를 실행한 다음 B를 실행하는 스크립트를 포함할 수도 있습니다.
이것이 가능하지 않다면 최소한 A가 파일을 임시 이름으로 쓰고 쓰기가 완료되면 최종 이름으로 옮기도록 조치하십시오. 그런 다음 B가 임시가 아닌 파일만 모니터링하도록 합니다.