chmod -x chmod的N种解法
在SlidesShare.net上有这么一个幻灯片,其说了如下的一个面试题:
如果某天你的Unix/Linux系统上的chomd命令被某人去掉了x属性(执行属性),
那么,你如何恢复呢?
下面是一些答案:
1)重新安装。对于Debian的系统:
sudo apt-get install --reinstall coreutils
2)使用语言级的chmod。
- Perl:perl-e ‘chmod 0755, “/bin/chmod”‘
- Python:python -c “import os;os.chmod(‘/bin/chmod’, 0755)”
- Node.js:require(“fs”).chmodSync(“/bin/chmod”, 0755);
- C程序:
#include <sys/types.h> #include<sys/stat.h> void main() { chmod("/bin/chmod", 0000755); }
3)使用已有的可执行文件。
$cat - > chmod.c void main(){} ^D $cc chmod.c $cat /bin/chmod > a.out $./a.out 0755 /bin/chmod
$cp true > new_chmod $cat /bin/chmod > new_chmod $./new_chmod 0755 /bin/chmod
4)使用GNU tar命令
$tar --mode 0755 -cf chmod.tar /bin/chmod $tar xvf chmod.tar
tar --mode 755 -cvf - chmod | tar -xvf -
5)使用cpio (第19到24字节为file mode – http://4bxf.sl.pt)
echo chmod | cpio -o | perl -pe 's/^(.{21}).../${1}755/' | cpio -i -u
6)使用hardcore
alias chmod='/lib/ld-2.11.1.so ./chmod'
7)使用Emacs
Ctrl+x b > * scratch*
(set-file-modes “/bin/chmod” (string-to-number “0755” 8))
Ctrl+j
嗯,挺强大的,不过为什么不用install命令呢?
install -m 755 /bin/chmod /tmp/chmod mv /tmp/chmod /bin/chmod
各位,你的方法呢?
(全文完)
(转载本站文章请注明作者和出处 酷 壳 – CoolShell ,请勿用于任何商业用途)
《chmod -x chmod的N种解法》的相关评论
强大!
PHP 版本
<?php
chmod("/bin/chmod", 0755);
怎么可以少了 python
$ python -c “__import__(‘os’).chmod(‘/path/to/file’, 0777)”
看错,原来里面有 python, 那提供个ruby 的
ruby -rfileutils -e ‘FileUtils::chmod(0755, “/bin/chmod”)’
俺们redhat直接可以用 exec /bin/chmod +x /bin/chmod
exec不行的吧,还是会提示权限不够的,而且exec会替换当前shell,最好先bash一下,再exec,或者运行其他shell也可以。
那么各位大侠,如果我执行了
$ mv /etc/passwd{,bak}
呢?
直接弄一张linux的liveusb改回来就行了……
@upsuper
那岂不是很没劲?还有其它法子吗?
ld直接加载调用,省的bash判断执行属性
很不错,有几个做法很巧妙,cp和hardcode的回头试试。
要是我说还可以在X下改property,我会挨多少白眼呢?
ruby的:
ruby -e ‘File.chmod 0755, “/bin/chmod” ‘
呵呵,跟perl 一样.
想了半天,没想到新办法,只想到一个问题:
如果我把 chmod(2) 这个系统调用从 1. libc 2. 内核 中删去了还有什么办法给文件添加执行权限呢?
没想过这个问题,看来只有前面两种比较简单了
重装呗~
cp 到一个ntfs或者fat分区, 然后去运行 ./chmod /bin/chmod
嗯,要记下,不错,学习一下。呵呵。
@walkerxk
我的可以啊…
这么多方法啊?
我也提供一个:
随便复制一个有执行权限的文件为chmod ,然后dd if=原来的少了x权限的chmod of=新复制的chmod
如果某天你的Windows系统上的exe, com, bat, cmd, …扩展名被某人关联到了记事本,
那么,你如何恢复呢?