自动化安装命令的顺序

xra*_*alf 9 mount

当我使用 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*_*SHW 8

您可以通过编写 UDEV 规则来做到这一点,该规则将“运行”包含您提到的相同 bash 命令的 bash 脚本。每当您插入上述设备时,UDEV 都会识别出这一点,并开始按规则运行。

对于规则编写,您可以点击链接。


Gil*_*il' 6

正如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拔掉插头前不要忘记。