核心实用程序
核心实用程序是 GNU/Linux 系统基本且重要的工具。本文概述了它们(但不完整),链接了它们的文档,并描述了有用的替代方案。本文的范围包括但不限于 GNU Core Utilities。大多数核心实用程序都是传统的 Unix 工具,许多已由 POSIX 标准化,但已进一步开发以提供更多功能。
大多数命令行界面都记录在 man pages 中,GNU Project 的实用程序主要记录在 Info 手册中,一些 Shell 为 shell 内置命令提供了 help 命令。此外,大多数实用程序在使用 --help
标志运行时会打印其用法。
要点
下表列出了一些重要的实用程序,Arch Linux 用户应该熟悉这些实用程序。另请参阅 intro(1)。
防止数据丢失
rm
、mv
、cp
和 shell 重定向会很高兴地删除或覆盖文件,而不会询问。rm
、mv
和 cp
都支持 -i
标志,以便在每次删除/覆盖之前提示用户。一些用户喜欢默认启用 -i
标志,方法是使用 别名。依赖这些 shell 选项可能很危险,因为您会习惯它们,当您使用另一个没有这些选项的系统或用户时,可能会导致数据丢失。防止数据丢失的最佳方法是创建 备份。
非必要项
下表列出了经常派上用场的核心实用程序。
软件包 | 实用程序 | 描述 | 文档 | 替代方案 |
---|---|---|---|---|
shell 内置命令 | alias | 定义或显示别名 | alias(1p) | |
type | 打印命令的类型 | type(1p) | command(1p), whereis(1), which(1) | |
time | 为命令计时 | time(1p) | ||
GNU coreutils | tee | 读取标准输入并写入标准输出和文件 | tee(1), info | pee(1) |
mktemp | 创建临时文件或目录 | mktemp(1), info | ||
mknod | 创建命名管道或设备节点 | mknod(1), mkfifo(1), info | ||
truncate | 缩小或扩展文件的大小 | truncate(1), info | fallocate(1) | |
basenc | 编码输入并输出 | basenc(1), base64(1), info | ||
cut | 打印选定行的部分 | cut(1), info | colrm(1), hck, choose | |
tr | 转换或删除字符 | tr(1), info | uconv(1) | |
od | 以八进制和其他格式转储文件 | od(1), info | hexdump(1), vim 的 xxd(1) | |
sort | 排序行 | sort(1), info | ||
uniq | 报告或忽略重复行 | uniq(1), info | anewer, runiqAUR, huniq-gitAUR | |
comm | 逐行比较两个已排序的文件 | comm(1), info | zetAUR | |
head | 输出文件的第一部分 | head(1), info | ||
join | 在公共字段上连接两个输入的行 | join(1), info | combine(1) zetAUR | |
md5sum | 计算输入的密码哈希函数并输出 | sha256sum(1), sha512sum(1), info | shasum(1), rhash(1) | |
tail | 输出文件的最后一部分,或跟随文件 | tail(1), info | ||
wc | 打印换行符、单词和字节计数 | wc(1), info | ||
GNU binutils | strings | 打印二进制文件中的可打印字符 | strings(1), info | stringsextAUR |
util-linux | column | 将文件分列,可选地以网格表格进行美观打印 | column(1) | paste(1), csviewAUR |
GNU findutils | xargs | 从标准输入组合或模板化参数以调用外部命令 | xargs(1) | parallel(1) (parallel_alternatives(7)) |
GNU glibc | iconv | 转换字符编码 | iconv(1) | recode, uconv(1) |
GNU sharutils | uudecode | 将文件编码为电子邮件友好的文本 | uuencode(1), uudecode(1), info | uudeview(1) |
file | file | 猜测文件类型 | file(1) |
moreutils 软件包提供了有用的工具,例如 sponge(1),这些工具在 GNU coreutils 中缺失。
替代方案
以下软件包提供了替代的核心实用程序
- BusyBox — 用于救援和嵌入式系统的实用程序。
- Toybox — 一体化 Linux 命令行。
- uutils — GNU coreutils 的跨平台 Rust 重写。
- Heirloom Toolchest — 标准 Unix 实用程序的传统实现。
- 9base — 各种原始 Plan9 工具到 unix 的端口。
- sbase — *nix 核心实用程序的 suckless 变体。
- ubase — sbase 实用程序的扩展。
cat 替代方案
- bat — 具有语法高亮和 Git 集成的 cat 克隆。
cd 替代方案
- zoxide — 一种智能 cd 命令,可学习您的习惯,让您只需按几下键即可导航到任何位置。
- autojump — 一种从命令行导航文件系统的更快方法。
另请参阅 Bash#输入路径时自动 "cd" 和 Zsh#记住最近的目录。
date 替代方案
- dateutils — 简洁的命令行日期和时间实用程序;shell 中快速的日期计算和转换。
- pdd — 微小的日期时间差计算器。
cp 替代方案
使用 rsync#作为 cp/mv 替代方案 允许您恢复失败的传输,显示传输状态,跳过已存在的文件,并使用校验和确保目标文件的完整性。
ls 替代方案
- broot — 一种查看和导航目录树的新方法。
- clifm — 一个文件管理器,可以像 ls(1) 那样列出文件(加上图标和 RGB 颜色支持)。
- eza — 另一个 ls 替代品,具有颜色支持、树状视图、git 集成和其他功能。基于 exa,exa 已不再受支持。
- lsd — 现代 ls,具有许多漂亮的颜色和令人敬畏的图标。
查找替代品
- fd — 简单、快速且用户友好的 find 替代品。默认忽略隐藏文件和
.gitignore
中的文件。
- fuzzy-find — 用于查找文件的模糊补全。
- plocate — 一个更快速的 locate。
- rawhide — 使用漂亮的 C 表达式查找文件。
对于图形文件搜索器,请参阅 List of applications/Utilities#File searching。
diff 替代品
虽然 diffutils 不提供逐词 diff,但其他几个程序提供此功能
- git diff 可以使用
--color-words
进行单词 diff,使用--no-index
也可以用于 Git 工作树之外的文件。 - cwdiff — 一个 GNU wdiff 包装器,可以对输出进行着色。
- git-delta — 一个用于 git、diff 和 grep 输出的语法高亮分页器。
- dwdiff — diff 程序的单词 diff 前端;支持颜色。
- icdiff — 一个用 Python 编写的彩色 diff 工具。“改进的颜色 diff”旨在补充正常的 diff 用法。
- wdiff — GNU diff 的逐词实现;不支持颜色。
另请参阅 List of applications/Utilities#Comparison, diff, merge。
grep 替代品
- mgrep — 一个多行 grep。
- pdfgrep — 一个在 PDF 文件中搜索文本的工具。
- ripgrep-all — 在纯文本以及 PDF、电子书、Office 文档、zip、tar.gz 中搜索。
代码搜索器
这些工具旨在替代 grep 进行代码搜索。它们默认进行递归搜索,跳过二进制文件并遵循 .gitignore
。
- ack — 一个基于 Perl 的 grep 替代品,旨在为具有大型异构源代码树的程序员服务。
- ripgrep (rg) — 一种搜索工具,结合了 ag 的可用性和 grep 的原始速度。
- The Silver Searcher (ag) — 类似于 ack 的代码搜索工具,但速度更快。
- ugrep (ug) — 超快速 grep,具有交互式用户界面、模糊搜索、布尔查询、十六进制转储等功能。
另请参阅: cscope。
交互式过滤器
- fzf — 通用命令行模糊查找器,默认由 find 驱动。
- fzy — 一个快速、简单的模糊文本选择器,具有先进的评分算法。
- peco — 简化的交互式过滤工具。
- percol — 为 UNIX shell 的传统管道概念添加交互式过滤的味道。
- skim — 用 Rust 编写的模糊查找器,类似于 fzf。
dd 替代品
替代 dd 实现
此小节列出了 dd 实现,它们的界面和默认行为主要符合 dd(1p) 的 POSIX 规范。
- ddpt — Linux 内核 SCSI 子系统维护者对 sg_dd(8) 的可移植重写,具有可选但非常专业的硬件 I/O(SCSI 命令集)支持,以及许多其他功能。
- sdd — Joerg Schilling 的跨 UNIX 环境的可移植 dd 实现,可以校验复制的数据并重试读取坏块。
GNU dd 的衍生版本
在 coreutils 中找到的 dd 的 GNU 实现也符合 POSIX。此小节列出了它的分支。
- dcfldd — GNU dd 的功能增强分支,用于取证和安全场景,包括即时哈希功能、灵活擦除、写入验证、同时输出到多个目标、拆分和管道输出。
- dc3dd — 美国国防部网络犯罪中心 (DC3) 的 GNU dd 的另一个修补版本,其目标和功能与 dcfldd 相似。
现代化的 dd 类似物
此小节列出了不符合 POSIX 的 dd 替代品(就类似 JCL 的命令行语法和 默认行为 而言)。
- dd_rescue — 一个功能丰富的现代化 dd 类似物,适用于日常脚本编写、磁盘克隆和数据恢复。
- rw — 具有传统命令行标志的最小且可移植的 dd 类似物。
- https://sortix.org/rw/ || rwAUR
buffer 衍生版本
此小节列出了 bufferAUR 的分支,它是一个通用的 I/O 缓冲实用程序,类似于 dd,但具有动态大小的缓冲区。它支持按块 I/O,并且可以在从/向 LTO 磁带转储时使用,以避免鞋擦现象。
- mbuffer — buffer 实用程序的延续,具有线程和其他功能。
df 替代品
- duf — 一个磁盘使用情况/可用空间实用程序。
du 替代品
- cdu — 带有颜色和漂亮直方图的 du 包装器。
- dust — 一个更直观的 du 版本,用 Rust 编写。
- dua — 快速磁盘使用情况分析器,支持删除文件,用 Rust 编写。
- gdu — 带有控制台界面的磁盘使用情况分析器,用 Go 编写。
- ncdu — 一个极其轻量级且简单的基于 ncurses 的磁盘使用情况分析器,用 Zig 编写。
另请参阅 List of applications/Utilities#Disk usage display。
参见
- GNU Coreutils 文档
- GNU Coreutils 常见问题解答
- Coreutils Gotchas:GNU coreutils 维护人员关于 coreutils 组件中一些令人困惑的行为的注释
- POSIX 实用程序