我想编写一个执行以下操作的脚本:
- 安装设备(始终是同一个)
- 查看设备上的文件并告诉我一些相关信息
- 再次卸载该设备。
这相当容易,但我担心安装点:如果某人(我?)已经在那个点安装了某个东西或者将文件放到了那里,该怎么办?
是否可以告诉脚本类似以下伪代码的内容:
$whereToGo = mount /dev/device --justMountItSomewhereWhereItIsPossibleAndTellMeWhereThatIs
// Do something with $whereToGo/myFile
umount $whereToGo
答案1
Gnome 磁盘实用程序使用 udisks2,看起来像是udisksctl
它的命令行工具,它可以执行如下操作:
status
Shows high-level information about disk drives and block devices.
info
Shows detailed information about OBJECT or DEVICE.
mount
Mounts a device. The device will be mounted in a subdirectory in the /media
hierarchy - upon successful completion, the mount point will be printed to
standard output.
The device will be mounted with a safe set of default options. You can
influence the options passed to the mount(8) command with --options.
Note that only safe options are allowed - requests with inherently unsafe
options such as suid or dev that would allow the caller to gain additional
privileges, are rejected.
unmount
Unmounts a device. This only works if the device is mounted. The option
--force can be used to request that the device is unmounted even if active
references exists.
如果挂载点已经存在,udksks2 将创建并使用新的挂载点(可能通过附加1
)。
因此你应该能够编写类似这样的脚本(使用 /dev/loop5 作为示例):
$ udisksctl mount --block-device /dev/loop5
Mounted /dev/loop5 at /media/demo/675584e8-d292-4c69-96d6-0fdb720bdf93.
# parse stdout for the mount point, do something with it
$ udisksctl unmount --block-device /dev/loop5
Unmounted /dev/loop5.
--options ro
(甚至可以通过添加到以只读方式挂载udisksctl mount
)
来自 arch 的信息archwiki 关于 Udisks - 挂载助手
安装助手
使用 udisks 包装器可以轻松实现设备的自动安装。另请参阅应用程序列表#挂载工具。
注意:桌面环境(例如 GNOME 和 KDE)也可能提供 udisk 包装器。
- bashmount — 一个 bash 脚本,用于以普通用户身份使用 udisks2 挂载和管理可移动媒体。
https://github.com/jamielinux/bashmount- udiskie — udisks2 自动挂载程序,带有可选通知、托盘图标和密码保护支持LUKS 设备. 请参阅乌迪斯基亚维基了解详情
https://github.com/coldfix/udiskie- udisksvm — 使用 Python3 和 Qt5 框架编写的 GUI udisks2 包装器。它使用鼠标点击来安装、卸载可移动设备或弹出 CD/DVD。请参阅自述文件以了解详细信息。
https://github.com/berbae/udisksvm- udevil — 包括 devmon,与 udisks 和 udisks2 兼容。 https://github.com/IgnorantGuru/udevil