文件描述符
0 输入流
1 正确输出流
2 报错输出
重定向和文件描述符之间不能有空格
输出流:
重定向(>>,追加模式)
ls -l / 1>>ls.txt 将根目录输出到ls.txt文件
覆盖重定向(>)
ls -l / 1> ls.txt 将etc中的内容输出到ls.txt文件并覆盖原文件内容
报错输出
ls -l /god 因为没有这个文件,会输出错误信息
ls -l /god 2>ls02.txt 将此错误信息输出到ls02.txt文件中,文件内容为ls: cannot access /god: No such file or directory
将标准输出和错误输出都输入到文件中
方法一: 写到不同文件
ls -l / /god 1>ls03.txt 2>ls04.txt 文件描述符要对应标准输出和错误输出的文件,不能打乱顺序
方法二: 写到相同文件
ls -l / /god 1>ls05.txt 2>>ls05.txt 将一种重定向改为追加模式
方法三:将文件描述符指向另一个文件描述符
文件描述符有方向性,会从左往右依次执行
ls -l / /god 1>ls07.txt 2>&1 &舍弃,bash会将1解释成文件,所以要添加上
ls -l / /god 2>&1 1>ls07.txt 从左到右执行,会先将错误输出指向标准输出,而此时标准输出指向屏幕,所以会将错误输出打印到屏幕上
方法四:
ls -l / /god >& ls07.txt 将错误输出和标准输出都输出到一个文件,也可以将>&变成&>
输入流(read):
打开一个输入并阻塞,等待用户输入(read),对换行符敏感
read sxt 会阻塞,等待输入到变量sxt中,enter键结束
<<<后接待输入内容
read sxt 0<<<"hello" 将字符串放到程序的输入流里
<<后接输入停止符,加了双引号则以双引号内的内容为停止符,未加则以该符串未输入停止符
只会输入第一次换行前的内容
read sxt 0<<ox ox为输出停止符
read sxt 0<<"ox" ox为输出停止符
<后接文件
read sxt 0<h.txt 将文件中第一个换行符前的内容输入到变量sxt中
在循环中,read读取输入流时,才会逐行读取,如果是文件,将只会读取第一行
兼备输入输出流(cat)
cat会将停止符之间的内容输出到屏幕,对换行符不敏感
cat 0<<ox
adad
ada
ad
ox
cat 0<h.txt 将文件中的内容输出到屏幕
exec
将一个程序覆盖当前进程,即将此程序压栈,如果程序执行完是退出,则会让内核触发,将整个进程销毁,断开连接
访问百度
1、exec 8<> /dev/tcp/www.baidu.com/80
-8 文件描述符,可换成其他自定义数字
-<> 重定向操作符,输入输出
-/dev/tcp/www.baidu.com/80 虚拟文件系统
当前bash里面多了一个8号文件描述符,指向了一个socket, /dev/tcp/www.baidu.com/80为特殊目录,触发一个内核
机制,让bash发起了对百度socket的连接
2、http协议请求头
echo -e "GET / HTTP/1.0\n" -e使得bash能识别换行符
将请求头发送到百度服务器
echo -e "GET/HTTP/1.0\n" 1>&8
读取响应信息
cat 0<&8