如何从命令行自动挂载?

如何从命令行触发自动挂载? 通过“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-mountudisksctl都可以用于任务,但是它们的界面是不切实际的,因为它们不提供可用磁盘的人类可读状态,只是过于冗长的信息转储。

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.