I/O重定向与管道

发布时间 2023-11-28 22:48:10作者: 零号菜鸟

1.I/O

”I/O”代表输入/输出

程序输出的两种类型:程序要实现的功能的结果、程序的执行状态(错误)

程序的运行结果会被输送到标准输出文件(stdout),程序的执行状态会被输送到标准错误文件(stderr),程序从标准输入(stdin) 设备得到输入。

重定向的作用在于更改程序的输出、输入。

 2.标准输出(>、>>)

标准输出一般是显示在屏幕上,可以通过>、>>来重定向标准输出在什么地方,">''表示覆盖,“>>"表示追加。

 

ls -l > /home/you/1.txt //通过>符号将本应该输出到屏幕的结果输出到指定路径下;

ls -l /etc > /home/you/1.txt //使用>符号时会文件会被从头开始重写;

ls -l /etc >> /home/you/1.txt //使用>>不会重写文件,而是添加到文件内容之后;

3.标准错误(2>、&>、2>&1)

shell 内部参考标准输入、输出、错误为文件描述符0,1和2

使用文件描述符来重定向文件,文件描述符”2”来执行重定向标准错误(stderr)

3.1标准输出(stdout) 和 标准错误(stderr) 可以同时重定向在同一个文件中

ls /you/home 2> 1.txt //选择一个不存在的目录正常情况下直接输出错误到屏幕,使用文件描述符“2”放在重定向操作符之前来重定向标准错误;

ls /you/home > 1.txt 2>&1 //先重定向标准输出,再使用2>&1重定向标准输出和错误到同一个文件;

ls /you/home >> 1.txt 2>&1 //使用>>文件不会被从头开始重写;

3.2标准错误的重定向必须在标准输出重定向之后

ls /you/home &> 1.txt //使用更为精简的&>来重定向标准输出和错误到同一个文件;
ls /you/home &>> 1.txt //使用>>文件不会被从头开始重写;

3.3重定向输出结果到”/dev/null”文件(位存储桶)可以接受输入,不做任何处理。

ls /you/home > /dev/null //处理不需要的输出;

cat /dev/null > /home/you //配合cat和重定向可以清空文件;

4.标准输入(cat、<、tee)

cat > 1.txt //若该文件存在则从头开始重写,不存在则创建该文件,输入信息之后可以选择ctrl+d、ctrl+z退出并保存

 5.管道符

现在对于管道操作符有了更深的理解,一个命令的标准输出为另一个命令的标准输入

管道操作符经常配合一些命令来对数据完成复杂的操作,起到过滤器的作用

tee

tee命令会从标准输入(stdin) 读取数据,将其内容输出到标准输出(stdout) 和保存在文件中。

在管道符的应用中,tee允许输出数据向后传递,并将内容复制到一个或多个文件。

ls /etc | tee 1.txt | grep a //将结果保存到1.txt中,再进行相应的查找并进行标准输出;

ls /etc | grep a | tee 1.txt //先进行查找,再将查找的内容通过tee保存到1.txt;

ls /etc | tee -a 1.txt //tee命令中的-a参数可以在原有内容后添加而不是覆盖;

sort

sort命令用于排序文本文件的内容(以行为单位)

sort命令默认排序方式(文本文件第一列的 ASCII 码次序)

sort 1.txt -k 2 //-k参数的作用是选择指定的列进行排序,该参数在命令最后添加
sort -b 1.txt //-b参数的作用是忽略开头的空格,空格在ASCII码值为32
sort -d 1.txt //-d参数的作用是仅处理字母、数字、空格
sort -f 1.txt //忽略大小写(统一视为大写字母)
sort -n 1.txt //按照数值大小进行排序
sort -u 1.txt //排序结果去重输出(唯一)