Take the 2-minute tour ×
Server Fault is a question and answer site for professional system and network administrators. It's 100% free, no registration required.

So I did a chmod -x chmod. How I can fix this problem? How do I give execute rights back to chmod?

share|improve this question
9  
You accidentally the whole chmod! –  Thanatos Nov 5 '10 at 16:43
1  
See also the question on Unix & Linux SE. –  unor Jul 27 '13 at 11:51

10 Answers 10

up vote 40 down vote accepted

In Linux:

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

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

share|improve this answer
    
bindbn, I was about to post the same link :-) but I was reading myself as I am new to unix / linux stuff !!! –  rihatum Oct 11 '10 at 7:43
2  
On 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. –  goldPseudo Oct 11 '10 at 7:52
    
I would write a minimal program that uses chmod(2), but this is cooler –  adamo Oct 11 '10 at 7:57
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 for a.out format executables and ld-linux.so is for ELF format.) –  Dennis Williamson Oct 12 '10 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. –  Juliano Nov 5 '10 at 17:09

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
share|improve this answer

setfacl -m u::rx /bin/chmod

... will grant the owner execute permissions.

But, the /lib/ld-linux.so.2 trick is neat. :)

share|improve this answer

/rescue/chmod 555 /bin/chmod

I think you could also use mtree.

share|improve this answer
    
This would my favorite solution. It doesn't work with linux unfortunately. –  coincoin Aug 7 '12 at 18:01

Using Perl:

% perl -e 'chmod 0755, qw[/bin/chmod]'
share|improve this answer

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
share|improve this answer
    
I think your first cp needs to have the -p flag on –  Riking Mar 9 '13 at 21:33
    
@Riking: It's not necessary for this purpose. –  Dennis Williamson Mar 9 '13 at 23:16
    
This was similar to the solution I came up with, but after cping the executable, I just cat'd the contents of chmod into the temp file. –  SpellingD Jul 21 '13 at 16:42

create a new chmod and use that for the original

umask 000
cat chmod > ~/my-chmod
~/my-chmod a+x chmod
share|improve this answer
    
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. –  Barry Brown Oct 11 '10 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 a foo 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. –  Chris Johnsen Oct 12 '10 at 1:52

Use python:

# python
Python> import os
Python> os.chmod("/bin/chmod",0755)
share|improve this answer
3  
And, as a one-liner: python -c "import os; os.chmod('/bin/chmod', 0755)" –  Thanatos Nov 5 '10 at 16:35

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.

share|improve this answer

This is weird... I saw something like this a few days ago via someone's tweet...

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

share|improve this answer
    
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. –  Phil Hannent Oct 11 '10 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. –  Boldewyn Oct 11 '10 at 14:04
    
Same, just saw this on Reddit a few days back... –  Dentrasi Oct 11 '10 at 22:31

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.