메이크업 strace
의를 tail -f
이 모든 것을 설명합니다. 흥미로운 부분 :
13791 fstat(3, {st_mode=S_IFREG|0644, st_size=139, ...}) = 0
13791 fstatfs(3, {...}) = 0
13791 inotify_init() = 4
13791 inotify_add_watch(4, "/path/to/file", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1
13791 fstat(3, {st_mode=S_IFREG|0644, st_size=139, ...}) = 0
13791 read(4, 0xd981c0, 26) = -1 EINTR (Interrupted system call)
그것은 무엇입니까? inotify
파일에 핸들러를 설정 한 다음이 파일에 문제가 생길 때까지 기다립니다. 커널 tail
이이 inotify 핸들러를 통해 파일이 변경되었다고 (일반적으로 추가되었다고) tail
1) 탐색하면 2) 변경 사항을 읽습니다. 3) 변경 사항을 화면에 씁니다.
/proc/3844/fd/1
시스템에서에 대한 기호 링크 /dev/pts/14
는 문자 장치입니다. 그것에 의해 접근 될 수있는 "메모리 맵"과 같은 것은 없다. 따라서 액세스 할 수있는 디스크 나 메모리 영역이 없기 때문에 변경 사항이 inotify에 서명 될 수있는 것은 없습니다.
이 문자 장치는 가상 터미널로 마치 마치 네트워크 소켓처럼 작동합니다. 이 가상 터미널에서 실행중인 프로그램은이 장치에 연결하고 (TCP 포트에 텔넷으로 연결 한 것처럼) 작성하려는 내용을 작성합니다. 화면 잠금, 터미널 제어 시퀀스 등과 같은 복잡한 작업도 있으며 일반적으로 ioctl()
통화로 처리됩니다 .
나는 당신이 어떻게 든 가상 단말기를보고 싶다고 생각합니다. 리눅스에서 할 수는 있지만 그렇게 간단하지는 않으며 네트워크 프록시와 같은 기능이 필요하며 이러한 ioctl()
호출 의 약간 까다로운 사용법이 필요 합니다. 그러나 그렇게 할 수있는 도구가 있습니다.
현재 어떤 데비안 패키지 가이 목표를위한 도구를 가지고 있는지 기억이 나지 않지만 약간의 인터넷 검색으로 쉽게 찾을 수 있습니다.
확장 : @Jajesh가 여기에서 언급했듯이 (당신이 나에게 준 경우 +1을주십시오), 도구의 이름은 watch
입니다.
확장 # 2 : @kelnos가 언급했듯이 단순함 cat /dev/pts/14
도 충분했습니다. 나는 그것을 시도했지만 그렇습니다. 그러나 제대로 작동하지 않았습니다. 나는 그와 많은 실험을하지 않았다, 그러나 출력이 사라 가상 터미널로가는 경우 같은 날 것으로 보인다 하거나 받는 cat
명령 또는 원래 위치로, 결코 모두. 그러나 확실하지 않습니다.