GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Warum sind .so-Dateien ausführbar?

Ich vermute, es hat wahrscheinlich nur historische Gründe.

Die Antwort von BlueBomber ist wahrscheinlich historisch korrekt, aber sie ist eigentlich nicht notwendig damit gemeinsam genutzte Objekte ausführbar sind.

Auf meinem Ubuntu-System sind sie es nicht. Von den 30 /lib/*.so* und 600 /usr/lib/*.so* Dateien hat nur einer Ausführungsberechtigungen, und das ist wahrscheinlich nur ein Fehler.

Die Ausführungsberechtigung erlaubt, dass eine Datei über einen der exec*() ausgeführt wird Funktionen; Shared-Object-Dateien enthalten ausführbaren Code, werden aber nicht auf diese Weise ausgeführt.

Andererseits sind diese Dateien auf einem CentOS 5.7-System, auf das ich Zugriff habe, sind ausführbar; dasselbe gilt für ein SPARC Solaris 9-System. (Es wäre interessant zu versuchen, die Ausführungsberechtigungen für einige dieser Dateien zu deaktivieren, um zu sehen, ob es irgendetwas kaputt macht, aber ich kann das nicht.)

(Welche Linux-Distribution verwenden Sie?)

AKTUALISIERUNG:

Diese Antwort auf diese Frage zeigt ein Beispiel (HP-UX) eines Systems, bei dem das Ausführungsbit tatsächlich erforderlich ist. Unter Linux scheint dies nicht der Fall zu sein, wo einige Distributionen das Ausführungsbit setzen (wahrscheinlich aus historischer Trägheit) und andere nicht. Oder vielleicht erfordern einige Linuxe es tatsächlich.

Ein weiterer Datenpunkt:Auf meinem Ubuntu-System habe ich gerade versucht, meine eigene Shared-Object-Datei zu erstellen. Die generierte Datei „libfoo.so“ wurde mit Ausführungsrechten erstellt, aber wenn ich manuell chmod -x it, das Programm, das es verwendet, funktioniert immer noch.

Setzen Sie in jedem Fall die Ausführungsberechtigung auf *.so Dateien ist größtenteils harmlos (und sicherlich weniger lästig als beispielsweise das Setzen von Ausführungsberechtigungen für Quelldateien).

AKTUALISIERUNG 2:

Wie fwyzard in einem Kommentar betont, einige *.so Dateien können tatsächlich ausgeführt werden. Beispiel:Auf meinem aktuellen System wird /lib/x86_64-linux-gnu/libc-2.27.so ausgeführt gibt Versionsinformationen für die GNU C-Bibliothek aus. /lib/x86_64-linux-gnu/libpthread-2.27.so verhält sich ähnlich.


Linux
  1. Testen, ob Dateien mit einem Muster übereinstimmen, um ein Skript auszuführen?

  2. Warum kann Rm schreibgeschützte Dateien entfernen?

  3. Was sind .run-Dateien?

  4. Warum verwaltete Cloud-Lösungen immer beliebter werden

  5. .o-Dateien vs. .a-Dateien

Binärdateien unter Linux ausführen

Warum muss ein Ordner ausführbar sein?

Warum funktionieren Windows EXE-Dateien nicht unter Linux?

Warum brauche ich ein 'execute'-Bit im Dateimodus auf Unix-Dateisystemen?

Warum sind gemeinsam genutzte Bibliotheken unter Linux ausführbar?

Warum ist chmod -R 777 / destruktiv?