自娱自乐,我决定启动一台Linux服务器,然后以root用户执行“rm –rf /”命令,然后观察下哪些文件或者指令会幸存下来。结果是什么也没少!因此你必须增加 —no-preserce-root 再试一遍:
当你按下“Enter”时,一些重要的工具,比如
1
2
3
4
5
6
7
|
/bin/ls
/bin/cat
/bin/chmod
/usr/bin/file
|
将会应声消失!但是你当前的SSH连接以及bash终端都还在,这表明所有bash相关的内建指令都没有受影响,比如echo。
成为Bash达人
1
2
3
|
root@rmrf:/
- bash : /bin/ls : No such file or directory
|
执行以上命令,发现已没有ls可用,但是echo和fileglobs还在。利用这些“幸存者”们,我们可以做点什么呢?
1
2
3
4
5
6
7
|
root@rmrf:/
dev proc run sys
/dev/pts/0 /dev/pts/3 /dev/pts/ptmx
|
注意!/dev,/proc,/run,/sys还在,我们一定要保存好它们。如果有了ls指令,那么对目录下内容的读取操作将会更加简单。
1
2
3
4
5
6
7
|
root@rmrf:/
/dev/pts/0
/dev/pts/3
/dev/pts/ptmx
|
许多Reddit用户指出,printf仍是可用的。CAMH-说:printf会将参数依次格式化到输出字符串中去。
既然在bash下可以定义函数,那么我们可以自建一个ls工具,虽然功能还不是很完善。
1
|
- bash : syntax error near unexpected token `('
|
不对啊,这种操作应该完全合法才对,难道ls已经被映射,或者它是其他命令的别名?
1
2
3
|
root@rmrf:/
ls is aliased to ` ls --color=auto'< /code >
|
原来如此,我们上面的指令被扩展成了ls--color=auto () { printf '%s\n' ${1:+${1%/}/}*; }。那么,我们可以先使用unalias指令,去掉ls与ls—color的关联。
1
2
3
4
5
6
7
8
9
|
root@rmrf:/
/dev
/proc
/run
/sys
|
把函数存储到utils.sh文件
cat命令怎么样实现呢?借助read!read是幸存者之一,使用read结合管道和重定向,一个基本的cat就基本成型了!
1
2
3
|
root@rmrf:/
ls () { for ii in $1/*; do echo $ii; done }
|
|