Как смонтировать из командной строки, как это делает Наутилус?

На моем Linux-сервере Ubuntu я могу легко монтировать USB-накопители или CDROM, нажимая на значки устройств, которые я могу найти на рабочем столе.

Например, если я щелкну значок подключенного USB-накопителя, произойдет следующее:

  • Каталог / media / LABEL создается автоматически (где LABEL - это метка диска и может отличаться от диска к диску)
  • файловая система на устройстве смонтирована на / media / LABEL

Этот процесс существенно отличается от монтирования с помощью команды mount. Особенно:

  • вам не нужно быть root (или вам не нужно изменять / etc / fstab, чтобы обычный пользователь мог монтировать устройство)
  • каталог / media / LABEL создается автоматически
  • имя каталога изменяется в соответствии с меткой тома.

Есть ли команда командной строки, которая ведет себя так же, как средства монтирования графического интерфейса пользователя Gnome?


person Andrea Francia    schedule 27.01.2009    source источник
comment
Я решил использовать /etc/fstab для монтирования своего диска при загрузке, вероятно, не то, что вы хотите, но он работает надежно, когда поток SO заблокирован и ни один из вариантов, похоже, не работает.   -  person ThorSummoner    schedule 24.12.2016


Ответы (9)


См. Информацию об использовании в команде pmount.

person phihag    schedule 27.01.2009
comment
pmount не имеет некоторых функций nautilus. 1) nautilus перечисляет доступные диски. когда я нажимаю вкладку pmount, мой раздел Windows не отображается. и если бы это было так, я сомневаюсь, что он перечислил бы его как Windows7_OS, но это не так важно. 2) когда я что-то монтирую, мне нужно создать каталог для точки монтирования. наутилус делает это автоматически. похоже у наутилуса своя база данных для монтирования, есть ли возможность получить к ней доступ? - person kirill_igum; 21.04.2011
comment
pmount использует HAL, который обесценивается, поэтому я бы рекомендовал посмотреть сообщение @mwx ниже - person Jake88; 11.09.2012
comment
@kirill_igum когда я нажимаю вкладку pmount, мой раздел Windows не отображается smile, ты забавный. Да, я думаю, вы могли бы сделать это, написав собственную функцию правила bash-expand. Я думаю, что вам нужно udisks, см. Другой ответ ниже. - person towi; 07.08.2013

Вы ищете gio mount (недавно он заменил gvfs-mount, который заменил gnome-mount).

Здесь есть справочная страница, или вы можете просто ввести gio help mount для детали

Основное использование:

gio mount --list --detail, чтобы получить список подключенных и монтируемых томов

gio mount [-u] <volume>, чтобы [отключить] его, например gio mount smb://server/share или gio mount WINDOWS.

К сожалению, похоже, что существует ошибка, которая приводит к сообщению «Ошибка места монтирования: том не поддерживает монтирование» при попытке монтирования по имени тома, но gvfs-mount -d /dev/<devicename> может работать.

person mwx    schedule 12.05.2011
comment
На Oneiric и Natty gvfs-mount smb: // server / share, похоже, работает из коробки. Вы можете убедиться, что у вас установлен gvfs-fuse. - person Greg; 23.09.2011
comment
gvfs-mount также требует DBus. - person palswim; 28.12.2016
comment
Как я смонтировал камеру: gio mount --list --detail там была строчка типа activation_root=gphoto2://Name_of_Company_Model_Name_SomeNumbers, потом я сделал gio mount gphoto2://Name_of_Company_Model_Name_SomeNumbers. Теперь я могу видеть файлы моей камеры в "/run/home/$UID/gvfs/gphoto2:host=Name_of_Company_Model_Name_SomeNumbers/DCIM" (нужны кавычки из-за ghoto2:host=), где $ UID наверное 1000. - person Boris; 20.07.2019

В современных дистрибутивах HAL больше не используется. pmount все еще существует, но устарел. Использовать:

udisks --mount /dev/sdXN

Answer Update:

Команда udisksctl используется как альтернатива команде udisks. Его можно использовать таким же образом, -b просто добавляется для определения блочного устройства.

