我们前边一直在说,在Linux系统下,一切皆是文件。键盘和显示器都是文件,如下图:
从上图中可以看出,键盘的设备文件名为/dev/stdin
,显示器标准正确输入的设备文件名为/dev/stdout
,显示器标准错误输入的设备文件名为/dev/stderr
。
这些设备文件名非常不好记忆,shell允许我们用文件描述符来描述对应的设备,也就是用0、1、2,分别对应键盘、正确显示器,错误显示器。
什么叫输出重定向?
命令的输出,是输出给标准输出的,也就是输出到显示器上。而输出重定向就是命令的输出,不输出给标准输出,而是把输出的内容,输出到文件中。
(1)标准输出重定向
命令 > 文件
:以覆盖的方式,把命令的正确输出,输出到指定的文件或设备当中。命令 >> 文件
:以追加的方式,把命令的正确输出,输出到指定的文件或设备当中。练习,如下图:
只要该命令有结果,都能够输进行输出重定向。
(2)标准错误输出重定向
如果执行的命令出现报错,用上边的方式是不能够进行输出内容重定向的,错误信息会直接输出到标准错误输出,如下图:
错误命令 2>文件
:以覆盖的方式,把命令的错误输出,输出到指定的文件或设备当中。错误命令 2>>文件
:以追加的方式,把命令的错误输出,输出到指定的文件或设备当中。这个2是文件描述符,表示标准错误输出,看上表。
示例如下:
这里需要注意的是,上边的标准正确输出和标准错误输出的重定向有一些小问题,就是我要事先知道这条命令是否报错,才能选择是使用标准正确输出还是使用标准错误输出。这样十分不合理,我明知道命令会报错,那我直接写对不就完了。所以我们在工作中写脚本的时候,常用的输出重定向的方式是下面的方式。
(3)正确输出和错误输出同时保存
命令 > 文件 2>&1
:以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。命令 >> 文件 2>&1
:以追加的方式,把正确输出和错误输出都保存到同一个文件当中。(常用)命令 >> 文件 2>&1
的意思是,把命令的正确输出,输出到文件中,然后把命令的错误输出,输出到正确输出的文件中。
命令 &>文件
:以覆盖的方式,把正确输出和错误输出都保存到同一个文件当中。命令 &>>文件
:以追加的方式,把正确输出和错误输出都保存到同一个文件当中。(常用)命令>>文件1 2>>文件2
:把正确的输出追加到文件1中,把错误的输出追加到文件2中。(常用)统一保存和分开保存看你习惯。
注意,在正确输出的时候>
或者>>
两边是可以有空格的,如果是错误输出的时候,2和>
或者>>
之间是不能有空格的。
如下图,提示语法错误。
输入重定向就是<
。意思是命令的输入是由标准输入输入的,也就是由键盘输入的。输入重定向就是改变输入方向,不在由键盘作为输入,而拿文件作为命令的输入。输入重定向比较少见。
我们只在之前给源码包打补丁的patch
命令,和rpm源码包文件提取中的cpio
命令用到过。
双<<
号用的就更少了,基本没有实际的应用。
uio
就相当于一个分界符,在两个uio
中间的内容,输入给wc命令,进行统计。
Linux系统支持多条命令顺序执行,就是我可以依次输入多条命令后,统一按enter键,顺序执行。
;
在多个命令之间加;
即可多命令顺序执行。
命令格式:命令1 ; 命令2
说明:
&&
&&
又叫逻辑与执行符。
命令格式:命令1 && 命令2
说明:
练习1:命令1正确执行
练习2:命令1不正确执行
($?=0):这里先不说什么意思,后边预定义变量在讲。
||
||
又叫逻辑或执行符。
命令格式:命令1 || 命令2
说明:
练习1:命令1正确执行
练习2:命令1不正确执行
&&
和||
联合应用&&
和||
两个执行符可以联合应用,来判断命令是否正确执行。
执行语句:[root@localhost ~]# ls && echo yes || echo no
如果ls
命令正确执行了,则echo yes
命令就会执行,会输出一个yes。echo no
命令判断前边echo yes
命令执行了,则echo no
命令则不会执行。
如果ls
命令报错了,则echo yes
命令就不会被执行,echo no
命令需要判断前边的命令是否执行错误,因为echo yes
命令没有执行,被跳过了,所以是判断ls
命令是否报错,而ls
命令报错了,则执行echo no
命令,输出no。
换句话说,ls
位置的命令,如果正确执行,则输出yes,如果错误执行,则输出no。
(所以需要注意的是,需要判断命令执行是否出错,而不是命令是否执行。不执行的命令就被挖掉,不予判断。)
练习:
问题:我能不能把上边命令中的&&
和||
的位置互换?
答案是不能。
直接看例子,自己推导:
结论,这是一个固定格式。
我们之前已经有文章说过管道符了,
管道符—grep命令。
今天这里再简单总结一下用法。
grep
命令的作用,是在指定的文件中,搜索符合条件的字符串。
命令格式:[root@localhost ~ ] # grep [选项] ”搜索内容” 文件名
选项:
-A 数字
:列出符合条件的行,并列出后续的n行。-B 数字
:列出符合条件的行,并列出前面的n行。-c
:统计找到的符合条件的字符串的次数。-i
:忽略大小写。-n
:输出行号。-v
:反向查找。--color=auto
:搜索出的关键字用颜色显示。例子1:查找用户信息文件/etc/passwd
中,有多少可以登录的用户。[root@localhost ~ ] # grep "/bin/bash" /etc/passwd
例子2:查找用户信息文件/etc/passwd
中,包含有“root"的行,并列出后续的3行。[root@localhost ~ ] # grep -A 3 "root" /etc/passwd
例子3:查找用户信息文件/etc/passwd
中,可以登录的用户,并显示行号。[root@localhost ~ ] # grep -n "/bin/bash" /etc/passwd
例子4:查找用户信息文件/etc/passwd
中,不含有“/bin/bash"的行,其实就是列出所有的伪用户。[root@localhost ~ ] # grep -v "/bin/bash" /etc/passwd
find命令是在系统当中搜索符合条件的文件名,搜索时文件名是完全匹配。如果需要模糊查询,使用通配符进行匹配。
#建立文件abc
[root@localhost ~ ] # touch abc
#建立文件abcd
[root@localhost ~ ] # touch abcd
#查找abc文件
[root@localhost ~ ] # find . -name ”abc"
./abc
搜索文件名是abc的文件,只会找到abc文件,而不会找到文件abcd。虽然abed文件名中包含abc,但是find是完全匹配,只能和要搜索的数据完全一样,才能找到。
注意:find命令是可以通过-regex
选项识别正则表达式规则的,也就是说find命令可以按照正则表达式规则匹配,而正则表达式是模糊匹配。但是对于初学者而言,find命令和grep命令本身就不好理解,所以我们这里只按照通配符规则来进行find查询。
grep命令是在文件当中搜索符合条件的字符串,如果需要模糊查询,使用正则表达式进行匹配,搜索时字符串是包含匹配。
#在test文件中写入abc数据
[root@localhost ~ ] # echo abc > test
#在test文件中再追加abcd数据
[root@localhost ~]#echo abcd >> test
#在test文件中查找abc字符串
[root@localhost ~]#grep”abc" test
abc
abcd
grep命令查找时,只要数据行中包含有abc,就会都列出,所以abc和abed都可以查询到。
管道符之前总结过,请看之前的文章
我们下面简单的做几个练习
练习1:
查询本地所有网络连接,提取包含ESTABLISHED(已建立连接)的行,就可以知道我们的服务器上有多少已经成功连接的网络连接。[root@localhost ~ ] # netstat -an | grep "ESTABLISHED"
练习2:
如果想知道具体的网络连接数量,就可以再使用wc命令统计行数。[root@localhost ~ ] # netstat -an | grep "ESTABLISHED" | wc -l
通配符是用来匹配文件名的,文件名在查询的时候是完全匹配的,必须一模一样才会查询出,否则就要加通配符,进行模糊查询。
练习:
#创建4个测试文件
[root@localhost tmp] # touch abc
[root@localhost tmp] # touch abcd
[root@localhost tmp] # touch 012
[root@localhost tmp] # touch 0abc
#“*”代表查找所有的文件
[root@localhost tmp] # ls *
012 0abc abc abcd
#“?"匹配任意一个字符,所以会匹配0abc
#但是不能匹配abc,因为“?”"不能匹配空
[root@localhost tmp] # ls ?abc
0abc
#匹配任何以数字开头的文件
[root@localhost tmp] # ls [0-9]*
012 0abc
#匹配不已数字开头的文件
[root@localhost tmp] # ls [^0-9]*
abc abed
这个大纲涵盖了目前市面上企业百分之99的技术,这个大纲很详细的写了你该学习什么内容,企业会用到什么内容。总共十个专题足够你学习
这里我准备了对应上面的每个知识点的学习资料、可以自学神器,已经项目练手。
这些资料都已经让我准备在一个php网页里面了,可以在里面领取扫码或者进Q群交流都可以暗号和备注是111哦
世界的模样取决于你凝视它的目光,自己的价值取决于你的追求和心态,一切美好的愿望,不在等待中拥有,而是在奋斗中争取。
如果我的博客对你有帮助、如果你喜欢我的文章内容,请 “点赞” “评论” “收藏” 一键三连哦!