wanggongzhen 2020-05-26
与 Unix 主题“任何东西都是一个文件”保持一致,程序,比方说 ls,实际上把他们的运行结果 输送到一个叫做标准输出的特殊文件(经常用 stdout 表示),而它们的状态信息则送到另一个 叫做标准错误的文件(stderr)。默认情况下,标准输出和标准错误都连接到屏幕,而不是 保存到磁盘文件。除此之外,许多程序从一个叫做标准输入(stdin)的设备得到输入,默认情况下, 标准输入连接到键盘。
I/O 重定向允许我们更改输出地点和输入来源。一般地,输出送到屏幕,输入来自键盘, 但是通过 I/O 重定向,我们可以做出改变。
ls -l /usr/bin > output.txt 将ls的结果输出到output.txt >>将结果添加到output.txt后面
$ > output.txt 清空文件内容 或 创建空文件
cat 连接文件 读取若干个文件,复制它们到标准输出 可以显示文件而没有分页
经常被用来显示简短的文本文件,或者用来把文件连接在一起。
例如下载了一个大文件,被分离成a1 a2 a3...
cat a* > b 就组合成了一个大文件 通配符总是按序展开
cat 回车 会从标准输入读取数据 按C-d表示到达文件结尾
cat > a.txt 从标准输入读取数据 将输出重定向到a.txt
cat < a.txt 重定向标准输入p
重定向标准错误缺乏专用的重定向操作符。为了重定向标准错误,我们必须参考其文件描述符。 一个程序可以在几个编号的文件流中的任一个上产生输出。虽然我们已经将这些文件流的前 三个称作标准输入、输出和错误,shell 内部分别将其称为文件描述符0、1和2。shell 使用文件描述符提供 了一种表示法来重定向文件。因为标准错误和文件描述符2一样,我们用这种 表示法来重定向标准错误:
ls /bin/usr 2> 2.txt 重定向标准错误
ls /bin/usr 1> 1.txt 2> 2.txt 重定向标准输出和标准错误到不同文件
ls /bin/usr &> 12.txt 重定向标准输出和标准错误到同一文件
ls /bin/usr > 1.txt 2>&1 同上,> 将文件描述符1 重定向到文件,
2>&1 将文件描述符2 重定向到文件描述符1
重定向到文件描述符,需在数字前加 &
ls -l /bin/usr 2> /dev/null 隐藏某些输出结果 /dev/null是一个专门设置的文件
接受输入 但不做任何处理
管道
一个命令的输出,可以通过管道,作为另一个命令的输入
ls -l /usr/bin | sort | uniq | less 排序 去重 显示
uniq -d 显示重复的行
wc a.txt 统计行数、单词数、字节数
ls /bin /usr/bin | sort | uniq | wc -l -l选项只输出行数 可对其他命令的结果进行统计
grep 显示匹配的行 -i忽略大小写 -v只显示不匹配的行
head/tail 打印前/后若干行的内容 默认10行
tail -n 5 a.txt 打印后5行 -f显示实时内容
ls /usr/bin | tail -n 5 在管道中使用
ls /usr/bin | tee ls.txt | grep zip tee同时输出到标准输出和若干文件
可以跟踪管道的中间状态