Shell 命令组合集[2019.04.05更新]

本文档收集了常用的 Shell 命令组合,依然在不定期更新中…

终端命令

日志

统计独立 IP 数量

1
awk '{print $1}' access.log | sort -n | uniq | wc -l

查看某一时间段的 IP 访问量

1
grep "05/Apr/2019:0[1-9]" access.log | awk '{print $1}' | sort | uniq -c| sort -nr | wc -l

查看访问最频繁的前 100 个 IP

1
awk '{print $1}' access.log | sort -n | uniq -c | sort -rn | head -n 100

PHP 算法 —— 快速排序

算法原理

下列动图来自@五分钟学算法,演示了快速排序算法的原理和步骤。

quick

步骤:

  • 从数组中选个基准值
  • 将数组中大于基准值的放同一边、小于基准值的放另一边,基准值位于中间位置
  • 递归的对分列两边的数组再排序

Go 包依赖管理工具 —— govendor

govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具。与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本、以及无相互侵入的开发和管理。

vendor 特性

最开始的时候,Go 并没有提供较为妥当的包管理工具。从 1.5 版本开始提供了 vendor 特性,但需要手动设置环境变量 GO15VENDOREXPERIMENT=1

在执行 go buildgo run 命令时,会按照以下顺序去查找包:

  • 当前包下的 vendor 目录
  • 向上级目录查找,直到找到 src 下的 vendor 目录
  • 在 GOROOT 目录下查找
  • 在 GOPATH 下面查找依赖包

在发布 1.6 版本时,该环境变量的值已经默认设置为 1 了,该值可以使用 go env 命令查看。

在发布 1.7 版本时,已去掉该环境变量,默认开启 vendor 特性。

搞懂 macOS 上的主机名/hostname/ComputerName

主机名/hostname/ComputerName 的含义

主机名、hostname 是一个东西,中英文而已,指的是你本地网络上的电脑可以通过主机名访问你的电脑。这个与 Linux 系统是一致的。

ComputerName,这个是 macOS 才有的东西。跟 Windows 上一样,表示的是电脑名称,给人看的。

可以从下图中看出来(系统偏好设置 > 共享):

-w668

对于 macOS 来说,它会按以下的顺序来确定主机名,直到获取到为止:

  • 从以下文件中读取:/etc/hostconfig
  • 从以下系统配置项读取:/Library/Preferences/SystemConfiguration/preferences.plist 中的 System ▸ System ▸ HostName
  • 由本机 IP 地址的反向 DNS 查询获取
  • 从以下系统配置项读取:/Library/Preferences/SystemConfiguration/preferences.plist 中的 System ▸ Network ▸ HostNames ▸ LocalHostName
  • 如果以上方法都没获取到,就为默认的 localhost

一键解决 go get golang.org/x 包失败

问题描述

当我们使用 go getgo installgo mod 等命令时,会自动下载相应的包或依赖包。但由于众所周知的原因,类似于 golang.org/x/... 的包会出现下载失败的情况。如下所示:

1
2
3
$ go get -u golang.org/x/sys

go get golang.org/x/sys: unrecognized import path "golang.org/x/sys" (https fetch: Get https://golang.org/x/sys?go-get=1: dial tcp 216.239.37.1:443: i/o timeout)

曾国藩语录

本文收集了曾文正公的经典语录,予己每日三省

曾国藩(1811年11月26日-1872年3月12日),初名子城,字伯涵,号涤生,宗圣曾子七十世孙。中国近代政治家、战略家、理学家、文学家,湘军的创立者和统帅。

在曾国藩的倡议下,建造了中国第一艘轮船,建立了第一所兵工学堂,印刷翻译了第一批西方书籍,安排了第一批赴美留学生。可以说曾国藩是中国近代化建设的开拓者。

曾国藩与胡林翼并称“曾胡”,与李鸿章、左宗棠、张之洞并称“晚清中兴四大名臣”。官至两江总督、直隶总督、武英殿大学士,封一等毅勇侯,谥号“文正”,后世称“曾文正”。有人推崇他为千古第一完人,但因忠于清室镇压太平天国暴乱又饱受争议。

  • 将来不迎,当下不杂,过往不念

  • 倚天照海花无数,流水高山心自知

  • 利可共而不可独,谋可寡而不可众;独利则败,众谋则泄

  • 久利之事勿为,中争之地无望

  • 惟正己可以化人,唯尽己可以服人

PHP 算法 —— 归并排序

算法原理

下列动图来自@五分钟学算法,演示了归并算法的原理和步骤。

merge

原理:

利用递归,先拆分、后合并、再排序。

步骤:

  • 均分数列为两个子数列
  • 递归重复上一步骤,直到子数列只有一个元素
  • 父数列合并两个子数列并排序,递归返回数列

lsyncd —— 多机器实时同步文件神器

lsyncd 是一个支持实时、双向、多机器的多模式文件同步工具。

使用 Lua 语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过 rsync 去差异同步,达到实时的效果。

安装

在源文件服务器上安装:

1
yum -y install lsyncd

更改 Linux 系统的用户名和主机名

可能系统安装时的默认用户名我们不喜欢,但已经在该用户上已经配置了很多东西,所以我们只能修改用户名、而非新建一个。

修改主机名

假设此处我们要修改的新主机名为 hello

  • 修改 hostname 文件

    1
    
    sudo vim /etc/hostname

    将内容改为 hello/etc/hostname 文件修改了需要重启才会生效。

  • 用 hostname 修改当前会话的主机名

    1
    
    hostname hello
  • 修改 hosts 文件

    1
    
    sudo vim /etc/hosts

    将内容修改为类似如下:

    1
    2
    
    127.0.0.1 localhost
    127.0.0.1 hello