首页 » Web前端 » php管道函数技巧_Unix管道之美

php管道函数技巧_Unix管道之美

访客 2024-11-29 0

扫一扫用手机浏览

文章目录 [+]

UNIX系统引入了许多创新的程序和技能,但一贯以来遵照的也是行之有效的只有该软件哲学思想。
所有UNIX程序基本上都可以独立地完成噜苏的事情,而且长于和其他程序结合利用,成为通用且有用的工具。

本文中我们就来先容一个Unix下强大的,而且专门卖力程序之间协作的工具管道。

php管道函数技巧_Unix管道之美

概述

管道是Unix体系中进程间的主要通信机制之一。
管道的事理很大略:在内存中创建一个共享文件,通信的进程之间通过该共享文件来交流信息。
该共享文件就叫是管道。
管道由pipe函数创建,并且供应一个单向数据流。

php管道函数技巧_Unix管道之美
(图片来自网络侵删)

一个范例的shell命名行who|sort|lp

上面命令行中的|便是管道,利用管道我们把who的实行结果通报给了sort进行排序,然后再把排序的结果通报给lp打印出来。

管道实例统计访问日志中造孽访问最高的IP

Web网站的的访问日志常日能反响网站当前访问状态,比如大量404状态比例解释网站链接系统有问题问题指向了很多不存在的网站,或者还有一个可能便是网站被人考试测验渗透,有人可能利用扫描器对你网站做特色渗透(考试测验访问一些Url),这时候就须要我们能找出这些IP并对其进行封禁。

要找出这样的IP常用的一个命令是:

grep 404 access.log|awk '{print $1}'|sort|uniq -c|sort -nr|head -n 10

以上命令行中有5个管道把6个工具处理链接成了一个处理栈:

1 用grep搜索access.log文件中的404状态。

2 用awk打印搜索结果中(404状态的访问日志)的,第一列(默认用空格字符分割,第一列即访问IP)。

3 用sort对所有IP排序,这次sort是为了下一步的uniq打根本,由于uniq只会比较附近行,以是不预先排序的话,结果会有问题。

4 uniq -c 对重复项(IP)进行去重,并计数。

5 对uniq的结果进行排序-n表示用数字排序(即uniq -c后的重复计数值),-r表示逆序。

6 取排序结果的前10项目。

结果如上,个中访问最高的IP比较不正常。
我们在grep这个IP

grep 1.69.180.223 access.log

可见这便是一个扫描器,在不断地探测phpmyadmin呢,这个IP可以封掉,封禁也大略。

iptables -I INPUT -s 1.69.180.223 -j DROP

以上便是一个大略的利用管道和小工具进行日志剖析和恶意攻击创造和处理的过程,全体流程大略明了。

git仓库commit排行榜

我们再举个大略例子,对一个git托管的项目获取其提交的排序,根据提交者commit数来进行排序。
我们以Linux内核为例,我们先从gitee的linux内核仓库镜像克隆一个到本地

git clone git@gitee.com:mirrors/linux.git

git log用于显示提交日志。
--format=<format>选项用来对显示的信息进行筛选,本例中我们只需提交者,用--format='%an'会显示每次提交的姓名。

接着我们要对其去重统计次数,用上一例中我们说过的技巧,先sort,再uniq -c

git log --format='%an' | sort | uniq -c

故意思的是,内核中也有一些中文姓名提交者,这些人中有没有你或者你认识的?

然后根据统计的commit数排序,取前20个提交者: sort -nr | head -n 20

git log --format='%an' | sort | uniq -c |sort -nr | head -n 20

可以看到教主Linus是No.1的提交者,提交次数为30218,其次是David S. Miller,比拟gitee Web页面的commit统计

可能由于他的统计不是实时的有缓存,以是数量上有些差异。

调用github Api接口获取自己项目

Github中常见一个操作便是把fork当收藏,这样一来过一段韶光后,可能项目就很多无法管理了。
好在github供应了API接口,我们可以调用该接口获取干系信息,比如要获取某个用户的仓库列表,可以调用

api.github /users/用户名/repos

结果是一个json格式的数据,为理解析数据须要用到我们之前先容过的jq工具。

curl https://api.github.com/users/bollwarm/repos | jq '.[] | .full_name'

jq命令中的.[]表示对列表进行循环获取,.full_name表示获取json的全名:

jq利用管道从标准输入中读取数据,实际上所有这类API的操作都可以以类似形式处理。

总结

本文中我们先容了Unix哲学思想武装下的工具管道,并实例先容了其用法,现实中还有大量的用法。
抛砖引玉,希望大家善用这些小工具,来完美的办理自己的大问题。

标签:

相关文章

房山第一探寻历史文化名区的魅力与发展

房山区,位于北京市西南部,历史悠久,文化底蕴深厚。作为北京市的一个重要组成部分,房山区的发展始终与首都的发展紧密相连。房山区积极推...

Web前端 2025-02-18 阅读0 评论0

手机话费开钻代码数字时代的便捷生活

我们的生活越来越离不开手机。手机话费作为手机使用过程中的重要组成部分,其充值方式也在不断创新。手机话费开钻代码应运而生,为用户提供...

Web前端 2025-02-18 阅读0 评论0

探寻专业奥秘如何查询自己专业的代码

计算机科学已成为当今社会不可或缺的一部分。掌握一门专业代码对于个人发展具有重要意义。面对繁杂的学科体系,如何查询自己专业的代码成为...

Web前端 2025-02-18 阅读0 评论0