重定向与管道符
重定向
输入重定向是指把文件导入到命令中,而输出重定向则是指把原本要输出到屏幕的数据信息写入到指定文件中。输出重定向使用较多,故将输出重定向分为了标准输出重定向和错误输出重定向,以及覆盖写入与追加写入两种模式。
输出重定向的符号及其作用:
命令 > 文件 | 将标准输出重定向到一个文件中(覆盖文件原有的内容) |
命令 2> 文件 | 将错误输出重定向到一个文件中(覆盖文件原有的内容) |
命令 >> 文件 | 将标准输出重定向到一个文件中(追加到原有内容的后面) |
命令 2>> 文件 | 将错误输出重定向到一个文件中(追加到原有内容的后面) |
命令 &>> 文件 | 将标准输出与错误输出共同写入到文件中(追加到原有内容的后面) |
命令 < 文件 输入重定向 | 将文件内容 做为 命令的输入 |
例1:创建内容为111的文件111.txt,使用标准输出重定向将222写入改文件。结果是文件里原有的内容被清除,只有新写入的信息。再用追加写入信息后查看。
[root@mylinux ~]# cat 111.txt
111
[root@mylinux ~]# echo 222 > 111.txt
[root@mylinux ~]# cat 111.txt
222
[root@mylinux ~]# echo 333 >> 111.txt
[root@mylinux ~]# cat 111.txt
222
333
例2:执行date命令后会向屏幕输出当前的时间,可以使用重定向符将输出信息导入到111.txt文件中。
[root@mylinux ~]# date >> 111.txt
[root@mylinux ~]# cat 111.txt
222
333
Wed Nov 6 17:02:11 CST 2019
例3:使用cat命令查看一个不存在的文件,会输出报错信息,这时用标准输出重定向是不能写入文件的,需要使用错误输出重定向符。
[root@mylinux ~]# cat 123.txt
cat: 123.txt: No such file or directory
[root@mylinux ~]# cat 123.txt >> 111.txt
cat: 123.txt: No such file or directory
[root@mylinux ~]# cat 123.txt 2>> 111.txt
[root@mylinux ~]# cat 111.txt
222
333
Wed Nov 6 17:02:11 CST 2019
cat: 123.txt: No such file or directory
或者直接使用 &>> 将错误的信息和正确的信息一起写入文件。
[root@mylinux ~]# cat 123.txt &>> 111.txt
[root@mylinux ~]# cat 111.txt
222
333
Wed Nov 6 17:02:11 CST 2019
cat: 123.txt: No such file or directory
cat: 123.txt: No such file or directory
例4:使用输入重新下将111.txt 导入wc -l 命令统计行数。
[root@mylinux ~]# wc -l < 111.txt
5
管道符 (| ; ||)
把前一个命令原本要输出到屏幕的正常数据当作后一个命令的输入信息。
例1:使用cat命令查看111.txt文档,会输出相关信息,使用管道符直接将输出的信息交给wc命令进行统计,会有如下效果。
[root@mylinux ~]# cat 111.txt | wc -l
5
[root@mylinux ~]# netstat -antp | grep 53
tcp 0 0 192.168.122.1:53 0.0.0.0:*
[root@yegg ~]# cat test.txt ; whoami 前后互不影响
[root@yegg ~]# w || whoami (前面为真)---后面命令不执行
[root@yegg ~]# wg || whoami (前面为假)---后面命令执行
通配符
通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊匹配搜索文件。星号(*)代表匹配零个或多个字符,问号(?)代表匹配单个字符,常见的也有中括号内加上数字[0-9]代表匹配0~9之间的单个数字的字符,而中括号内加上字母[abc]则是代表匹配a、b、c三个字符中的任意一个字符。
例1、创建三个文件,分别为test_01.txt,test_02.txt,test_03.txt。我们在使用cp命令复制这三个文件时可以直接用命令cp test* /root/Desktop/将这三个文件一次性复制到桌面上。
例2、删除时也可以使用此方法一次性删除。
[root@mylinux Desktop]# rm -f test_0*
例3、问号(?)只能匹配代替一个字符,如下所示:
例4、使用中括号进行匹配,[1-3] 和 [13] 的区别如下所示:
转义字符
一些单词或者字符在bash和shell中有特殊含义,某些情况下,我们需要这些字符或者单词的字面值,而非特殊含义,比如在bash中,“#”被解释为注释的开头,故“#”和以它开头的同一行该字符后面的内容都将被忽略。
例1、使用echo命令输出一个“#”,但是屏幕上只会出现一个空行,并不会有任何显示。
例2、我们可以加上转义字符“\”,使“#”回归字面意思从而失去注释的意思。
除了“\”,还有单引号和双引号,也可以禁止特殊字符和单词的含义。而反引号 ` ` 把其中的命令执行后返回结果。
例3、
需要注意的是,单引号保留其括起来的所有字符的字面值,而双引号的区别在于双引号不保留美元符号 $、反引号 ` ` 、和反斜杠 \ 的字面值。使用双引号括起来的,美元符号和反引号保留其特殊含义,而且仅当反斜杠字符前边是美元符号、反引号、双引号、反斜杠 或者换行符时,才会保留反斜杠字符的特殊含义。
重要的环境变量
变量是计算机系统用于保存可变值的数据类型,而Linux系统中的环境变量是用来定义系统运行环境的一些参数,如每个用户不同的家目录、邮件存放位置等,用户执行一条命令后,一般会有一下几个步骤。
1、判断用户是否以绝对路径或相对路径的方式输入命令(如/bin/ls),如果是的话则直接执行。
2、系统检查用户输入的命令是否为“别名命令”,可以用alias命令来创建一个属于自己的命令别名。若要取消一个命令别名,则是用unalias命令。
例、使用alias来为touch命令创建一个别名,然后再取消。
让别名命令永久生效
vim /etc/bashrc
alias cc="nmcli connection"
source /etc/bashrc
1、Bash解释器判断用户输入的是内部命令还是外部命令。内部命令是解释器内部的指令,会被直接执行;若是外部命令,系统在多个路径中查找用户输入的命令文件,而定义这些路径的变量叫作PATH,可以简单地把它理解成是“解释器的小助手”,作用是告诉Bash解释器待执行的命令可能存放的位置。对这些路径的增加和删除操作将影响到Bash解释器对Linux命令的查找。
例1、查看PATH
例2:
[oracle@yegg ~]$ vim .bash_profile ---添加 tt=/root
[oracle@yegg ~]$ echo $tt
[oracle@yegg ~]$ source .bash_profile
[oracle@yegg ~]$ echo $tt
/root
常见的、重要的环境变量。
变量名称 | 作用 |
HOME | 用户的主目录(即家目录) |
SHELL | 用户在使用的Shell解释器名称 |
| 邮件保存路径 |
LANG | 系统语言、语系名称 |
RANDOM | 生成一个随机数字 |
PATH | 定义解释器搜索用户执行命令的路径 |
EDITOR | 用户默认的文本编辑器 |