【Linux重定向】玩转重定向,让数据流动更有趣

image.png

引言

在使用Linux的过程中,命令行是我们最常使用的工具之一。而在命令行中,重定向(Redirection)是一个非常有用的功能。什么是重定向呢?顾名思义,就是把数据的流向重新定义。 通过重定向,你可以将命令的输出保存到文件中、将错误信息分离、或者将输入重定向到命令。这不仅可以提高工作的效率,还能让你更灵活地管理和处理数据流。这篇博客将深入介绍Linux中的重定向,帮助你更高效地使用命令行。

一、什么是重定向?

定义: 重定向是在命令行中将输入和输出流从默认位置(通常是屏幕或键盘)重定向到其他地方(如文件或设备)的过程。

三种主要的流:

  1. 标准输入(stdin): 默认是键盘输入,文件描述符为0
  2. 标准输出(stdout): 默认是显示屏输出,文件描述符为1
  3. 标准错误(stderr): 默认是显示屏输出,专门用来输出错误信息,文件描述符为2

二、常见重定向

1. 基本输出重定向 >

  • 使用>将命令输出保存到文件,若文件存在则覆盖
ls > output.txt #将1s命令的输出重定向到output.txt文件

QQ_1724931190186.png

2. 追加重定向 >>

  • 使用>>将命令输出追加到文件末尾,不覆盖已有内容。
echo "Hello, World!" >> output.txt

QQ_1724931298616.png

3. 输入重定向 <

  • 使用<符号可以将文件内容作为命令的输入。
  • 从键盘文件读取什么,就向显示器文件写入什么
    QQ_1724932171520.png
  • 当我们更换输入文件时,从普通文件进行输入
    QQ_1724932477732.png
    两个命令的执行结果是一样的,都是将 test.txt 文件中的内容输出到终端。虽然实现方式不同,一个使用了输入重定向 (<),另一个直接将文件名作为参数传递给 cat,但最终效果相同。

more/less 分页显示文件内容

创建大文件: i=0; while [ $i -le 100000 ]; do echo "hello $i"; let i++; done > file.txt
QQ_1724933509019.png

  • more file.txt:使用more命令可以逐页显示文件内容,按Enter键向下滚动。
  • less file.txtless命令更灵活,可以使用方向键上下滚动,还可以通过输入/+内容进行搜索。
    这些命令在处理大文件时非常有用,lessmore功能更强大,允许用户在文件中更自由地导航。
    QQ_1724933431736.png

head/tail 查看文件的开头和结尾部分

  • 显示文件中最后几行的大文件 如果文件很大,可以用 tail 显示最后几行而不加载整个文件,非常有用。
  • 从某个位置开始显示文件内容 使用+符号来显示从指定行开始的内容,例如:tail -n +11 file.txt 显示从第11行开始的所有内容。

不形成临时文件查看特定行数,如80000 ~ 81000行:

head -80010 file.txt | tail -10


查看一万到两万行:

head -20000 file.txt | tail -10000 | less

QQ_1724934324940.png

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.txtoutput2.txt中,同时显示在终端。

8. 忽略输出

  • 丢弃不需要的输出
    • 使用/dev/null来忽略命令的标准输出或错误输出:
    command > /dev/null 2>&1
    
    这个命令会丢弃所有输出,通常用于不需要关心输出结果的操作。

结语

重定向是Linux命令行的强大工具,让你能灵活地处理和管理数据。从保存输出到文件、过滤信息,再到多命令组合处理,掌握这些技巧后,你会发现命令行不仅高效,而且充满乐趣。希望这篇文章能为你的Linux操作增添一些新技能,让你在工作和学习中更加游刃有余。记住,灵活运用重定向,事半功倍!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值