Linux 命令重定向是 Linux/Unix 系统中一项核心且强大的功能,它允许用户灵活控制命令的输入输出流向,从而实现命令间的协同工作、数据持久化以及错误处理等高级操作,通过重定向,用户可以突破终端交互的限制,让命令处理的数据不再局限于键盘输入和屏幕显示,而是能够从文件读取、写入文件,甚至将不同类型的信息分流到不同的目标,极大提升了命令行的效率和灵活性。

输出重定向:将命令结果写入文件
输出重定向是最常用的重定向类型,其核心是将命令的标准输出(stdout)从默认的终端屏幕转移到文件中,根据覆盖或追加的需求,主要分为两种形式:
- 覆盖重定向(
>):使用单个大于号时,命令的输出会写入目标文件,若文件已存在,则原有内容将被清空并替换为新内容。echo "Hello Linux" > output.txt会将字符串写入output.txt,若文件存在则覆盖。 - 追加重定向(
>>):使用两个大于号时,命令的输出会以追加方式写入文件,若文件存在,新内容会添加到文件末尾而不会覆盖原有内容。date >> log.txt会将当前时间追加到log.txt文件中,适用于日志记录等场景。
需要注意的是,错误输出(stderr)默认不会被重定向,ls nonexistent_file > error.txt 中,错误提示仍会显示在终端,此时需结合错误输出重定向(后文详述)或使用 2>&1 将错误输出合并到标准输出。
输入重定向:从文件获取命令输入
输入重定向与输出重定向相反,它将命令的标准输入(stdin)从默认的键盘改为从文件读取,无需手动打开文件即可处理其内容,最常用的输入重定向符号是 <,sort < names.txt 会读取 names.txt 文件的内容并排序后输出到终端。
或需要交互式输入的场景,还可以使用 <<(Here Document)或 <<<(Here String)。<< 允许在命令行直接输入多行数据,直到指定结束符,

wc -l << EOF line1 line2 line3 EOF
上述命令会统计输入的三行内容行数,而 <<< 则用于单行字符串输入,grep "hello" <<< "hello world" 会在字符串中搜索 “hello”。
错误输出重定向:独立处理错误信息
命令执行时,标准输出(stdout)和错误输出(stderr)是两个独立的数据流,默认都输出到终端,但可通过文件描述符(0: stdin, 1: stdout, 2: stderr)分别重定向,错误输出重定向使用 2>(覆盖)或 2>>(追加),ls nonexistent_file 2> error.txt 会将错误信息写入 error.txt 而不显示在终端。
若需将标准输出和错误输出同时重定向到同一文件,可使用 &>(覆盖)或 &>>(追加),command &> output.txt 会合并两个输出流并写入文件,更灵活的方式是 2>&1,表示将错误输出(stderr)重定向到标准输出(stdout)的位置,ls > all_output.txt 2>&1 会先重定向标准输出,再将错误输出合并到同一文件。

高级重定向技巧:提升操作效率
- 使用
/dev/null丢弃输出:/dev/null是一个特殊的设备文件,写入其中的数据会被丢弃。command 2> /dev/null会静默命令的错误输出,command > /dev/null 2>&1则会完全丢弃命令的所有输出。 - 与管道结合使用:管道()将一个命令的输出作为另一个命令的输入,而重定向可进一步控制管道的最终流向。
ls -l | grep ".txt" > text_files.txt会将包含 “.txt” 的文件列表写入text_files.txt。 - 重定向到文件描述符:Linux 支持文件描述符的复制与重定向,
exec 3> output.txt创建文件描述符 3,后续可通过echo "test" >&3将内容写入output.txt,适用于脚本中的复杂流控制。
Linux 命令重定向是提升命令行操作效率的核心工具,通过灵活运用输出、输入及错误输出重定向,用户可以实现数据流的精细控制,无论是简单的文件操作还是复杂的数据处理流程,都能以简洁的命令完成,掌握重定向技巧,不仅能减少重复操作,更能让命令行真正成为高效的数据处理环境。




