udisksctl mount -b /dev/sdXN
person noname    schedule 26.01.2013
comment
Я также обнаружил, что udisksctl (часть той же системы) работает быстро и эффективно. то есть: udisksctl mount -b / dev / sdb - person SpiRail; 17.03.2014
comment
p.s. Я сделал скрипт Python, который делает это с udisks здесь: stackoverflow.com/a/22454071/493272 - person SpiRail; 17.03.2014
comment
Теперь ты мужчина, собака! - person Darth Egregious; 04.07.2014
comment
Я даже не могу вспомнить, как долго я искал это ... спасибо! - person Aquarius Power; 07.12.2014

Да, есть. Он называется ivman и обрабатывает все события HAL. Я запускаю его при запуске ion3. Я просто запускаю ivman как процесс-демон, но добавил программу в свой файл sudoers:

cat /etc/sudoers
[...]
ivman {hostname}=(root) NOPASSWD: /sbin/init, /usr/sbin/hibernate
[...]

так что он также может управлять настройками мощности.

person Steen    schedule 29.01.2009

Я не верю, что монтажом занимается сам Gnome - это HAL. Так что, если HAL запущен, вы сможете выполнить автоматическое монтирование. Я предполагаю, что pmount каким-то образом общается с HAL, и это будет способ справиться с размонтированием. Я надеюсь, по крайней мере, это поможет вам начать.

person Paul Fisher    schedule 27.01.2009
comment
Здесь находятся гномы-наутилусы /run/user/1000/gvfs/smb-share/path-to-mount/ - person CRTLBREAK; 09.06.2019
comment
а для существующих креплений это будет следующим run/user/1000/gvfs/smb-share:server=192.168.1.100,share=share-name/path-to-folder/ - person CRTLBREAK; 09.06.2019

Вы также можете использовать gnome-mount для монтирования / размонтирования из командной строки.

person bluebrother    schedule 29.01.2009

Я подключаю свое USB-устройство, набираю "gnome-volume-manager", и, похоже, он делает то, что вам нужно.

person vinc456    schedule 29.01.2009

Это будет "devkit-disks --mount /dev/sdxx", где xx - буква и номер монтируемого раздела ...

person Samuel Audet    schedule 26.12.2009

У меня есть сценарий, чтобы делать то, что вы хотите.

#!/bin/bash
#====================================================================
# udmount.sh - mounts partitons by volume label.
#  usage: udmount.sh <label> [rw|ro|u]
#   rw - mount read-only (default) 
#   rw - mount read-write 
#   u  - unmount
# 
# Mounts on /media/<label>. Tested on Mint 13 and Fedora 19.
# Use and/or modify at your own risk. Your mileage may vary.
# Caveats:
#   * No spaces in volume label. Won't work.
#   * If the mount point (/media/<label>) already exists,
#     (usually from an unclean shutdown), udmount will mount
#     the volume on /media/<label>_  
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You can view the GNU General Public License for this program at
# http://www.gnu.org/licenses/gpl.txt
# Copyright 2013 [email protected]
#====================================================================

BEEP=$'\a'
VLABEL="$1"     # volume label
MPOINT="/media" # default mount point for gnome-mount/udisks
YN=""           # yes/no string

c_red() { echo -n $(tput setaf 1)$1$(tput sgr0) ; }
c_grn() { echo -n $(tput setaf 2)$1$(tput sgr0) ; }
c_yel() { echo -n $(tput setaf 3)$1$(tput sgr0) ; }
c_blu() { echo -n $(tput setaf 4)$1$(tput sgr0) ; }
c_pur() { echo -n $(tput setaf 5)$1$(tput sgr0) ; }
c_aqu() { echo -n $(tput setaf 6)$1$(tput sgr0) ; }
c_wht() { echo -n $(tput setaf 7)$1$(tput sgr0) ; }

Y="YEP " ; Y_c=$(c_grn "$Y")
N="NOPE" ; N_c=$(c_red "$N")
SNAME=`echo "$0" | sed -e 's|.*/\(.*\)$|\1|'`

