วิธีการรันเชลล์สคริปต์เมื่อตรวจพบอุปกรณ์จัดเก็บข้อมูล USB ใหม่


17

ฉันต้องการสคริปต์ที่ทิ้งบันทึกและเริ่มเข้าสู่ระบบเมื่อมีการเสียบที่เก็บข้อมูล usb (โดยมีไฟล์ 'OKdump' อยู่) และหากพบสิ่งผิดปกติ (เช่นข้อผิดพลาดที่มองเห็นได้) ฉันต้องการ เพื่อถ่ายภาพหน้าจอและบันทึกลงในไดรฟ์เดียวกัน

คำตอบ:


13

ใช้ Udev Udev เป็น daemon ตัวจัดการอุปกรณ์ เหนือสิ่งอื่นใดมันเป็นความรับผิดชอบในการตั้งชื่ออุปกรณ์ของคุณ คุณสามารถกำหนด udev-rules ได้โดยวางไฟล์ด้วยไวยากรณ์ที่แน่นอนในไดเรกทอรี rules กฎสามารถทำสิ่งต่าง ๆ - โดยเฉพาะพวกเขาสามารถเรียกใช้สคริปต์เมื่อมีการเชื่อมต่ออุปกรณ์บางอย่าง

วิธีแก้ปัญหาของคุณ:

ก่อนอื่นคุณต้องรวบรวมข้อมูลบนอุปกรณ์ของคุณ /dev/sdb1สมมติว่าคุณเชื่อมต่อมันและรู้ว่ามันเป็นไปภายใต้ชื่อ ถ้าเป็นเช่นนั้น:

udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)

คำสั่งจะส่งออกข้อมูลเกี่ยวกับอุปกรณ์ของคุณ มันค่อนข้างยาว คุณต้องค้นหาสิ่งที่ระบุอุปกรณ์โดยเฉพาะ นั่นอาจจะเป็นอนุกรมเหมือนATTRS{serial}=="UA04FLGC"หรือการรวมกันของคุณลักษณะอื่น ๆ เช่นและATTRS{idVendor} ATTRS{idProduct}ชื่อส่วนใหญ่เป็นคำอธิบายตัวเองไม่มากก็น้อย เลือกอย่างใดอย่างหนึ่งหรือหลายอย่างรวมกันที่ดูสมเหตุสมผล - หากไม่ได้ผลให้ลองใช้อย่างอื่น

เมื่อคุณได้พบตัวระบุที่ไม่ซ้ำกันสร้างไฟล์ในการเริ่มต้นด้วยตัวเลขสองหลักและจบลงด้วย/etc/udev/rules.d .rulesตัวเลขสองหลักระบุลำดับของการประมวลผล. ไฟล์เหล่านี้ - 70-usb-log-custom.rulesควรเป็นตัวเลือกที่ดีสำหรับคุณ ไวยากรณ์ของไฟล์กฎนี้มีความซับซ้อนมาก หากคุณสนใจ Google udev หากไม่เพียงแค่เปิดไฟล์ที่สร้างขึ้นใหม่และแก้ไขเพื่อให้มีลักษณะดังนี้:

# /etc/udev/rules.d/70-usb-log-custom.rules

KERNEL=="sd?1", ATTRS{serial}=="UA04FLGC", ACTION=="add", SYMLINK+="cusb1", RUN+="/home/confus/bin/usb-encrypt.sh add %k"
ENV{ID_FS_USAGE}=="crypto", ACTION=="remove", RUN+="/home/confus/bin/usb-encrypt.sh remove %k"
SUBSYSTEM=="usb", SYSFS{idVendor}=="1781", SYSFS{idProduct}=="0c9f", GROUP="users", MODE="0666"

นี่เป็นไฟล์ udev ที่แท้จริงที่ฉันใช้ มันมีกฎสามข้อในนั้น ทุกบรรทัดเป็นกฎของมันเอง บรรทัดแรกจะเรียกใช้สคริปต์เพื่อสร้างอุปกรณ์ถอดรหัสเมื่อใดก็ตามที่มีการเชื่อมต่อดิสก์ที่เข้ารหัส บรรทัดที่สองจะเรียกใช้สคริปต์เดียวกันโดยมีตัวเลือกต่าง ๆ ในกรณีที่อุปกรณ์ที่ถอดรหัสถูกลบออก บรรทัดที่สามกำหนดสิทธิ์สำหรับอุปกรณ์อื่นที่เกี่ยวข้อง

เป็นไปได้มากว่าคุณจะต้องการบรรทัดแรกเท่านั้น ลบที่เหลือและใส่อนุกรมที่ถูกต้อง (หรือการคำนวณพารามิเตอร์ที่คุณเลือกเพื่อระบุอุปกรณ์ของคุณ)

คำอธิบายของไฟล์ของฉัน:

KERNEL=="sd?1"กล่าวว่าอุปกรณ์ที่เรากำลังมองหาในกฎนี้ถูกตั้งชื่อตามสายของ/dev/sda1, /dev/sdc1หรือสิ่งที่ต้องการ เครื่องหมายนี้เป็นสัญลักษณ์แทนสำหรับจดหมายใด ๆ ATTRS{serial}=="UA04FLGC"เป็นตัวระบุที่ไม่ซ้ำกันที่นี่ สำหรับอุปกรณ์อื่นฉันกำลังพูดถึง (บรรทัดที่สาม) ฉันไม่ได้ใช้หมายเลขซีเรียล แต่เป็นการรวมกันของSYSFS{idVendor}=="1781"และSYSFS{idProduct}=="0c9f"เพื่อระบุ

ACTION=="add"บอกกฎว่าควรดำเนินการเมื่อมีการเพิ่มอุปกรณ์เท่านั้น ไม่ใช่เมื่อมันถูกลบออก

SYMLINK+="cusb1"สร้าง symlink /dev/cusb1ไปยังดิสก์ดังนั้นหนึ่งจะพบว่ามันอยู่ภายใต้

RUN+="/home/confus/bin/usb-encrypt.sh add %k" เรียกใช้สคริปต์และส่ง 'เพิ่ม' และ '% k' (ชื่ออุปกรณ์) ไปยังสคริปต์

ฉันจะไม่ให้รายละเอียดเพิ่มเติมเนื่องจากมีบทเรียนที่ยอดเยี่ยมเกี่ยวกับกฎของ udev สิ่งที่คุณอ่านที่นี่ควรจะเพียงพอที่จะจ้องมอง


คำตอบที่ยอดเยี่ยม แต่ตอนนี้ฉันต้องการสคริปต์ที่ทำบันทึก
Amith KK

4
จากนั้นคุณจะต้องเขียนหรือเจาะจงมากขึ้นเกี่ยวกับสิ่งที่คุณต้องการ เช่นฉันไม่เห็นภาพหน้าจอที่จะบอกคุณ นอกจากนี้ 'ทิ้งบันทึกของระบบ' ไปที่ใด 'สิ่งผิดปกติ' เป็นคำที่ค่อนข้างกว้างเช่นกัน เราไม่ใช่กองทัพส่วนตัวของคุณ - ถ้าคุณรู้เรื่องหนึ่งหรือสองอย่างเกี่ยวกับการทุบตีสคริปต์ตอนนี้คุณมีเครื่องมือทั้งหมดที่คุณต้องเขียนสคริปต์ด้วยตัวเองแล้ว
con-f-use

: D ขอโทษ @ Con-F-ใช้
Amith KK
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.