小小白祈祷中...

在 Linux 和 Unix 系统中,重定向管道是两个非常重要的功能,用于控制命令的输入、输出和处理数据流。通过重定向和管道,可以将命令的输出保存到文件、作为另一个命令的输入,或进行更复杂的数据处理。


重定向命令

重定向用于将命令的标准输入(stdin)、标准输出(stdout)或标准错误输出(stderr)重定向到文件或其他设备。

重定向符号

符号 描述
> 将标准输出(stdout)重定向到文件,覆盖文件内容。
>> 将标准输出(stdout)重定向到文件,追加到文件末尾。
< 将文件的内容作为标准输入(stdin)。
2> 将标准错误输出(stderr)重定向到文件,覆盖文件内容。
2>> 将标准错误输出(stderr)重定向到文件,追加到文件末尾。
&> 将标准输出和标准错误(stdoutstderr同时重定向到文件,覆盖内容。
&>> 将标准输出和标准错误(stdoutstderr同时重定向到文件,追加内容。
/dev/null 丢弃输出或错误(相当于垃圾桶)。

重定向用法

将命令输出重定向到文件

1
echo "Hello, World!" > output.txt
  • >:将输出写入文件 output.txt(覆盖文件内容)。
  • 如果 output.txt 不存在,会自动创建。

将输出追加到文件

1
echo "Another line" >> output.txt
  • >>:将输出追加到 output.txt 的末尾。

将文件内容作为命令的输入

1
cat < input.txt
  • <:将文件 input.txt 的内容作为 cat 命令的输入。

将错误输出重定向到文件

1
ls non_existent_file 2> error.log
  • 2>:将错误输出保存到 error.log 文件中。

同时重定向标准输出和错误

1
ls /etc > output.log 2>&1
  • 2>&1:将错误输出(stderr)重定向到标准输出(stdout),然后统一保存到 output.log 中。

丢弃输出

1
ls /etc > /dev/null
  • /dev/null:将输出丢弃,不显示也不保存。

丢弃错误输出

1
ls non_existent_file 2> /dev/null
  • 2>:仅将错误输出丢弃。

丢弃所有输出

1
ls /etc > /dev/null 2>&1
  • 同时丢弃标准输出和错误输出。

管道命令

管道(|)用于将一个命令的输出作为另一个命令的输入。它是连接多个命令的重要工具。

管道的基本语法

1
command1 | command2
  • command1 的输出通过管道传递给 command2 作为输入。

管道示例

将命令输出传递给另一个命令

1
ls -l | grep ".txt"
  • ls -l:列出目录的详细内容。
  • grep ".txt":过滤出包含 .txt 的行。

统计命令输出的行数

1
ls | wc -l
  • ls:列出当前目录的文件。
  • wc -l:统计文件列表的行数。

显示进程并过滤关键字

1
ps aux | grep "nginx"
  • ps aux:显示所有运行中的进程。
  • grep "nginx":过滤出包含 nginx 的进程。

排序和去重

1
cat file.txt | sort | uniq
  • cat file.txt:显示文件内容。
  • sort:对文件内容排序。
  • uniq:去重,显示唯一的行。

查找大文件并排序

1
du -h | sort -h
  • du -h:显示目录和文件的大小。
  • sort -h:按人类可读格式(如 KB、MB 等)排序。

重定向与管道结合

重定向和管道可以结合使用,用于更复杂的数据处理。

示例 1:将输出保存到文件

1
ls -l | grep ".txt" > txt_files.log
  • ls -l:列出目录内容。
  • grep ".txt":过滤出包含 .txt 的文件。
  • >:将结果保存到 txt_files.log 文件中。

示例 2:同时处理输出和错误

1
find /etc -name "*.conf" > output.log 2>&1
  • find /etc -name "*.conf":查找 /etc 下的 .conf 文件。
  • >:将输出保存到 output.log
  • 2>&1:将错误输出一起保存。

示例 3:统计错误行数

1
ls /nonexistent 2>&1 | wc -l
  • ls /nonexistent:尝试列出不存在的目录。
  • 2>&1:将错误输出通过管道传递。
  • wc -l:统计错误消息的行数。

常见组合示例

示例 1:查找日志中的错误并保存

1
grep "ERROR" /var/log/syslog | tee error_log.txt
  • grep "ERROR":查找日志中的错误行。
  • tee:将输出写入文件,同时打印到屏幕。

示例 2:监控文件变化

1
tail -f /var/log/syslog | grep "ERROR"
  • tail -f:实时查看文件变化。
  • grep "ERROR":实时过滤包含 ERROR 的行。

示例 3:过滤并统计文件中出现最多的单词

1
cat file.txt | tr -s ' ' '\n' | sort | uniq -c | sort -nr | head -10
  • tr -s ' ' '\n':将空格转换为换行符,将每个单词分行。
  • sort:对单词排序。
  • uniq -c:统计每个单词出现的次数。
  • sort -nr:按数字降序排序。
  • head -10:取出现次数最多的前 10 个单词。

总结

重定向符号

符号 作用
> 标准输出重定向到文件(覆盖)。
>> 标准输出重定向到文件(追加)。
< 从文件读取输入。
2> 错误输出重定向到文件(覆盖)。
2>> 错误输出重定向到文件(追加)。
&> 标准输出和错误同时重定向到文件。
/dev/null 丢弃输出或错误。

管道符号

符号 作用
` `

常用命令组合

  • 筛选ps aux | grep "nginx"
  • 统计ls | wc -l
  • 排序cat file.txt | sort | uniq -c | sort -nr

通过灵活使用重定向和管道,可以大大提高 Linux 日常操作的效率和灵活性!

本文作者:LuoYing @ 小小白的笔记屋

本文链接:https://luoying.netlify.app/2024/10/08/ie3o1mib/

本文标题:Linux命令详解---重定向和管道

本文版权:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!