插件窝 干货文章 linux重定向有几种方式

linux重定向有几种方式

command 定向 bash 输出 921    来源:    2025-04-18

在Linux中,重定向是Shell中非常重要的功能,主要用于控制命令的输入输出流向。以下是Linux中常见的重定向方式及其详细说明:


1. 标准输出重定向(stdout)

  • >:覆盖写入文件
    bash command > file.txt # 将命令的输出覆盖写入file.txt(文件原有内容会被清空)
  • >>:追加写入文件
    bash command >> file.txt # 将命令的输出追加到file.txt末尾

2. 标准错误重定向(stderr)

  • 2>:覆盖写入错误信息
    bash command 2> error.log # 将命令的错误信息覆盖写入error.log
  • 2>>:追加写入错误信息
    bash command 2>> error.log # 将错误信息追加到error.log

3. 混合重定向(stdout + stderr)

  • &>>&:同时重定向stdout和stderr(覆盖)
    bash command &> output.log # 标准输出和错误一起覆盖写入output.log
  • &>>:同时追加stdout和stderr
    bash command &>> output.log # 标准输出和错误一起追加到output.log
  • 旧式写法(兼容性更好)
    bash command > file.txt 2>&1 # 先重定向stdout到file.txt,再将stderr合并到stdout

4. 标准输入重定向(stdin)

  • <:从文件读取输入
    bash command < input.txt # 将input.txt内容作为command的输入
  • <<(Here Document):直接嵌入多行输入
    bash command << EOF line1 line2 EOF
  • <<<(Here String):直接传入字符串
    bash command <<< "text input" # 将字符串作为command的输入

5. 特殊设备重定向

  • /dev/null:丢弃输出
    bash command > /dev/null # 丢弃stdout command 2> /dev/null # 丢弃stderr command &> /dev/null # 丢弃所有输出
  • /dev/stdin/dev/stdout/dev/stderr:显式指定流
    bash command > /dev/stdout 2> /dev/stderr

6. 文件描述符(FD)操作

  • 重定向到其他FD
    bash command 3> file.txt # 将自定义文件描述符3重定向到file.txt
  • 复制FD
    bash command > file.txt 2>&3 # 将stderr重定向到文件描述符3指向的位置
  • 关闭FD
    bash command 3<&- # 关闭文件描述符3的输入

7. 管道(Pipe)

虽然不是严格的重定向,但管道常用于流传递:

command1 | command2  # 将command1的stdout作为command2的stdin

常见组合示例

  1. 分离stdout和stderr
    bash command > output.log 2> error.log
  2. 合并输出并丢弃
    bash command &> /dev/null
  3. 实时输出到屏幕并保存到文件tee命令):
    bash command | tee file.txt

注意事项

  • 文件描述符编号:0(stdin)、1(stdout)、2(stderr)。
  • 重定向顺序很重要!例如 2>&1 > file> file 2>&1 效果不同。
  • 在脚本中使用时,注意权限问题(如目标文件是否可写)。

掌握这些重定向技巧可以高效管理命令的输入输出流,尤其在日志处理和自动化脚本中非常实用。