linux/unix 上那些炫酷的命令行工具(一)

495 阅读7分钟

工欲善其事,必先利其器,作为一名手艺人, 我们应该利用好工具,以便将我们的时间用在更有效率的事情上,类 Linux 上很多原生的如 catgrep 等命令给我们带来了很多便利,但其实都或多或少有可以改进的地方,市面上其实出现了大量的第三方开发者开发的对这些原生做了很大改进的命令,比原生的命令更好用,今天就给大家推荐这些命令,大部分可以说是秒杀原生命令了,能让你事半功倍,强烈推荐

如何执行原生的命令

个人觉得即将介绍的命令很好用,完全可以替代原生命令,也设置了大量的 alias 语句来替代原生命令,不过每个人的习惯不一样,如果你觉得即将介绍的命令用得不习惯 ,想用回原生的命令也可以,按类似以下的操作即可

\cat # 忽略所有 alias 为 cat 的命令 - explanation: https://stackoverflow.com/a/16506263/22617
#
command cat # 忽略所有函数和 aliases

废话不说,让我们看看哪此命令足以替代原生命令吧

bat > cat

原生的 cat 命令只是简单地打印某个文件的内容,但 bat 命令在此基础上还可以做到以下功能

  • 自动识别文件扩展名并进行高亮显示
  • 显示行号
  • 文件内容过长时自动分页
  • 如果文件内容过长,还可以用 / 来搜索相关的内容 功能演示如下
    image

推荐用 alias 命令将 cat 设置成 bat

alias cat='bat'

💾 点击这里可安装 bat

fzf > ctrl+r

什么是 fzf 呢

It's an interactive Unix filter for command-line that can be used with any list; files, command history, processes, hostnames, bookmarks, git commits, etc.

它是一款使用 GO 语言编写的交互式的 Unix 命令行工具。可以用来查找任何列表内容、文件、历史命令、 本机绑定的host、 进程、 Git 分支、进程等。所有的命令行工具可以生成列表输出的都可以再通过管道 pipe 到 fzf 上进行搜索和查找

我们简单介绍一下它的查找历史命令的功能,查看历史输入的终端命令我们一般用 ctrl+r,在这方面,fzf 可以说是秒杀 ctrl+r 了,ctrl+r 只能呼出最近一条包含输入字符串的历史命令,而且只能做精确匹配,而安装了 fzf 后,当呼出 ctrl+r 会显示所有包含输入字符串的命令(默认匹配最近一条符合搜索条件的命令),按上下箭头即可自由选择你想要的命令,而且支持模糊搜索,这个特性针对那些常常只是隐约记得历史命令的人特别有用,比如如果我隐约记得有个命令和 gitfinance 有关,我可以这么搜

image
当然如果你不需要模糊搜索也可以关掉

fzf 的功能远不止于此,与其他命令结合让你的效率飞速提升,自动补全功能完全秒杀默认的 tab 功能,再安装一个具有预览功能的 highlight 插件,好用到爆炸,不信看以下功能展示

image

💾 点击这里可安装 fzf

htop > top

top 命令可以说是查看进程与系统运行的利器了,不过 htop 不仅具备 top 的所有功能,还有一些 top 不具备但很实用的功能,简单列举几个

  • 显示每个 CPU 的负载情况,如果 CPU 是四核八线程的,会显示每个线程的负载情况,而且不同的指标用颜色区分开来,更直观,对用户更友好

    image

  • 交互式

    1. 可以左右滑动显示此进程的所有信息与对应的 COMMAND,也可以上下滑动显示所有的进程信息,而 top 只能最消耗资源的进程列表
    2. 可以以树状图的方式查看进程对应的多个子线程或进程占用的文件
      image
    3. 方便追踪进程的运行情况,如果我们要观察某个进程的运行情况,使用 top 没法定位某个进程,进程在屏幕上的显示会忽上忽下,每次 top 刷新我们都必须去用肉眼追踪我们正在观察的进程,很不方便(所有进程的颜色都一样),而用 htop 就简单了,我们可以按下空格键标记我们想要的进程,被标记的进程会高亮展示,同时按 F 可以保证被标记的进程出现在屏幕里
    4. 用 htop 可以直接给多个进程发信号,这样能很方便地实现像 kill 进程之类的操作,一般我们要 kill 掉某个进程要经过两个步骤: 1、输入 top 获得我们想要 kill 线程的 pid. 2、退出 top 输入 kill PID,由于 top 命令不能执行搜索功能,光是找 PID 这一步就够呛, 而用 htop 可以很轻易地做到,输入 htop 后,按 F3 输入进程名称进行查找,然后换空格选中此进程(也可以选中多个进程),再换 F9 选中左边的 SIGKILL 即可将选中的进程 kill 掉,以 kill 掉 htop 进程为例,操作如下
      image
      可以看到效率上比 top 不知高了多少倍

我们可以设置 top 的 alias 以便利用 htop 的强大功能

alias top="sudo htop" # alias top and fix high sierra bug

💾 点击这里可安装 htop

diff-so-fancy > diff

默认的 git diff 显示不太友好,也不支持定制配色方案,而且仅能支持行级别的 diff, diff-so-fancy 默认的配色方案不仅是 human readable,而且支持字符级别的 diff,所以推荐 git diffdiff-so-fancy,默认的 diff 和 diff-so-fancy 对比如下

image
💾 点击这里可安装配置 diff-so-fancy

fd > find

默认的 find 命令不太好用,查找命令比较复杂冗余,考虑以下三种情形

  1. 查找所有扩展名为 md 的后缀
  2. 查找所有文件名包含 cli 的文件
  3. 查找所有包含 cli 的文件中的单词数 我们来看下分别用 find 和 fd 的对比
// use find
find . -type f -name "*.md"
find . -name '*cli*'
find ./ -type f -name "*php*" -exec wc -w {} +

// use fd
fd -e md 
fd md # all with .md extension
fd cli -x wc -w 

可以看到,用 fd 命令极简,更关键的是在文件多的情况下 fd 还有另一大优势:性能!fd 的搜索效率可以达到 find 的 20 倍以上 💾 点击这里可安装配置 fd

##ncdu > du ncdu 可以理解为是交互式的 du。我们一般用 du 来查找某个目录占用了多少磁盘空间,但如果我们需要查看这个目录下的子目录/文件占用了多少空间并对其进行排序 du 就无能为力了,而用 ncdu 的话我们只要在目录输入此命令即可显示按空间大小降序排序的所有文件/目录

而且比较方便的一点是 ncdu 是交互式的,如果我们还想看子目录里的文件/目录大小,只需要按上下箭头选中相关目录按回车即可查看子目录详情的空间占用情况,速度极快!另外也可删除文件,可以在选中子目录时执行相当于 cd 到此子目录的命令(此时会退出ncdu, 并 cd 到此子目录)。还有一个比较骚的功能是点击 cmd + 选中的目录/文件可以打开当前目录/文件 我们可以为 du 设置 ncdu 的 alias,配上主题优雅很多

// --color 设置主题,--rr 只读模式,防止执行 ncdu 时删除文件以及 cd 到某个子目录 
alias du="ncdu --color dark -rr -x --exclude .git --exclude node_modules"

效果如下

image
💾 点击这里可安装配置 ncdu

原文链接点击这里

个人公众号: 码农蜕变之路,定期分享各种 IT 技能,期待与大家交流

image