一.关于重定向
在Linux系统中,进程在运行过程中会打开一个或多个文件,每次进行这样的操作,会产生文件描述符进程使用文件描述符来管理打开的文件,文件描述符:每打开一个程序都会有文件描述,文件描述符用数字表示。
下表总结了不同情况下文件描述符的表示含义:
数字表示 | 简写名称(其实就是后面描述的英文缩写 | 描述信息 | 读写 | 英文描述 |
0 | stdin | 标准输入 | 只读 | standard input |
1 | stdout | 标准输出 | 只写 | standard output |
2 | stderr | 标准错误 | 只写 | standard error |
3+ | filename | 其他文件 | 读/写,读与写 | other files |
0,标准输入(键盘)
1,标准输出
2,标准错误,
3+,进程在执行过程中打开的其他文件。
&:表示正确错误混合输出
二、输出重定向 (覆盖,追加)
首先要了解几个符号在Linux系统中的含义:
> ----覆盖
>> ----追加
正确输出: 1> 1>> 等价于 > >>
错误输出: 2> 2>>
将data 1 中的内容覆盖到data.txt中:
[root@myxx.top ~]# date 1> date.txt #正确输出--覆盖
# 注意:如果 > 前面什么都不加默认为1,标准正确输出。
在date.txt的最后追加date的内容:
[root@myxx.top ~]# date >> date.txt #正确输出--追加
错误输出:
[root@myxx.top ~]# ls /home/ /aaaaaaaaa >list.txt
ls: cannot access /aaaaaaaaa: No such file or directory
#上面我们查看一个不存在的文件,系统报错
[root@myxx.top ~]# ls /home/ /aaaaaaaaa >list.txt 2>error.txt #重定向到不同的位置
#这里的2>error.txt中,2表示错误输出,上面语句意思就是将错误输出保存到error.txt中
[root@myxx.top ~]# cat error.txt
ls: cannot access /aaaaaaaaa: No such file or directory
&符号代表混合的意思,即无论对错,全部输出到某个文件:
[root@myxx.top ~]# ls /home/ /aaaaaaaaa &>list.txt #混合输出到相同文件
三、输入重定向 <
(cat > file <<EOF )是用来创建文件或者在脚本中使用,并向文件中输入信息输入的任何东西会被写入文件中,EOF命令结束。
语法:cat > file5 <<EOF #可以写到脚本或者文件里面
EOF:开始和结束的标记。
成对使用
结尾的另一个必须定格写。
例如往文件中插入内容:
[root@myxx.top ~]# cat >file4 <<EOF
> 111
> 222
> 333
> 444
> EOF
[root@myxx.top ~]# cat file4
111
222
333
444
四、管道 |
管道符号为: |
管道的含义是将前面命令运行的结果作为后面命令的条件
简单理解就是把前面处理的东西扔给后面处理,就像流水线一样。
如图:rpm -qa是查询所有软件包
grep 'httpd'是过滤有httpd字样的内容
管道就是将前面查询的软件包结果,给后面过滤,这样我们就得到了所有含httpd的软件包信息
[root@myxx.top ~]# rpm -qa |grep 'httpd' #查询所有安装的软件包,过滤包含httpd的包
httpd-tools-2.4.6-90.el7.centos.x86_64
httpd-2.4.6-90.el7.centos.x86_64
五、参数传递:xargs
对:ls cp rm 管道不能执行。所以通过xargs。
语法:
cat a.txt | xargs -i cp {} /目录
{}:前面传过来的内容
-i :为了让大括号生效
目录时 -r
解释:前面传过来的东西交给大括号
cat file.txt |xargs ls -l
前面是目录或者目录的路径。 ls - l 后面可以不加大括号,直接执行。
如下图,cat files.txt查看文件
xargs将前面的查看结果放入大括号里面,这样我们就完成了对文件的复制转移。
[root@myxx.top ~]# touch /home/file{1..5}
[root@myxx.top ~]# # cat files.txt | xargs -i cp -rvf {} /tmp/
‘/home/file1’ -> ‘/tmp/file1’
‘/home/file2’ -> ‘/tmp/file2’
‘/home/file3’ -> ‘/tmp/file3’
‘/home/file4’ -> ‘/tmp/file4’
‘/home/file5’ -> ‘/tmp/file5’
最后送一张表情包: