上传文件至 /
This commit is contained in:
parent
67be13968b
commit
48a941c07c
217
重定向与管道.md
Normal file
217
重定向与管道.md
Normal file
@ -0,0 +1,217 @@
|
||||
<h2><center>重定向与管道</center></h2>
|
||||
|
||||
------
|
||||
|
||||
## 一:重定向
|
||||
|
||||
**重定向(Redirection)** 是一种通过命令行控制输入(Input)、输出(Output)和错误(Error)流向的机制。它允许你将命令的结果保存到文件、从文件读取输入,或合并/分离不同的数据流。
|
||||
|
||||
### 1. 基本观念
|
||||
|
||||
**文件描述符(File Description)**
|
||||
|
||||
Linux 为每个进程分配了三个默认的 I/O 通道:
|
||||
|
||||
- **0**:标准输入(`stdin`,默认来自键盘)。
|
||||
- **1**:标准输出(`stdout`,默认显示到终端)。
|
||||
- **2**:标准错误(`stderr`,默认显示到终端)。
|
||||
|
||||
**重定向符号**
|
||||
|
||||
| 符号 | 作用 |
|
||||
| :----------: | :--------------------------------------------: |
|
||||
| > 或 1> | 将标准输出重定向到文件(覆盖) |
|
||||
| >> 或1>> | 将标准输出追加到文件 |
|
||||
| < | 将文件内容作为标准输入 |
|
||||
| 2> | 将标准错误重定向到文件(覆盖) |
|
||||
| 2>> | 将标准错误追加到文件 |
|
||||
| `&>` 或 `>`& | 同时重定向标准输出和标准错误 |
|
||||
| \| | 管道符,将前一个命令的输出作为后一个命令的输入 |
|
||||
|
||||
### 2. 出重定向
|
||||
|
||||
**标准输出重定向**
|
||||
|
||||
覆盖写入文件
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# echo "Hello World" > output.txt
|
||||
```
|
||||
|
||||
追加到文件末尾:
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# echo "New line" >> output.txt
|
||||
```
|
||||
|
||||
**标准错误重定向**
|
||||
|
||||
将错误信息保存到文件:
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# ls /invalid-path 2> error.log
|
||||
```
|
||||
|
||||
**同时重定向标准输出和错误**
|
||||
|
||||
合并输出和错误到同一文件:
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# command &> all_output.log
|
||||
# 或
|
||||
[root@wxin ~]# command > output.log 2>&1
|
||||
```
|
||||
|
||||
**分离输出和错误到不同文件**
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# command > output.log 2> error.log
|
||||
```
|
||||
|
||||
**丢弃输出**
|
||||
|
||||
将输出或错误发送到“黑洞”(`/dev/null`):
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# command > /dev/null # 丢弃标准输出
|
||||
[root@wxin ~]# command 2> /dev/null # 丢弃标准错误
|
||||
[root@wxin ~]# command &> /dev/null # 丢弃所有输出
|
||||
```
|
||||
|
||||
### 3. 输入重定向
|
||||
|
||||
**从文件读取输入**
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# wc -l < input.txt # 统计文件行数
|
||||
```
|
||||
|
||||
**多行输入(Here Document)**
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# cat << EOF
|
||||
Line 1
|
||||
Line 2
|
||||
EOF
|
||||
```
|
||||
|
||||
**从字符串读取输入(Here String)**
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# tr 'a-z' 'A-Z' <<< "hello" # 输出 "HELLO"
|
||||
```
|
||||
|
||||
## 二:管道
|
||||
|
||||
### 1. Pipe
|
||||
|
||||
**简介**
|
||||
|
||||
管道命令可以将多条命令组合起来,一次性完成复杂的处理任务。
|
||||
|
||||
**语法**
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# command1 | command2
|
||||
```
|
||||
|
||||
命令1的标准输出作为命令2的标准输入
|
||||
|
||||
### 2. tee
|
||||
|
||||
**简介**
|
||||
|
||||
三通道管理,即交给另一个程序处理。又保存一份副本。
|
||||
|
||||
**语法**
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# command1 |tee 文件名|command2
|
||||
```
|
||||
|
||||
### 3. Xargs
|
||||
|
||||
**核心功能**
|
||||
|
||||
- **将输入转换为参数**:将管道传递的数据分割成多个参数,传递给后续命令(如 `rm`、`cp`、`grep` 等)。
|
||||
- **处理超长参数列表**:当参数数量超过命令行限制时,自动分批执行。
|
||||
- **灵活控制参数位置**:通过 `-I` 指定参数替换的位置。
|
||||
|
||||
**基本格式**
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# command1 | xargs [选项] command2
|
||||
```
|
||||
|
||||
示例:删除所有 `.log` 文件
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# find . -name "*.log" | xargs rm -f
|
||||
```
|
||||
|
||||
**默认行为**
|
||||
|
||||
- 将输入按空格、制表符、换行符分割为参数。
|
||||
|
||||
示例:统计所有 `.txt` 文件的行数
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# find . -name "*.txt" | xargs wc -l
|
||||
```
|
||||
|
||||
**常用选项**
|
||||
|
||||
| 选项 | 说明 |
|
||||
| :------: | :----------------------------------------------------------: |
|
||||
| -n NUM | 每次执行命令时传递 `NUM` 个参数(分批处理)。 |
|
||||
| -I {} | 定义替换符号(如 `{}`),指定参数插入的位置。 |
|
||||
| -d DELIM | 自定义输入分隔符(默认按空格/换行分割)。 |
|
||||
| -0 | 处理以 `\0` 分隔的输入(通常与 `find -print0` 配合处理特殊字符)。 |
|
||||
| -p | 交互式提示确认是否执行命令。 |
|
||||
| -P NUM | 并行执行命令,最多启动 `NUM` 个进程。 |
|
||||
|
||||
**示例**
|
||||
|
||||
**处理带空格/特殊字符的文件名**
|
||||
|
||||
- **安全方式**:结合 `find -print0` 和 `xargs -0`
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# find . -name "*.log" -print0 | xargs -0 rm -f
|
||||
```
|
||||
|
||||
**分批传递参数**
|
||||
|
||||
- 每次传递 2 个参数给 `echo`:
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# echo "a b c d e" | xargs -n 2
|
||||
a b
|
||||
c d
|
||||
e
|
||||
```
|
||||
|
||||
**指定参数位置**
|
||||
|
||||
用 `-I {}` 自定义参数替换符号(常用于需要参数插入中间的场景):
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# find . -name "*.txt" | xargs -I {} cp {} /backup/
|
||||
```
|
||||
|
||||
**并行执行命令**
|
||||
|
||||
使用 `-P` 启动 4 个并行进程压缩文件:
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# find . -name "*.log" | xargs -P 4 -I {} gzip {}
|
||||
```
|
||||
|
||||
**交互式确认**
|
||||
|
||||
删除文件前提示确认:
|
||||
|
||||
```bash
|
||||
[root@wxin ~]# find . -name "*.tmp" | xargs -p rm -f
|
||||
```
|
||||
|
Loading…
x
Reference in New Issue
Block a user