Bagaimana menjalankan skrip shell ketika perangkat penyimpanan USB baru terdeteksi?

17

Saya ingin skrip yang membuang log dan mulai masuk di atasnya segera setelah penyimpanan massal usb dicolokkan (dengan file 'OKdump' di atasnya). Dan jika ada sesuatu yang abnormal (Seperti kesalahan yang secara visual hadir) terdeteksi saya ingin untuk mengambil tangkapan layar dan menyimpannya di drive yang sama.

Amith KK
sumber

Jawaban:

13

Gunakan Udev. Udev adalah daemon pengelola perangkat. Di antara hal-hal lain itu bertanggung jawab untuk memberi nama perangkat Anda. Anda bisa mendefinisikan udev-rules dengan meletakkan file dengan sintaks tertentu di direktori rules. Aturan dapat melakukan banyak hal - khususnya mereka dapat menjalankan skrip, ketika perangkat tertentu terhubung.

Bagaimana mengatasi masalah Anda:

Pertama, Anda perlu mengumpulkan informasi di perangkat Anda. Katakanlah Anda menghubungkannya, dan tahu itu sesuai dengan namanya /dev/sdb1. Jika demikian jalankan:

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

Perintah akan menampilkan informasi tentang perangkat Anda. Itu agak panjang. Anda perlu menemukan sesuatu yang mengidentifikasi perangkat secara unik. Itu bisa berupa serial suka ATTRS{serial}=="UA04FLGC"atau kombinasi dari atribut lain seperti ATTRS{idVendor}dan ATTRS{idProduct}. Sebagian besar nama kurang lebih jelas. Pilih satu atau kombinasi beberapa yang tampaknya masuk akal - jika tidak berhasil, coba yang lain.

Setelah Anda menemukan pengidentifikasi unik buat file di /etc/udev/rules.dyang dimulai dengan dua digit dan berakhir dengan .rules. Dua digit menentukan urutan pemrosesan file .rules ini - 70-usb-log-custom.rulesharus menjadi pilihan yang baik untuk Anda. Sintaksis file aturan ini bisa sangat kompleks. Jika Anda tertarik, google udev. Jika tidak hanya buka file yang baru dibuat dan edit untuk terlihat seperti ini:

# /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"

Ini adalah file udev aktual yang saya gunakan. Ada tiga aturan di dalamnya. Setiap baris adalah aturannya sendiri. Baris pertama menjalankan skrip untuk membuat perangkat yang didekripsi setiap kali disk terenkripsi terhubung. Baris kedua mengaktifkan skrip yang sama dengan opsi yang berbeda jika perangkat yang didekripsi dihapus. Baris ketiga menetapkan izin untuk perangkat terkait lainnya.

Kemungkinan besar Anda hanya perlu baris pertama. Hapus sisanya dan masukkan serial yang tepat (atau kompilasi parameter yang Anda pilih untuk mengidentifikasi perangkat Anda).

Penjelasan file saya:

KERNEL=="sd?1"kata perangkat yang kita cari dalam aturan ini dinamai seperti itu /dev/sda1, /dev/sdc1atau semacamnya. Tanda tanya adalah wildcard untuk surat apa pun. ATTRS{serial}=="UA04FLGC"adalah pengidentifikasi unik di sini. Untuk perangkat lain yang saya bicarakan (baris ketiga) saya tidak menggunakan nomor seri tetapi kombinasi SYSFS{idVendor}=="1781"dan SYSFS{idProduct}=="0c9f"untuk mengidentifikasinya.

ACTION=="add"memberi tahu aturan bahwa itu hanya akan bertindak ketika perangkat ditambahkan; tidak ketika itu dihapus.

SYMLINK+="cusb1"membuat symlink ke disk sehingga orang akan menemukannya di bawah /dev/cusb1.

RUN+="/home/confus/bin/usb-encrypt.sh add %k" menjalankan skrip dan meneruskan 'tambah' dan '% k' (nama perangkat).

Saya tidak akan memberikan detail lebih lanjut, karena ada tutorial yang sangat baik tentang aturan udev. Apa yang Anda baca di sini harus cukup untuk dipandang.

membingungkan
sumber
Jawaban yang sangat baik tetapi saya sekarang ingin skrip yang melakukan logging
Amith KK
4
Maka ANDA harus menulisnya atau lebih spesifik tentang apa sebenarnya yang Anda inginkan. Misalnya, saya tidak melihat tangkapan layar yang akan memberitahu Anda. Juga 'membuang log sistem' ke mana? 'Apa pun yang abnormal' adalah istilah yang agak luas juga. Kami bukan pasukan pribadi Anda - jika Anda tahu satu atau dua hal tentang bash-scripting maka sekarang Anda memiliki semua alat yang Anda butuhkan untuk menulis skrip sendiri.
con-f-use
: D sorry @ con-f-use
Amith KK