zenith-docs 1.0.0 Help

重定向和管道

这一篇文档,我们来描述以下重定向和管道的作用以及使用。

重定向

当我需要将系统中的用户名从 /etc/passwd 文件中提取出来,并输出到另一个指定的文件的时候,就需要使用到 重定向输出 了。

awk -F: '{print $1 home at $6}' /etc/passwd > user.txt cat user.txt ## 输出如下: root/root daemon/usr/sbin bin/bin ......省略

我们通过 > 重定向符号将命令执行后的输出内容由屏幕重定向输出到一个名为 user.txt 的文件中。如果 user.txt 文件中原本就存在内容,将覆盖。 如果不希望原有内容被覆盖,可以使用 >> 符号,将在原有文件的内容之后追加新的内容。

既然有重定向输出,就会有重定向输入。前者使用的是 > 符号,后者使用的是 < 符号。非常好记忆,两个不同方向的箭头就代表了输入输出数据的流向。

还是以用户来举例,我们希望统计系统中一共有多少个用户,即统计 /etc/passwd 文件的行数即可,使用 wc -l 命令如下:

wc -l < /etc/passwd ## 输出: 46 注意:不同的实验环境输出的数字是不同的

然后,还有一种比较特殊的重定向输入,称之为内联输入重定向 。比如,当我们需要在某个配置文件中追加多行文本的时候,就需要使用他:

## 执行下面这条命令之后,将在屏幕上输出指定的多行文本 cat <<EOF <?php $name = 'Tom'; echo 'Hello, ' . $name . PHP_EOL; EOF

管道

我们的生活离不开水,而在城市中,水是由自来水厂通过管道输出到寻常百姓家的。这个中间,管道其实是千千万万的短的管道组合而成的。水川流其中,有管道的 一头输出到管道的另一头,直到我们的家中。

而自来水的管道和计算机中的管道,在概念上是一样的。在 Shell 中,我们 所谓的管道就是上一条命令的输出的内容作为下一条命令的输入内容。 这样一来,我们就可以使用管道来连接很多的命令了。

awk -F: '{print $1}' /etc/passwd | grep avahi | sort

在上面的截图中,我们使用 | 管道符来连接了三条命令,分别是 awkgrep 以及 sort 。实现了对文本文件的循环截取、过滤以及排序。

  • awk -F: '{print $1} /etc/passwd 对系统中所有的用户进行遍历,并取出其用户名。

  • grep avahi 对用户名中包含 “avahi” 字符串的用户名进行过滤。

  • 然后使用 sort 命令 grep avahi 命令的输出内容进行排序

使用管道能够简化命令的编写,使得脚本更加的简洁。还有另外一种用法,比如某一个文本内容非常的多,我可以使用管道,对文本文件分页阅读。

cat large.log | less
Last modified: 04 August 2024