前置知识:文件描述以及重定向
关于文件描述符:
linux下一切皆文件,文件描述符就是内核为了方便管理文件而给文件分配的数字,类似于c语言操作文件的文件指针,通过操作文件指针就可以达到操作文件的目的。
Linux启动的时候会打开三个文件描述符:
- 标准输入 standard input 0 (默认设备是键盘)
- 标准输出 standard output 1(默认设备是显示器,或者说终端)
- 错误输出 error output 2(默认设备也是显示器(终端))
再次强调一下,Linux下一切皆文件,启动Linux的时候会启动的输入输出设备,所以会生成对应的文件描述符0,1,2,之后再打开其他文件,文件描述符依次增加。
关于重定向:
参考文章:http://c.biancheng.net/view/5956.html
一条命令执行的时候会按照默认的情况进行绑定,比如执行命令的结果会输出到终端里,错误信息输出到终端里,它们会默认和文件描述符‘1‘,‘2‘绑定,但是有的时候,我们想让命令执行的结果输入到文件里,该怎么办?这时候就需要重定向。
两种重定向:
- 输入重定向 <(<<)
- 输出重定向 >(>>)
bash会从左往右解析指令,所以重定向也是从左往右解析的。
输入重定向
基本格式:[n]< file(n与<之间没有空格)
说明:将文件描述符n重定向到file文件中,以只读的方式打开文件,如果n缺省,则为0。
两条命令的显示结果虽然相同,但是cat file
是以键盘作为标准输入,读取了file文件的内容,而cat 0< file
则是把标准输入重定向到了file文件中,以只读的方式打开文件,然后显示到终端上。
之前说过,bash在会从左往右解释指令,所以bash会先执行0< file
,将标准输入重定向到file文件中(只读方式打开文件),然后cat再次接受标准输入的时候,由于标准输入已经被重定向到了file文件中,所以会显示文件内容。
输出重定向
基本格式:[n]> file
说明:将文件描述符n重定向到file文件中,以只写的的方式打开,如果n缺省,则为1。
1> file2
,将标准输出重定向到file2文件中,所以执行第一条指令的时候看不到终端的回显,因为回显已经被写入了file2中,执行cat file2
将回显输出。
标准输出和标准错误输出重定向
基本格式: &> file
说明:将标准输出和标准错误输出重定向到file文件中。
和上一点一样,因为标准错误输出是默认是终端,所以执行bash在执行>& file2
的时候会将标准错误重定向到file2文件中,file2文件中就写入了本次指令的错误信息。
关于文件描述符以及重定向,如果深入学习的话其实还有很多内容,上述知识仅仅是为了学习bash反弹shell的一点铺垫。
(6月6日凌晨一点,其他内容明天再写吧,草稿先保存到博客上。)