管道与重定向

一、重定向

           标准输入、标准正确输入、标准错误输出

0,标准输入(键盘)
1,标准输出
2,标准错误,
3+,进程在执行过程中打开的其他文件。
&:表示正确错误混合输出

正确输出: 1>和1>> ,可简写为 >和>>
错误输出: 2>和2>> 没有简写

二、输出重定向(覆盖追加 > ,>> )

----覆盖

----追加
正确输出: 1> 1>> 等价于 > >>
错误输出: 2> 2>>

1、输出重定向

覆盖

[root@qfedu.com ~]# date 1> date.txt  #正确输出--覆盖
# 注意:如果 > 前面什么都不加默认为1,标准正确输出。

追加

[root@qfedu.com ~]# date >> date.txt #正确输出--追加

错误输出重定向
并将错误输出重定向到不同的位置

[root@qfedu.com ~]# ls /home/  /aaaaaaaaa >list.txt
ls: cannot access /aaaaaaaaa: No such file or directory
[root@qfedu.com ~]# ls /home/  /aaaaaaaaa >list.txt 2>error.txt    #将错误输出重定向到不同的位置
[root@qfedu.com ~]# cat error.txt 
ls: cannot access /aaaaaaaaa: No such file or directory

正确和错误都输入到相同位置

[root@qfedu.com ~]# ls /home/  /aaaaaaaaa &>list.txt  #混合输出到相同文件

将错误输出重定向到空设备 /dve/null (垃圾桶)

[root@qfedu.com ~]# ls /home/  /aaaaaaaaa >list.txt 2>/dev/null #空设备,将错误的输出丢掉
[root@qfedu.com ~]# ls /home/  /aaaaaaaaa &>/dev/null #空设备,将正确与错误的输出丢掉

echo 命令

echo会将输入的内容送往标准输出写入(打印)

echo 内容 >> 文件名或脚本里面
echo  $?      #查看上一条命令是否执行成功

输入重定向 <

标准输入: < 等价 0<

我们可以让命令从文件中获取,这样本来的命令需要从标准输入stdin中获取,转换为从我们的指定文件中获取。这样本来需要从键盘输入的命令就会转移到文件读取内容。语法如下:

command1 < file

通过输入重定向创建文件

cat > file << EOF )是用来创建文件或者在脚本中使用,并向文件中输入信息输入的任何东西会被写入文件中,EOF命令结束。

语法:cat >> file5 <<EOF  #可以写到脚本或者文件里面
EOF:开始和结束的标记。
成对使用
结尾的另一个必须定格写。

实战案例一:

[root@qfedu.com ~]# cat >file4 <<EOF
> 111
> 222
> 333
> 444
> EOF
[root@qfedu.com ~]# cat file4 
111
222
333
444

实战案例二

利用重定向建立多行的文件 脚本创建多行文件

[root@qfedu.com ~]# vim create_file.sh
#!/bin/bash
cat >file200.txt <<EOF
111
222
333
yyy
ccc
EOF
[root@qfedu.com ~]# chmod +x create_file.sh 
[root@qfedu.com ~]# ./create_file.sh 
[root@qfedu.com ~]# cat file200.txt 
111
222
333
yyy
ccc

管道(piping) |

管道是将上一个命令的结果重定向到下一个命令

进程管道

语法:command(命令)1 | command2 |command3 |…

管道命令可以将多条命令组合起来,一次性完成复杂的处理任务。

命令1执行完后会有一些标准的输出信息会经过管道收集起来作为下一个命令的标准输入,直到完成最后一个指令进行输出到屏幕当中(管道左侧的输出,就是右侧的输入)

请添加图片描述

tee(三通)管道

三通管道,即交给另一个程序处理,又保存一份副本

示例:

命令解释:

查看进程过滤出root字段的进程,然后通过三通管道tee 把得到的信息存储进gdtest.txt文件中,记续过滤出含有1250的进程
完成后查看gdtest.txt 因为文件中内容过多 我们只显示其中的前十行用作演示。

[root@localhost ~]# ps aux |grep root|tee gdtest.txt |grep 1250
root       1250  0.0  0.4 481488  4724 ?        Ssl  16:41   0:00 /usr/sbin/gdm
root       4188  0.0  0.0 112728   972 pts/1    S+   19:57   0:00 grep --color=auto 1250
[root@localhost ~]# tail -10  gdtest.txt
root       2638  0.0  0.0      0     0 ?        S    17:40   0:00 [kworker/u256:1]
root       3906  0.0  0.6 163616  6048 ?        Ss   19:36   0:00 sshd: a [priv]
root       3974  0.0  0.0      0     0 ?        S    19:39   0:00 [kworker/0:0]
root       4106  0.0  0.0      0     0 ?        S    19:50   0:00 [kworker/0:3]
root       4150  0.0  0.0      0     0 ?        S    19:55   0:00 [kworker/0:1]
root       4182  0.0  0.0 107956   616 ?        S    19:57   0:00 sleep 60
root       4185  0.0  0.1 155372  1872 pts/1    R+   19:57   0:00 ps aux
root       4186  0.0  0.0 112732   964 pts/1    R+   19:57   0:00 grep --color=auto root
root       4187  0.0  0.0 108172   676 pts/1    S+   19:57   0:00 tee gdtest.txt
root       4188  0.0  0.0 112728   972 pts/1    S+   19:57   0:00 grep --color=auto 1250
[root@localhost ~]#

参数传递:xargs

对:ls cp rm 管道不能执行。所以通过 xargs 参数。

语法:

 第一种:查看文件,并复制文件到别的目录
 
 cat a.txt | xargs  -i cp {} /目录  
 {}:前面传过来的内容
 -i :为了让大括号生效
 解释:前面传过来的东西交给大括号
 
 查看文件内容,
 cat file.txt |xargs ls -l          
 前面是目录或者目录的路径。  ls - l  后面可以不加大括号,直接执行。
第二种:查看文件,并复制目录及目录当中的文件,到别的目录

[root@qfedu.com ~]# touch /home/file{1..5}
[root@qfedu.com ~]# # 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’

xargs的参数:
{}:前面传过来的内容
-i :为了让大括号生效

cp的参数:
当想知道命令后所跟的参数,可以使用man 、--help
-f :  --暴力,如果无法打开现有的目标文件,请删除并重试(当-n选项也被使用)
-r :   同-R,--递归,递归复制目录
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值