Linux重定向与管道符

重定向

简而言之,输入重定向就是把文件导入到命令中, 输出重定向就是把原本要输出到屏幕的数据信息写入到指定文件中。在日常的使用中,我们使用输出重定向频率更高,所以又将输出重定向分为了标准输出重定向和错误输出重定向两种不同的技术,以及清空写入与追加的写入的两种模式。

  1. 标准输入重定向(STDIN, standard input), 文件描述符为0, 默认从键盘输入,也可以重其他文件或命令中输入。
  2. 标准输出重定向(STDOUT, standard output), 文件描述符为1,默认输出到屏幕。
  3. 错误输出重定向(STDERR,standard error redirection),文件描述符为2, 默认输出到屏幕。
    输入重定向用法
符号作用
命令 < 文件将文件标准输入到命令
命令<< 分界符从标准输入中读入,直到遇到分界符才停止
命令< 文件1>文件2将文件1作为命令的标准输入并将标准输出到文件2

输出重定向用法

符号作用
命令> 文件将标准输出重定向到一个文件中,清空原有文件的数据
命令 2>文件将错误输出重定向到一个文件中,清空原有文件的数据
命令 >> 文件将标准输出重定向到一个文件中,追加到原有内容的后面
命令 2>>文件将错误输出重定向到一个文件中,追加到原有内容的后面
命令 >> 文件 2>& 1将标准输出与错误输出共同写入到文件中, 追加到原有内容的后面

示例: 通过标准输出重定向将man ls 命令原本要输出的屏幕信息写入到文件manal_of_ls.txt中, 然后显示manal_of_ls.txt的内容。

[root@linuxpronbe home]# man ls > manual_of_ls.txt 
[root@linuxpronbe home]# cat manual_of_ls.txt 
LS(1)                                  User Commands                                  LS(1)

NAME
       ls - list directory contents
SYNOPSIS
       ls [OPTION]... [FILE]...
DESCRIPTION
       List  information  about the FILEs (the current directory by default).  Sort entries
       alphabetically if none of -cftuvSUX nor --sort is specified.

用起来确实很方便,还要注意以下两点:

1 追加和覆盖的区别

简而言之,覆盖会清空之前的信息。比如我们先在manal_of_ls.txt 覆盖输出一段信息,再追加输出一段信息。

[root@linuxpronbe home]# echo "stay true to your original purpose" > manual_of_ls.txt  
[root@linuxpronbe home]# echo "forge ahead" >> manual_of_ls.txt  
[root@linuxpronbe home]# cat manual_of_ls.txt 
stay true to your original purpose
forge ahead
2 错误输出重定向只在错误时生效,且文件描述符2不可省略
[root@linuxpronbe home]# ls -l manual_of_ls.txt > test.txt 
[root@linuxpronbe home]# ls -l manual_of_ls.txt 2> test.txt   
-rw-r--r--. 1 root root 47 Jul 25 23:17 manual_of_ls.txt
[root@linuxpronbe home]# ls -l abcd > test.t
ls: cannot access abcd: No such file or directory
[root@linuxpronbe home]# ls -l abcd 2> test.t
[root@linuxpronbe home]# cat test.t
ls: cannot access abcd: No such file or directory

可以看到,正确的信息使用错误重定向是不会写入文件的,依然输入到屏幕上。而错误的信息使用标准输出重定向也是不可以的。简而言之,正确的信息使用标准输出重定向,错误的信息使用错误输出重定向。

管道符

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

命令1 | 命令2

示例: 如果我们现在要统计限制登陆的用户个数,就可以将grep命令的结果输出给wc命令。

[root@linuxpronbe home]# grep /sbin/nologin /etc/passwd | wc -l
33

用起来确实比较方便,而且管道符可以在一条命令中多次使用, 管道符就像实现数据穿越的任意门,可以帮助我们提高效率,完成之前不敢想象的复杂工作,这需要我们扎实的基本功并且发挥想象力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值