1
0
wiki/docs/运维/Linux/管道符、重定向与环境变量.md

109 lines
4.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: 管道符、重定向与环境变量
title: 管道符、重定向与环境变量
sidebar_position: 2
data: 2022年3月4日
---
## 输入输出重定向
输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。
- **标准输入重定向STDIN文件描述符为0**:默认从键盘输入,也可从其他文件或命令中输入。
- **标准输出重定向STDOUT文件描述符为1**:默认输出到屏幕。
- **错误输出重定向STDERR文件描述符为2**:默认输出到屏幕。
*对于重定向中的标准输出模式,可以省略文件描述符 1 不写,而错误输出模式的文件描述符 2 是必须要写的。*
### 输入重定向
符号及其作用
| 符号 | 作用 |
| -------------------- | -------------------------------------------- |
| 命令 < 文件 | 将文件作为命令的标准输入 |
| 命令 << 分界符 | 从标准输入中读入直到遇见分界符才停止 |
| 命令 < 文件1 > 文件2 | 将文件1作为命令的标准输入并将标准输出到文件2 |
### 输出重定向
| 符号 | 作用 |
| ---------------------------------- | ---------------------------------------------------------- |
| 命令 > 文件 | 将标准输出重定向到一个文件中(清空原有文件的数据) |
| 命令 2> 文件 | 将错误输出重定向到一个文件中(清空原有文件的数据) |
| 命令 >> 文件 | 将标准输出重定向到一个文件中(追加到原有内容的后面) |
| 命令 2>> 文件 | 将错误输出重定向到一个文件中(追加到原有内容的后面) |
| 命令 >> 文件 2>&1 或 命令 &>> 文件 | 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面 |
## 管道命令符
按下键盘上的Shift+反斜杠(\键即可输入管道符其执行格式为“命令A | 命令B”。**管道命令符把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入**
```shell
# 输出禁止登录用户行数
grep /sbin/nologin /etc/passwd | wc -l
# 搜索与 bash 有关的进程
ps aux | grep bash
```
命令符可以**无限组合**例如命令A | 命令B | 命令C |……
> 曾经有位东北的同学做了一个特别贴切的类比:把管道符当做流水线作业,这跟吃顿烧烤是同一个道理,即第一个人负责切肉,第二个人负责串肉,第三个人负责烧烤,最后的处理结果交付给用户。
### 命令行的通配符
通配符及含义
| 通配符 | 含义 |
| ----------- | -------------- |
| * | 任意字符 |
| ? | 单个任意字符 |
| [a-z] | 单个小写字母 |
| [A-Z] | 单个大写字母 |
| [a-Z] | 单个字母 |
| [0-9] | 单个数字 |
| [[:alpha:]] | 任意字母 |
| [[:upper:]] | 任意大写字母 |
| [[:lower:]] | 任意小写字母 |
| [[:digit:]] | 所有数字 |
| [[:alnum:]] | 任意字母加数字 |
| [[:punct:]] | 标点符号 |
示例:
```shell
# 匹配 /dev 目录中且以 sda 开头的文件
ls -l /dev/sda*
```
### 常用的转义字符
- **反斜杠(\**:使反斜杠后面的一个变量变为单纯的字符。
- **单引号(' '**:转义其中所有的变量为单纯的字符串。
- **双引号(" "**:保留其中的变量属性,不进行转义处理。
- **反引号(\` `**:把其中的命令执行后返回结果。
### 重要的环境变量
**在Linux系统中变量名称一般都是大写的命令则都是小写的这是一种约定俗成的规范。**
Linux系统中最重要的 10 个环境变量
| 变量名称 | 作用 |
| ------------ | -------------------------------- |
| HOME | 用户的主目录(即家目录) |
| SHELL | 用户在使用的Shell解释器名称 |
| HISTSIZE | 输出的历史命令记录条数 |
| HISTFILESIZE | 保存的历史命令记录条数 |
| MAIL | 邮件保存路径 |
| LANG | 系统语言、语系名称 |
| RANDOM | 生成一个随机数字 |
| PS1 | Bash解释器的提示符 |
| PATH | 定义解释器搜索用户执行命令的路径 |
| EDITOR | 用户默认的文本编辑器 |