管道命令是Linux系统中最常用的命令之一,它可以将多个命令连接起来,使得它们可以一起工作。管道命令的使用非常简单,只需要在两个命令之间加上一个“|”字符即可。
例如,我们想要查看当前目录中所有文本文件的内容,可以使用如下的管道命令:
ls | grep .txt | xargs cat
这条命令会先列出当前目录中所有文件,然后使用grep过滤出扩展名为.txt的文本文件,最后使用xargs将这些文本文件的内容显示出来。
此外,我们也可以使用管道命令来对数据进行处理和分析。例如,我们想要获得一个CSV格式的数据集中特定列的平均值,可以使用如下的管道命令:
cat data.csv | cut -d, -f2 | awk '{sum+=$1} END {print sum/NR}'
这条命令会首先将data.csv文本文档中的内容读入标准输入流中;然后使用cut将数据集中特定列(通过-f2选项)分割出来; 最后使用awk对读入的数据进行处理并输出特定列的平均值。
总之,管道命令是Linux系统中非常重要而又强大的工具。通过将多个不同功能的命令连接在一起,我们可能会面对很多高难度、耗时、耗力但是却必须要实现的工作。因此学习并掌握好Linux 系统中 的 管道 命 你 及 其 用 法 对 我 么 是 非常重要 的。
细心的读者肯定还记得在2.6节学习tr命令时曾经见到过一个名为管道符的东西。同时按下键盘上的Shift+键即可输入管道符,其执行格式为“命令A | 命令B”。管道命令符的作用也可以用一句话来概括“把前一个命令原本要输出到屏幕的标准正常数据当作是后一个命令的标准输入”。在2.8节讲解grep文本搜索命令时,我们通过匹配关键词/sbin/nologin找出了所有被限制登录系统的用户。在学完本节内容后,完全可以把下面这两条命令合并为一条:
找出被限制登录用户的命令是grep "/sbin/nologin" /etc/passwd;
统计文本行数的命令则是wc -l。
现在要做的就是把搜索命令的输出值传递给统计命令,即把原本要输出到屏幕的用户信息列表再交给wc命令作进一步的加工,因此只需要把管道符放到两条命令之间即可,具体如下。这简直是太方便了!
[root@linuxprobe ~]# grep "/sbin/nologin" /etc/passwd | wc -l
33
这个管道符就像一个法宝,我们可以将它套用到其他不同的命令上,比如用翻页的形式查看/etc目录中的文件列表及属性信息(这些内容默认会一股脑儿地显示到屏幕上,根本看不清楚):
[root@linuxprobe ~]# ls -l /etc/ | more
total 1400
drwxr-xr-x. 3 root root 97 Jul 10 17:26 abrt
-rw-r--r--. 1 root root 16 Jul 10 17:36 adjtime
-rw-r--r--. 1 root root 1518 Jun 7 2013 aliases
-rw-r--r--. 1 root root 12288 Jul 10 09:38 aliases.db
drwxr-xr-x. 2 root root 49 Jul 10 17:26 alsa
drwxr-xr-x. 2 root root 4096 Jul 10 17:31 alternatives
-rw-------. 1 root root 541 Jan 28 2017 anacrontab
-rw-r--r--. 1 root root 55 Jan 29 2017 asound.conf
-rw-r--r--. 1 root root 1 Jan 29 2017 at.deny
drwxr-xr-x. 2 root root 31 Jul 10 17:27 at-spi2
drwxr-x---. 3 root root 41 Jul 10 17:26 audisp
drwxr-x---. 3 root root 79 Jul 10 17:37 audit
drwxr-xr-x. 4 root root 94 Jul 10 17:26 avahi
--More--
在修改用户密码时,通常都需要输入两次密码以进行确认,这在编写自动化脚本时将成为一个非常致命的缺陷。通过把管道符和passwd命令的--stdin参数相结合,我们可以用一条命令来完成密码重置操作:
[root@linuxprobe ~]# echo "linuxprobe" | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.
大家是不是觉得管道符命令有些相见恨晚?管道符的玩法还有很多,比如,在发送电子邮件时,默认采用交互式的方式来进行,我们完全可以利用一条结合了管道符的命令语句,把编辑好的内容与标题一起“打包”,最终用这一条命令实现邮件的发送。
[root@linuxprobe ~]# echo "Content" | mail -s "Subject" linuxprobe
[root@linuxprobe ~]# su - linuxprobe
Last login: Fri Jul 10 09:44:07 CST 2017 on :0
[linuxprobe@linuxprobe ~]$ mail
Heirloom Mail version 12.5 7/5/10. Type ? for help.
"/var/spool/mail/linuxprobe": 1 message 1 new
>N 1 root Sun Aug 30 17:33 18/578 "Subject"
如果读者是一名Linux新手,可能会觉得上面的命令组合已经十分复杂了,但是有过运维经验的读者又会感觉如隔靴挠痒般不过瘾,他们希望能将这样方便的命令写得更高级一些,功能更强大一些。比如通过重定向技术能够一次性地把多行信息打包输入或输出,让日常工作更有效率。为了大家对我们这本书的捧场,刘遄老师当然要义不容辞地把技术拱手奉上。
下面这条自造的命令就结合使用了mail邮件命令与输入重定向的分界符,其目的是让用户一直输入内容,直到用户输入了其自定义的分界符时,才结束输入。
[root@linuxprobe ~]# mail -s "Readme" root@linuxprobe.com << over
> I think linux is very practical
> I hope to learn more
> can you teach me ?
> over
[root@linuxprobe ~]#
当然,大家千万不要误以为管道命令符只能在一个命令组合中使用一次,我们完全可以这样使用:“命令A | 命令B | 命令C”。为了帮助读者进一步理解管道符的作用,刘遄老师在讲课时经常会把管道符描述成“任意门”。想必大家小时候都看过“哆啦A梦”动画片吧。哆啦A梦(也就是我们常称的机器猫)经常为了取悦大雄而从口袋中掏出一件件宝贝,其中好多次就用到了任意门这个道具。其实,管道符就好像是用于实现数据穿越的任意门,可以帮我们提高工作效率,完成之前不敢想象的复杂工作。
interlnk.exe 重新定向对于客户驱动器或打印接口的请求到另外的服务器驱动器或打印机.语法:config.sys 中加入:device=c:dosinter...
/c显示所有内存驻留程序的占用情况,分为conventional常规内存和uppermemory高端内存占用,并显示总的占用情况(常规 高端 保留 扩...
附:批处理命令与变量1:for命令及变量 基本格式:FOR /参数 %variable IN (set) DO command [command_parameters] %variable:指...
在使用 -d 参数时,容器启动后会进入后台。 某些时候需要进入容器进行操作,有很多种方法,包括使用 docker attach 命令或 nsent...
Docker 1.2.0 开始支持在运行中的容器里编辑 /etc/hosts, /etc/hostname 和 /etc/resolve.conf 文件。但是这些修改是临时的,只...
除了能力机制之外,还可以利用一些现有的安全机制来增强使用 Docker 的安全性,例如 TOMOYO, AppArmor, SELinux, GRSEC 等。Dock...
关键插件Pod的调度保证Kubernetes核心组件(如API服务器、调度器、控制器管理器)在控制平面节点上运行。但是插件必须在常规集群...
配置存活、就绪和启动探测器这篇文章介绍如何给容器配置活跃(Liveness)、就绪(Readiness)和启动(Startup)探测器。kubelet...