14.1 前言
在我们了解网络之后,接下来我们来了解一下Linux的输出重定向及通配符,以便更快捷地去执行Linux的基础命令!话不多说,我们开始今天的学习内容吧。
14.2 输出重定向
输出重定向,本质上就是将本该显示在终端上的信息去存放到其他位置以便进行记录或进行数据传输,这种操作一般在写shell脚本时比较常用,这里我们就先来简单了解一下输出重定向!
输出重定向分为以下两种:
- 标准输出:
是将信息输出在终端
- 标准错误输出:
在执行命令的过程中所产生错误信息也是输出在终端
这里我们要做一个了解,命令的执行结果的错误指令一般都反馈在终端,(大部分命令结果执行正确将不会显示,只有发生错误时才会产生反馈)!!
在我们有了上述了解后,我们了解一下输出重定向的原理,简单点来说,就是将原本显示终端的反馈结果重定向到其他文件中以便进行保存!!!我们在下面将会进行举例,接下来我们来看看标准输出重定向!
14.2.1 标准(正确)输出重定向
作用:将本来要显示在终端上的信息重定向到一个文件中
实现方法(命令格式)
格式一:
命令 > 文件名称 #将文件中原有的内容全部删除,然后进行写入
简单点来说,就是在原有文件上进行覆盖,从而实现命令结果反馈至目标文件中,这里我们通过举例来理解:
例子:
输出“hello world”重定向到/tmp下的1.txt中
格式如下:
echo "hell world" > /tmp/1.txt
我们来看结果
此时我们发现1.txt中有了内容“hello word”,不仅如此,读者之前并没有创建1.txt文件,但现在自己创建了,因此这里需要注意,在进行输出重定向时目标文件不存在时,则会自动创建一个文本文件进行存储!
好了,格式一就到这里了,接下来我们来看格式二!!
格式二:
命令 >> 文件名称 在文件原有的内容后,追加新的内容
这里我们发现,多了一个“>”,格式二与格式一的区别是,格式一会自动覆盖文件之前的内容,而格式二会在文件原有的内容后,追加新的内容。
我们还是通过举例来看两个格式的区别:
现在我们用格式一再搞一个l love you,看看效果
格式如下:
echo "l love you" > /tmp/1.txt
看效果
我们发现,1.txt里面的hello word被吞了,这就是格式一的覆盖性质,
接下来我们用格式二再输入一条ch225
格式如下:
echo "伟大的ch225" >> /tmp/1.txt
我们来看结果:
这个就是格式二的追加性质!!
完成,接下来我们来看标准错误输出重定向!!
14.2.2 标准错误输出重定向
我们要知道,命令执行结果时有对有错的,上面命令只是针对正确的命令结果进行输出重定向,那么问题来了,如果命令执行错误的话,我们该如何进行操作呢?这个时候就要用到 标准错误输出重定向了,也是两个格式,如下
格式一:
命令 2> 文件名称 #将错误的命令执行结果输出到指定文件中,文件中原有的内容全部删除,然后进行写入
格式二:
命令 2> 文件名称 #将错误的命令执行结果输出到指定文件中,在文件中原有的内容后追加新的内容
这个时候我们发现,这跟标准输出重定向之间就多了一个二啊,但是!!这玩意他一点也不二!!我们还是通过后面的例题来进行了解
例:
执行命令"ls /root /roat",将错误信息输出到/tmp/1.txt中
命令如下
ls /root /roat 2>> /tmp/1.txt
我们来看一下结果
错误的命令执行结果被保存到了1.txt下,格式一这里就不多举例子了,知道就行。
那么问题来了,能能不能将正确的和错误的都保存到同一个文件中呢?能!!
14.2.3 特殊输出重进向
将正确的和错误的都保存到同一个文件中
格式:
格式一:
命令 2> 文件名称 #将正确和错误的命令执行结果输出到指定文件中,文件中原有的内容全部删除,然后进行写入
格式二:
命令 &> 文件名称 #将正确和错误的命令执行结果输出到指定文件中,在文件中原有的内容后追加新的内容
我们还是以上面的举例:
执行命令"ls /root /roat",将错误信息和正确信息都输出到/tmp/3.txt中
命令如下
ls /root /roat &>> /tmp/1.txt
我们看结果
ok
我们接下来来讲一个小知识
小知识(黑洞文件):
/dev/null文件,也被我们称之为黑洞文件,这个文件有个特点,所有输出重进项的结果,无论正确还是错误只要指向这个文件,都会消失,类似于回收站,但不能进行还原!!!因此常被作为屏蔽命令结果的首要位置!!
在我们了解输出重进向之后,接下来我们来看看我们的终极例题:
终极例题:
执行命令"ls /root /roat",将错误信息屏蔽掉,正确信息输出到/tmp/3.txt中
看着好像很难的样子,接下来我们先写命令再来解释:
命令如下:
ls /root /roat 1> /tmp/1.txt 2>/dev/null
我们来看结果
这里我们就有疑问了,我们看不到命令的执行结果,那么执行结果都上哪去了?
我们看一下1.txt
这里我们看到了正确的命令执行结果,那么错误的命令执行结果呢?
已经被转移到这个位置了
说明已经被屏蔽了,这个命令是什么意思呢?
意思是系统会对命令输出结果做一次判断,如果输出结果无误,就会被放置到/tmp/1.txt下,如果输出结果错误,则会被放置到黑洞文件进行屏蔽!!!!
输出重进向就到这里了,接下来我们来看通配符
14.3 linux的通配符
linux通配符,说白了就是辅助命令进行执行的一些特殊符号,这里我们之前用到了很多了,这里我们来大概做一个讲解:
14.3.1 *
表示任意长度的任意字符,这里任意长度可以是一个,也可以是0个,这类通配符通常用于rm命令中,蛋蛋一个通配符则表示所有文件,举例如下
rm -rf /*
这里不建议各位进行尝试!
这里不建议各位进行尝试!!
这里不建议各位进行尝试!!!
这里不建议各位进行尝试!!!!
14.3.2 ?
表示一个长度的任意字符,用法与*一样,一般用于rm,find命令等查询模糊文件时进行使用,我们举个例子:删除根下文件名第二字符个是 a 的文件:命令如下rm -rf ?a
14.3.3 ;
这里一般用来链接多个命令,举例如下
cd -;cd -
其他连接命令包括以下几种:
- && 只有前面的命令执行成功,后面的命令才会执行
- || 只有前面命令执行失败,才会执行后面的命令
(连接命令类似于命令分隔符,用来分隔上一个命令的结果,让系统认为为两个命令,该操作一般在写shell脚本中较为常用!!!!)
14.3.4 #
注释行(一般用于描述命令的信息及做备注,注释行系统不执行!!!)
14.3.5 |
一般用来传递命令的执行结果,该符号一般用于统计一般文件,特殊查询等操作,我们举个例子
- 统计/tmp/1.txt中有多少字符
命令如下:
cat /tmp/1.txt |wc -c
我们看结果!!
ok,下一个
14.3.6 ~
家目录,一般用于跟在cd后面,这里不多做解释,可以查看笔者的Linux基础命令cd小节进行进一步了解!14.3.7 -
返回上一次所在目录,一般也用于在cd命令,这里不做赘述!!
14.3.8 $
一般用在shell脚本和三剑客中,在shell脚本中用于引用变量名,而在三剑客中该符号作为截取文件中每行指定的字段中指定字段数来使用,而在linux命令行,该符号一般搭配?进行使用,用来查看上一个命令的执行状态,0为执行成功,非0为执行失败,这里举例来说明
这里大家可以看bash后跟的数字来判断命令是否成功执行!!!
14.3.9 /
路径分隔符,相信各位学到这里这个东西也见了很多了,在绝对路径下单一的/表示系统根目录,后面带的/则为目录之间的分隔符!这里不多赘述!!!
14.3.10 > 及>>
这里我们14.3.2讲了,翻笔记!!!!!
14.3.11 <<
这个一般用于打印菜单,进行输出使用,跟echo没啥区别,唯一的区别是在shell是执行echo命令需要加条件什么乱七八糟的,这个可以不换行进行输出!具体格式如下
cat <<EOF > 1 > 2 > 3 > 4 > EOF
看结果
14.3.12 引号
Linux中引号分为以下三种
- ' ' :弱引用,引用的内容原样输出
- " " :强引用,引用中变量会变成变量的值(一般在shell脚本中用到,在命令中通常搭配三剑客进行使用!!)
- `` :命令替换
这里要注意的是,反引号··是将命令转换成命令的执行结果,放到当前位置下,而管道符是将前面的命令结果传递给后面的命令让后面的命令继续执行!!!
14.3.13 .(点)
一般用于cd命令,这一个点表示当前目录,两个点表示上一级目录,这里不多进行赘述!!
14.314.{}
可以理解为起始和结束的操作,一般用于创建连续字符集的文本文件,目录文件,在正则表达式则表示前面字符的最少表示个数及最多表示个数,在awk中则用来定义分隔符之后的字段,这里我们举例一个创建文本文件供大家理解:
- 创建文件1.txt ,2.txt ,3.txt ,4.txt,,,, 100.txt (共100个)
命令格式如下
touch {1..100}.txt
我们来看
ok,完成
今天的内容就到这里了,写的有些仓促,如果有问题请联系作者改正,如果这篇文章对各位起到帮助了还请各位点个赞,最后感谢各位的收看,我们下期见!!!