如何从命令行自动挂载?
如何从命令行触发自动挂载? 通过“automount”我并不是指全自动安装,而是获取可用设备的列表,然后选择一个并将其最终设置为/media/{user}/{diskid}
。 例如,这个function由Nautilus或Thunar提供,但我似乎无法找到命令行工具来触发这种半自动安装。
pmount
是我找到的最接近的,但似乎在下面使用完全不同的机制,并使设备显示为/media/sdf
或类似的东西。
您可以使用:
udisks --mount device_name
要么
udisksctl mount -b device_name
其中device_name
是存储设备的名称,应该类似于/dev/sdb1
。
使用sudo fdisk -l
命令可以找到连接到系统的所有存储设备。
GVFS贴装
列出可用设备可以通过以下方式完成
gvfs-mount --list
安装它们可以通过以下方式完成:
gvfs-mount -d /dev/sdf
可通过以下方式卸载:
gvfs-mount --unmount /media/user/01234567890
剩下的一个问题是我不知道如何在mount命令中使用gvfs-mount --list
输出,因为--list
不会显示块设备名称并尝试使用它在mount中打印的设备名称在:
Error mounting location: volume doesn't implement mount
udisksctl
列出可用设备:
udisksctl status
安装通过以下方式完成:
udisksctl mount -b /dev/sdf
要么
udisksctl mount -p block_devices/sdf
卸载通过以下方式完成:
udisksctl unmount -b /dev/sdf
要么
udisksctl unmount -p block_devices/sdf
通过执行以下操作可以找到object-path
:
udisksctl dump
类型为org.freedesktop.UDisks2.Block
对象似乎作为object-patch
有效, /org/freedesktop/UDisks2/
前缀必须从udisksctl接受它们的路径中删除。
结论
虽然gvfs-mount
和udisksctl
都可以用于任务,但是它们的界面是不切实际的,因为它们不提供可用磁盘的人类可读状态,只是过于冗长的信息转储。
UPDATE
gvfs现在已被列为已弃用(2018),建议您使用’gio’,它是Gnome In Out和Glib的一部分。 请参阅维基百科: https : //en.wikipedia.org/wiki/GIO_(software)
例如,要自动挂载第二个驱动器分区; 创建一个具有可执行权限的bash脚本,以便在启动时使用以下命令运行:
gio mount -d /dev/sda2
如果您是分区的所有者(请参阅chown),则不需要sudo。
一个简单的解决方案,根据需要工作(安装到/ media / {user} / {diskid}),除了它不能列出设备但需要给出精确的,区分大小写的卷标作为参数$ 1
安装 :
DEVICE=$(findfs LABEL=$1) && udisksctl mount -b $DEVICE
卸载 :
DEVICE=$(findfs LABEL=$1) && udisksctl unmount -b $DEVICE
我自己遇到了这个问题,并找到了以下解决方案:
udisksctl mount -b /dev/disk/by-labels/$LABEL
它会询问用户密码,即使它是你并且你已经登录了。
我写了这个Bash脚本来解决这个问题,但请注意我是一个脚本新手。 欢迎所有建议! 用法和说明如下脚本。
#!/bin/bash # umanage.sh # 2014-05-05 BASEPATH="/media/$(whoami)/" RESULTS=$(udisksctl dump | grep IdLabel | grep -c -i "$1") case "$RESULTS" in 0 ) echo "Nothing found." ;; 1 ) DEVICELABEL=$(udisksctl dump | grep IdLabel | grep -i "$1" | cut -d ":" -f 2 | sed 's/^[ \t]*//') DEVICE=$(udisksctl dump | grep -i "IdLabel: \+$DEVICELABEL" -B 12 | grep " Device:" | cut -d ":" -f 2 | sed 's/^[ \t]*//') DEVICEPATH="$BASEPATH""$DEVICELABEL" if [[ -z $(mount | grep "$DEVICE") ]] then echo "Found unmounted $DEVICE partition." echo "Do you want to mount it in $DEVICEPATH?" select yn in "Mount" "Ignore" do case $yn in Mount ) udisksctl mount -b "$DEVICE" break ;; Ignore ) exit ;; esac done else echo "Found $DEVICE partition, currently mounted in $DEVICEPATH." echo "Do you want to unmount it?" select yn in "Unmount" "Ignore" do case $yn in Unmount ) udisksctl unmount -b "$DEVICE" break ;; Ignore ) exit ;; esac done fi ;; * ) if [ $# -eq 0 ] then echo "No argument supplied" else echo "$RESULTS possible results. You may be looking for:" echo udisksctl dump | grep IdLabel | grep -i "$1" | cut -d ":" -f 2 | sed 's/^[ \t]*//' | sed '/^$/d' echo echo "Please refine your search." fi ;; esac
用法:
- 将脚本保存为umanage.sh
- 使其可执行:chmod + x umanage.sh
- 运行它:./ umanage.sh YourDeviceLabel
该脚本接受您要安装的分区的标签作为参数,并在udisksctl转储中查找相应的条目。
如果找到分区并且未安装分区,则会显示设备名称和路径,并且您可以安装分区。 该脚本也会搜索部分标签,并且它不关心大写或小写(当您不记得确切的标签时很有用)。
./umanage.sh PASSPORT Found unmounted /dev/sdf1 partition. Do you want to mount it in /media/pixel/My Passport? 1) Mount 2) Ignore #?
如果找到分区并且已经安装了分区,则可以将其卸载:
./umanage.sh passp Found /dev/sdf1 partition, currently mounted in /media/open/My Passport. Do you want to unmount it? 1) Unmount 2) Ignore #?
如果您的参数匹配多个结果,脚本会显示匹配的分区标签并要求您优化搜索:
./umanage.sh SS 2 possible results. You may be looking for: SSD-9GB My Passport Please refine your search.