So I did a chmod -x chmod
. How I can fix this problem? How do I give execute rights back to chmod?
10 Answers
-
bindbn, I was about to post the same link :-) but I was reading myself as I am new to unix / linux stuff !!!– MutahirOct 11, 2010 at 7:43
-
2On a 64-bit distro, you may have to use
/lib64/ld-linux-x86-64.so.2
instead.ldd /bin/chmod
should list exactly which linker to run. Oct 11, 2010 at 7:52 -
-
1@Stefan: From
man ld-linux.so
: "ld.so [and ld-linux.so] loads the shared libraries needed by a program, prepares the program to run, and then runs it." (ld.so
is fora.out
format executables andld-linux.so
is for ELF format.) Oct 12, 2010 at 0:58 -
1@Stefan: The kernel doesn't really know how to load and execute dynamically-linked executables, because it is highly complex and follows the glibc, not the kernel.
ld-linux.so
is sort-of executable/library hybrid, sort-of statically linked, runs in userspace, and is responsible of loading dynamically-linked executables and all their dependencies, then running them.– JulianoNov 5, 2010 at 17:09
Use python:
# python
Python> import os
Python> os.chmod("/bin/chmod",0755)
-
4And, as a one-liner:
python -c "import os; os.chmod('/bin/chmod', 0755)"
– ThanatosNov 5, 2010 at 16:35 -
@Thanatos
python -c '__import__("os").chmod("/bin/chmod", 0755)'
does the same without using any semicolons. Oct 23, 2020 at 3:14
This relies on the fact that permissions of a destination file are preserved rather than the source file when it is being copied over. We're "borrowing" the permissions of ls
:
cp /bin/ls /tmp/chmod.tmp
cp /bin/chmod /tmp/chmod.tmp
mv /tmp/chmod.tmp /bin/chmod
-
-
-
This was similar to the solution I came up with, but after
cp
ing the executable, I justcat
'd the contents ofchmod
into the temp file. Jul 21, 2013 at 16:42
setfacl -m u::rx /bin/chmod
... will grant the owner execute permissions.
But, the /lib/ld-linux.so.2
trick is neat. :)
This is weird... I saw something like this a few days ago via someone's tweet...
-
Links to other sites are not helpful as the link will become broken at some point. This is like telling someone to google the answer. Oct 11, 2010 at 13:19
-
@Phil Hannent: I've seen that slideshow too, just three days ago, so it was my first thought, if the OP was one of the applicants there.– BoldewynOct 11, 2010 at 14:04
-
Should you be on a system where /bin/chmod
can't be loaded by the dynamic linker:
# /bin/mv /bin/chmod /bin/chmod.tmp
# install -p -m 755 /bin/chmod.tmp /bin/chmod
This works on my MacOS X system.
/rescue/chmod 555 /bin/chmod
I think you could also use mtree.
-
This would my favorite solution. It doesn't work with linux unfortunately.– user130370Aug 7, 2012 at 18:01
I suspect this is not a real question: http://www.slideshare.net/cog/chmod-x-chmod
- Reinstall chown: sudo apt-get install --reinstall coreutils
- perl -e 'chmod 0755, "chmod"'
- more examples in the slides
create a new chmod and use that for the original
umask 000
cat chmod > ~/my-chmod
~/my-chmod a+x chmod
-
Setting a umask of 000 won't give a file execute permission when it's created. It will, at best, get rw-rw-rw- permissions. Oct 11, 2010 at 15:25
-
2@Barry: It actually depends on the mode passed to creat(2)/open(2)/mkdir(2)/etc. If umask == 0 and the syscall that creates the file is given 0777 for the mode, then the file will have the execute bits turned on. For example, linkers/compilers pass 0777 when writing out an “executable file” (e.g.
(umask 000;gcc -o foo foo.c)
will produce afoo
with mode 777). However, many (most?) shells pass 0666 when they open/create files for redirection, which means that this answer is not going to work under many shells. Oct 12, 2010 at 1:52
chmod
!