Skip to content

学习Linux命令行工具不仅仅是操作技能的提升,更是解锁“系统魔法”的钥匙!很多时候,它们是你和系统沟通的唯一语言。掌握它们,你会发现自己像黑客电影里的高手一样,可以在屏幕上“指点江山”。所以,学习Linux命令行工具不仅是技能,更是一场奇妙的冒险。掌握它,你会变得高效、自信,而且始终“掌控全局”!

个人推荐

前置:安装X-CMD

安装

官方地址:X-CMD | 开源轻量级 POSIX 脚本,用于管理工具 (670+) 和提供经典命令扩展

采用 curl 安装

shell
eval "$(curl https://get.x-cmd.com)"

采用 wget 安装

shell
eval "$(wget -O- https://get.x-cmd.com)"
image-20241110205427518

x cowsay

先写个“Hello, world!”

shell
x cowsay "What can I say!"
image-20241113114620284

磁盘使用监控

x df

以 TUI 的方式查看文件系统和磁盘空间使用情况

shell
x df
image-20241110215525365

x duf

df 命令的现代化替代品, 用于查看磁盘空间使用情况和磁盘文件系统信息

shell
x duf
image-20241114111613653

x dua

交互式查看磁盘空间的使用情况

shell
x dua
image-20241114104029596
shell
x dua i
image-20241114104125558

网络相关

x ping

比默认的ping更美观,且过程可视化

shell
x ping -b www.baidu.com
image-20241110212020536

x gping

基于 Rust 编写的开源工具,是增加了图表功能的 ping 工具

安装

shell
x env use gping

使用,可以同时ping多个

shell
gping www.baidu.com www.bilibli.com
image-20241114114234515

x ip

替代ifconfig,查询 ip 地址

shell
x ip

性能监控

x top

使用 htop 来查看进程的实时信息

shell
x top
image-20241110212717560

x htop

使用 htop 来查看进程的实时信息

shell
x htop
image-20241110212559077

x btop

使用 htop 来查看进程的实时信息

shell
x btop
image-20241110215350980

x btm

基于 Rust 开发的命令行工具,用于终端的可定制跨平台图形进程/系统监视器。

shell
x btm
image-20241114103723628
shell
x btm --basic
image-20241114103808253

x gotop

使用 GO 语言开发,下载二进制文件即可运行,无需安装其他依赖

shell
x gotop
image-20241114111951520
shell
x gotop --color vice

image-20241114112046618

系统功能增强

x cd

cd更高级的cd,具有更丰富的交互性

shell
x cd
image-20241110213113334

lsd

查看当前目录下的文件,比ls的功能更丰富

查看文件:效果与ls一样,默认按文件名排列

shell
lsd
image-20241110205510288

树形查看文件--depth 1:查看深度为1的文件

shell
lsd --tree --depth 1 -S
image-20241110205558823

组合命令-S:按文件大小排列(默认按文件名排列)

-1:每行列出一个文件

-a:查看隐藏文件

shell
lsd --tree --depth 1 -S -1 -a
image-20241110205847076

添加alias别名:在环境配置文件中添加alias别名

shell
alias ll='lsd --tree --depth 1 -1'
## alias ll='ls -la'

##x exa

安装

shell
x exa

组合命令:

列出所有非隐藏文件

shell
x exa ./ --tree --level=1 --long --icons -x -s name
image-20241114113412854

列出所有文件夹

shell
x exa ./ --tree --level=1 --icons -x -s name -a -D
image-20241114113730423

元选项:

  • -?, --help 显示命令行选项列表
  • -v, --version 显示 exa 的版本信息

