linux命令通道
linux命令通道详细介绍
在 Linux 中,“命令通道” 通常指进程间通信(IPC)的方式,或命令执行时数据流动的通道。以下是常见的 “命令通道” 相关概念和用法:
一、基础输入输出通道(文件描述符)
Linux 每个进程默认有 3 个标准文件描述符:
- 标准输入(STDIN,文件描述符 0):默认从键盘读取输入,可用
<或cat重定向。 - 标准输出(STDOUT,文件描述符 1):默认输出到终端,可用
>或>>重定向到文件。 - 标准错误(STDERR,文件描述符 2):默认输出错误信息到终端,可用
2>或2>>重定向。
示例:
- 重定向标准输出到文件:bash
list.txt - 同时重定向输出和错误到文件:bash
> output.log
二、管道(Pipe)
管道是连接两个进程的临时数据通道,前一个进程的输出直接作为后一个进程的输入,用 | 表示。
1. 匿名管道(Anonymous Pipe)
- 特点:仅在父子进程间有效,生命周期随进程结束而消失。
- 用法:bash
命令1 命令2 命令3 - 示例:
- 过滤日志中包含 “error” 的行并统计行数:bash
app.log - 排序并去重:bash
names.txt
- 过滤日志中包含 “error” 的行并统计行数:bash
2. 命名管道(FIFO,Named Pipe)
- 特点:以文件形式存在(非真实文件,仅存储数据通道),可在不相关进程间通信。
- 创建:bash
myfifo - 使用(两个终端分别执行):
- 终端 1(读取端):bash
myfifo - 终端 2(写入端):bash
myfifo
- 终端 1(读取端):bash
三、高级管道技巧
1. 进程替换(Process Substitution)
用 <(命令) 或 >(命令) 将命令输出虚拟为文件,用于管道或重定向。
- 示例:比较两个命令的输出差异:bash
dir1 dir2
2.
tee 命令:分流输出
将数据同时输出到终端和文件(或管道):
bash
files.logurl response.txt
3.
xargs:处理管道输入
将长输入分割为适合命令的参数列表:
bash
四、其他 IPC 通道(扩展)
- 套接字(Socket):UNIX 域套接字(文件形式)或网络套接字,用于进程间高速通信。
- 共享内存:多个进程直接访问同一块内存区域(需配合信号量同步)。
- 信号(Signal):简单的事件通知机制(如
kill -SIGINT PID发送中断信号)。
总结
- 管道(
|):临时连接进程,单向数据流,适用于链式数据处理。 - 重定向(
<,>,2>&1):改变输入输出目标(文件 / 设备)。 - 命名管道(FIFO):跨进程通信的持久化通道。
- 进程替换与
tee/xargs:增强管道的灵活性和实用性。
通过组合这些通道,可高效实现 Linux 命令行的数据处理和流程控制。