输入输出重定向

什么是重定向

所谓重定向,就是指把原本要输出到屏幕中的信息,重新定位到某个指定的文件中。

为什么要使用重定向

  1. 当屏幕输出的信息很重要,并且希望保存重要的信息时;
  2. 后台执行中的程序,不希望他干扰屏幕正常的输出结果时;
  3. 系统的例行命令希望可以保存下来时;
  4. 一些执行命令我们已经知道他可能会出现错误信息,不想看这些错误信息时;
  5. 错误日志与正确日志需要输出至不同的文件中保存时

学习重定向需要了解这些东西

标准输入:文件描述符为0 默认是键盘,也可以是其他文件或命令的输出
标准输出:文件描述符为1 默认输出到屏幕
错误输出:文件描述符为2 默认输出到屏幕
我们在运行一个程序时,通常会打开上面这三个标准文件,所以当我们想将错误信息和正确信息分开存储的时候,我们就可以使用1和2来将输出的信息分类重定向到某个文件中去。
输出设备:

[root@oldboy ~]# ll /dev/std*
lrwxrwxrwx. 1 root root 15 Mar 17 17:10 /dev/stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 Mar 17 17:10 /dev/stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 Mar 17 17:10 /dev/stdout -> /proc/self/fd/1

输出重定向

1.> 标准覆盖输出重定向
2.>> 标准追加输出重定向
3. 2> 标准错误覆盖输出重定向
4. 2>>标准错误追加输出重定向
5. &>正确和错误的输出都打入一个文件中
6. &>> 正确和错误的输出都追加到一个文件中
7.1>>a 2&>1 与&>>意思相同
8. 1>a 2&>1与&>意思相同
$? 表示判断上一条命令的执行结果 0表示ok 只要不是0就表示执行失败。
;表示无论前面的命令执行是否成功,都会执行后面的命令,常用于两条命令写到同一行执行
()表示括号中的内容是一个整体。
使用示例:

[root@oldboy ~]# date ; ls >> /dev/null 
# 系统会先执行date将结果输出到屏幕中,然后把ls的结果重定向到/dev/null中去
Wed Mar 18 10:21:45 CST 2020

[root@oldboy ~]# (date ; ls) >> /dev/null 
# 表示把data和ls的命令执行结果都重定向到/dev/null中去
[root@oldboy ~]# 

输入重定向

<< 标准输入重定向

|

把左边命令的输出作为右边命令的输入。

tee

表示把在管道传递的过程中,把前面的命令的执行结果保存下来,也可以把前面的命令的执行结果输出到屏幕。需要注意的是,tee不会影响文件最终的输出结果。
tee和重定向的区别:

[root@oldboy ~]# date > 1.txt
[root@oldboy ~]# date | tee 1.txt
Wed Mar 18 11:02:39 CST 2020

从上面可以看出,重定向不会再屏幕中输出结果,而tee会在屏幕输出一份,文件中也会存在一份。
tee默认会覆盖文件中的数据,如果想追加的话,可以加上-a参数来实现。

xargs

可以让不支持管道的命令来使用管道。
使用示例如下:

[root@oldboy ~]# which cat | xargs ls -l
-rwxr-xr-x. 1 root root 54160 Oct 31  2018 /usr/bin/cat

上面例子中,我们要知道,ls -l本来是不支持使用管道来进行参数传递的,这时候我们使用xargs就可以让ls命令来支持管道,成功的把左边的命令的执行结果作为参数传递给右边的命令。
注: rm -rf ls
表示先执行ls,然后再执行rm -rf
与 rm -rf $(ls)
相同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值