Как выполнить файл с USB-накопителя FAT?

12

Я пытаюсь установить переносное приложение на свой USB-накопитель, чтобы оно было совместимо как с Ubuntu, так и с Windows (в частности, с программой eToys). Поддержка уже встроена в приложение для обеих операционных систем - etoys.shдля Ubuntu и etoys.exeдля Windows. Я решил установить диск FAT, так как его можно прочитать с обеих систем. Это прекрасно работает для Windows, но по какой-то причине я не могу выполнить etoys.sh в Ubuntu.

Проблема не в файле - когда вся папка копируется на локальный жесткий диск, приложение прекрасно работает в Ubuntu. Но когда я пытаюсь выполнить его с USB, он открывает файл в текстовом редакторе.

Затем я попытался запустить его из терминала, но получил сообщение « Отказано в доступе».

У меня была такая же проблема с другими исполняемыми файлами.

Есть ли простой способ выполнить вещи с флешки?

Дерек Редферн
источник
2
Связанные вопрос здесь: askubuntu.com/questions/23108/...
Лури

Ответы:

20

Из-за ограничений файловой системы FA32 вы не можете.

Теперь вы можете обмануть:

  1. либо позвони sh etoys.shвместо./etoys.sh
  2. если вы хотите, вы можете даже создать другой скрипт (который будет лежать на вашем жестком диске, например), который просто вызывает ваш скрипт на USB-накопителе:

    #!/bin/bash
    sh /media/USB/etoys.sh
    
Стефано Палаццо
источник
Спасибо большое! Второй чит, конечно, вариант, и я буду иметь это в виду. Альтернативно, есть ли другая файловая система, которую я мог бы использовать, которая будет работать как с Windows, так и с Ubuntu и позволять мне выполнять файлы?
Дерек Редферн
Вы можете использовать ext2 или ext3, но вам нужно установить небольшую утилиту в Windows, чтобы она заработала.
Еще один вопрос по этому поводу - я решил пойти с возможностью создания сценария на жестком диске, и он прекрасно работает. Но я также хочу иметь скрипты для программ, которые не являются файлами .sh, например Portable Chromium, типа «исполняемый (application / x-исполняемый)». Использование sh не работает, и ./Chromium по-прежнему дает разрешение на отказ. Есть ли другая команда для этого?
Дерек Редферн
Хм, я думаю, вы могли бы просто обмануть: перед запуском chromium вы можете chmod сделать его исполняемым. Поскольку команда chmod будет вызываться каждый раз, больше не имеет значения, что разрешения не будут перенесены при следующей установке USB-накопителя
Я думал, что вы не можете chmod на FAT, хотя он не поддерживает разрешения Unix.
Дерек Редферн
8

Крепление устройства -o mode=<value>должно работать

mode=value

Установите для всех файлов режим значения и 0777без учета исходных разрешений. Добавьте разрешение на поиск в каталоги, которые имеют разрешение на чтение. Значение дано в восьмеричном виде.

Бонси Скотт
источник
1
Должен ли я установить это в fstab?
Дерек Редферн
@Bonsi Scott Нет mode=опции для vfat, см. Mount (8) .
pevik
6

На самом деле я нашел отличное решение на http://ubuntuforums.org/showthread.php?t=1665289, которое решило проблему.

В основном, это говорит, чтобы запустить команду

sudo sed -i -e 's|showexec|\x00\x00\x00\x00\x00\x00\x00\x00|g' /usr/lib/udisks/udisks-daemon

и это предотвратит автоматическую установку дисков с опцией showexec.

Я не люблю отвечать на свой вопрос, но это сработало для меня, и я надеюсь, что это поможет и другим людям.

для Ubuntu 18.04:

sudo sed -i -e 's|showexec|\x00\x00\x00\x00\x00\x00\x00\x00|g' /usr/lib/udisks2/udisksd
Дерек Редферн
источник
3

В конечном счете, этот вопрос , кажется, что udisksмонтирует файловую систему с showexecпараметром, предотвращая любой файл , который не заканчиваются в .exe, .batили .comдля запуска.

Смежный вопрос (как задать пользовательские параметры монтирования для udisks) можно найти здесь: Как настроить запись данных для мгновенного запуска? Оказывается, вы можете использовать udevконфигурацию для этого.

Действительно ли невозможно установить параметры монтирования по умолчанию для udisks? предлагает другое решение на основе udisks-glue, но оно кажется менее убедительным, поскольку в конечном итоге на него полагаются udisks, так что кажется, что вы можете добавлять опции, но не удалять их, и, в частности showexec, все еще там).

В любом случае я предпочитаю это исправлять двоичный файл.

Virgile
источник
2

Ни одно из показанных решений не сработало, насколько я мог сказать, чтобы программа, которую я написал как терминальная программа Linux, работала в моем разделе FAT32, но изменение имени файла программы для включения расширения .exe работало (спасибо за подсказку) все, что я сделал, это переименовал имя файла в filename.exe для программы терминала, которую я пытался выполнить на разделе FAT32, а затем демонтировал ее, заново смонтировал и установил разрешения на диск, чтобы разрешить выполнение, а затем перешел к имени файла. exe и установите его разрешения, а затем флажок будет придерживаться, а не возвращаться к минусу, и когда я установил путь и ввел ./filename.exe в командной строке терминала, программа запустилась как надо и показывает командную строку, включая имя файла .exe, как указано, хотя в каталоге файлов Ubuntu файл отображается как MSDOS / Windows, он запускается как программа Linux.

Дэн Хаджинс
источник
1

Поэтому я нашел намного более простое (и более безопасное решение).

Используйте gparted для форматирования USB FAT32, а затем используйте Partition => Manage Flags для установки следующих флагов: boot, lba

MrSteve
источник
-1

Если синтаксис bash ...

bash yourscript
Серхио Абреу
источник