俗话说:"杀鸡用牛刀",如何选择合适的轮子亦是一门修行。在Python大行其道的今天,小到文本处理,大到网络传输,Python几乎无所不能,其灵活与强大有目共睹,但就某些需求来看,并不一定需要上升到使用Python进行编程解决。
在日常办公、自动化领域,Linux发行版已自带一众轮子,供系统本身及终端用户直接调用,相比Python等大型车床,使用此类系统工具存在诸多天然优势:
- 省去进行编译/构建过程1
- 系统自带或来自系统软件库,兼容性和稳定性有保障
- 体积小,使用底层语言实现,处理速度快,性能好
下面简要举几个例子
邮件处理
邮件协议三剑客:SMTP、POP3、IMAP
发送一封邮件「SMTP」
echo -e "Subject: Title\r\n\r\nContent" | msmtp -f <sender@xxx.com> -t <target@xxx.com>
收取邮件「POP3」
fetchmail -f <mailbox.conf>
更详细的配置和说明,可参考 免费邮箱:收发服务器动态公网地址
文本处理
生成由数字1-10组成、逗号分隔的字符串
seq -s ',' 1 10
查找关键字并列出所在行号
grep -n keyword filename
输出文本中的第2,4,5行
sed -n '2p;4p;5p' filename
输出csv表文件中的第2列「指定逗号为分隔符」
awk -F ',' '{print $2}'
逆向排序
sort -v filename
利用管道“|”将多个操作进行组合「关键字过滤 -> 排序 -> 提取每行的2-4列」
grep keyword filename | sort | awk '{print $2,$3,$4}'
网络传输
cURL作为瑞士军刀级传输工具,支持多种互联网传输协议,以常用的HTTP传输为例:
查询外网IP
curl ifconfig.me
VPS远程重启「SolusVM API」
curl https://solusvm.virmach.com/api/client/command.php?key=AKBJL-L1BZR-H6ZLF&hash=efb171f808dce327e2f9e517a909f415f86fa29e&action=reboot
DDNS映射更新「no-ip.com」
curl http://dynupdate.no-ip.com/ducupdate.php?requestL=dXNlcm5hbWU9aGVsbG9zc3BhaSU0MHNzcGFpLmNvbSZwYXNzPWhlbGxvd29ybGQmaFtdPXNzcGFpLmRkbnMuY29tJmlwPTE2OS4yNTQuMC4yCg==
一行代码重启路由器「详细过程」
curl http://192.169.1.1/userRpm/SysRebootRpm.htm?Reboot=%D6%D8%C6%F4%C2%B7%D3%C9%C6%F7
除收发邮件需要手动安装外,其它工具在各大GNU/Linux发行版已默认安装,直接输入指令即可;在macOS平台下,部分命令行软件需要借助Homebrew软件包管理器进行安装2后即可使用。
附Linux常用小轮子一览表
名称 | 用途 | 分类 |
---|---|---|
awk | 列处理 | 文本 |
base64 | base64编解码 | 编解码 |
cat | 显示/拼接文件内容 | 文本 |
curl | 综合传输工具 | 网络传输 |
echo | 格式化输出 | 文本 |
grep | 关键词过滤 | 文本 |
jq | JSON格式编解码 | 编解码 |
sed | 行处理 | 文本 |
seq | 生成序数 | 文本 |
sort | 排序 | 文本 |
tail | 显示最后N行 | 文本 |
uniq | 去重 | 文本 |
wc | 统计 | 文本 |
wget | 自动/批量下载工具 | 网络传输 |
以上工具的诞生离不开GNU项目及自由软件基金会的支持,感谢它们。