如何从终端访问 USB 闪存驱动器?

MEM*_*MEM 292 command-line usb-drive mount

我只能访问命令行。
我需要将我的数据(在用户文件夹中)备份到笔(USB DOK)。

  • 如何手动安装闪存驱动器?
  • 复制命令应该是什么?

Oli*_*Oli 419

1.查找驱动器的名称

您需要知道驱动器的名称来安装它。为此,请执行以下操作之一(按我的偏好排序):

lsblk
sudo blkid
sudo fdisk -l
Run Code Online (Sandbox Code Playgroud)

您正在寻找一个分区应该是这个样子:/dev/sdb1。您拥有的磁盘越多,这可能是字母越高。无论如何,找到它并记住它的名字。

2.创建挂载点(可选)

这需要安装到文件系统的某个地方。通常可以使用 /mnt/ 如果您很懒惰并且没有其他任何东西安装在那里,否则您将要创建一个新目录:

sudo  mkdir /media/usb
Run Code Online (Sandbox Code Playgroud)

3.挂载!

sudo mount /dev/sdb1 /media/usb
Run Code Online (Sandbox Code Playgroud)

完成后,只需开火:

sudo umount /media/usb
Run Code Online (Sandbox Code Playgroud)

这个答案已经有将近 6 年的历史了,虽然它的核心仍然有效,但诸如此类fdisk -l的选项并不是最用户友好的选项。在更高的堆栈中还有新的机制,用于以理智和标准的方式安装设备,但可能并不总是可用。

所以我从其他答案中添加了一些润色。当您阅读此脚注并在桌面系统上执行此操作时udisksctl,根据 wecac 的回答,肯定存在使用 的论据。这以与桌面相同的方式挂载 - 创建您自己的/media/$USER/device目录 - 但我认为静态挂载点仍然存在参数,尤其是当您不想更改路径时。

Udisks 还依赖于 D-Bus,因此可能并非随处可用。

  • 这种方法的主要缺点是它以 root 身份挂载设备。如果设备是 FAT 格式,则用户将无法写入。/media/$USER/device 挂载点也将始终相同 (2认同)

Sep*_*ero 52

pmount / pumount

安装pmount. 在 /media/ 中挂载磁盘

pmount /dev/sdb1
pumount /dev/sdb1
Run Code Online (Sandbox Code Playgroud)

不需要sudo

将“sdb1”替换为您的特定设备路径。有关更多信息,请参阅联机帮助页

pmount  ("policy mount") is a wrapper around the standard mount program
which permits normal users to mount removable devices without a  match-
ing /etc/fstab entry.

pmount is invoked like this:

pmount device [ label ]

This  will  mount  device  to a directory below /media if policy is met
(see below). If label is given, the mount point will  be  /media/label,
otherwise it will be /media/device.
Run Code Online (Sandbox Code Playgroud)


小智 18

使用udisksctlfrom package= udisks2(在 Ubuntu 和 Debian 中)。程序是:

  1. 使用以下命令查找要挂载的块设备的 ID lsblk

    user@machine:~$ lsblk
    NAME   MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
    sda      8:0    0   1.8T  0 disk
    ??sda1   8:1    0  19.1M  0 part /boot/efi
    ??sda2   8:2    0   1.8T  0 part
    ??sda3   8:3    0    16G  0 part [SWAP]
    sdb      8:16   0 931.5G  0 disk
    ??sdb1   8:17   0    37M  0 part
    ??sdb2   8:18   0  15.9G  0 part [SWAP]
    ??sdb3   8:19   0 915.7G  0 part /
    sdc      8:32   1  14.4G  0 disk
    ??sdc1   8:33   1  14.4G  0 part
    sdd      8:48   0   1.8T  0 disk
    ??sdd1   8:49   0   1.8T  0 part
    
    Run Code Online (Sandbox Code Playgroud)

    从它的大小来看,/dev/sdc1似乎是我要挂载的 USB 驱动器。

  2. 使用udisksctl安装该设备。请注意-b== --block-device(以减少打字),但我更喜欢文档的长选项:

    user@machine:~$ udisksctl mount --block-device /dev/sdc1
    ==== AUTHENTICATING FOR org.freedesktop.udisks2.filesystem-mount ===
    Authentication is required to mount Kingston DT microDuo 3C (/dev/sdc1)
    Multiple identities can be used for authentication:
     1.  XXXXX,,, (user)
     2.  ,,, (YYYYY)
    Choose identity to authenticate as (1-2): 1
    Password:
    ==== AUTHENTICATION COMPLETE ===
    Mounted /dev/sdc1 at /media/user/USBDRIVELABEL.
    
    Run Code Online (Sandbox Code Playgroud)