#--------------------------------------------------
AMV_LABEL=""    # already mounted volume label
MMSG=""         # "is mounted on" msg
AMF=0           # already mounted flag
AMV=""          # already mounted volume (from "mount -l")
AMV_DETAILS=""  # already mounted volume details
AMV_HELPER=""   # "uhelper" subsystem for mount/unmount ("hal" or "udisks")
COPT="$2"       # command line option
MOPT="ro"       # user input for mount option
UOPT="ro"       # udisk mount options

#--------------------------------------------------
_usage ()      { echo "usage: $SNAME LABEL [rw|ro|u]" ; }
_error()       { echo "!!! Error: $1. !!!" >&2 ; echo -n "$BEEP"; _usage ; exit 1 ; }
_error_parm()  { _error "$2 Parameter Missing [$1]" ; }
_error_parm2() { _error "Command is wrong (only \"rw, ro, or u\") is alowed, not \"$1\"" ; }

_unmount () {
  ### unmount ###
  if [ "$COPT" = "u" ] ; then
    MPOINT=`echo "$AMV" | grep "\[$VLABEL\]" |sed -e 's|^.* \(/.*\) type.*$|\1|'`
    #echo "unmount MPOINT = [$MPOINT]"
    if [ -z "$MPOINT" ] ; then
      echo "$N_c - $VLABEL not mounted."
    else
      _MSG=`umount "$MPOINT" 2>&1`
      _STATUS=$?
      if [ "$_STATUS" -eq 0 ] ; then
        echo "$Y_c - \"$MPOINT\" is now unmounted"
      else echo "$N_c - unmount \"$MPOINT\" failed ($_MSG)"
      fi
    fi
  fi
}

#--------------------------------------------------
[ -n "$VLABEL" ]  || _error_parm "$VLABEL" "Volume Label"

### command line option checck
case "$COPT" in
  "ro" ) ;;
  "rw" ) ;;
  "u"  ) ;;
     * ) _error_parm2 "$COPT" ;;
esac

### is VLABEL already mounted?
AMV=$(mount -l | grep "\[$VLABEL\]")
AMF=$?

### VLABEL is mounted somewhere
if  [ $AMF -eq 0 ] ; then
  AMV_LABEL=$(echo "$AMV" | sed 's/^.* \[\(.*\)\]$/\1/')
  AMV_DETAILS=$(echo $AMV | sed 's|^.*on \(.*\) \[.*$|on \"\1\"|')
  AMV_UHELPER=$(echo $AMV | grep uhelper | sed 's/^.*uhelper=\(.*\)).*$/\1/')
  #echo "AMV = [$AMV]"
  #echo "AMV_LABEL = [$AMV_LABEL]"
  #echo "AMV_DETAILS = [$AMV_DETAILS]"
  #echo "AMV_UHELPER = [$AMV_UHELPER]"

  ### unmount ###
  [ "$COPT" = "u" ] && _unmount && exit $?

  ### mounted on MPOINT (usually /media)
  if [ -d "$MPOINT/$VLABEL" ] ; then
    MOPT="ro" ; YN="$N_c"
    [ -w "$MPOINT/$VLABEL" ] && MOPT="rw"
    [ "$MOPT" = "$COPT" ]     && YN="$Y_c"
  ### mounted somewhere else
  else
    MOPT=$(echo "$AMV_DETAILS" | sed 's/^.*(\(.*\)).*$/\1/')
  fi
  echo "$N_c - $VLABEL is already mounted \"$MOPT\" $AMV_DETAILS"

### $VLABEL is not mounted anywhere, decide on "rw" or "ro"
else
  if [ "$COPT" = "u" ] ; then
    echo "$N_c - \"$VLABEL\" is not mounted"
  else
    MOPT="ro"
    [ "$COPT" = "rw" ] && MOPT="rw"
    echo "udisks --mount /dev/disk/by-label/$VLABEL $UOPT"
    udisks --mount /dev/disk/by-label/"$VLABEL" --mount-options "$MOPT"
    _STATUS=$?
    [ $_STATUS -eq 0 ] && echo "$Y_c - $MPOINT/$VLABEL mounted ($MOPT)"
    [ $_STATUS -ne 0 ] && echo "$N_c - \"$VLABEL\""
  fi
fi
#====================================================================
person maxdev137    schedule 02.11.2013