重定向

三个文件描述符:

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的输入流里面,再打印出来。

 

posted @ 2019-06-17 16:00  Jary霸  阅读(136)  评论(0编辑  收藏  举报