Linux有句话叫万物皆文件,就像Java万物皆对象一样。
我们通过ssh连接Linux上执行shell终端bash就是通过指向文件并执行的。如图,当前进程会生成一个fd文件,其中一些数字表示如下
- 0:标准输入
- 1:标准输出
- 2:标准错误输出
我们就是通过ssh调用bash从而将标准输入输入到系统系统屏幕的。
重定向又是什么意思?
从定向是指我们可以人为的干预标准输入输出的位置。简而言之,输入重定向是指把文件导入命令中,而输出重定向则是把原本要输出到屏幕的数据信息写入到指定文件中。
标准输出:
命令 | 作用 |
---|---|
命令 1> 文件 | 将标准输出重定向到一个文件中(清空源文件的数据) |
命令 > 文件 | 同 1> 将标准输出重定向到一个文件中(清空源文件的数据) |
命令 2> 文件 | 将错误输出重定向到一个文件中(清空源文件的数据) |
命令 1>> 文件 | 将标准输出重定向到一个文件中(追加到原有内容的后面) |
命令 >> 文件 | 同 1>> 将标准输出重定向到一个文件中(追加到原有内容的后面) |
命令 2>> 文件 | 将错误输出重定向到一个文件中(追加到原有内容的后面) |
命令 >> 文件 2>&1 | 将标准输出、错误输出一同重定向到文件 |
命令 &>> 文件 | 同上 |
命令 1> 文件1 2> 文件2 | 将标准输出冲重定向到一个文件,错误输出重定向到另外一个文件 |
示例:
1.summer文件不存在,会报错。我们将标准输出重定向到aaa.out文件,错误输出到bbb.out文件:
2.将标准输出、错误输出重定向到同一个文件ccc.out:
我们发现明明正确的在前,错误的在后,为什么到文件中却是错误的在前面呢?
因为,bash执行命令是先输出错误信息的,如下图所示:
标准输入:
命令 | 作用 |
---|---|
命令 < 文件 | 将文件作为命令的标准输入 |
命令 << 分界符 | 从标准输入读入,遇到分界符停止【注意对换行符敏感】 |
命令 <<< 内容 | 从字符串读数据 |
命令 < 文件一 1>文件二 | 将文件一作为命令的标准输入,并将标准输出重定向到文件二 |
示例:
1.如图将sh01.sh作为标准输入,wc -l来执行查看行数等同于下面的通道模式:
2.如图aaa文件里面就写了个“/”,将aaa文件作为标准输入,然后将结果输出到bbb文件:
3.使用read命令来读取aaa变量
二、重定向之socket案例
exec 8<> /dev/tcp/www.baidu.com/80
echo -e "GET / HTTP/1.0 " >& 8
cat <& 8