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
คุณอาจต้องระบุตำแหน่งเพื่อ 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/