我只是做了一个chmod -x chmod


Answers:


43

在Linux中:

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

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


bindbn,我打算发布相同的链接:-),但是我正在读自己,因为我是unix / linux的新手!
rihatum

2
在64位发行版上,您可能不得不使用/lib64/ld-linux-x86-64.so.2ldd /bin/chmod应该确切列出要运行的链接器。
goldPseudo

我会写一个使用chmod(2)的最小程序,但这
很酷

1
@Stefan:来自man ld-linux.so:“ ld.so [和ld-linux.so]加载程序所需的共享库,准备运行该程序,然后运行它。” (ld.so用于a.out格式可执行文件,ld-linux.so用于ELF格式。)
暂停,直到另行通知。

1
@Stefan:内核并不真正知道如何加载和执行动态链接的可执行文件,因为它非常复杂并且遵循glibc,而不是内核。ld-linux.so是某种可执行文件/库混合文件,是一种静态链接的文件,在用户空间中运行,负责加载动态链接的可执行文件及其所有依赖项,然后运行它们。


18

这取决于复制目标文件时保留目标文件而不是源文件的权限的事实。我们正在“借用”以下对象的权限ls

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

我认为您的第一个cp需要打开-p标志
2013年

@Riking:不必为此目的。
暂停,直到另行通知。

这类似于我想出的解决方案,但是在cp执行了可执行文件之后,我只是cat将其内容chmod放入了临时文件中。
SpellingD




4

如果您/bin/chmod位于动态链接程序无法加载的系统上:

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

这适用于我的MacOS X系统。


2

/ rescue / chmod 555 / bin / chmod

我认为您也可以使用mtree。


这是我最喜欢的解决方案。不幸的是,它不适用于linux。


1

创建一个新的chmod并将其用于原始

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

将umask设置为000不会在创建文件时授予文件执行权限。充其量只能获得rw-rw-rw-权限。
巴里·布朗

2
@Barry:它实际上取决于传递给creat(2)/ open(2)/ mkdir(2)/ etc的模式。如果umask == 0并且创建文件的系统调用的模式指定为0777,则文件的执行位将打开。例如,链接器/编译器在写出“可执行文件”时传递0777(例如,(umask 000;gcc -o foo foo.c)将产生foo777模式)。但是,许多(大多数?)shell在打开/创建用于重定向的文件时会通过0666,这意味着此答案在许多shell下都行不通。
克里斯·约翰森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.