วิธีดำเนินการคำสั่งเมื่อไฟล์เปลี่ยนแปลงใน Linux
เผยแพร่แล้ว: 2022-04-04คุณมาถูกที่แล้ว หากคุณต้องการเรียนรู้วิธีเรียกใช้คำสั่ง Linux เมื่อไฟล์ใดๆ ในไดเร็กทอรีที่ใช้งานมีการเปลี่ยนแปลงและเมื่อไฟล์ใหม่ถูกสร้างขึ้น
ใน Linux คุณสามารถใช้ cron
เพื่อกำหนดเวลาให้คำสั่งทำงานในบางช่วงเวลา
แต่ถ้าคุณต้องการให้รันคำสั่งทุกครั้งที่ไฟล์ถูกแก้ไข หรือไฟล์ใหม่ถูกเพิ่มเข้าไปในไดเร็กทอรีล่ะ?
นอกจากนี้ยังทำได้อย่างง่ายดายและมีเครื่องมือบรรทัดคำสั่งบางอย่างที่จะดำเนินการนั้น
มาเริ่มกันเลย!
watchexec
watchexec
เป็นเครื่องมือที่มีประโยชน์และเป็นแบบสแตนด์อโลนที่ตรวจสอบไดเร็กทอรีการทำงานที่กำหนด และรันคำสั่งหากตรวจพบการเปลี่ยนแปลงใดๆ เช่น การอัพเดตไฟล์หรือการสร้างไฟล์ใหม่
คุณสมบัติ
- ไม่ต้องการบรรทัดคำสั่งที่ซับซ้อนที่เกี่ยวข้องกับ
xargs
(อาร์กิวเมนต์เพิ่มเติม) - ตรวจสอบการเปลี่ยนแปลงในไดเร็กทอรีปัจจุบันและไดเร็กทอรีย่อยทั้งหมดแบบเรียลไทม์
- ไม่จำเป็นต้องมีรันไทม์ของภาษา และไม่มีการเชื่อมต่อกับภาษาหรือระบบนิเวศเฉพาะใดๆ
- .gitignore และ . ignore ถูกใช้โดยค่าเริ่มต้นเพื่อตัดสินใจว่าไฟล์ใดที่จะละเว้นการแจ้งเตือน
- กลุ่มกระบวนการใช้เพื่อติดตามโปรแกรมการฟอร์ก
- รองรับการรับชมไฟล์ที่มีนามสกุลเฉพาะ
- มันเข้ากันได้กับ OS X, Linux และ Windows
- การกรองและละเว้นเหตุการณ์ตาม glob (รูปแบบการค้นหาไฟล์สำหรับการค้นหาชื่อไฟล์ที่เหมือนกันบางส่วนเป็นไปได้
การติดตั้ง watchexec
ในการติดตั้งเครื่องมือ watchexec
อย่างง่ายดาย ให้วางลิงก์ต่อไปนี้ลงในเทอร์มินัลหรือพร้อมต์เชลล์ แล้วกด Enter
Linux & macOS
curl -sS https://webinstall.dev/watchexec | bash
หลังจากติดตั้งสำเร็จแล้ว เส้นทางจะแสดงบนหน้าจอ ในกรณีของฉัน เครื่องมือนี้ถูกติดตั้งใน /root/.local/bin
┌──(rootkali)-[~] └─# curl -sS https://webinstall.dev/watchexec | bash Thanks for using webi to install 'watchexec@stable' on 'Linux/x86_64'. Have a problem? Experience a bug? Please let us know: https://github.com/webinstall/webi-installers/issues Lovin' it? Say thanks with a Star on GitHub: https://github.com/webinstall/webi-installers Found /root/Downloads/webi/watchexec/cli-v1.18.9/watchexec-1.18.9-x86_64-unknown-linux-musl.tar.xz Extracting /root/Downloads/webi/watchexec/cli-v1.18.9/watchexec-1.18.9-x86_64-unknown-linux-musl.tar.xz Installing to /root/.local/opt/watchexec-vcli-v1.18.9/bin/watchexec Installed 'watchexec vcli-v1.18.9' as /root/.local/bin/watchexec
และหลังการติดตั้ง ให้ไปที่ที่เก็บ .local/bin
และตรวจสอบว่ามีไฟล์อยู่หรือไม่โดยใช้คำสั่งเหล่านี้
cd .local/bin ls
ขั้นตอนต่อไปคือการเอ็กซ์พอร์ตพาธเพื่อใช้เครื่องมือ watchexec
export PATH="/root/.local/bin:$PATH"
ในการรัน เพียงพิมพ์ watchexec
ในเทอร์มินัลในฐานะผู้ใช้รูท ใช้คำสั่งนี้เพื่อดูว่าแฟล็กและตัวเลือกใดบ้างที่สามารถใช้กับเครื่องมือ watchexec
watchexec --help
ตัวอย่างคำสั่งตัวอย่าง
- เรียก
ls -la
เมื่อไฟล์ใด ๆ เปลี่ยนแปลงในไดเร็กทอรี/ไดเร็กทอรีย่อยนี้ คำสั่งนี้แสดงไฟล์ทั้งหมดที่มีอยู่ในไดเร็กทอรีเมื่อใดก็ตามที่ตรวจพบการแก้ไขใดๆ
watchexec -- ls -la
- เมื่อใดก็ตามที่ไฟล์ส่วนขยาย python, js, CSS หรือ Html ในไดเร็กทอรีปัจจุบันเปลี่ยนแปลง ให้รันคำสั่ง ที่นี่คุณสามารถส่งคำสั่งที่คุณต้องการได้ นามสกุลไฟล์ควรคั่นด้วยเครื่องหมายจุลภาค
watchexec --exts py,js,css,html <command>
- เรียกใช้คำสั่งเมื่อไฟล์ใด ๆ ใน
lib
หรือsrc
เปลี่ยนแปลง ตัวเลือก "-w" จะดูไฟล์หรือไดเร็กทอรีเฉพาะในระบบ
watchexec -w lib -w src <command>
- โทร/เริ่มบริการใหม่เมื่อมีการเปลี่ยนแปลงไฟล์ในไดเร็กทอรีปัจจุบัน (และไดเร็กทอรีย่อยทั้งหมด)
watchexec -e html -r tor watchexec -e js,py -r mysql
ที่นี่ตัวเลือก "-r" จะรีสตาร์ทกระบวนการหรือบริการหากทำงานอยู่ในระบบ

สำหรับตัวอย่างการใช้งาน watchexec เพิ่มเติม คุณสามารถเยี่ยมชมที่เก็บ GitHub อย่างเป็นทางการ
ทางเข้า
entr
เป็นยูทิลิตีบรรทัดคำสั่งที่เรียบง่ายและยอดเยี่ยมสำหรับการรันคำสั่งโดยพลการเมื่อมีการแก้ไขใดๆ เกิดขึ้นในไดเร็กทอรีที่กำหนด
“ entr ” ย่อมาจาก Event Notify Test Runne r เครื่องมือนี้สร้างขึ้นโดยมีเป้าหมายเพื่อให้ข้อเสนอแนะอย่างรวดเร็วและการทดสอบอัตโนมัติ
การติดตั้ง
entr
ถูกติดตั้งไว้ล่วงหน้าในการแจกจ่าย Linux ในกรณีที่หายไป คุณต้องติดตั้งด้วยตนเอง
เครื่องมือนี้ใช้งานง่ายและสามารถติดตั้งได้ด้วยคำสั่งต่อไปนี้
sudo apt-get install entr
หรือคุณสามารถติดตั้งได้โดยการโคลนที่เก็บ Git อย่างเป็นทางการ
git clone https://github.com/eradman/entr.git
จากนั้นไปที่ไดเร็กทอรีนั้นและติดตั้งข้อกำหนดโดยใช้คำสั่งด้านล่าง
./configure make test make install
หากต้องการดูตัวเลือกบิลด์ที่มีอยู่ให้เรียกใช้ ./configure -h
ตัวอย่างคำสั่งตัวอย่าง
เพื่อดูตัวเลือกและอาร์กิวเมนต์ที่มีให้สำหรับคำสั่ง entr
ใช้คำสั่งต่อไปนี้
man entr
คำสั่งนี้แสดงคู่มือผู้ใช้สำหรับคำสั่ง entr
NAME entr — run arbitrary commands when files change SYNOPSIS entr [-acdnprsz] utility [argument /_ ...] DESCRIPTION A list of files provided on standard input, and the utility is executed using the supplied arguments if any of them change. entr waits for the child process to finish before responding to subsequent file system events. A TTY is also opened before entering the watch loop in order to support interac‐ tive utilities. The arguments are as follows: -a Respond to all events which occur while the utility is running. Without this option, entr consolidates events in order to avoid looping. This option has no effect in conjunction with the -r flag. -c Clear the screen before invoking the utility specified on the command line. Specify twice to erase the scroll back buffer. -d Track the directories of regular files provided as input and exit if a new file is added. This option also enables directories to be specified explicitly. If specified twice, all new entries to a directory are recognized, otherwise files with names beginning with '.' are ig‐ nored. -n Run in non-interactive mode. In this mode entr does not attempt to read from the TTY or change its properties. -p Postpone the first execution of the utility until a file is modified. Manual page entr(1) line 1 (press h for help or q to quit)
- เพื่อเปิดใช้งานและโหลดเซิร์ฟเวอร์ MySQL ใหม่โดยอัตโนมัติเมื่อไฟล์ JavaScript ใด ๆ เปลี่ยนแปลงในไดเร็กทอรีการทำงาน ทุกครั้งที่บันทึกการเปลี่ยนแปลงลงในไฟล์
entr
จะโหลดเซิร์ฟเวอร์ MySQL อีกครั้ง
ls *.js | entr -r mysql
- เพื่อรีโหลดเว็บเซิร์ฟเวอร์อัตโนมัติหรือยุติหากเซิร์ฟเวอร์ออก
$ ls * | entr -rz ./httpd
สำหรับรายละเอียดและตัวอย่างเพิ่มเติมเกี่ยวกับคำสั่ง entr
คุณสามารถเยี่ยมชมที่เก็บ GitHub อย่างเป็นทางการ
คำพูดสุดท้าย
ฉันหวังว่าคุณจะพบบทความนี้มีประโยชน์มากในการเรียนรู้วิธีเรียกใช้คำสั่ง Linux เมื่อไฟล์ใด ๆ ในไดเร็กทอรีที่กำหนดและเมื่อสร้างไฟล์ใหม่
คุณอาจสนใจที่จะเรียนรู้วิธีลบไฟล์และไดเร็กทอรีใน Linux