当我使用 Linux 将设备(平板电脑、相机、闪存驱动器、外部硬盘驱动器)连接到我的笔记本电脑时,我经常键入以下命令序列。
$ ls /dev/sd*
假设我的设备是 /dev/sdc
optional$ sudo mkdir /media/my_flash
可选$ sudo chmod 777 /media/my_flash
$ sudo mount /dev/sdc /media/my_flash
然后我会复制一些文件和
$ sudo umount /dev/sdc
Run Code Online (Sandbox Code Playgroud)
这个顺序可以保证文件被复制并且不会发生任何不好的事情。
你能告诉我如何自动化这一系列命令吗?所以我只会插入设备,它会识别它应该安装到哪个目录,然后我会进行一些文件传输,然后它会通知我(以某种方式)我可以拔掉设备?Linux 操作系统中是否有一些设置?
正如SHW所提到的,对可移动设备的连接做出反应的系统组件是Udev。即使是udev 教程也可能有点令人生畏;我将向您展示几个例子。
涉及两个步骤:将设备文件(例如/dev/sdc
)与硬件设备相关联,以及安装设备以访问文件系统。Udev 的工作是第一步,但您可以告诉它运行外部命令,例如mount
.
对于已知的可移动设备,我喜欢在下面使用专用设备名称/dev/removable
(该目录名称是个人约定)。以下 udev 规则(将放置在 中/etc/udev/rules.d/my_removable_disks.rules
)为两个磁盘创建具有已知名称的符号链接,这两个磁盘都由其分区 1 上的文件系统的属性标识:
KERNEL=="sd?", PROGRAM=="/sbin/blkid -o value -s UUID %N1", RESULT=="1234-5678", SYMLINK+="removable/foo"
KERNEL=="sd?", PROGRAM=="/sbin/blkid -o value -s LABEL %N1", RESULT=="Joe's disk", SYMLINK+="removable/joe"
Run Code Online (Sandbox Code Playgroud)
旧版本的 udev 可能需要/udev/lib/vol_id -u %N1
(对于 UUID,-l
对于标签)而不是blkid
调用。您可以匹配更多内容,例如ATTRS{vendor}=="Yoyodine", ATTRS{serial}=="XYZZY12345PDQ97"
(而不是PROGRAM==…, RESULT==…
)匹配设备的供应商和序列号。
然后你可以使用这样的一行/etc/fstab
:
/dev/removable/joe /media/joe vfat noauto,user
Run Code Online (Sandbox Code Playgroud)
如果您更喜欢自动挂载,可以, RUN="mkdir /media/foo && mount /dev/removable/foo /media/foo"
在 udev 行中添加类似内容。umount /media/foo
拔掉插头前不要忘记。