Как автоматически монтировать из командной строки?

Как запустить автомат из командной строки? Под «automount» я не имею в виду полностью автоматический монтаж, но получаю список доступных устройств, а затем выбираю один и заканчивая как /media/{user}/{diskid}. Эта функция предоставляется, например, Nautilus или Thunar, но я не могу найти инструмент командной строки для запуска такого полуавтоматического монтирования.

pmount является самым близким, который я нашел, но кажется, работает совершенно другой механикой внизу и делает устройства отображаться как /media/sdf или что-то в этом роде.

1
задан 6 September 2013 в 18:44

3 ответа

Вы можете использовать:

udisks --mount device_name

или

udisksctl mount -b device_name

, где device_name - имя запоминающего устройства и должно выглядеть примерно как /dev/sdb1.

Используя команду sudo fdisk -l, вы можете узнать все устройства хранения, подключенные к вашей системе.

22
ответ дан 24 May 2018 в 18:16
  • 1
    Попытался, что, однако, приводит к /media/{disk}, отличному от того, что дал бы Тунар или Наутилус. Команда udisksctl, предоставленная udisks2, как представляется, делает то, что я хочу. – Grumbel 6 September 2013 в 19:02
  • 2
    udisksctl status предоставит правильный список устройств и будет работать как пользователь. fdisk -l требует не только root, но и с GPT-дисками. cat /proc/partitions был бы лучшим низкоуровневым способом получить представление о доступных разделах. – Grumbel 6 September 2013 в 19:43
  • 3
    udiskctl чрезвычайно полезен для установки файлов образов дисков в устройства с петлями без привилегий root! – JBFWP286 15 August 2017 в 01:05

Простое решение, которое работает по мере необходимости (монтируется в / media / {user} / {diskid}), за исключением того, что он не может перечислить устройства, но ему необходимо указать точную метку томов, чувствительную к регистру, в качестве аргумента $ 1 [!d0 ]

Для монтирования:

DEVICE=$(findfs LABEL=$1) && udisksctl mount -b $DEVICE

Чтобы установить :

DEVICE=$(findfs LABEL=$1) && udisksctl unmount -b $DEVICE
5
ответ дан 24 May 2018 в 18:16
  • 1
    Ницца. Или просто: udisksctl mount -b $(findfs LABEL=<label>) – Brent Faust 31 March 2018 в 22:06

Я написал этот скрипт 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.
0
ответ дан 24 May 2018 в 18:16

Другие вопросы по тегам:

Похожие вопросы: