核心工具
核心工具是 GNU/Linux 系统基本、基础的工具。本文提供对它们不完整的概览、链接文档并描述有用的替代品。本文的范围包括,但不限于 GNU coreutils。大多数核心工具都是传统的 Unix 工具,它们中的许多已由 POSIX 标准化,但已进一步发展,从而提供更多功能。
大多数命令行界面的文档都在 man page 中,来自 GNU 项目的工具的文档主要在 Info 手册中,一些 shell 为内置命令提供了 help
命令。另外,大多数命令在使用 --help
标志运行时会显示自身的使用说明。
基础[编辑 | 编辑源代码]
下表列出了一些 Arch Linux 用户应当熟悉的重要的工具。另请参见 intro(1)。
防止数据损失[编辑 | 编辑源代码]
rm
、mv
、cp
和 shell 重定向无需确认即可删除或覆盖文件。rm
、mv
和 cp
都支持 -i
标志以在删除/覆盖前提醒用户。一些用户喜欢通过 alias 默认启用 -i
。依赖这些 shell 选项可能很危险,因为你会习惯于它们,从而在你使用没有它们的系统或用户时导致潜在的数据损失。防止数据损失的最好办法是创建备份。
非关键[编辑 | 编辑源代码]
此表格列出了常常很有用的核心工具。
包 | 工具 | 描述 | 文档 | 替代品 |
---|---|---|---|---|
shell 内置 | alias | 定义或显示别名 | alias(1p) | |
type | 打印命令的类型 | type(1p) | command(1p), whereis(1), which(1) | |
time | 记录命令执行时间 | time(1p) | ||
GNU coreutils包 | tee | 读取 stdin,写入 stdout 和文件 | 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 | 以 8 进制或其他格式转储文件 | od(1), info | hexdump(1), vim's 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), hashdeep(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包 包提供了 GNU coreutils 中没有的有用的工具,例如 sponge(1)。
替代品[编辑 | 编辑源代码]
核心工具的替代品由以下包提供:
- BusyBox — 用于救援系统和嵌入式系统的核心工具。
- Toybox — 一体化的 Linux 命令行。
- uutils — Rust 重构的跨平台的 GNU 核心工具。
- Heirloom Toolchest — 标准 Unix 工具的传统实现。
- 9base — 原版 Plan9 工具在 Unix 的移植。
- sbase — *nix 核心工具的一个极简变体。
- ubase — sbase 工具的一个扩展。
cat 替代品[编辑 | 编辑源代码]
- bat — 支持语法高亮和 Git 集成的 cat 克隆。
cd 替代品[编辑 | 编辑源代码]
- zoxide — 一个智能化的 cd 命令,可以学习用户的习惯,只需按几个键即可随处导航。
- autojump — 在命令行中导航到文件的快速方式。
参阅 Bash#输入路径自动添加"cd" 和 Zsh#Remembering recent directories。
cp 替代品[编辑 | 编辑源代码]
使用 rsync#作为 cp/mv 的替代可以断点续传、显示传输状态、跳过已存在的文件并使用校验和确保目标文件的完整性。
ls 替代品[编辑 | 编辑源代码]
- broot — 一种在目录间浏览和导航的新方法。
- clifm — 一个像 ls(1) 一样列出文件的文件管理器,加上了图标和 RGB 颜色支持。
- eza — 另一个 ls 的替代品,具有颜色支持、树视图、git 集成和其他功能。基于停止支持的 exa 开发而来。
- lsd — ls 的现代版,具有很多漂亮的颜色和美观的图标。
find 替代品[编辑 | 编辑源代码]
- fd — find 的简单、快速且易用的替代品。默认忽略隐藏文件和
.gitignore
文件。
- fuzzy-find — 模糊查找文件。
- mlocate — 将 locate 与 updatedb 结合起来的实现。
- plocate — 一个更快速的 locate 命令。
- rawhide — 使用 C 语言样式的表达式查找文件。
图形界面的文件搜索工具请参阅应用程序列表/工具#文件搜索。
diff 替代品[编辑 | 编辑源代码]
diffutils包 不提供单词级别的文本比较,一些其他程序提供了这一功能:
- git diff 可以加上
--color-words
参数进行单词级别的比较,使用--no-index
可以比较 Git 工作树外的文件。 - cwdiff — 一个对 GNU wdiff 的包装,对输出进行了着色。
- git-delta — 一个带语法高亮功能的分页器,作用于 git、diff 和 grep 的输出。
- dwdiff — diff 程序加上单词比较功能的前端,支持着色。
- icdiff — 带着色的、Python 编写的 diff 工具。“改进版彩色 diff”用于扩充 diff 的用法。
- wdiff — GNU diff 加上单词比较功能的实现,不支持着色。
grep 替代品[编辑 | 编辑源代码]
- mgrep — 多行 grep。
- pdfgrep — 在 PDF 文件中搜索文本的工具。
- ripgrep-all — 搜索纯文本,包括在 PDF、电子书、Office 文档、zip、tar.gz 中的文本。
代码搜索工具[编辑 | 编辑源代码]
以下 3 个工具旨在在代码搜索方面替代 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 — 可以跨 UNIX 环境使用的 dd 实现,由 Joerg Schilling 开发,可以对复制的数据进行校验并重新读取损坏数据。
GNU dd 的衍生版[编辑 | 编辑源代码]
核心工具中的 GNU 实现的 dd 的也符合 POSIX。本小节列出了它的衍生版。
- dcfldd — GNU dd 的功能增强衍生版,用于取证和安全场景,包括即时哈希、灵活擦除、写入验证、同时输出到多个目标、拆分和管道输出。
- dc3dd — GNU dd 的另一个打了补丁的版本,来自美国国防部网络犯罪中心 (DC3),与 dcfldd 具有相似的目标和功能。
现代化的 dd 仿照版[编辑 | 编辑源代码]
本小节列举的 dd 替代方案,在类 JCL 命令行语法和默认行为方面是不符合 POSIX 的。
- dd_rescue — 功能丰富的现代化 dd 仿照版,适用于日常脚本编写、磁盘克隆和数据恢复。
- rw — 小型且可移植的 dd 仿照版,具有传统的命令行参数。
- https://sortix.org/rw/ || rwAUR
buffer 的衍生版[编辑 | 编辑源代码]
本小节列举了 bufferAUR 的衍生版,buffer 是一个类似于 dd 的通用 I/O 缓冲程序,但具有动态大小的缓冲区。它支持区块为单位的 I/O,可以用来对 LTO 磁带进行进/出转储,以避免擦鞋 (Shoe Shining) 效应。
- mbuffer — buffer 程序的延续,具有多线程等功能。
df 替代品[编辑 | 编辑源代码]
- duf — 一个查看磁盘使用情况/剩余空间的工具。
du 替代品[编辑 | 编辑源代码]
- cdu — du 的包装,带有着色和漂亮的直方图。
- dust — du 的更直观版本,用 Rust 编写。
- ncdu — 基于 ncurses 的简单磁盘使用分析器。
- gdu — 带控制台界面的磁盘使用分析器,用 Go 编写。
参阅[编辑 | 编辑源代码]
- GNU Coreutils 文档
- GNU Coreutils FAQ
- Coreutils Gotchas: GNU 核心工具的维护者写的关于核心组件一些奇怪行为的注释
- POSIX 工具