在下面解决 Hans Deragon 的评论:你也可以告诉udisksctldo --no-user-interaction。它不会尝试对用户进行身份验证,这通常“正常工作”:

user@machine:~$ udisksctl mount --block-device /dev/sdc1 --no-user-interaction
# possibly some complaining here about I/O charset or need to run `fsck`
Mounted /dev/sdc1 at /media/user/USBDRIVELABEL.
Run Code Online (Sandbox Code Playgroud)


Ale*_* L. 12

除了使用标准mount命令(需要 root)之外,您还可以使用标准用户udisksdbus与标准用户一起安装驱动器。

为此,首先了解有关驱动器的一些信息很有用(但不是必需的):

  1. 它是什么设备(即/dev/sdb1
  2. 它使用什么文件系统。

了解这些后,您可以使用一个简单的命令从命令行挂载驱动器。

gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/<device> --method org.freedesktop.UDisks.Device.FilesystemMount "<filesystem>" []
Run Code Online (Sandbox Code Playgroud)

如果挂载成功,这个调用应该回显它挂载的路径。

要卸载以这种方式安装的驱动器,您可以运行:

gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/<device> --method org.freedesktop.UDisks.Device.FilesystemUnmount []
Run Code Online (Sandbox Code Playgroud)

注意,这<device>只是通往它的道路的尽头。因此,举例来说,如果你想安装什么的/dev/sdb2,那么你会把sdb2到位<device>


如果您不知道它是哪个设备或它使用什么文件系统,请不要担心。您可以使用这个小命令轻松打印出所有信息:

gdbus introspect --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices --recurse --only-properties | grep -E "(readonly .+ (IdLabel|IdType|Device(IsMounted|IsDrive|File) ).*|\}|.*\{)"
Run Code Online (Sandbox Code Playgroud)

这将打印出如下内容:

node /org/freedesktop/UDisks/devices {
  node /org/freedesktop/UDisks/devices/sda {
    interface org.freedesktop.UDisks.Device {
        readonly s IdLabel = '';
        readonly s IdType = '';
        readonly s IdUsage = '';
        readonly b DeviceIsMounted = false;
        readonly s DeviceFile = '/dev/sda';
    };
  };
  node /org/freedesktop/UDisks/devices/sda1 {
    interface org.freedesktop.UDisks.Device {
        readonly s IdLabel = 'SYSTEM';
        readonly s IdType = 'ntfs';
        readonly s IdUsage = 'filesystem';
        readonly b DeviceIsMounted = false;
        readonly s DeviceFile = '/dev/sda1';
    };
  };
  node /org/freedesktop/UDisks/devices/sda2 {
    interface org.freedesktop.UDisks.Device {
        readonly s IdLabel = 'Windows7';
        readonly s IdType = 'ntfs';
        readonly s IdUsage = 'filesystem';
        readonly b DeviceIsMounted = true;
        readonly s DeviceFile = '/dev/sda2';
    };
  };
  node /org/freedesktop/UDisks/devices/sda3 {
    interface org.freedesktop.UDisks.Device {
        readonly s IdLabel = 'Recovery';
        readonly s IdType = 'ntfs';
        readonly s IdUsage = 'filesystem';
        readonly b DeviceIsMounted = false;
        readonly s DeviceFile = '/dev/sda3';
    };
  };
  node /org/freedesktop/UDisks/devices/sda4 {
    interface org.freedesktop.UDisks.Device {
        readonly s IdLabel = '';
        readonly s IdType = '';
        readonly s IdUsage = '';
        readonly b DeviceIsMounted = false;
        readonly s DeviceFile = '/dev/sda4';
    };
  };
  node /org/freedesktop/UDisks/devices/sda5 {
    interface org.freedesktop.UDisks.Device {
        readonly s IdLabel = '';
        readonly s IdType = 'ext4';
        readonly s IdUsage = 'filesystem';
        readonly b DeviceIsMounted = true;
        readonly s DeviceFile = '/dev/sda5';
    };
  };
  node /org/freedesktop/UDisks/devices/sda6 {
    interface org.freedesktop.UDisks.Device {
        readonly s IdLabel = '';
        readonly s IdType = 'swap';
        readonly s IdUsage = 'other';
        readonly b DeviceIsMounted = false;
        readonly s DeviceFile = '/dev/sda6';
    };
  };
  node /org/freedesktop/UDisks/devices/sda7 {
    interface org.freedesktop.UDisks.Device {
        readonly s IdLabel = '';
        readonly s IdType = 'ext4';
        readonly s IdUsage = 'filesystem';
        readonly b DeviceIsMounted = true;
        readonly s DeviceFile = '/dev/sda7';
    };
  };
  node /org/freedesktop/UDisks/devices/sdb {
    interface org.freedesktop.UDisks.Device {
        readonly s IdLabel = '';
        readonly s IdType = '';
        readonly s IdUsage = '';
        readonly b DeviceIsMounted = false;
        readonly s DeviceFile = '/dev/sdb';
    };
  };
  node /org/freedesktop/UDisks/devices/sdb1 {
    interface org.freedesktop.UDisks.Device {
        readonly s IdLabel = 'USB DRIVE';
        readonly s IdType = 'vfat';
        readonly s IdUsage = 'filesystem';
        readonly b DeviceIsMounted = false;
        readonly s DeviceFile = '/dev/sdb1';
    };
  };
  node /org/freedesktop/UDisks/devices/sr0 {
    interface org.freedesktop.UDisks.Device {
        readonly s IdLabel = '';
        readonly s IdType = '';
        readonly s IdUsage = '';
        readonly b DeviceIsMounted = false;
        readonly s DeviceFile = '/dev/sr0';
    };
  };
};
Run Code Online (Sandbox Code Playgroud)

那些IdUsage = 'filesystem'可以使用上述命令安装的。

这意味着,例如,如果我想安装设备“USB DRIVE”,我将运行命令

gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/sdb1 --method org.freedesktop.UDisks.Device.FilesystemMount "vfat" []
Run Code Online (Sandbox Code Playgroud)

这些命令都使用dbus消息传递系统工作,Nautilus与其他文件管理器自动挂载事物的方式相同。在这些命令中,我们发送了各种对象(即/org/freedesktop/...要求他们挂载和卸载某些设备的消息。他们可能会也可能不会这样做,具体取决于PolicyKit.

使用类似的命令可以控制人们在 Ubuntu 中体验的几乎所有方面,并模拟大多数系统程序和功能(即关机、音量更改等)。


小智 6

您还可以借助 USBmount 在 Ubuntu Server 上自动挂载 USB 设备。

确保在开始安装之前运行 apt-get update/upgrade:

sudo apt-get update && sudo apt-get upgrade
Run Code Online (Sandbox Code Playgroud)

现在从存储库安装 USBmount:

sudo apt-get install usbmount
Run Code Online (Sandbox Code Playgroud)

USBmount 将所有 USB 驱动器安装在/media/usb*(usb0, usb1, usb2 ...)

现在插入 USB 驱动器并等待它被检测到并安装。只要主机操作系统支持文件系统,就应该挂载它。

要验证 USB 驱动器是否正确安装,您可以使用df -h查看所有可用驱动器及其各自的安装点

要卸载驱动器,您可以使用 umount。

sudo umount /media/usb0
Run Code Online (Sandbox Code Playgroud)