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.