管道符|大家都很熟悉,我们每次需要执行多重筛选命令的时候,总会用到|来传递上个命令的执行结果。当我开始探索管道符到底是什么,还是从一次内存崩溃谈起
在一天下午,我的一位师哥找到我,问我一个问题。
grep “xxx” file |less 和 less file|grep “xxx”有区别吗?
我当时内心很吃惊,后来我了解到原来师哥用less命令看日志把服务器搞崩溃了,当时执行的命令是less file|grep “xxx”,我当时理解是管道符把日志全堵在内存里面了,导致内存爆满服务器宕机。后来看到了《介绍 Linux 中的管道和命名管道》,文章中提到
只要系统启动并运行或直到它被删除,命名管道就可以持续使用。它是一个遵循 FIFO(先进先出)机制的特殊文件。它可以像普通文件一样使用。也就是,你可以写入,从中读取,然后打开或关闭它。
我个人理解是“|”是一种在内存中的文件,体现了linux一切皆文件的哲学思想。正常运行状态是使用less的时候,先把日志写入到管道符内,然后执行grep进行过滤,但是写入管道符的时候,内存不够了,于是导致了内存爆满服务器宕机,所以我们一般是先grep过滤然后写入管道符,这样内存就可以装下我们想要的日志了,不会爆内存。
文章评论