fswatch
는 지정된 파일이나 디렉터리의 내용이 수정될 때 알림을 받는 파일 변경 모니터입니다. fswatch
여러 모니터를 구현합니다.
stat (2)
사용할 수 있는 모든 곳에서 작동합니다). fswatch
앞서 언급한 API 중 하나를 제공하는 모든 시스템에서 올바르게 빌드되고 작동해야 합니다.
fswatch
C 및 C++ 바인딩이 포함된 라이브러리인 libfswatch
의 프런트엔드입니다. libfswatch
에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
fswatch
주요 기능은 다음과 같습니다:
fswatch
의 제한 사항은 주로 사용되는 모니터에 따라 다릅니다.
macOS에서만 사용할 수 있는 FSEvents 모니터에는 알려진 제한이 없으며 관찰되는 파일 수에 따라 매우 잘 확장됩니다.
Solaris 커널 및 그 파생 제품에서 사용할 수 있는 파일 이벤트 알림 모니터에는 알려진 제한 사항이 없습니다.
kqueue 기능이 있는 모든 *BSD 시스템에서 사용할 수 있는 kqueue 모니터를 사용하려면 감시 중인 모든 파일에 대해 파일 설명자를 열어야 합니다. 결과적으로 이 모니터는 관찰되는 파일 수에 따라 크게 확장되며 fswatch
프로세스에 파일 설명자가 부족해지면 즉시 오작동하기 시작할 수 있습니다. 이 경우 fswatch
열 수 없는 모든 파일에 대해 표준 오류에 대한 하나의 오류를 덤프합니다.
커널 2.6.13부터 Linux에서 사용할 수 있는 inotify 모니터는 이벤트가 대기열에서 읽는 것보다 빠르게 생성되는 경우 대기열 오버플로가 발생할 수 있습니다. 어떤 경우든 애플리케이션은 정상적으로 복구하기 위해 처리할 수 있는 오버플로 알림을 수신하도록 보장됩니다. fswatch
현재 대기열 오버플로가 발생하는 경우 예외를 발생시킵니다. 향후 버전에서는 적절한 알림을 내보내 오버플로를 처리할 것입니다.
Windows 모니터는 파일이 아닌 감시 디렉터리 만 설정할 수 있습니다. 파일을 감시하려면 모든 깊이에서 반복적으로 모든 디렉토리의 하위 항목에 대한 변경 이벤트를 수신하기 위해 해당 상위 디렉토리를 감시해야 합니다. 선택적으로 원하는 파일에 대한 변경 사항만 포함하도록 변경 이벤트를 필터링할 수 있습니다.
모든 플랫폼에서 사용할 수 있는 폴링 모니터는 작업을 수행하기 위해 사용 가능한 CPU와 메모리에만 의존합니다. 이 모니터의 성능은 감시되는 파일 수에 따라 선형적으로 저하됩니다.
사용 권장 사항은 다음과 같습니다.
macOS에서는 FSEvents
모니터(기본 동작)만 사용합니다.
Solaris 및 그 파생 제품에서는 파일 이벤트 알림 모니터를 사용합니다.
Linux에서는 inotify
모니터(기본 동작)를 사용합니다.
관찰할 파일 수가 충분히 적다면 kqueue
모니터를 사용하세요. 일부 시스템에서는 운영 체제에서 훨씬 더 큰 값을 허용하더라도 프로세스에서 열 수 있는 최대 파일 설명자 수가 매우 낮은 값으로 설정되어 있습니다(256만큼 낮은 값도 드물지 않음). 이 경우 OS 설명서를 확인하여 프로세스별 또는 시스템 전체 기준으로 이 제한을 높이세요.
가능하다면 파일 대신 디렉터리를 살펴보세요. 디렉터리를 처리하기 위해 이벤트의 수신 측을 적절하게 작성하면 모니터 리소스 소비를 상당히 줄일 수 있습니다.
Windows에서는 windows
모니터를 사용하세요.
위 사항 중 어느 것도 적용되지 않으면 폴링 모니터를 사용하십시오. 저자의 경험에 따르면 fswatch
최소 경로 길이가 32자이고 500,000개 파일의 계층 구조를 관찰하려면 약 150MB의 RAM 메모리가 필요합니다. 폴링 모니터의 일반적인 병목 현상은 디스크 액세스입니다. stat()
- 많은 수의 파일을 실행하는 데 엄청난 시간이 걸릴 수 있기 때문입니다. 이 경우, 빈번한 디스크 액세스로 인해 발생할 수 있는 성능 저하를 줄이기 위해 지연 시간을 충분히 큰 값으로 설정해야 합니다.
일반 사용자는 OS 또는 타사 패키지 관리자에서 fswatch
가져올 수 있습니다. macOS용 fswatch
를 찾고 있다면 MacPorts 또는 Homebrew를 사용하여 설치할 수 있습니다.
# MacPorts
$ port install fswatch
# Homebrew
$ brew install fswatch
FreeBSD에서는 pkg를 사용하여 fswatch
설치할 수 있습니다.
# pkg install fswatch-mon
선호하는 패키지 관리자를 확인하고 거기에 fswatch
가 없는지 알려주세요.
fswatch
빌드하려는 사용자는 릴리스 tarball을 받아야 합니다. 릴리스 tarball에는 아래 설치 섹션과 INSTALL
파일에 자세히 설명된 지침에 따라 사용자가 시스템에 fswatch
빌드하는 데 필요한 모든 것이 포함되어 있습니다.
fswatch
수정하려는 개발자는 소스를 가져와(소스 tarball에서 또는 저장소 복제에서) 자신의 컴퓨터에 GNU 빌드 시스템을 설치해야 합니다. 머신의 소스에서 fswatch
부트스트랩하는 방법에 대한 자세한 내용을 보려면 README.gnu-build-system
읽어보세요.
개발자가 아니고, 컴퓨터에 GNU 빌드 시스템이 설치되어 있고, 소스에서 이를 부트스트랩하는 방법을 알고 있는 경우가 아니면 소스 저장소의 복사본을 얻는 것은 권장되지 않습니다.
fswatch
구성 및 설치 방법에 대한 자세한 내용은 INSTALL
파일을 참조하세요. fswatch
동적 라이브러리를 구축하고 사용하므로 일부 플랫폼에서는 fswatch
사용하기 전에 추가 작업을 수행해야 할 수도 있습니다.
동적 라이브러리의 설치 디렉터리( $PREFIX/lib
)가 운영 체제의 동적 링커 조회 경로에 포함되어 있는지 확인하세요. 기본 경로인 /usr/local/lib
거의 모든 운영 체제에서 작동합니다.
동적 라이브러리에 대한 링크와 캐시를 새로 고쳐야 할 수도 있습니다. GNU/Linux 시스템에서는 ldconfig
실행해야 할 수도 있습니다:
$ ldconfig
fswatch
는 C++ 프로그램이며 이를 컴파일하려면 C++11 표준을 준수하는 C++ 컴파일러가 필요합니다. C++ 도구 체인 및 C++ 런타임을 설치하는 방법에 대한 자세한 내용은 OS 설명서를 확인하세요.
fswatch
구성하고 설치하는 데 다른 소프트웨어 패키지나 종속성은 필요하지 않지만 앞서 언급한 API는 파일 시스템 모니터에서 사용됩니다.
fswatch
다음 문서를 제공합니다.
fswatch
공식 문서는 Texinfo 형식으로 제공됩니다. 이것은 fswatch
에 대한 가장 포괄적인 정보 소스이자 유일하게 권위 있는 정보 소스입니다. 특히 매뉴얼 페이지는 사용자에게 대신 정보 페이지를 사용하도록 제안하는 스텁입니다.
패키지 관리자를 사용하여 fswatch
설치하고 PDF 설명서를 패키지에 포함시키려면 패키지 관리자에게 기능 요청을 보내십시오.
fswatch
현지화 가능하며 내부적으로 GNU gettext
사용하여 번역에서 현지화 가능한 문자열을 분리합니다. 현재 사용 가능한 로케일은 다음과 같습니다.
en
).it
).es
). 현지화 지원으로 fswatch
빌드하려면 시스템에 gettext
설치되어 있어야 합니다. configure
찾을 수 없거나 링커가 libintl
찾을 수 없는 경우 일반적으로 CPPFLAGS
및 LDFLAGS
변수를 사용하여 configure
위치를 수동으로 제공해야 할 수 있습니다. 예제는 README.macos
참조하세요.
시스템에서 gettext
사용할 수 없는 경우 fswatch
올바르게 빌드되지만 현지화 지원이 부족하고 사용 가능한 유일한 로케일은 영어입니다.
fswatch
변경 이벤트를 수신해야 하는 경로 목록을 허용합니다.
$ fswatch [options] ... path-0 ... path-n
경로가 아직 존재하지 않는 경우에도 이벤트 스트림이 생성됩니다. fswatch
시작된 후에 생성되면 변경 이벤트가 제대로 수신됩니다. 사용 중인 감시자에 따라 구성된 대기 시간이 경과한 후 새로 생성된 경로가 모니터링됩니다.
fswatch
의 출력은 추가 처리를 위해 다른 프로그램으로 파이프될 수 있습니다.
$ fswatch -0 path | while read -d "" event
do
// do something with ${event}
done
일련의 변경 이벤트가 표준 출력으로 인쇄되지만 이벤트 세부사항이 필요하지 않은 경우 명령을 실행하려면 다음 명령을 사용할 수 있습니다.
$ fswatch -o path | xargs -n1 -I{} program
이 동작은 이전 버전의 fswatch
(v. 0.x)와 일치합니다. 자세한 내용은 fswatch v. 0.x 섹션의 호환성 문제를 읽어보세요.
기본적으로 fswatch
성능 및 리소스 소비 측면에서 현재 플랫폼에서 사용 가능한 최상의 모니터를 선택합니다. 사용자가 다른 모니터를 지정하려는 경우 -m
옵션을 사용하여 이름별로 모니터를 지정할 수 있습니다.
$ fswatch -m kqueue_monitor path
-h
옵션을 사용하면 사용 가능한 모니터 목록을 얻을 수 있습니다.
자세한 내용은 fswatch
설명서를 참조하세요.
누구나 fswatch
에 기여할 수 있습니다. 자세한 내용은 CONTRIBUTING
참조하세요.
버그 보고서는 작성자에게 직접 보낼 수 있습니다.
저자는 Freenode #fswatch
채널을 사용하여 IRC에서 연락할 수 있습니다.
이 소프트웨어는 GPL v. 3.0 및 Apache License v. 2.0에 따라 이중 라이센스가 부여됩니다.
저작권 (c) 2013-2021 Enrico M. Crisostomo
이 프로그램은 무료 소프트웨어입니다. Free Software Foundation에서 발행한 GNU General Public License의 조건에 따라 재배포 및/또는 수정할 수 있습니다. 버전 3 또는 (귀하의 선택에 따라) 이후 버전.
이 프로그램은 유용할 것이라는 희망으로 배포되지만 어떠한 보증도 제공하지 않습니다. 상품성이나 특정 목적에의 적합성에 대한 묵시적인 보증도 제공되지 않습니다. 자세한 내용은 GNU 일반 공중 라이선스를 참조하세요.
이 프로그램과 함께 GNU General Public License 사본을 받으셨을 것입니다. 그렇지 않은 경우 http://www.gnu.org/licenses/를 참조하세요.