bindbn, ich wollte gerade den gleichen link posten :-) aber ich habe gerade gelesen, dass ich neu bei unix / linux bin !!!
Rihatum
2
Auf einer 64-Bit-Distribution müssen Sie möglicherweise /lib64/ld-linux-x86-64.so.2stattdessen verwenden. ldd /bin/chmodsollte genau auflisten, welcher Linker ausgeführt werden soll.
goldPseudo
Ich würde ein minimales Programm schreiben, das chmod (2) verwendet, aber das ist cooler
adamo
1
@Stefan: From man ld-linux.so: "ld.so [und ld-linux.so] lädt die gemeinsam genutzten Bibliotheken, die von einem Programm benötigt werden, bereitet das Programm für die Ausführung vor und führt es dann aus." ( ld.sogilt für a.outausführbare Dateien im Format und ld-linux.sofür das ELF-Format.)
Bis auf weiteres angehalten.
1
@Stefan: Der Kernel kann dynamisch verknüpfte ausführbare Dateien nicht wirklich laden und ausführen, da sie sehr komplex sind und dem glibc und nicht dem Kernel folgen. ld-linux.soist eine Art ausführbares / Bibliotheks-Hybrid, eine Art statisch verknüpft, wird im Benutzerbereich ausgeführt und ist dafür verantwortlich, dynamisch verknüpfte ausführbare Dateien und all ihre Abhängigkeiten zu laden und sie dann auszuführen.
Juliano
18
Verwenden Sie Python:
# python
Python> import os
Python> os.chmod("/bin/chmod",0755)
Und als Einzeiler:python -c "import os; os.chmod('/bin/chmod', 0755)"
Thanatos
18
Dies beruht auf der Tatsache, dass die Berechtigungen einer Zieldatei erhalten bleiben und nicht die der Quelldatei, wenn diese kopiert wird. Wir "leihen" die Berechtigungen von ls:
Dies war ähnlich wie die Lösung, die ich mir ausgedacht habe, aber nachdem cpich die ausführbare Datei erstellt hatte, habe ich nur catden Inhalt von chmodin die temporäre Datei eingefügt.
Links zu anderen Seiten sind nicht hilfreich, da der Link irgendwann unterbrochen wird. Das ist so, als würde man jemandem sagen, er solle die Antwort googeln.
Phil Hannent
@Phil Hannent: Ich habe diese Diashow auch erst vor drei Tagen gesehen, also war es mein erster Gedanke, ob das OP einer der Bewerber dort war.
Boldewyn
Genauso,
ich
4
Sollten Sie sich auf einem System /bin/chmodbefinden, auf dem der Dynamic Linker nicht laden kann:
Wenn Sie eine umask von 000 festlegen, erhält eine Datei beim Erstellen keine Ausführungsberechtigung. Es wird bestenfalls RW-RW-RW-Berechtigungen erhalten.
Barry Brown
2
@Barry: Es hängt tatsächlich von dem Modus ab, der an creat (2) / open (2) / mkdir (2) / etc übergeben wurde. Wenn umask == 0 und der Systemaufruf, der die Datei erstellt, 0777 für den Modus lautet, sind die Ausführungsbits für die Datei aktiviert. Beispielsweise übergeben Linker / Compiler 0777, wenn sie eine „ausführbare Datei“ ausgeben (z. B. (umask 000;gcc -o foo foo.c)wird ein foomit Modus 777 erstellt). Viele (die meisten?) Shells bestehen jedoch 0666, wenn sie Dateien zur Umleitung öffnen / erstellen. Dies bedeutet, dass diese Antwort unter vielen Shells nicht funktioniert.
chmod
!Antworten:
In Linux:
http://www.slideshare.net/cog/chmod-x-chmod
quelle
/lib64/ld-linux-x86-64.so.2
stattdessen verwenden.ldd /bin/chmod
sollte genau auflisten, welcher Linker ausgeführt werden soll.man ld-linux.so
: "ld.so [und ld-linux.so] lädt die gemeinsam genutzten Bibliotheken, die von einem Programm benötigt werden, bereitet das Programm für die Ausführung vor und führt es dann aus." (ld.so
gilt füra.out
ausführbare Dateien im Format undld-linux.so
für das ELF-Format.)ld-linux.so
ist eine Art ausführbares / Bibliotheks-Hybrid, eine Art statisch verknüpft, wird im Benutzerbereich ausgeführt und ist dafür verantwortlich, dynamisch verknüpfte ausführbare Dateien und all ihre Abhängigkeiten zu laden und sie dann auszuführen.Verwenden Sie Python:
quelle
python -c "import os; os.chmod('/bin/chmod', 0755)"
Dies beruht auf der Tatsache, dass die Berechtigungen einer Zieldatei erhalten bleiben und nicht die der Quelldatei, wenn diese kopiert wird. Wir "leihen" die Berechtigungen von
ls
:quelle
cp
muss die -p Flagge habencp
ich die ausführbare Datei erstellt hatte, habe ich nurcat
den Inhalt vonchmod
in die temporäre Datei eingefügt.Perl benutzen:
quelle
setfacl -m u::rx /bin/chmod
... gewährt dem Besitzer Ausführungsberechtigungen.
Aber der
/lib/ld-linux.so.2
Trick ist ordentlich. :)quelle
Das ist komisch ... Ich habe so etwas vor ein paar Tagen über einen Tweet von jemandem gesehen ...
http://www.slideshare.net/cog/chmod-x-chmod
quelle
Sollten Sie sich auf einem System
/bin/chmod
befinden, auf dem der Dynamic Linker nicht laden kann:Dies funktioniert auf meinem MacOS X-System.
quelle
/ rescue / chmod 555 / bin / chmod
Ich denke, Sie könnten auch mtree verwenden.
quelle
Ich vermute, das ist keine echte Frage: http://www.slideshare.net/cog/chmod-x-chmod
quelle
erstelle ein neues chmod und verwende das für das original
quelle
(umask 000;gcc -o foo foo.c)
wird einfoo
mit Modus 777 erstellt). Viele (die meisten?) Shells bestehen jedoch 0666, wenn sie Dateien zur Umleitung öffnen / erstellen. Dies bedeutet, dass diese Antwort unter vielen Shells nicht funktioniert.