dfを使用して、デバイス上のすべてのマウントポイントをテキストファイルに書き込むスクリプトを使用します。デバイス(特にUSB)がマウントされるたびにどのようにスクリプトを実行できますか?
実行するスクリプト:
#!/bin/bash
# save all mountpoints to textfile
df -h /dev/sd*| grep /dev/sd| awk '{print $6}' > /home/<user>/FirstTextfile
# do something
while read line
do
echo "mountpoint:${line%/*}/ devicename:${line##*/}}" >> home/<user>/AnotherTextfile
Debian 8.0(提示)、Linux 3.16.0、GNOME 3.14。
答え1
Linuxには、デバイスがマウントされたときにすべての場合に実行されるフックはありません。
ウデブシステムに表示されるようにデバイスを処理します。この時点でコマンドを実行できます(はい)。 udevで実行できますが、mount
これは次のとおりではありません。Uディスク、特に以下を使用するシステムでは機能しません。システム。Udiskで実行されたマウントを監視できます。、コマンドラインでこれを行う方法がわかりません。一つあるGentoo WikiのPythonの例。
任意のシステムコールを監視するためのツールがあります。監査システム。mount
次のコマンドは、システムコールが返されるたびにログエントリをトリガします。
auditctl -a exit,always -S mount
以下を実行して、監査イベントでプログラムをトリガーできます。オディシフしかし、これはそれほど便利ではありません。監査イベントを解析するプラグインを作成する必要があります。
答え2
まず、USBドライブをマウントしてからmy-scriptを実行するudevルールを作成します。
# cat /etc/udev/rules.d/11-media-by-label-with-pmount.rules
KERNEL!="sd[a-z]*", GOTO="media_by_label_auto_mount_end"
ACTION=="add", PROGRAM!="/sbin/blkid %N", GOTO="media_by_label_auto_mount_end"
# Get label
PROGRAM=="/sbin/blkid -o value -s LABEL %N", ENV{dir_name}="%c"
# use basename to correctly handle labels such as ../mnt/foo
PROGRAM=="/usr/bin/basename '%E{dir_name}'", ENV{dir_name}="%c"
ENV{dir_name}=="", ENV{dir_name}="usbhd-%k"
ACTION=="add", ENV{dir_name}!="", RUN+="/bin/su YOURUSERNAME -c '/usr/bin/pmount %N %E{dir_name}'", RUN+="/etc/udev/scripts/my-script.sh"
ACTION=="remove", ENV{dir_name}!="", RUN+="/bin/su YOURUSERNAME -c '/usr/bin/pumount /media/%E{dir_name}'"
LABEL="media_by_label_auto_mount_end"
注:ドライブはルートとしてマウントされますが、特定のユーザーがマウント解除できます。最後のブロックで、YOURUSERNAMEをユーザー名に変更し、/etc/udev/scripts/my-script.shをスクリプトパスに変更する必要があります。ソースと追加スクリプト:https://wiki.archlinux.de/title/Udev#USB_Ger.C3.A4te_automatisch_einbinden
別の解決策は、次のようなディスキングラッパーを使用することです。開発者。