当前位置: 首页 > news >正文

shell中与>和<相关的数据流重定向操作符整理

shell中与>和<相关的数据流重定向操作符整理

  • 输出重定向操作符
    • >
    • >>
    • 2>
    • 2>>
    • &> 或 >&
    • &>>
  • 输入重定向操作符
    • <
    • <<
    • <<<
  • 组合重定向
    • 2>&1
  • 文件描述符相关重定向
    • [n]< file 和 [n]> file
    • >&- 和 <&-
  • 重定向到设备文件相关
    • > /dev/null 和 2> /dev/null
  • 在网络通信相关场景(结合输入输出重定向思想)
  • 进程间通信相关的输入输出操作思路
  • 特殊文件系统操作中的重定向

在Shell中,< 和 > 相关的操作符主要用于输入输出重定向

输出重定向操作符

>

  • 作用:将命令的标准输出覆盖写入到指定文件中,如果文件不存在,则创建该文件;如果文件已存在,则会清空文件内容后再写入(错误信息不会输入进去)
echo "Hello, World!" > test.txt

>>

  • 作用:将命令的标准输出追加到指定文件的末尾,如果文件不存在,则创建该文件(错误信息不会输入进去)
echo "Appended text" >> test.txt

2>

  • 作用:将命令的标准错误输出重定向到指定文件(正确信息不会输入进去)
ls non_existent_file 2> error.log

ls non_existent_file 会产生一个错误,因为 non_existent_file 文件不存在,这个错误信息以覆盖的方式会被重定向到 error.log 文件中,而不会显示在终端上

2>>

  • 作用:将命令的标准错误输出追加到指定文件的末尾(正确信息不会输入进去)
ls non_existent_file 2>> error.log

再次执行 ls non_existent_file 时,新的错误信息会被追加到 error.log 文件的末尾

&> 或 >&

  • 作用:将命令的标准输出和标准错误输出都重定向到同一个文件
ls non_existent_file &> all_output.log

这样,ls 命令的标准输出(如果有)和标准错误输出都会被写入到 all_output.log 文件中

&>>

  • 作用:把标准输出和标准错误输出都追加到指定文件末尾,它结合了标准输出追加(>>)和标准错误输出追加(2>>)的功能
ls non_existent_file &>> combined.log

该命令会将 ls 命令执行过程中的标准输出(如果有)和标准错误输出追加到 combined.log 文件中

输入重定向操作符

<

  • 作用:将指定文件的内容作为命令的输入
wc -l < test.txt

wc -l 命令用于统计行数,通过 < test.txt 把 test.txt 文件的内容作为输入,统计该文件的行数

<<

  • 作用:用于向命令提供多行输入,可在脚本中嵌入一段文本块,并将其作为命令的输入,以指定的结束标记(如 EOF)来界定文本块的开始和结束(约定俗成用EOF,但使用其他例如aaa,bbb作为开始结束标识也可以)
cat << EOF
This is a multi-line text.
It can contain multiple lines.
EOF

cat 命令会将这段多行文本输出到终端

<<<

  • 作用:将一个字符串作为命令的输入
grep "example" <<< "This is an example string."

grep 命令会在 “This is an example string.” 中查找 “example” 并输出匹配的行

组合重定向

2>&1

  • 作用:将标准错误输出重定向到标准输出,通常与其他重定向操作符结合使用,将标准输出和标准错误输出都重定向到同一个地方
ls non_existent_file 2>&1 | tee output.log

ls 命令的标准输出和标准错误输出都会通过管道传递给 tee 命令,tee 命令会将内容同时输出到终端和 output.log 文件中

文件描述符相关重定向

[n]< file 和 [n]> file

  • 作用:n 代表文件描述符,默认情况下,0 是标准输入(stdin),1 是标准输出(stdout),2 是标准错误输出(stderr),可以使用其他文件描述符进行更灵活的输入输出重定向
exec 3> logfile.txt
echo "This will go to the log file" >&3
exec 3>&-  # 关闭文件描述符 3

这里先将文件描述符 3 重定向到 logfile.txt 文件,然后将字符串 “This will go to the log file” 输出到文件描述符 3 对应的文件中,最后关闭文件描述符 3

