Wie führe ich eine Datei von einem FAT-USB-Laufwerk aus?

11

Ich versuche, eine tragbare App so auf meinem USB-Laufwerk zu installieren, dass sie sowohl mit Ubuntu als auch mit Windows kompatibel ist (insbesondere mit einem Programm namens eToys). In die App ist bereits Unterstützung für beide Betriebssysteme integriert - etoys.shfür Ubuntu und etoys.exeWindows. Ich habe mich für die Installation auf einem FAT-Laufwerk entschieden, da dies von beiden Systemen gelesen werden kann. Dies funktioniert gut für Windows, aber aus irgendeinem Grund kann ich etoys.sh unter Ubuntu nicht ausführen.

Das Problem liegt nicht bei der Datei - wenn der gesamte Ordner auf die lokale Festplatte kopiert wird, funktioniert die App in Ubuntu hervorragend. Wenn ich jedoch versuche, es über USB auszuführen, wird die Datei in einem Texteditor geöffnet.

Ich habe dann versucht, es von einem Terminal aus auszuführen, aber ich habe die Meldung Berechtigung verweigert erhalten.

Ich hatte das gleiche Problem auch mit anderen ausführbaren Dateien.

Gibt es eine einfache Möglichkeit, Dinge von einem USB-Stick auszuführen?

Derek Redfern
quelle
2
Verwandte Frage hier: askubuntu.com/questions/23108/…
luri

Antworten:

20

Aufgrund der Einschränkungen des FA32-Dateisystems ist dies nicht möglich.

Jetzt kannst du schummeln:

  1. entweder anrufen sh etoys.shstatt./etoys.sh
  2. Wenn Sie möchten, können Sie sogar ein anderes Skript erstellen (das beispielsweise auf Ihrer Festplatte liegt), das Ihr Skript einfach auf dem USB-Laufwerk aufruft:

    #!/bin/bash
    sh /media/USB/etoys.sh
    
Stefano Palazzo
quelle
Vielen Dank! Der zweite Cheat ist sicherlich eine Option, und das werde ich mir merken. Gibt es alternativ ein anderes Dateisystem, das ich verwenden könnte und das sowohl mit Windows als auch mit Ubuntu funktioniert und das es mir ermöglicht, Dateien auszuführen?
Derek Redfern
Sie können ext2 oder ext3 verwenden, müssen jedoch ein kleines Dienstprogramm unter Windows installieren, damit es funktioniert.
Noch eine Frage dazu: Ich habe mich für die Option entschieden, ein Skript auf der Festplatte zu erstellen, und es funktioniert hervorragend. Ich möchte aber auch Skripte für Programme haben, die keine .sh-Dateien sind - zum Beispiel Portable Chromium vom Typ "ausführbar (Anwendung / x-ausführbare Datei)". Die Verwendung von sh funktioniert nicht und ./Chromium gibt weiterhin die verweigerte Berechtigung. Gibt es einen anderen Befehl dafür?
Derek Redfern
Humm, ich denke, Sie könnten einfach schummeln: Bevor Sie Chrom ausführen, können Sie es ändern, um es ausführbar zu machen. Da der Befehl chmod jedes Mal aufgerufen wird, spielt es keine Rolle mehr, dass die Berechtigungen beim nächsten Einsetzen des USB-Laufwerks nicht übertragen werden
Ich dachte, Sie könnten FAT überhaupt nicht ändern, da es keine Unix-Berechtigungen unterstützt.
Derek Redfern
8

Die Montage des Geräts mit -o mode=<value>sollte funktionieren

mode=value

Stellen Sie den Modus aller Dateien auf Wert ein und 0777ignorieren Sie die ursprünglichen Berechtigungen. Fügen Sie Verzeichnisse mit Leseberechtigung hinzu. Der Wert wird in Oktal angegeben.

Bonsi Scott
quelle
1
Soll ich das in fstab setzen?
Derek Redfern
@ Bonsi Scott Es gibt keine mode=Option für vfat, siehe mount (8) .
Pevik
6

Ich habe unter http://ubuntuforums.org/showthread.php?t=1665289 eine großartige Lösung gefunden , die das Problem behoben hat.

Grundsätzlich heißt es, den Befehl auszuführen

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

Dadurch wird verhindert, dass Festplatten mit der Option showexec automatisch gemountet werden.

Ich beantworte meine eigene Frage nicht gerne, aber das hat bei mir funktioniert und ich hoffe, es hilft auch anderen Menschen.

für Ubuntu 18.04:

sudo sed -i -e 's|showexec|\x00\x00\x00\x00\x00\x00\x00\x00|g' /usr/lib/udisks2/udisksd
Derek Redfern
quelle
3

Letztlich scheint das Problem zu sein , dass udisksHalterungen das Dateisystem mit der showexecOption, eine Datei zu verhindern, die nicht in enden .exe, .batoder .comausgeführt werden.

Eine verwandte Frage (wie man udisks benutzerdefinierte Mount-Optionen gibt) finden Sie hier: Wie konfiguriere ich das Aufzeichnen von Daten, um sie sofort anzuhalten? Es stellt sich heraus, dass Sie dazu die udevKonfiguration verwenden können.

Ist das Festlegen der Standard-Mount-Optionen für udisks wirklich nicht möglich? schlägt eine andere Lösung vor, die auf basiert udisks-glue, aber weniger überzeugend erscheint, da sie letztendlich darauf beruht udisks, dass Sie anscheinend Optionen hinzufügen, aber nicht entfernen können und insbesondere showexecimmer noch vorhanden sind).

In jedem Fall ziehe ich das dem Patchen einer Binärdatei vor.

Virgile
quelle
2

Keine der gezeigten Lösungen funktionierte, soweit ich feststellen konnte, dass ein Programm, das ich als Linux-Terminalprogramm geschrieben hatte, in meiner FAT32-Partition ausgeführt werden konnte, aber das Ändern des Dateinamens des Programms in die Erweiterung .exe funktionierte (danke für den Tipp). Alles, was ich getan habe, war, den Dateinamen in Dateiname.exe für das Terminalprogramm umzubenennen, das ich auf einer FAT32-Partition ausführen wollte, und dann die Bereitstellung aufzuheben, erneut bereitzustellen und die Festplattenberechtigungen festzulegen, um die Ausführung zu ermöglichen, und dann zu Dateiname zu wechseln. exe und setze seine Berechtigungen und dann würde das Häkchen bleiben, anstatt zu einem Minus zurückzukehren, und als ich den Pfad festlegte und an der Terminal-Eingabeaufforderung ./filename.exe eingab, lief das Programm wie es sollte und zeigt die Befehlszeile einschließlich Dateiname an .exe wie eingegeben, obwohl das Ubuntu-Dateiverzeichnis die Datei als MSDOS / Windows anzeigt, wird sie als Linux-Programm ausgeführt.

Dan Hudgins
quelle
1

Also fand ich eine viel einfachere (und sicherere) Lösung.

Verwenden Sie gparted, um das USB FAT32 zu formatieren, und verwenden Sie dann Partition => Flags verwalten, um die folgenden Flags zu setzen: boot, lba

MrSteve
quelle
0

Sie können den umask=000Modus verwenden:

umount /dev/sdb1
mount -o umask=000 -t vfat /dev/sdb1 /media/sdb1

Quelle: wiki.linuxquestions.org , Abschnitt "Mount-Optionen für Fett" in Mount (8) .

pevik
quelle
-1

Wenn die Syntax bash ist ...

bash yourscript
Sergio Abreu
quelle