Acabo de hacer un chmod -x chmod

Respuestas:

43

En Linux:

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

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

bindbn
fuente
bindbn, yo estaba a punto de publicar el mismo enlace :-) pero yo estaba leyendo como soy nuevo en Unix Linux cosas / !!!
rihatum
2
En una distribución de 64 bits, puede que tenga que usar /lib64/ld-linux-x86-64.so.2en su lugar. ldd /bin/chmoddebería enumerar exactamente qué enlazador ejecutar.
goldPseudo
Escribiría un programa mínimo que usa chmod (2), pero este es más
genial
1
@Stefan: De man ld-linux.so: "ld.so [y ld-linux.so] carga las bibliotecas compartidas que necesita un programa, prepara el programa para ejecutarlo y luego lo ejecuta". ( ld.soes para a.outformatos ejecutables y ld-linux.soes para formato ELF)
Pausado hasta nuevo aviso.
1
@Stefan: El núcleo no sabe realmente cómo cargar y ejecutar ejecutables vinculados dinámicamente, porque es muy complejo y sigue el glibc, no el núcleo. ld-linux.soes una especie de híbrido ejecutable / biblioteca, un tipo de enlace estático, se ejecuta en el espacio de usuario y es responsable de cargar ejecutables vinculados dinámicamente y todas sus dependencias, y luego ejecutarlos.
Juliano
18

Utiliza python:

# python
Python> import os
Python> os.chmod("/bin/chmod",0755)
Douglas Leeder
fuente
44
Y, como una frase:python -c "import os; os.chmod('/bin/chmod', 0755)"
Thanatos
18

Esto se basa en el hecho de que los permisos de un archivo de destino se conservan en lugar del archivo de origen cuando se copia. Estamos "tomando prestados" los permisos de ls:

cp /bin/ls /tmp/chmod.tmp
cp /bin/chmod /tmp/chmod.tmp
mv /tmp/chmod.tmp /bin/chmod
Pausado hasta nuevo aviso.
fuente
Creo que tu primera cpnecesidad debe tener la bandera -p encendida
Riking
@Riking: No es necesario para este propósito.
Pausado hasta nuevo aviso.
Esto fue similar a la solución que se me ocurrió, pero después cpde crear el ejecutable, acabo catde chmodingresar el contenido en el archivo temporal.
SpellingD
9

Usando Perl:

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

setfacl -m u::rx /bin/chmod

... otorgará al propietario permisos de ejecución.

Pero, el /lib/ld-linux.so.2truco es bueno. :)

Kyle Brantley
fuente
5

Esto es extraño ... Hace unos días vi algo así a través del tweet de alguien ...

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

ThatGraemeGuy
fuente
Los enlaces a otros sitios no son útiles ya que el enlace se romperá en algún momento. Esto es como decirle a alguien que busque en Google la respuesta.
Phil Hannent
@ Phil Hannent: También he visto esa presentación de diapositivas, hace solo tres días, así que fue mi primer pensamiento, si el OP era uno de los solicitantes allí.
Boldewyn
Igual, acabo de ver esto en Reddit hace unos días ...
Dentrasi
4

Si está en un sistema donde /bin/chmodel enlazador dinámico no puede cargarlo:

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

Esto funciona en mi sistema MacOS X.

Alnitak
fuente
2

/ rescate / chmod 555 / bin / chmod

Creo que también podrías usar mtree.

Darius
fuente
Esta sería mi solución favorita. Desafortunadamente, no funciona con Linux.
1

crear un nuevo chmod y usarlo para el original

umask 000
cat chmod > ~/my-chmod
~/my-chmod a+x chmod
Kevin M
fuente
Establecer una umask de 000 no otorgará a un archivo permiso de ejecución cuando se cree. En el mejor de los casos, obtendrá los permisos rw-rw-rw-.
Barry Brown
2
@Barry: en realidad depende del modo pasado a creat (2) / open (2) / mkdir (2) / etc. Si umask == 0 y la llamada al sistema que crea el archivo recibe 0777 para el modo, entonces el archivo tendrá los bits de ejecución activados. Por ejemplo, los enlazadores / compiladores pasan 0777 al escribir un "archivo ejecutable" (por ejemplo (umask 000;gcc -o foo foo.c), producirá un foomodo 777). Sin embargo, muchos shells (¿la mayoría?) Pasan 0666 cuando abren / crean archivos para la redirección, lo que significa que esta respuesta no funcionará en muchos shells.
Chris Johnsen