【Linux重定向】玩转重定向,让数据流动更有趣
引言
在使用Linux的过程中,命令行是我们最常使用的工具之一。而在命令行中,重定向(Redirection)是一个非常有用的功能。什么是重定向呢?顾名思义,就是把数据的流向重新定义。 通过重定向,你可以将命令的输出保存到文件中、将错误信息分离、或者将输入重定向到命令。这不仅可以提高工作的效率,还能让你更灵活地管理和处理数据流。这篇博客将深入介绍Linux中的重定向,帮助你更高效地使用命令行。
一、什么是重定向?
定义: 重定向是在命令行中将输入和输出流从默认位置(通常是屏幕或键盘)重定向到其他地方(如文件或设备)的过程。
三种主要的流:
- 标准输入(stdin): 默认是键盘输入,文件描述符为
0
。 - 标准输出(stdout): 默认是显示屏输出,文件描述符为
1
。 - 标准错误(stderr): 默认是显示屏输出,专门用来输出错误信息,文件描述符为
2
。
二、常见重定向
1. 基本输出重定向 >
- 使用
>
将命令输出保存到文件,若文件存在则覆盖。
ls > output.txt #将1s命令的输出重定向到output.txt文件
2. 追加重定向 >>
- 使用
>>
将命令输出追加到文件末尾,不覆盖已有内容。
echo "Hello, World!" >> output.txt
3. 输入重定向 <
- 使用
<
符号可以将文件内容作为命令的输入。 - 从键盘文件读取什么,就向显示器文件写入什么
- 当我们更换输入文件时,从普通文件进行输入
两个命令的执行结果是一样的,都是将test.txt
文件中的内容输出到终端。虽然实现方式不同,一个使用了输入重定向 (<
),另一个直接将文件名作为参数传递给cat
,但最终效果相同。
more/less 分页显示文件内容
创建大文件: i=0; while [ $i -le 100000 ]; do echo "hello $i"; let i++; done > file.txt
more file.txt
:使用more
命令可以逐页显示文件内容,按Enter键向下滚动。less file.txt
:less
命令更灵活,可以使用方向键上下滚动,还可以通过输入/+内容
进行搜索。
这些命令在处理大文件时非常有用,less
比more
功能更强大,允许用户在文件中更自由地导航。
head/tail 查看文件的开头和结尾部分
- 显示文件中最后几行的大文件 如果文件很大,可以用
tail
显示最后几行而不加载整个文件,非常有用。 - 从某个位置开始显示文件内容 使用
+
符号来显示从指定行开始的内容,例如:tail -n +11 file.txt
显示从第11行开始的所有内容。
不形成临时文件查看特定行数,如80000 ~ 81000行:
head -80010 file.txt | tail -10
查看一万到两万行:
head -20000 file.txt | tail -10000 | less
4. 管道重定向 |
1. 基本用法
- 将命令的输出传递给另一个命令
ls -l | grep ".txt"
ls -l
的输出会传递给grep ".txt"
,grep
只会显示包含.txt
的文件。这意味着可以直接从ls
的输出中筛选出特定文件类型。
2. 组合多个命令
- 通过多个管道进行更复杂的处理
cat file.txt | grep "error" | sort | uniq > error_log.txt
这个命令会将file.txt
中包含 “error” 的行过滤出来,然后排序,接着去除重复行,最终将结果保存到error_log.txt
文件中。每个命令的输出都会传递给下一个命令作为输入,形成一个数据处理链。
三、其它重定向
其它重定向在我目前阶段还未涉及,为完整性,补充如下
5. 标准错误重定向 2> &<
-
重定向错误输出
- 使用
2>
将命令的错误输出重定向到文件,避免错误信息出现在终端。
ls non_existing_file 2> error.log
这个命令将错误信息保存到
error.log
文件中。 - 使用
-
合并标准输出和错误输出
- 使用
&>
将标准输出和错误输出重定向到同一个文件。
command > all_output.txt 2>&1
这样可以将命令的所有输出(包括错误)都保存到
all_output.txt
中。 - 使用
6. Here Document 和 Here String
- Here Document (
<<
)- 用于将多行文本作为命令的输入,例如在脚本中:
cat <<EOF > output.txt Hello, This is a test. EOF
这个命令会将多行内容保存到`output.txt`中。
- **Here String (`<<<`)**
- 用于将一个字符串作为命令的输入:
```shell
grep "test" <<< "this is a test string"
这个命令在字符串中查找包含“test”的内容。
7. tee
命令
- 将输出重定向到多个文件
- 使用
tee
命令将输出同时保存到文件并在终端显示:
这个命令会将ls | tee output1.txt output2.txt
ls
的输出保存到output1.txt
和output2.txt
中,同时显示在终端。 - 使用
8. 忽略输出
- 丢弃不需要的输出
- 使用
/dev/null
来忽略命令的标准输出或错误输出:
这个命令会丢弃所有输出,通常用于不需要关心输出结果的操作。command > /dev/null 2>&1
- 使用
结语
重定向是Linux命令行的强大工具,让你能灵活地处理和管理数据。从保存输出到文件、过滤信息,再到多命令组合处理,掌握这些技巧后,你会发现命令行不仅高效,而且充满乐趣。希望这篇文章能为你的Linux操作增添一些新技能,让你在工作和学习中更加游刃有余。记住,灵活运用重定向,事半功倍!