输出重定向

场景:一般命令的输出都会显示在终端中,有些时候需要将一些命令的执行结果想要保存到文件中进行后续的分析/统计,则这时候需要使用到的输出重定向技术。

>:覆盖输出,会覆盖掉原先的文件内容

>>:追加输出,不会覆盖原始文件内容,会在原始内容末尾继续添加

2>:错误输出,会覆盖掉原先的文件内容

2>>:错误追加输出,会覆盖掉原始文件内容,会在原始内容末尾继续添加

&>:将标准输出与错误输出共同写入到文件中。覆盖原有内容

&>>:将标准输出与错误输出共同写入到文件中(追加到原有内容的后面)

标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。

标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕。

错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。

案例1:使用覆盖输出(覆盖原文内容)

[root@ken ~]# vim test
[root@ken ~]# cat test
this is ken
[root@ken ~]# echo "this is oscar" > test
[root@ken ~]# cat test
this is oscar

案例2:使用追加输出(原文中追加)

[root@ken ~]# cat test
this is oscar
[root@ken ~]# echo "this is ken" >> test
[root@ken ~]# cat test
this is oscar
this is ken

案例3:使用错误输出重定向

默认错误输出会输出倒终端之上

[root@ken ~]# cat klkl > test             #使用输出重定向无法使错误输出导入到文本中
cat: klkl: No such file or directory
[root@ken ~]# cat klkl 2> test             #需要使用2>错误输出重定向
[root@ken ~]# cat test
cat: klkl: No such file or directory

案例4:将标准输出与错误输出共同写入到文件中

[root@ken ~]# cat klkl &> test
[root@ken ~]# cat test
cat: klkl: No such file or directory

输入重定向

工作中用到的比较少,了解即可,输入重定向的作用是把文件直接导入到命令中。

案例:统计文本行数

[root@ken ~]# wc -l < /etc/passwd
28

管道符

管道命令符(|)的作用是把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入。

例如我们需要统计passwd文件包含root的行数

[root@ken ~]# cat /etc/passwd | grep "root"  | wc -l
2

把搜索命令的输出值传递给统计命令,即把原本要输出到屏幕的用户信息列表再交给wc命令作进一步的加工,因此只需要把管道符放到两条命令之间即可

通配符

为Linux运维人员,我们有时候也会遇到明明一个文件的名称就在嘴边但就是想不起来的情况。如果就记得一个文件的开头几个字母,想遍历查找出所有以这个关键词开头的文件,该怎么操作呢?

通配符就是通用的匹配信息的符号,比如

  1. 星号(*)代表匹配零个或多个字符(可以为0个)
  2. 问号(?)代表匹配单个字符(单个字符必须存在)
  3. 中括号内加上数字[0-9]代表匹配0~9之间的单个数字的字符,
  4. 中括号内加上字母[abc]则是代表匹配a、b、c三个字符中的任意一个字符。

案例1:查看dev目录下所有以sda开头的文件

[root@ken ~]# ls /dev/sda*
/dev/sda  /dev/sda1  /dev/sda2

案例2:查看dev目录下以sda开头,后面有一个字符的文件

[root@ken ~]# ls /dev/sda?
/dev/sda1  /dev/sda2

加上问号之后/dev/sda就匹配不到了

案例3:查看dev下以sda开头,后面跟上数字的文件

匹配不到sda

[root@ken ~]# ls /dev/sda[0-9]
/dev/sda1  /dev/sda2

案例4:查看dev下以sda开头,后面跟上字母的文件

[root@ken ~]# ls /dev/sda[a-z]
ls: cannot access /dev/sda[a-z]: No such file or directory

匹配不到任何文件,也匹配不到/dev/sda,后面跟上字符必须存在才能匹配到。

三种引号的作用

  1. 单引号(''):转义其中所有的变量为单纯的字符串。
  2. 双引号(""):保留其中的变量属性,不进行转义处理。
  3. 反引号(``):把其中的命令执行后返回结果。

案例1:单引号,不解释变量即所见即所得

[root@ken ~]# age=10
[root@ken ~]# echo 'my age is $age'
my age is $age

案例2:双引号,解释变量

[root@ken ~]# age=10
[root@ken ~]# echo "my age is $age"
my age is 10

案例3:反引号,用来执行命令

[root@ken ~]# name=`ls /root`
[root@ken ~]# echo $name
10.txt 11.txt 12.txt 13.txt 14.txt 1.txt 2.txt 3.txt 4.txt 5 =5 5.txt 6.txt 7.txt 8.txt 9.txt anaconda-ks.cfg elasticsearch-6.4.0.tar.gz elasticsearch-6.4.0.tar.gz.1 ken kenken nohup.out redis-manager-1.1 redis-manager-1.1-release.tar.gz test test1.sh test.sh

软连接、硬连接

软连接

软连接:就是相当于windows下面的快捷方式

【软链接相当于快捷方式,硬链接相当于复制粘贴】

创建完成后,源文件、软链接和硬链接均可以查看到文件内容。

编辑源文件,软、硬链接跟着动。

删除源文件,软链接失效,硬链接无影响。再重新建一个与源文件同名的文件,软链接就直接链接到新的文件,而硬链接不变。因为软链接是按着名称进行链接。

ln -s

-s:指定源文件是谁  后面接 连接目标文件

[root@ken ~]# ln -s ken kenken
[root@ken ~]# ls
elasticsearch-6.4.0.tar.gz    ken     nohup.out          redis-manager-1.1-release.tar.gz
elasticsearch-6.4.0.tar.gz.1  kenken  redis-manager-1.1

往连接文件添加一些内容

[root@ken ~]# echo "this is ken" > kenken
[root@ken ~]# cat kenken
this is ken
[root@ken ~]# cat ken
this is ken

发现源文件内容同步

删除连接文件

[root@ken ~]# rm -rf kenken
[root@ken ~]# cat ken
this is ken

源文件不变

删除源文件

[root@ken ~]# rm -rf ken
[root@ken ~]# cat kenken
cat: kenken: No such file or directory

连接文件失效

再次创建源文件

[root@ken ~]# touch ken
[root@ken ~]# cat kenken
[root@ken ~]# cat ken

再重新建一个与源文件同名的文件,软链接就直接链接到新的文件。因为软链接是按着名称进行链接

总结:

软连接

ln - s 原路径 目标路径

特点:

1、就是相当于win中的快捷方式

2、删除链接文件,源文件无影响

3、删除源文件,链接文件失效

4、修改源文件\链接文件,内容都发生改变

硬链接

ln 源文件 目标文件

[root@ken ~]# ln ken ken1
[root@ken ~]# ls
elasticsearch-6.4.0.tar.gz    ken   kenken     redis-manager-1.1
elasticsearch-6.4.0.tar.gz.1  ken1  nohup.out  redis-manager-1.1-release.tar.gz

总结:

1、删除链接文件,源文件无影响

2、删除源文件,链接文件无影响

3、修改源文件\链接文件,内容都发生改变

02-28 11:42