学习Linux命令行工具不仅仅是操作技能的提升,更是解锁“系统魔法”的钥匙!很多时候,它们是你和系统沟通的唯一语言。掌握它们,你会发现自己像黑客电影里的高手一样,可以在屏幕上“指点江山”。所以,学习Linux命令行工具不仅是技能,更是一场奇妙的冒险。掌握它,你会变得高效、自信,而且始终“掌控全局”!
个人推荐
- 查看系统信息:x uname
- 查询 ip 地址:x ip
- 查看进程的实时信息:x btop
- 查看文件内容:x cat
- 查看当前目录下的文件:lsd
- 查看系统信息:macchina 或 fastfetch
- 增强docker功能:x-docker
- 装逼神器:genact
前置:安装X-CMD
安装
采用 curl 安装
eval "$(curl https://get.x-cmd.com)"
采用 wget 安装
eval "$(wget -O- https://get.x-cmd.com)"
x cowsay
先写个“Hello, world!”
x cowsay "What can I say!"
磁盘使用监控
x df
以 TUI 的方式查看文件系统和磁盘空间使用情况
x df
x duf
df
命令的现代化替代品, 用于查看磁盘空间使用情况和磁盘文件系统信息
x duf
x dua
交互式查看磁盘空间的使用情况
x dua
x dua i
网络相关
x ping
比默认的
ping
更美观,且过程可视化
x ping -b www.baidu.com
x gping
基于 Rust 编写的开源工具,是增加了图表功能的
ping
工具
安装
x env use gping
使用,可以同时ping多个
gping www.baidu.com www.bilibli.com
x ip
替代
ifconfig
,查询 ip 地址
x ip
性能监控
x top
使用 htop 来查看进程的实时信息
x top
x htop
使用 htop 来查看进程的实时信息
x htop
x btop
使用 htop 来查看进程的实时信息
x btop
x btm
基于 Rust 开发的命令行工具,用于终端的可定制跨平台图形进程/系统监视器。
x btm
x btm --basic
x gotop
使用 GO 语言开发,下载二进制文件即可运行,无需安装其他依赖
x gotop
x gotop --color vice
系统功能增强
x cd
比
cd
更高级的cd
,具有更丰富的交互性
x cd
lsd
查看当前目录下的文件,比
ls
的功能更丰富
查看文件:效果与ls
一样,默认按文件名排列
lsd
树形查看文件:--depth 1
:查看深度为1的文件
lsd --tree --depth 1 -S
组合命令:-S
:按文件大小排列(默认按文件名排列)
-1
:每行列出一个文件
-a
:查看隐藏文件
lsd --tree --depth 1 -S -1 -a
添加alias别名:在环境配置文件中添加alias别名
alias ll='lsd --tree --depth 1 -1'
## alias ll='ls -la'
##x exa
安装
x exa
组合命令:
列出所有非隐藏文件
x exa ./ --tree --level=1 --long --icons -x -s name
列出所有文件夹
x exa ./ --tree --level=1 --icons -x -s name -a -D
元选项:
-?, --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
一个可交互性的命令行文件管理器
x ll
x cat
查看文件内容,很好地解决了
cat
的痛点
x cat
x ascii
将 x-cmd 字符串转为 ASCII 艺术字
x ascii cfont HuangZexiao -g red,magenta -a center -s
趣味功能
x hua
查看古文诗词
x hua
查看《唐诗三百》
x hua ts
x wttr
展示中山市天气的信息
x wttr zhongshan
显示当前位置的天气和今日的天气预报
x wttr ?1
genact
安装genact
x env use genact
生成伪随机的系统活动:
genact
查看 genact
可用的活动模块
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
指定要模仿破解密码的活动:
genact -m bruteforce
设置 5 倍速并在 2 分钟后退出模拟活动:
genact -s 5 --exit-after-time 2min
组合命令:
genact -m docker_build -s 5 --exit-after-time 1h20min30s
系统信息查看工具
系统信息查看工具可以用于获取和显示系统硬件、软件和环境信息(如内核版本、内存使用情况、处理器负载等),通过这些工具可以在主流操作系统的运行中获取系统信息。
x uname
相比自带的
uname
能看到更多信息,能通过终端命令查看电脑以及操作系统的相关信息
x uname
macchina
- 最小化:相比于
neofetch
和fastfetch
,macchina
更加简单,更适合小型设备或资源受限的环境。 - 可定制化:提供主题系统,主题配置文件与主要配置文件是分开的,用户可以创建一堆主题并随时在它们之间切换。
安装
eval "$(curl https://get.x-cmd.com)" ## 安装 x-cmd
x env use macchina ## 使用 x-cmd 安装 macchina
使用
获取和显示系统信息:
shellmacchina macchina -o machine macchina -o machine -o terminal -o shell
定制 macchina:
存放配置文件的目录:
- Linux 和 BSD:
~/.config/macchina/
或$XDG_CONFIG_HOME/macchina/
- macOS:
$HOME/.config/macchina/
- Windows:
%AppData%/macchina/
- Linux 和 BSD:
macchina.toml
:macchina 的配置文件,用于调整 macchina 需要显示或隐藏的内容以及使用的主题。示例 - 自定义主题:
shellx 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 ```
neofetch
兼容性好,neofetch 基于bash
,所以不需要编译,同时兼容性也好:
举个例子,main
函数内部的cache_uname
方法,就会使用 Linux 和 macOS 都有的命令:uname -srm
安装
## macOS
brew install neofetch
## Linux Debian/Ubuntu
sudo apt install neofetch
## Linux CentOS
sudo yum install neofetch
安装完成,我们看看 Neofetch 的版本:
neofetch --version
输出系统信息:
neofetch
扩展
如果细看 Neofetch 的脚本,会发现还有很多可选项,这些在 Neofetch 的 wiki 内也有记录:
接下来我们看看可选项有那些?
扩展使用
根据官方的 wiki,Neofetch 在安装后,会自动生成默认配置文件,配置文件的存放地址在:${HOME}/.config/neofetch/config.conf
内。里面其实就是默认的输出内容定义:
复制
cat ${HOME}/.config/neofetch/config.conf
neofetch默认配置
可以看到,默认情况下打印的内容,就在配置文件内的 print_info
所定义。如果我们需要修改呢,有两种方法:
- 直接使用
vim
等文本编辑器修改这个文件即可。 - 在运行
neofetch
的时候,使用参数开启即可。
举个例子,默认情况,只显示内存,并没有显示内存使用的百分比;但是实际上在config.conf
文件内是可以开启的,比如:
## 直接输出
neofetch --memory_percent on
或者直接修改配置文件
修改配置文件,最后的结果:
显示内存比
项目归档
Neofetch完全基于bash
,使其兼容性很不错;即使你的Debian从8已经到12,但是 Neofetch 版本一直没有更新,那么 Neofetch 的使用,也不会出现什么问题。
这也是为什么,Neofetch在归档前,已经三年没有更新,但使用起来也没有任何问题。可以预想到,未来很长一段时间也不会有任何问题。那些基础的命令free -m
、uname -s
等等,都是不会改变的。
但是,为什么 Neofetch 停止维护了呢? 或者说是项目归档了呢?
为什么停止维护呢?
其实,根据 reddit 上的两篇文章,可能可以略知一二:
- Neofetch development discontinued, repository archived
- Found a text file at work titled "Why should I quit my job and become a goat farmer? (written during my "on-call" week)"
大概就是作者换行了(回家开农场了,不过不清楚是否真的回去开农场?),项目维护者经常面临着巨大的工作量,包括但不限于代码更新、设备兼容考虑、错误修复、功能请求处理以及社区管理等等繁琐事物,加上作者自己从事的软件工作;作者在技术工作中感到厌倦和疲惫。而且即使从事的是技术,也需要考虑政治和不同人的立场,也需要站队。
综合上述的内容,他现在更倾向于追求他认为更简单、压力更小、更纯粹的生活方式。
自然而然地,项目就放弃维护了。
说实话,有点可惜;不过也确实为作者感到高兴,他找到了更好的生活。虽然不知道他是否真的是回去开设农场,但是应该是一个不错的新生活。
回到NeoFetch,其实也有很多继任者:
- hyfetch: Neofetch with LGBTQ+ pride flags!
- fastfetch: About An actively maintained, feature-rich and performance oriented, neofetch like system information tool.
接任者都是非常好用的项目;不过受限于篇幅,接下来,我们就取其中的 Fastfetch 来一起看看。
fastfetch
可替代性:通常情况下,可以把 FastFetch 当作 NeoFetch 使用。安装方式也是一样,FastFetch 已经在各个平台的软件包管理器发布。
可扩展性:相比于 NeoFetch 全部基于
bash
的 shell 脚本,而 FastFetch 是基于C的。
安装
## macOS
brew install fastfetch
## Linux Debian/Ubuntu (Debian 13 or newer)
sudo apt install fastfetch
## Linux CentOS
sudo yum install fastfetch
安装完成,我们看看 fastfetch的版本:
fastfetch --version
输出系统信息:
neofetch
Docker增强
x docker
可以直接用 xd
、x docker
来增强 docker
,具体效果如下:
lazydocker
用 Go 语言开发的 Docker 和 docker-compose 的 Terminal UI 管理工具。它提供 docker 的终端图形界面,支持鼠标操作和键盘快捷键,能实时监控 docker 容器,并能简化一些常见的 dockcer 管理任务,如查看容器的状态、管理镜像和容器。
安装并启动 lazydocker:
eval "$(curl https://get.x-cmd.com)" # 安装 x-cmd
x env use lazydocker # 使用 x-cmd 安装 lazydocker
lazydocker # 启动 lazydocker UI
配置 lazydocker
查看 lazydocker 当前使用的自然语言
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为例:
mkdir -p "$HOME/.config/lazydocker"
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
x env use scc
计算当前目录文件中代码的行数
scc
计算指定目录或文件代码的行数
scc <path>
设置输出格式,并输出到目录下:
scc -f json -o ~/outpu.json
scc -f csv -o ~/outpu.csvjson
scc -f html -o ~/outpu.html
lazygit
安装
x env use lazygit
启动 lazygit UI
lazygit
配置 lazygit
lazygit --config | grep "lang" # 查看 lazygit 当前使用的自然语言
lazygit -cd # 获取 lazygit 的配置文件目录
修改 lazygit 配置文件,如将语言设置为中文
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 - 为暂存的更改添加提交说明并存入本地仓库。