Ich habe gerade ein chmod -x chmod gemacht


Antworten:


43

In Linux:

/lib/ld-linux.so.2 /bin/chmod +x /bin/chmod

http://www.slideshare.net/cog/chmod-x-chmod


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)

4
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:

cp /bin/ls /tmp/chmod.tmp
cp /bin/chmod /tmp/chmod.tmp
mv /tmp/chmod.tmp /bin/chmod

Ich denke, dein erstes cpmuss die -p Flagge haben
Riking

@Riking: Das ist für diesen Zweck nicht nötig.
Bis auf weiteres angehalten.

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.
Rechtschreibung

9

Perl benutzen:

% perl -e 'chmod 0755, qw[/bin/chmod]'

7

setfacl -m u::rx /bin/chmod

... gewährt dem Besitzer Ausführungsberechtigungen.

Aber der /lib/ld-linux.so.2Trick ist ordentlich. :)


5

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


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:

# /bin/mv /bin/chmod /bin/chmod.tmp
# install -p -m 755 /bin/chmod.tmp /bin/chmod

Dies funktioniert auf meinem MacOS X-System.


2

/ rescue / chmod 555 / bin / chmod

Ich denke, Sie könnten auch mtree verwenden.


Das wäre meine Lieblingslösung. Unter Linux funktioniert das leider nicht.


1

erstelle ein neues chmod und verwende das für das original

umask 000
cat chmod > ~/my-chmod
~/my-chmod a+x chmod

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.
Chris Johnsen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.