有哪些命令行的软件堪称神器

本文非原创,原文出处int32bit.

ag

比grep、ack更快地递归搜索文件内容。

ag

tig

字符模式下交互查看git项目。

tig

mycli

mysql客户端,支持语法高亮和命令补全,效果类似ipython,可以替代mysql命令,效果如图:

mycli demo

jq

json文件格式化处理以及高亮显示,可以替换python -m json.tool, 比如有以下json数据:

{"migration_status": null, "attachments": [{"server_id": "80380c28-c765-448a-aa9a-c9bd5b10d64c", "attachment_id": "ba0d25c9-1066-4c49-9f05-3096d2596a44", "attached_at": "2017-03-28T02:56:24.000000", "host_name": null, "volume_id": "8cbea52c-be0d-4bf1-86f8-890b538d0771", "device": "/dev/vdb", "id": "8cbea52c-be0d-4bf1-86f8-890b538d0771"}], "links": [{"href": "http://192.168.0.156:8776/v2/abca38105b4345acbaad30d7fbf59e7d/volumes/8cbea52c-be0d-4bf1-86f8-890b538d0771", "rel": "self"}, {"href": "http://192.168.0.156:8776/abca38105b4345acbaad30d7fbf59e7d/volumes/8cbea52c-be0d-4bf1-86f8-890b538d0771", "rel": "bookmark"}], "availability_zone": "nova", "os-vol-host-attr:host": "cinder@ssd-ceph#ssd-ceph", "encrypted": false, "updated_at": "2017-03-28T02:56:24.000000", "replication_status": "disabled", "snapshot_id": null, "id": "8cbea52c-be0d-4bf1-86f8-890b538d0771", "size": 100, "user_id": "33ec3ec44f5440bca7760771b1f20ea6", "os-vol-tenant-attr:tenant_id": "abca38105b4345acbaad30d7fbf59e7d", "os-vol-mig-status-attr:migstat": null, "metadata": {"readonly": "False", "attached_mode": "rw"}, "status": "in-use", "volume_image_metadata": {}, "description": null, "multiattach": false, "source_volid": null, "consistencygroup_id": null, "os-vol-mig-status-attr:name_id": null, "name": "swift-1", "bootable": "false", "created_at": "2017-03-28T02:43:57.000000", "volume_type": null}

使用jq格式化输出如图:

jq demo

使用jq还可以应用各种filter,从而只输出我们感兴趣的字段:

jq filter

shellcheck

shell脚本静态检查工具,能够识别语法错误以及不规范的写法。

比如有以下shell脚本test.sh:

#!/bin/bash
a=1
b=2
for i in $@; do
    echo $i
done
echo $a

使用shellcheck检查结果如下:

shellcheck

yapf

Google开发的python代码格式规范化工具,支持pep8以及Google代码风格。

yapf -i --style pep8 --recursive src/

mosh

可以替代ssh,连接更稳定,即使IP变了,也能自动重连。

fzf

命令行下模糊搜索工具,能够交互式智能搜索并选取文件或者内容。

fzf

fzf

该命令还有一个最经典的应用是历史命令搜索,按下CTRL-R,结果如下:

fzf history search

PathPicker(fpp)

在命令行输出中自动识别目录和文件,交互式选择后使用EDTOR打开.

git diff HEAD~8 --stat

输出如下:

git-diff

git diff HEAD~8 --stat | fpp

可以光标选择文件打开或者执行命令:

fpp-demo

绿色显示的表示我们选中的文件,此时输入enter键将调用编辑器打开选中的文件,也可以按c进入命令模式,可以输入执行的命令,选中的文件将作为命令的输入文件。

pandoc

Markdown,HTML,PDF,LaTEX等文档格式之间的命令行转换工具。

支持PDF转化需要依赖pdflatex:

brew cask install mactex

README.md转化为PDF格式:

pandoc -f markdown_github -t latex -o README.pdf README.md

htop

可以代替top命令,提供更美观、更方便的进程监控工具。

htop

axel

多线程下载工具,下载大文件时可以替代curl、wget。

axel -n 20 http://centos.ustc.edu.cn/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso

axel

yum、gentoo partage等包管理工具能配置axel为下载工具替代curl。

CentOS系统需要安装yum-axelget插件,安装和配置过程如下:

yum install axel yum-plugin-fastestmirror yum-axelget

修改/etc/yum/pluginconf.d/axelget.conf配置文件,根据需求调整maxconn值。

Homebrew从2013年开始提出使用axel作为下载工具,但目前好像尚未实现,参考#19802

sz/rz

ssh登录到服务器后经常需要传输文件, 通常我们会使用scp/rsync工具,或者使用ftp/nc等命令,临时解决办法还可以使用python -m SimpleHTTPServer或者python3 -m http.server开启HTTP服务器使用浏览器下载。

sz/rz能够提供更简单的交互式接口快速地和本地主机进行文件传输,也就是上传和下载文件到服务器和本地。

运行:

sz  a.txt b.txt c.txt

会立即弹出本地文件管理窗口选择保存位置,不需要输入密码。

同样地,运行:

rz

会弹出本地文件管理工具,选择需要传输的文件,能够快速传输到当前服务器工作目录下。

注意:

  • sz/rz目前不支持tmux(加上-e参数也无效), 因此不能在tmux session下执行rz/sz,否则会hang住。
  • Windows下使用xshell登录服务器,只需要在远程服务器安装lrzsz包即可,不需要在本地windows做任何配置。
  • 在Mac下,本地和远程服务器都需要安装lrzsz包,并且iterm2需要配置,参考ZModem integration for iTerm 2

cloc

cloc是代码统计工具,能够统计代码的空行数、注释行、编程语言等,如图:

cloc

you-get

从网页中自动捕捉视频、音频、图片并下载到本地,支持youtube、google+、优酷、芒果TV、腾讯视频、秒拍等。

$ you-get 'https://www.youtube.com/watch?v=jNQXAC9IVRw'
site:                YouTube
title:               Me at the zoo
stream:
    - itag:          43
      container:     webm
      quality:       medium
      size:          0.5 MiB (564215 bytes)
    # download-with: you-get --itag=43 [URL]

Downloading zoo.webm ...
100.0% (  0.5/0.5  MB) ├████████████████████████████████████████┤[1/1]    7 MB/s

Saving Me at the zoo.en.srt ...Done.