同时按下键盘上的 Shift+\
键即可输入管道符,其执行格式为“命令
A |
命令
B
”。命令符的作用也可以用一句话来概括“把前一个命令原本要输出到屏幕的数据当作是后一个命令的标准输入”。
找出被限制登录用户的命令是 grep "/sbin/nologin" /etc/passwd、统计文本行数的命令则是
wc -l
。
现在要做的就是把搜索命令的输出值传递给统计命令,即把原本要输出到屏幕的用户信息列表再交给 wc
命令作进一步的加工,因此只需要把管道符放到两条命令之间即可。
[root@localhost Desktop]# grep "/sbin/nologin" /etc/passwd | wc -l
33
这个管道符就像一个法宝,我们可以将它套用到其他不同的命令上,比如用翻页的形式查看/etc
目录中的文件列表及属性信息(这些内容默认会一股脑儿地显示到屏幕上,根本看不清楚):
[root@localhost Desktop]# ls -l /etc/ | more
total 1396
drwxr-xr-x. 3 root root 97 Aug 9 09:48 abrt
-rw-r--r--. 1 root root 16 Aug 9 09:53 adjtime
-rw-r--r--. 1 root root 1518 Jun 7 2013 aliases
-rw-r--r--. 1 root root 12288 Aug 9 01:55 aliases.db
drwxr-xr-x. 2 root root 49 Aug 9 09:48 alsa
drwxr-xr-x. 2 root root 4096 Aug 9 09:50 alternatives
在修改用户密码时,通常都需要输入两次密码以进行确认,这在编写自动化脚本时将成为一个非常致命的缺陷。通过把管道符和 passwd 命令的--stdin 参数相结合,我们可以用一条命令来完成密码重置操作:--stdin 一般在批量添加用户使用此参数。
[root@localhost Desktop]# echo "zx123456" | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.
[root@localhost Desktop]# su zhangxu
[zhangxu@localhost Desktop]$ su root
Password:
在发送电子邮件时,默认采用交互式的方式来进行,我们完全可以利用一条结合了管道符的命令语句,把编辑好的内容与标题一起“打包”,最终用这一条命令实现邮件的发送。
[root@localhost Desktop]# echo "Hello" | mail -s "nihao" zhangxu
[root@localhost Desktop]# su - zhangxu
Last login: Tue Aug 10 04:20:36 EDT 2021 on pts/1
[zhangxu@localhost ~]$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/zhangxu": 2 messages 2 new
>N 1 root Tue Aug 10 04:20 18/618 "Subject"
N 2 root Tue Aug 10 04:21 18/614 "nihao"
& 2
Message 2:
From root@localhost.localdomain Tue Aug 10 04:21:46 2021
Return-Path: <root@localhost.localdomain>
X-Original-To: zhangxu
Delivered-To: zhangxu@localhost.localdomain
Date: Tue, 10 Aug 2021 04:21:46 -0400
To: zhangxu@localhost.localdomain
Subject: nihao
User-Agent: Heirloom mailx 12.5 7/5/10
Content-Type: text/plain; charset=us-ascii
From: root@localhost.localdomain (root)
Status: R
下面这条自造的命令就结合使用了
mail
邮件命令与输入重定向的分界符,其目的是让用户一直输入内容,直到用户输入了其自定义的分界符时,才结束输入。
[root@localhost zhangxu]# mail -s "hello" root@zx.com << over
> 123456
> 456789
> 7654321
> over
不要误以为管道命令符只能在一个命令组合中使用一次,我们完全可以这样使用:“命令 A |
命令
B |
命令
C
”。
想必大家小时候都看过“哆啦
A
梦”动画片吧。哆啦 A
梦(也就是我们常称的机器猫)经常为了取悦大雄而从口袋中掏出一件件宝贝,其中好多次就用到了任意门这个道具。其实,管道符就好像是用于实现数据穿越的任意门,可以帮我们提高工作效率,完成之前不敢想象的复杂工作。