显示选项:

  • -1, --oneline 每行显示一个条目
  • -l, --long 显示文件的扩展元数据
  • -G, --grid 将条目显示为网格(默认)
  • -x, --across 按行排序网格,而不是按列
  • -R, --recurse 递归进入目录
  • -T, --tree 以树形结构递归进入目录
  • -F, --classify 在文件名后显示类型指示符
  • --colo[u]r=WHEN 使用终端颜色的时间(总是、自动、从不)
  • --colo[u]r-scale 根据文件大小级别突出显示
  • --icons 显示图标
  • --no-icons 不显示图标(总是覆盖 --icons

过滤和排序选项:

  • -a, --all 显示隐藏文件和点文件
  • -d, --list-dirs 列出目录作为文件;不列出它们的内容
  • -D, --only-dirs 只列出目录
  • -L, --level DEPTH 限制递归深度
  • -r, --reverse 反转排序顺序
  • -s, --sort SORT_FIELD 排序字段,(choices: name, Name, size, extension, Extension, modified, changed, accessed, created, inode, type, none)
  • --group-directories-first 在其他文件之前列出目录
  • -I, --ignore-glob GLOBS 忽略文件的通配符模式(管道分隔)
  • --git-ignore 忽略 .gitignore 中提到的文件
  • 有效的排序字段 包括:名称、扩展名、大小、类型、修改时间、访问时间、创建时间、inode 和无。日期、时间和旧、新都指代修改时间。

长视图选项:

  • -b, --binary 使用二进制前缀列出文件大小
  • -B, --bytes 以字节为单位列出文件大小,不带任何前缀
  • -g, --group 列出每个文件的组
  • -h, --header 为每列添加表头行
  • -H, --links 列出每个文件的硬链接数
  • -i, --inode 列出每个文件的inode号
  • -m, --modified 使用修改时间戳字段
  • -n, --numeric 列出数字用户和组ID
  • -S, --blocks 显示文件系统块的数量
  • -t, --time FIELD 要列出的时间戳字段(修改、访问、创建)
  • -u, --accessed 使用访问时间戳字段
  • -U, --created 使用创建时间戳字段
  • --changed 使用更改时间戳字段
  • --time-style 时间戳格式化方式(默认、ISO、长ISO、完整ISO)
  • --no-permissions 抑制权限字段
  • --octal-permissions 以八进制格式列出每个文件的权限
  • --no-filesize 抑制文件大小字段
  • --no-user 抑制用户字段
  • --no-time 抑制时间字段
  • --git 如果文件被跟踪或忽略,则列出其Git状态
  • -@, --extended 列出每个文件的扩展属性及其大小

x ll

一个可交互性的命令行文件管理器

shell
x ll
image-20241110213317862

x cat

查看文件内容,很好地解决了cat的痛点

shell
x cat
image-20241110215414267

x ascii

将 x-cmd 字符串转为 ASCII 艺术字

shell
x ascii cfont HuangZexiao -g red,magenta -a center -s
image-20241111183410086

趣味功能

x hua

查看古文诗词

shell
x hua

查看《唐诗三百》

shell
x hua ts
image-20241111183732418

x wttr

展示中山市天气的信息

shell
x wttr zhongshan

显示当前位置的天气和今日的天气预报

shell
x wttr ?1
image-20241111183934477

genact

安装genact

shell
x env use genact

生成伪随机的系统活动:

shell
genact

查看 genact 可用的活动模块

shell
genact -l

ansible bootlog botnet bruteforce cargo cc composer cryptomining docker_build docker_image_rm download julia kernel_compile memdump mkinitcpio rkhunter simcity terraform weblog

指定要模仿破解密码的活动:

shell
genact -m bruteforce

设置 5 倍速并在 2 分钟后退出模拟活动:

shell
genact -s 5 --exit-after-time 2min

组合命令:

shell
genact -m docker_build -s 5 --exit-after-time 1h20min30s
image-20241113110756115

系统信息查看工具

系统信息查看工具可以用于获取和显示系统硬件、软件和环境信息(如内核版本、内存使用情况、处理器负载等),通过这些工具可以在主流操作系统的运行中获取系统信息。

x uname

相比自带的uname能看到更多信息,能通过终端命令查看电脑以及操作系统的相关信息

shell
x uname
image-20241110213518080

macchina

  1. 最小化:相比于 neofetchfastfetchmacchina 更加简单,更适合小型设备或资源受限的环境。
  2. 可定制化:提供主题系统,主题配置文件与主要配置文件是分开的,用户可以创建一堆主题并随时在它们之间切换。

安装

shell
eval "$(curl https://get.x-cmd.com)"        ## 安装 x-cmd
x env use macchina                          ## 使用 x-cmd 安装 macchina

使用

  1. 获取和显示系统信息:

    shell
    macchina
    macchina -o machine
    macchina -o machine -o terminal -o shell
  2. 定制 macchina:

    • 存放配置文件的目录:

      • Linux 和 BSD:~/.config/macchina/$XDG_CONFIG_HOME/macchina/
      • macOS:$HOME/.config/macchina/
      • Windows:%AppData%/macchina/
    • macchina.toml:macchina 的配置文件,用于调整 macchina 需要显示或隐藏的内容以及使用的主题。

    • 主题配置文件:用配置 macchina 显示信息的外观,文件格式请参考官方文档

    • 示例 - 自定义主题:

      shell
      x touch "$HOME/.config/macchina/themes/"
      printf "%s

" \n 'hide_ascii = true' \n '[box]' \n 'border = "plain"' \n 'visible = true' > "$HOME/.config/macchina/themes/x.toml" macchina -l macchina -t x ```

image-20241103234124163

neofetch

兼容性好,neofetch 基于bash,所以不需要编译,同时兼容性也好:

举个例子,main函数内部的cache_uname方法,就会使用 Linux 和 macOS 都有的命令:uname -srm

安装

shell
## macOS
brew install neofetch
## Linux Debian/Ubuntu
sudo apt install neofetch
## Linux CentOS
sudo yum install neofetch

安装完成,我们看看 Neofetch 的版本:

shell
neofetch --version

输出系统信息:

shell
neofetch
image-20241103234143567

扩展

如果细看 Neofetch 的脚本,会发现还有很多可选项,这些在 Neofetch 的 wiki 内也有记录:

接下来我们看看可选项有那些?

扩展使用

根据官方的 wiki,Neofetch 在安装后,会自动生成默认配置文件,配置文件的存放地址在:${HOME}/.config/neofetch/config.conf内。里面其实就是默认的输出内容定义:

复制

bash
cat ${HOME}/.config/neofetch/config.conf
neofetch默认配置

neofetch默认配置

可以看到,默认情况下打印的内容,就在配置文件内的 print_info 所定义。如果我们需要修改呢,有两种方法:

  • 直接使用vim等文本编辑器修改这个文件即可。
  • 在运行neofetch的时候,使用参数开启即可。

举个例子,默认情况,只显示内存,并没有显示内存使用的百分比;但是实际上在config.conf文件内是可以开启的,比如:

bash
## 直接输出
neofetch --memory_percent on

或者直接修改配置文件

修改配置文件

修改配置文件,最后的结果:

显示内存比

显示内存比

项目归档

Neofetch完全基于bash,使其兼容性很不错;即使你的Debian从8已经到12,但是 Neofetch 版本一直没有更新,那么 Neofetch 的使用,也不会出现什么问题。

这也是为什么,Neofetch在归档前,已经三年没有更新,但使用起来也没有任何问题。可以预想到,未来很长一段时间也不会有任何问题。那些基础的命令free -muname -s等等,都是不会改变的。

但是,为什么 Neofetch 停止维护了呢? 或者说是项目归档了呢?

为什么停止维护呢?

为什么停止维护呢?

其实,根据 reddit 上的两篇文章,可能可以略知一二:

大概就是作者换行了(回家开农场了,不过不清楚是否真的回去开农场?),项目维护者经常面临着巨大的工作量,包括但不限于代码更新、设备兼容考虑、错误修复、功能请求处理以及社区管理等等繁琐事物,加上作者自己从事的软件工作;作者在技术工作中感到厌倦和疲惫。而且即使从事的是技术,也需要考虑政治和不同人的立场,也需要站队。

综合上述的内容,他现在更倾向于追求他认为更简单、压力更小、更纯粹的生活方式。

自然而然地,项目就放弃维护了。

说实话,有点可惜;不过也确实为作者感到高兴,他找到了更好的生活。虽然不知道他是否真的是回去开设农场,但是应该是一个不错的新生活。

回到NeoFetch,其实也有很多继任者:

接任者都是非常好用的项目;不过受限于篇幅,接下来,我们就取其中的 Fastfetch 来一起看看。

fastfetch

  1. 可替代性:通常情况下,可以把 FastFetch 当作 NeoFetch 使用。安装方式也是一样,FastFetch 已经在各个平台的软件包管理器发布。

  2. 可扩展性:相比于 NeoFetch 全部基于bash的 shell 脚本,而 FastFetch 是基于C的。

安装

shell
## macOS
brew install fastfetch
## Linux Debian/Ubuntu (Debian 13 or newer)
sudo apt install fastfetch
## Linux CentOS
sudo yum install fastfetch

安装完成,我们看看 fastfetch的版本:

shell
fastfetch --version

输出系统信息:

shell
neofetch
image-20241103234731900

Docker增强

x docker

可以直接用 xdx docker 来增强 docker,具体效果如下:

image-20241110213952852

lazydocker

用 Go 语言开发的 Docker 和 docker-compose 的 Terminal UI 管理工具。它提供 docker 的终端图形界面,支持鼠标操作和键盘快捷键,能实时监控 docker 容器,并能简化一些常见的 dockcer 管理任务,如查看容器的状态、管理镜像和容器。

安装并启动 lazydocker:

shell
eval "$(curl https://get.x-cmd.com)"        # 安装 x-cmd
x env use lazydocker                        # 使用 x-cmd 安装 lazydocker
lazydocker                                  # 启动 lazydocker UI

配置 lazydocker

查看 lazydocker 当前使用的自然语言

shell
lazydocker --config | grep "lang"

修改 lazygit 配置文件,如将语言设置为中文

  • OSX: ~/Library/Application Support/jesseduffield/lazydocker/config.yml
  • Linux: ~/.config/lazydocker/config.yml
  • Windows: C:\\Users\\<User>\\AppData\\Roaming\\jesseduffield\\lazydocker\\config.yml (I think)

以Linux为例:

shell
mkdir -p "$HOME/.config/lazydocker"
shell
printf "gui:language: zh " > "$HOME/.config/lazydocker/config.yml"

常用快捷键:

  • x:打开当前功能区的菜单栏;(有啥不懂,可以直接看这个)
  • p:(在容器功能区) 暂停选中的容器;
  • s:(在容器功能区) 停止选中的容器;
  • r:(在容器功能区) 重新启动选中的容器;
  • d:删除选中的容器/镜像/卷/网络。
  • esc:返回或取消 lazydocker 操作;
  • enter:聚焦主面板;
  • tab:上下切换到其他功能区面板;
  • ]/[:左右切换到其他选项卡;
  • b:可选择内置的批量命令;
  • q:退出 lazydocker 的 UI 界面;

代码托管

scc

scc (Sloc Cloc and Code) 是用 Go 开发的代码计数器,类似于 cloc、sloccount 和 tokei,支持复杂度计算和 COCOMO 估计。

官方仓库:github.com/boyter

安装 scc

shell
x env use scc

计算当前目录文件中代码的行数

shell
scc

计算指定目录或文件代码的行数

shell
scc <path>
image-20241113112517243

设置输出格式,并输出到目录下:

shell
scc -f json -o ~/outpu.json
scc -f csv -o ~/outpu.csvjson
scc -f html -o ~/outpu.html
image-20241113114207808

lazygit

安装

shell
x env use lazygit

启动 lazygit UI

shell
lazygit

配置 lazygit

shell
lazygit --config | grep "lang"    # 查看 lazygit 当前使用的自然语言
lazygit -cd                       # 获取 lazygit 的配置文件目录

修改 lazygit 配置文件,如将语言设置为中文

shell
printf "gui:language: zh-CN " > "$(lazygit -cd)/config.yml"

常用快捷键:

  • q:退出 lazygit 的 UI 界面;
  • esc:取消 lazygit 操作;
  • h/j:上下切换到其他功能区面板(如文件变更面板、分支管理);
  • ?:获取当前功能区面板的按键帮助;
  • ]/[:左右切换到其他选项卡[;
  • p:git pull - 拉取远程仓库的代码;
  • P:git push - 将本地仓库代码推送到远程仓库;
  • <space>:(在文件变更面板)git add - 暂存选中的更改或取消暂存;
  • c:(在文件变更面板)git commit - 为暂存的更改添加提交说明并存入本地仓库。
image-20241114110057735