Я был уверен, что должен был быть способ сделать это с sed. После некоторого googling я наткнулся на это:
http://austinmatzko.com/2008/04/26/sed-multi-line-search-and-replace/
Основано на что я закончил писать:
sed -n '1h;1!H;${;g;s/foo\nbar/jar\nhead/g;p;}' < x
Что правильно взяло содержимое x:
foo bar
И выплюнуть :
jar head
Установите pmount. Горит диски в / media /
pmount /dev/sdb1
pumount /dev/sdb1
Не требуется 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.
В дополнение к использованию стандартной команды mount (для которой требуется root) вы можете монтировать диски с помощью udisks и dbus со своим стандартным пользователем.
Для этого полезно (но не требуется) сначала знать несколько вещей о диске:
Какое устройство (т.е. /dev/sdb1) использует какую-либо файловую систему.Зная это, вы можете использовать простую команду для монтирования диска из командной строки.
gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/<device> --method org.freedesktop.UDisks.Device.FilesystemMount "<filesystem>" []
этот вызов должен повторить путь, на котором он монтируется, если монтировка завершается успешно.
Чтобы отключить накопители, установленные таким образом, вы можете запустить:
gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/<device> --method org.freedesktop.UDisks.Device.FilesystemUnmount []
N.B. <device> - это просто конец пути к нему. Например, если то, что вы хотите установить, находится на /dev/sdb2, тогда вместо <device> вы установите sdb2.
Если вы не знаете, какое устройство оно есть или то, что использует файловая система, не бойтесь. Вы можете легко распечатать всю эту информацию с помощью этой небольшой команды:
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) ).*|\}|.*\{)"
Это выведет что-то вроде этого:
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';
};
};
};
Те, у кого есть 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" []
Все эти команды работают с использованием системы обмена сообщениями dbus, так же, как Nautilus и другие файловые менеджеры автоматически монтируют вещи. В этих командах мы отправляем различные объекты (т. Е. [F17] сообщения с просьбой установить и отключить определенные устройства. Они могут или не могут делать это в зависимости от разрешений, указанных в PolicyKit.
Используя аналогичные команды, можно управлять почти каждым аспектом опыта в Ubuntu и имитировать большинство системных программ и функций (например, выключение, изменение громкости и т. Д.).
Используйте udisksctl из пакета = udisks2 (как в Ubuntu, так и в Debian). Процедура:
Найдите идентификатор блочного устройства, которое вы хотите смонтировать, используя 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
По своему размеру /dev/sdc1 кажется, является USB-накопителем, который я хочу установить. Используйте 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.
Адресация udisksctl Ханса Дерагона: вы также можете скажите udisksctl сделать --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.
Это просто. Когда я хочу использовать USB-накопитель в терминале, я делаю это:
Создайте папку в /media с помощью:
mkdir /media/mountDrive
Эта папка будет использоваться для точки монтирования. Используйте эту команду:
sudo mount /dev/sdd1 /media/mountDrive
sdd1 - это первый раздел моего USB. Затем вы можете перейти к папке, которую вы уже установили, с помощью
cd /media/mountDrive
Если вы хотите перечислить файлы на диске, вы можете использовать команду ls.
Чтобы размонтировать диск, вы можете использовать
sudo umount /dev/sdd1
. Обратите внимание, что в моей системе диск USB /dev/sdd1, но в вашей системе это может быть что-то другое. Чтобы узнать, для чего используется команда df, чтобы увидеть все диски, подключенные в настоящее время.
Вы также можете автоматически подключать USB-устройства на сервере Ubuntu с помощью USB-накопителя.
Перед запуском установки убедитесь, что вы запускаете обновление / обновление apt-get:
sudo apt-get update && sudo apt-get upgrade
[d2 ] Теперь установите USBmount из репозиториев: sudo apt-get install usbmount
USBmount монтирует все USB-накопители в /media/usb* (usb0, usb1, usb2 ...)
Теперь подключите USB-накопитель и дождаться его обнаружения и установки. До тех пор, пока ОС хоста поддерживает файловую систему, он должен быть установлен.
Чтобы проверить, правильно ли установлен USB-накопитель, вы можете использовать df -h для просмотра всех доступных дисков и их соответствующих точек монтирования [!d5 ]
Чтобы отключить накопитель, вы можете использовать umount.
sudo umount /media/usb0