重定向
三个文件描述符:
0:输入流的代表
1:输出流的代表,是文件描述符
2:错误输出,是文件描述符
每个程序都有0,1,2
1和2
echo “hi” 1>>a.log:改变输出到a.log,即将hi追加到a.log文件里面(追加重定向,2个>)
ls -l / 1>>a.txt : 改变输出结果到a.txt(覆盖重定向,一个>),ls的1默认指向屏幕
ls -l /asdasd 2>a.txt : 将错误输出写到a.txt里面去
ls -l / /asd 1>a1.txt 2>b.txt:将ls的标准输出到a.txt里面,将错误输出到b.txt
ls -l / /asd 1>>a1.txt 2>>b.txt:正确和错误输出都写到同一个文件里。
ls -l /asd 1>a.txt 2>&1 :先将1指向a.txt,2指向1,这样2就指向了a.txt,这样错误输出就到a.txt了。
ls -l >& a.txt : 将正确输出和错误输出到a.txt里面。
0
read a : 对变量a,等待从屏幕输入然后赋值给它。可echo $a打印出来
read a 0<<<"hello":把“hello”放到read的输入流让它读到,但是read对换行敏感。
read a 0<<QQasdQQ:QQ设定的首尾标识符,此处把字符串aaa赋值给a变量
read a < data.txt:将data.txt的第一行读到变量a里面
cat 0<<QQ
asd
hi
you
QQ:将字符串弄到cat的输入流里面,然后cat在通过输出流打印到屏幕。
exec ls -l: 用后面的命令覆盖当前的bash,如果后面的命令结束以后是退出,则bash也被销毁了。
exec 8<> /dev/tcp/www.baidu.com/80 : 8也是一个新建的文件描述符,此时会触发一个TCP连接,会产生一个新文件,这时可以发送http请求头了,把它写到新文件当中去就可以发给百度了。
cd /proc/$$/fd:看看这个新建立的文件
echo -e "GET / HTTP/1.0\n" 1>&8 : 其中-e是为了识别换行符,然后把echo的输出流指向8号文件描述符,也就发给了百度。
cat 0<& 8:把百度发回来的东西放到cat的输入流里面,再打印出来。