一、输入输出重定向
文件读写操作有关的重定向技术的五种模式
1.输入重定向是指把文件导入命令中;
2. 输出重定向指把原本要输出到屏幕的内容写入指定文件;
一般而言,相较于输入重定向,我们一般使用输出重定向比较多,输出重定向分为:标准输出重定向和错误输出重定向
标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令输入。
标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕
错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕
重点看一下两种输出重定向,这个是什么意思呢,下面举个栗子~
# 查询一个不存在的文件夹
find . -name xxxx.txt
# 输出如下信息
find: ‘xxxx.txt’: No such file or directory
# 现在需要把错误信息输出到文件a.txt中
find . -name xxxx.txt > a.txt
此时使用cat命令查看 a.txt
cat a.txt
# 这个时候是不会出现任何输出的,因为a文件是空的。
重新将查询结果输出到a文本文件中
find . name xxxx.txt 2> a.txt
# 使用cat命令查看
cat a.txt
# 输出内筒如下
find: ‘xxxx.txt’: No such file or directory
懂了啵~
- 输入重定向
符号 | 作用 |
---|---|
命令 < 文件 | 将文件作为命令的标准输入 |
命令 << 分解符 | 从标准输入中读入,直到遇到分解符才停止 |
命令 < 文件1 > 文件2 | 将文件1作为命令的标准输入,并将标准输出到文件2 |
- 输出重定向
符号 | 作用 |
---|---|
命令 > 文件 | 将标准输出重定向到一个文件中(覆盖) |
命令 2> 文件 | 将错误输出重定向到一个文件中(清空原有文件的数据) |
命令 >> 文件 | 将标准输出重定向到一个文件中(追加到原有内容的后面) |
命令 2>> 文件 | 将错误输出重定向到一个文件中(追加到一个文件后面) |
命令 >> 文件 2>&1 或,命令 & >> 文件 | 将标准输出与错误输出共同写入到文件中(追加) |
输出重定向,1 可以省略,2 不能省略
一个输入重定向的栗子~
# 什么意思自己猜
wc -l < a.txt
二、管道命令符
管道符 “ | ” 使用的命令格式是:
命令1 | 命令2
把前一个命令(命令1)原本要输出屏幕的数据当做是后一个命令(命令2)的标准输入
管道符对于命令的组合使用有很大的用处
# 统计当前目录下tensorflow用例数量
find . -name *.pb | wc -l
# 一条命令修改用户密码,解决自动化脚本无法修改密码的缺陷
# echo "linuxpas" | passwd --stdin root
对于第二条命令,有时候我们需要修改用户密码,但是linux修改用户密码需要输入两次(修改和确认修改),这对于编写自动化脚本来说十分不友好! 但是管道符可以完美解决,将密码用过管道符输入给passwd命令并结合–stdin 参数,完美解决~
三、命令行的通配符
了解正则匹配的同学应该也就对命令行的通配符不会感觉到陌生,顾名思义,通配符就是通用匹配信号的符号,比如(*)、(?)、([0-9] )、( [a-z] )、( [abc] )
上面用到的一个命令
find . -name *.pb | wc -l
这 (*.pb) 的含义就是匹配所有的后缀名为pb的文件。
符号 | 含义 |
---|---|
* | 匹配0个或者多个字符 |
? | 匹配单个字符 |
[a-z] | 匹配a-z的单个字母的字符 |
等等 | …… |
具体用到的时候可以百度,当然也可以学习点正则表达式
四、常用的转义字符
转义字符用于处理输出的特殊数据,这个没啥说的,比如编程语言中的\n、\t 和\等等
在shell中有数十种转义字符,其中有四种最常用的。
字符 | 含义 |
---|---|
\ | 使反斜杠后面的一个变量变为单纯的字符串 |
" | 转义其中所有的变量为单纯的字符串 |
“” | 保留其中的变量属性,不进行转义处理 |
`` | 把其中的命令执行后返回结果 |
root@橘座:/home/test/20200504 price=18
root@橘座:/home/test/20200504 echo "Price is $price"
Price is 18
然后使用转义
root@橘座:/home/test/20200504 echo "Price is \$$price"
Price is $18
五、重要的环境变量
变量是计算机系统用于保存可变值的数据类型。在Linux系统中,变量名称一般都是大写,这是一种约定俗成的规范。
直接通过变量名称来提取变量名
root@橘座:/home/test/20200504 echo $HOME
/root
Linux系统中的环境变量是用来定义系统运行环境的一些参数。
变量名称 | 作用 |
---|---|
HOME | 用户的家目录 |
SHELL | 用户在使用的shell解释器的名称 |
HISTORY | 输出的历史命令记录条数 |
HISTORYSIZE | 保存的历史命令记录条数 |
等等 | …… |
一个相同的环境变量会因用户不同而具有不同的值 如下~
用户gw:
root@……:/home/test/20200504 su - gw
gw@……:~$ echo $HOME
/home/gw
用户root:
root@……:/home/test echo $HOME
/root