Linux反弹shell(一)文件描述符与重定向
参考网址:
1)更详细网址:https://xz.aliyun.com/t/2548
版权声明:本文为CSDN博主「liupeifeng3514」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/liupeifeng3514/article/details/79711694
=====================================
1,三个文件描述符,分别是:
标准输入standard input 0 (默认设备键盘)
标准输出standard output 1(默认设备显示器)
错误输出:error output 2(默认设备显示器)
2,重定向
重定向主要分为两种(其他复杂的都是从这两种衍生而来的):
(1)输入重定向 < <<
(2)输出重定向 > >>
3)< 是对标准输入 0 重定向 ,> 是对标准输出 1 重定向
4)重定向是对文件描述符的操作
3,输入重定向<
格式:cat 0< file 或 cat < file(以只读的方式打开)
4,输出重定向
格式:echo hello 1> file 或 echo hello > file(以只写的方式打开)
5,标准输出与标准错误输出重定向
格式:mkdir &> file
将错误提示和标准输入都定向到file文件
图:
6,文件描述符的复制
格式: [n]<&[m] / [n]>&[m] (这里所有字符之间不要有空格)
说明:
1)这里两个都是将文件描述符 n 复制到 m ,两者的区别是,前者是以只读的形式打开,后者是以写的形式打开
2>1
和2>&1
的写法有什么区别:
-
2>1
的作用是把标准错误的输出重定向到1,但这个1不是标准输出,而是一个文件!!!,文件名就是1; -
2>&1
的作用是把标准错误的输出重定向到标准输出1,&指示不要把1当作普通文件,而是fd=1即标准输出来处理。
一般将2>&1写在后面,写在中间,会将标准输出或标准错误输出指定为文件名。
可以用下面实例理解
ls 2>1测试一下,不会报没有2文件的错误,但会输出一个空的文件1;
ls xxx 2>1测试,没有xxx这个文件的错误输出到了1中,2表示错误输入,1表示文件名;
ls xxx 2>&1测试,不会生成1这个文件了,不过错误跑到标准输出了;
ls xxx >out.txt 2>&1,实际上可换成 ls xxx 1>out.txt 2>&1;重定向符号>默认是1,错误和输出都传到out.txt了。