Linux 管道符、重定向与环境变量
管道命令符
管道命令符 |
的作用是将前一个目录的标准输出当做后一个命令的标准输入,格式为命令A | 命令B
例如grep
命令(文件搜索命令),通过关键词匹配”/sbin/nologin”找出了所有被限制登录系统个的用户。如果要统计所欲不允许登录的系统的个数,怎么办呢?
首先,grep "/sbin/nologin" /etc/passwd
找出了被限制登录的用户
其次,统计文本行数的命令是wc -l
所以,只需要将搜索命令的输出值 传给 统计文本命令
[root@VM_221_21_centos ~]# grep "/sbin/nologin" /etc/passwd | wc -l
23
输入输出重定向
首先区分一下 标准输入,标准输出,错误输出
例如,ls
文件夹时,如果文件夹存在,输出的就是标准输出;而文件夹不存在时,就是错误输出
[root@VM_221_21_centos ~]# ls /root
blog test.sh
[root@VM_221_21_centos ~]# ls /123
ls: cannot access /123: No such file or directory
- 标准输入(STDIN,文件描述符为0):默认为键盘输入,为0时表示从其他文件或者目录的输出。
- 标准输出(STDOUT,文件描述符为1):默认输出到屏幕,为1时表示为文件
- 错误输出(STDERR,文件描述符为2):默认输出到屏幕,为2时表示是文件
输出重定向:
符号 | 作用 |
---|---|
命令 > 文件 | 将标准输出重定向到一个文件中(清空原有的文件数据) |
命令 2> 文件 | 将错误输出重定向到一个文件中(清空原有的文件数据) |
命令 >> 文件 | 将标准输出重定向到一个文件中(追加到原有文件内容的后面) |
命令 2>> 文件 | 将错误输出重定向到一个文件中(追加到原有文件内容的后面) |
命令 >> 文件 2>$1 | 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面) |
输入重定向:
符号 | 作用 |
---|---|
命令 < 文件 | 将文件作为命令的标准输入 |
命令 << 分解符 | 从标准输入中读入,知道遇到”分界符”才停止 |
命令 < 文件1 > 文件2 | 将文件1作为命令的标准输入并将标准输出到文件2 |
例:
标准输入输出重定向:
[root@VM_221_21_centos ~]# echo "hahaha,yes" > readme.txt
[root@VM_221_21_centos ~]# echo "add some" >> readme.txt
[root@VM_221_21_centos ~]# head -5 readme.txt
hahaha,yes
add some
[root@VM_221_21_centos ~]# wc -l < readme.txt
2
错误输出重定向:
[root@VM_221_21_centos ~]# ls xxx 2> error.txt
[root@VM_221_21_centos ~]# cat error.txt
ls: cannot access xxx: No such file or directory
命令行通配符
即匹配那些部分字符相同的文本
通配符 | 含义 |
---|---|
* | 匹配零个或者多个字符 |
? | 匹配任意单个字符 |
[0-9] | 匹配0-9的数字 |
[abc] | 匹配任意的字符串 |
[root@VM_221_21_centos ~]# ls 1?.sh
11.sh 12.sh
[root@VM_221_21_centos ~]# ls 1[0-9].sh
11.sh 12.sh
特殊字符扩展:
字符 | 含义 |
---|---|
\(反斜杠) | 转义后面单个字符 |
”(单引号) | 转义所有的字符 |
“(反引号) | 执行命令语句 |
[root@VM_221_21_centos ~]# echo `uname -a`
Linux VM_221_21_centos 3.10.0-514.21.1.el7.x86_64 #1 SMP Thu May 25 17:04:51 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
PATH变量
查看$PATH
变量的方法:echo $PATH
[root@VM_221_21_centos ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
还有很多其他的环境变量,可以用 env
命令查看,其中变量是有固定的 “变量名” + “变量值” 组成的,是可以修改的。
变量名称 | 作用 |
---|---|
HOME | 用户的主目录“家”。 |
SHELL | 当前的shell是哪个程序 |
HISTSIZE | 历史命令记录条数 |
邮件信箱文件 | |
LANG | 语系数据 |
RANDOM | 随机数字 |
PS1 | bash提示符 |
HISTFILESIZE | history命令存储数量 |
PATH | 在路径中的目录查找执行文件 |
EDITOR | 默认文本编辑器 |
HOME | 用户主目录 |
[root@VM_221_21_centos ~]# echo $HOME
/root
注:某个用户设置的环境变量不能被其他用户使用,原因就在于变量的作用范围。
export
命令用于将局部变量提升为全局变量,格式为:export 变量名[=变量值]