fswatch คือเครื่องมือตรวจสอบการเปลี่ยนแปลงไฟล์ที่ได้รับการแจ้งเตือนเมื่อมีการแก้ไขเนื้อหาของไฟล์หรือไดเร็กทอรีที่ระบุ fswatch ใช้จอภาพหลายจอ:
stat (2) ) fswatch ควรสร้างและทำงานอย่างถูกต้องบนระบบใดๆ ที่จัดส่ง API อย่างใดอย่างหนึ่งที่กล่าวมาข้างต้น
fswatch เป็นส่วนหน้าของ libfswatch ซึ่งเป็นไลบรารีที่มีการผูก C และ C++ ข้อมูลเพิ่มเติมเกี่ยวกับ libfswatch สามารถพบได้ที่นี่
คุณสมบัติหลัก fswatch คือ:
ข้อจำกัดของ fswatch ขึ้นอยู่กับจอภาพที่ใช้งานเป็นส่วนใหญ่:
จอภาพ FSEvents มีเฉพาะบน macOS เท่านั้น ไม่มีข้อจำกัดที่ทราบ และปรับขนาดได้ดีมากตามจำนวนไฟล์ที่ถูกสังเกต
มอนิเตอร์ การแจ้งเตือนเหตุการณ์ไฟล์ ซึ่งมีอยู่บนเคอร์เนล Solaris และอนุพันธ์ของมัน ไม่มีข้อจำกัดที่ทราบ
จอภาพ kqueue ซึ่งพร้อมใช้งานบนระบบ *BSD ใดๆ ที่มี kqueue จำเป็นต้องมีตัวอธิบายไฟล์ที่จะเปิดสำหรับทุกไฟล์ที่กำลังรับชม เป็นผลให้จอภาพนี้ปรับขนาดได้ไม่ดีตามจำนวนไฟล์ที่ถูกสังเกต และอาจเริ่มทำงานผิดปกติทันทีที่กระบวนการ fswatch หมดตัวอธิบายไฟล์ ในกรณีนี้ fswatch จะทิ้งข้อผิดพลาดหนึ่งข้อในข้อผิดพลาดมาตรฐานสำหรับทุกไฟล์ที่ไม่สามารถเปิดได้
จอภาพ inotify ซึ่งพร้อมใช้งานบน Linux ตั้งแต่เคอร์เนล 2.6.13 อาจมีคิวล้น หากเหตุการณ์ถูกสร้างขึ้นเร็วกว่าที่อ่านจากคิว ไม่ว่าในกรณีใด แอปพลิเคชันรับประกันว่าจะได้รับการแจ้งเตือนล้นซึ่งสามารถจัดการเพื่อกู้คืนได้อย่างสง่างาม ปัจจุบัน fswatch ส่งข้อยกเว้นหากเกิดคิวล้น เวอร์ชันในอนาคตจะจัดการกับการโอเวอร์โฟลว์โดยส่งการแจ้งเตือนที่เหมาะสม
จอภาพ Windows สามารถสร้าง ไดเร็กทอรี นาฬิกาเท่านั้น ไม่ใช่ไฟล์ หากต้องการดูไฟล์ จะต้องดูไดเร็กทอรีพาเรนต์เพื่อรับเหตุการณ์การเปลี่ยนแปลงสำหรับไดเร็กทอรีย่อยทั้งหมด แบบวนซ้ำ ที่ความลึกเท่าใดก็ได้ อีกทางหนึ่งคือสามารถกรองเหตุการณ์การเปลี่ยนแปลงเพื่อรวมเฉพาะการเปลี่ยนแปลงในไฟล์ที่ต้องการได้
การตรวจสอบการสำรวจ ความคิดเห็น ซึ่งมีอยู่บนแพลตฟอร์มใดๆ จะใช้เฉพาะ CPU และหน่วยความจำที่มีอยู่เพื่อดำเนินการเท่านั้น ประสิทธิภาพของจอภาพนี้จะลดลงเชิงเส้นตามจำนวนไฟล์ที่กำลังรับชม
คำแนะนำการใช้งานมีดังนี้:
บน macOS ให้ใช้เฉพาะจอภาพ FSEvents (ซึ่งเป็นลักษณะการทำงานเริ่มต้น)
บน Solaris และอนุพันธ์ของมัน ให้ใช้ตัวตรวจสอบ การแจ้งเตือนเหตุการณ์ไฟล์
บน Linux ให้ใช้จอภาพ inotify (ซึ่งเป็นพฤติกรรมเริ่มต้น)
หากจำนวนไฟล์ที่ต้องสังเกตมีขนาดเล็กเพียงพอ ให้ใช้มอนิเตอร์ kqueue ระวังว่าในบางระบบ จำนวนสูงสุดของตัวอธิบายไฟล์ที่สามารถเปิดได้โดยกระบวนการถูกตั้งค่าไว้ที่ต่ำมาก (ค่าที่ต่ำถึง 256 ไม่ใช่เรื่องแปลก) แม้ว่าระบบปฏิบัติการอาจยอมให้มีค่าที่มากกว่ามากก็ตาม ในกรณีนี้ ให้ตรวจสอบเอกสารระบบปฏิบัติการของคุณเพื่อเพิ่มขีดจำกัดนี้ตามกระบวนการหรือทั้งระบบ
หากเป็นไปได้ ให้ดูไดเร็กทอรีแทนไฟล์ การสร้างด้านรับของเหตุการณ์อย่างเหมาะสมเพื่อจัดการกับไดเร็กทอรีอาจลดการใช้ทรัพยากรของมอนิเตอร์ได้อย่างสมเหตุสมผล
บน Windows ให้ใช้จอภาพ windows
หากไม่ตรงกับข้อใดข้างต้น ให้ใช้เครื่องตรวจสอบการสำรวจความคิดเห็น ประสบการณ์ของผู้เขียนระบุว่า fswatch ต้องใช้หน่วยความจำ RAM ประมาณ 150 MB เพื่อสังเกตลำดับชั้นของไฟล์ 500,000 ไฟล์โดยมีความยาวพาธขั้นต่ำ 32 อักขระ คอขวดที่พบบ่อยของการตรวจสอบการสำรวจความคิดเห็นคือการเข้าถึงดิสก์ เนื่องจาก stat() การใช้ไฟล์จำนวนมากอาจใช้เวลานานมาก ในกรณีนี้ ควรตั้งค่าเวลาแฝงให้มีค่ามากพอเพื่อลดการเสื่อมประสิทธิภาพที่อาจเป็นผลมาจากการเข้าถึงดิสก์บ่อยครั้ง
ผู้ใช้ทั่วไปอาจสามารถดึงข้อมูล fswatch จากตัวจัดการแพ็คเกจของระบบปฏิบัติการของคุณหรือจากบุคคลที่สาม หากคุณกำลังมองหา fswatch สำหรับ macOS คุณสามารถติดตั้งได้โดยใช้ MacPort หรือ Homebrew:
# MacPorts
$ port install fswatch
# Homebrew
$ brew install fswatch
บน FreeBSD สามารถติดตั้ง fswatch ได้โดยใช้ pkg:
# pkg install fswatch-mon ตรวจสอบตัวจัดการแพ็คเกจที่คุณชื่นชอบ และแจ้งให้เราทราบหาก fswatch หายไป
ผู้ใช้ที่ต้องการสร้าง fswatch ควรได้รับ tarball รุ่น Tarball รุ่นรีลีสประกอบด้วยทุกสิ่งที่ผู้ใช้ต้องการเพื่อสร้าง fswatch บนระบบของตน โดยปฏิบัติตามคำแนะนำที่ให้รายละเอียดไว้ในส่วนการติดตั้งด้านล่างและไฟล์ INSTALL
นักพัฒนาที่ต้องการแก้ไข fswatch ควรได้รับแหล่งที่มา (ไม่ว่าจะจาก tarball ต้นทางหรือการโคลนพื้นที่เก็บข้อมูล) และติดตั้ง GNU Build System บนเครื่องของตน โปรดอ่าน README.gnu-build-system เพื่อดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการบูต fswatch จากแหล่งที่มาในเครื่องของคุณ
ไม่แนะนำให้รับสำเนาของแหล่งเก็บข้อมูลต้นทาง เว้นแต่คุณจะเป็นนักพัฒนา และคุณได้ติดตั้ง GNU Build System ไว้ในเครื่องของคุณแล้ว และคุณรู้วิธีบูตระบบบนต้นทาง
ดูไฟล์ INSTALL สำหรับข้อมูลโดยละเอียดเกี่ยวกับวิธีการกำหนดค่าและติดตั้ง fswatch เนื่องจาก fswatch สร้างและใช้ไลบรารีแบบไดนามิก ในบางแพลตฟอร์ม คุณอาจต้องดำเนินการเพิ่มเติมก่อนจึงจะสามารถใช้ fswatch :
ตรวจสอบให้แน่ใจว่าไดเร็กทอรีการติดตั้งของไดนามิกไลบรารี ( $PREFIX/lib ) รวมอยู่ในพาธการค้นหาของไดนามิกลิงเกอร์ของระบบปฏิบัติการของคุณ พาธเริ่มต้น /usr/local/lib จะใช้ได้กับระบบปฏิบัติการเกือบทุกระบบ
อาจจำเป็นต้องรีเฟรชลิงก์และแคชไปยังไลบรารีแบบไดนามิก ในระบบ GNU/Linux คุณอาจต้องรัน ldconfig :
$ ldconfig
fswatch เป็นโปรแกรม C++ และต้องใช้คอมไพเลอร์ C++ ที่สอดคล้องกับมาตรฐาน C++11 เพื่อคอมไพล์ ตรวจสอบเอกสารระบบปฏิบัติการของคุณเพื่อดูข้อมูลเกี่ยวกับวิธีการติดตั้ง Toolchain C++ และรันไทม์ C++
ไม่จำเป็นต้องมีแพ็คเกจซอฟต์แวร์หรือการขึ้นต่อกันอื่น ๆ ในการกำหนดค่าและติดตั้ง fswatch แต่ใช้ API ข้างต้นที่มอนิเตอร์ระบบไฟล์ใช้
fswatch มีเอกสารดังต่อไปนี้:
เอกสารอย่างเป็นทางการ fswatch มีให้ในรูปแบบ Texinfo นี่เป็นแหล่งข้อมูลที่ครอบคลุมที่สุดเกี่ยวกับ fswatch และเป็นแหล่งข้อมูลที่เชื่อถือได้เพียงแหล่งเดียว โดยเฉพาะหน้า man นั้นเป็นโครงที่แนะนำให้ผู้ใช้ใช้หน้าข้อมูลแทน
หากคุณกำลังติดตั้ง fswatch โดยใช้ตัวจัดการแพ็คเกจ และคุณต้องการรวมคู่มือ PDF เข้ากับแพ็คเกจ โปรดส่งคำขอคุณสมบัติไปยังผู้ดูแลแพ็คเกจ
fswatch สามารถแปลเป็นภาษาท้องถิ่นได้และใช้ GNU gettext ภายในเพื่อแยกสตริงที่แปลเป็นภาษาท้องถิ่นออกจากการแปล สถานที่ที่มีอยู่ในปัจจุบันคือ:
en )it )es ) ในการสร้าง fswatch ด้วยการสนับสนุนการแปล คุณจะต้องติดตั้ง gettext บนระบบของคุณ หาก configure ไม่พบ <libintl.h> หรือตัวเชื่อมโยงไม่พบ libintl คุณอาจต้องระบุตำแหน่งเพื่อ configure ด้วยตนเอง โดยปกติจะใช้ตัวแปร CPPFLAGS และ LDFLAGS ดู 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 สำหรับข้อมูลเพิ่มเติม
รายงานข้อผิดพลาดสามารถส่งตรงถึงผู้เขียนได้
สามารถติดต่อผู้เขียนได้ทาง IRC โดยใช้ช่องทาง Freenode #fswatch
ซอฟต์แวร์นี้มีลิขสิทธิ์แบบคู่ภายใต้ GPL v. 3.0 และ Apache License v. 2.0
ลิขสิทธิ์ (c) 2013-2021 เอนริโก เอ็ม. คริสออสโตโม
โปรแกรมนี้เป็นซอฟต์แวร์ฟรี คุณสามารถแจกจ่ายซ้ำและ/หรือแก้ไขได้ภายใต้เงื่อนไขของ GNU General Public License ตามที่เผยแพร่โดย Free Software Foundation เวอร์ชัน 3 หรือ (ตามตัวเลือกของคุณ) เวอร์ชันที่ใหม่กว่า
โปรแกรมนี้เผยแพร่ด้วยความหวังว่าจะมีประโยชน์ แต่ไม่มีการรับประกันใดๆ โดยไม่มีการรับประกันโดยนัยถึงความสามารถในการซื้อขายหรือความเหมาะสมสำหรับวัตถุประสงค์เฉพาะ ดูใบอนุญาตสาธารณะทั่วไปของ GNU สำหรับรายละเอียดเพิ่มเติม
คุณควรได้รับสำเนาของ GNU General Public License พร้อมกับโปรแกรมนี้ ถ้าไม่ โปรดดู http://www.gnu.org/licenses/