>&- 和 <&-

  • 作用
    • >&-:用于关闭文件描述符的输出,当已经完成了对某个文件描述符的输出操作,并且想要释放该资源时,可以使用此操作符关闭它
    • <&-:用于关闭文件描述符的输入,通常在不再需要从某个文件描述符读取输入时使用
# 打开文件描述符 3 用于写入
exec 3> output.txt
echo "Writing to file descriptor 3" >&3
# 关闭文件描述符 3 的输出
exec 3>&-# 打开文件描述符 4 用于读取
exec 4< input.txt
read line <&4
echo "Read line: $line"
# 关闭文件描述符 4 的输入
exec 4<&-

重定向到设备文件相关

> /dev/null 和 2> /dev/null

  • 作用
    • > /dev/null:将命令的标准输出丢弃,即不将标准输出显示在终端或保存到文件中,/dev/null 是一个特殊的设备文件,被称为“黑洞”,所有写入它的数据都会被丢弃
    • 2> /dev/null:将命令的标准错误输出丢弃
# 丢弃标准输出
ls non_existent_file > /dev/null
# 丢弃标准错误输出
ls non_existent_file 2> /dev/null
# 同时丢弃标准输出和标准错误输出
ls non_existent_file &> /dev/null

在网络通信相关场景(结合输入输出重定向思想)

通过管道和重定向实现简单网络交互(在有合适工具的情况下)

  • 作用:借助网络工具(如 nc 即 netcat),结合重定向可以实现简单的网络通信,可以将本地命令的输出发送到远程主机,或者将远程主机的响应作为本地命令的输入
  • 示例
# 作为客户端向远程服务器发送消息
echo "Hello, server!" | nc example.com 80 > response.txt
# 这里将 "Hello, server!" 发送到 example.com 的 80 端口
# 并将服务器的响应保存到 response.txt 文件中

进程间通信相关的输入输出操作思路

通过命名管道(FIFO)结合重定向

  • 作用:命名管道是一种特殊的文件类型,可用于不同进程之间的通信,可以利用重定向将数据写入命名管道,也可以从命名管道读取数据
# 创建命名管道
mkfifo myfifo
# 一个进程向管道写入数据
echo "Data for the other process" > myfifo &
# 另一个进程从管道读取数据
read data < myfifo
echo "Read data: $data"
# 删除命名管道
rm myfifo

特殊文件系统操作中的重定向

利用重定向修改系统配置文件(需权限)

  • 作用:在某些情况下,需要修改系统配置文件,可借助重定向将修改后的内容覆盖写入到配置文件中,但要注意这种操作需要相应的权限
# 假设要修改 hosts 文件添加一条记录
echo "127.0.0.1  mydomain.local" | tee -a /etc/hosts > /dev/null
# tee -a 用于将输入追加到文件中,结合重定向操作

相关文章:

  • Spring Cloud Alibaba 学习 —— 简单了解常用技术栈
  • 新能源汽车与油车销量
  • iOS 集成网易云信IM
  • 强化学习的前世今生(五)— SAC算法
  • 1.2 HarmonyOS NEXT分布式架构核心技术解析
  • JVM 性能调优
  • 鸿蒙OSUniApp 移动端直播流播放实战:打造符合鸿蒙设计风格的播放器#三方框架 #Uniapp
  • Linux之文件进程间通信信号
  • 多商户系统源码性能调优实战:从瓶颈定位到高并发架构设计!
  • ✨1.1.1 按位与运算替代求余运算优化场景
  • Oracle数据类型AnyType与AnyData
  • 直线模组在手术机器人中有哪些技术挑战?
  • nic_monitor-全面监控以太网、IB、RoCE网络流量的工具
  • 职坐标精选嵌入式AI物联网开源项目
  • LangChain【3】之进阶内容
  • 蓝牙攻防实战:蓝牙技术详解
  • 本地部署AI工作流
  • 【机器人】具身导航 VLN 最新论文汇总 | Vision-and-Language Navigation
  • mapbox高阶,PMTiles介绍,MBTiles、PMTiles对比,加载PMTiles文件
  • 如何科学测量系统的最高QPS?
  • 御花园网站建设公司/线上培训课程
  • 新手做网站流程/百度官网app
  • 毕业设计做b2c网站的意义/象山seo外包服务优化
  • 电子商务网站优点/东莞网站seo优化托管
  • 安徽地方政府网站建设情况/如何做网销
  • 建设银行临江支行网站/今日小说排行榜风云榜