Linux:输入输出重定向与管道符

1、输入输出重定向

在学完了基础命令之后,我们要做的就是高效率的利用这些基础命令,将这些命令组合到一起使用。要做到这一点我们首先就得明白输入、输出重定向的原理。

输入重定向指的是把指定文件导入到命令中,输出重定向指的是把输出结果输出到指定文件。在日常的使用中,我们就是将键盘上输入的内容作为输入重定向,将我们的终端作为输出重定向。一般来说使用输出重定向比较多,因而又有了两种输出重定向:标准输出和错误输出。

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

**标准输出重定向(STDOUT,文件描述符为0):**默认输出到终端

**错误输出重定向(STDIN,文件描述符为0):**默认输出到终端

1.1、输入重定向

我们先来看看它的参数:

符号作用
命令 < 文件将文件作为命令的标准输入
命令 << 分界符从标准输入中读入,直到遇见分界符才停止
命令 < 文件1 > 文件2将文件1作为命令的标准输入并将标准输出到文件2

对于前面的一些查看文本文件的编辑命令,例如sort、cut、grep、tr。这些命令的输入重定向都是文件,但如果不指定文件那么默认的输入重定向则是键盘,由我们自己输入。

例如,使用grep来查找我输入的多行文本中某些特定字符:

[root@linuxprobe ~]# grep 'hello' <<!
> hello world
> i love you 
> i see you 
> hello linux
> how are you
> !
hello world
hello linux
[root@linuxprobe ~]# 

以上命令中,为了输入多行内容,我们需要使用<<来一直输入,!则是我们设置的分界符,当我们输入!的时候Linux就知道输入结束了

再例如,使用sort来对我们输入的内容进行排序:

[root@linuxprobe ~]# sort -n <<!
> 100
> 42
> 92
> 10
> 30
> 0
> 9
> !
0
9
10
30
42
92
100
1.2、输出重定向

输出重定向的符号及其作用:

符号作用
命令>文件将标准输出重定向到一个文件(清空原有文件数据)
命令2>文件将错误输出重定向到一个文件(清空原有文件数据)
命令>>文件将标准输出重定向到一个文件(追加到原有内容后面)
命令2>>文件将错误输出重定向到一个文件(追加到原有内容后面)
命令&>>文件将标准输出与错误输出重定向到一个文件(追加内容后面)

我们尝试将cat读取到的文本信息输出重定向到一个文件中:

[root@linuxprobe ~]# cat initial-setup-ks.cfg > info.txt
[root@linuxprobe ~]# cat info.txt 
#version=RHEL8
# X Window System configuration information
xconfig  --startxonboot
# License agreement
eula --agreed
# Use graphical install
graphical
# Network information
network  --bootproto=dhcp --device=ens160 --onboot=off --ipv6=auto --activate
network  --bootproto=dhcp --hostname=linuxprobe.com
repo --name="AppStream" --baseurl=file:///run/install/repo/AppStream
ignoredisk --only-use=sda
——————以下信息省略——————

可以看到,重定向后的内容没有打印在控制台上,而是写入了info.txt中

我们再尝试使用追加>>:

[root@linuxprobe ~]# echo hello world > info.txt
[root@linuxprobe ~]# echo hello linux >> info.txt
[root@linuxprobe ~]# echo hello java >> info.txt
[root@linuxprobe ~]# echo hello html >> info.txt
[root@linuxprobe ~]# cat info.txt 
hello world
hello linux
hello java
hello html

我们尝试使用错误重定向试试,我们查询一个不存在的文件:

[root@linuxprobe ~]# cat xxx.xxx 2> error.log
[root@linuxprobe ~]# cat error.log 
cat: xxx.xxx: No such file or directory

2、管道命令符

管道符的作用就是把前一个命令原本要输出到屏幕的信息当作后一个命令的标准输入

光是听你可能还不觉得它的神奇伟大,但它能把多个命令组合在一起使用,让我们的Linux命令变得灵活多变。

比如前面再grep中提到过,要筛选不能登录的用户信息使用这个命令grep /sbin/nologin /etc/passwd,但筛选出来了我们要想查看有多少个用户怎么办?难道一个个数吗?这个时候我们想到另一个命令wc -l,它可以查看行数。

我们将它们组合在一起:

[root@linuxprobe ~]# grep 'sbin/nologin' /etc/passwd | wc -l
40
[root@linuxprobe ~]# 

管道符前面的命令作为管道符后面的命令的输入重定向,也就是说wc -l统计的是前面命令的输出结果

再来一个例子,我们使用ps -aux查看进程的时候,打印出来的信息那么多怎么看的过来?我们可以配合管道符使用grep来进行筛选一下。

比如,我想要查看跟bash相关的进程:

[root@linuxprobe ~]# ps -aux | grep 'bash'
root        970  0.0  0.1  25384  2336 ?        S    08:00   0:00 /bin/bash /usr/sbin/ksmtuned
root       3785  0.0  0.2  26668  5524 pts/0    Ss   09:14   0:00 bash
root       4472  0.0  0.0  12112  1064 pts/0    S+   09:46   0:00 grep --color=auto bash

管道命令符的简单使用就是这样,我们可以随意组合命令来达到我们想要的效果,而且它还可以无限套娃,类似命令A | 命令B |命令C这种格式无限下去

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值