菜鸟科技网

linux 命令对比

文件和目录操作

ls vs dir

这两个命令都是用来列出目录内容的,但 ls 是 POSIX 标准,而 dir 是 GNU 扩展,通常只在 GNU/Linux 系统上可用(作为 coreutils 包的一部分)。

linux 命令对比-图1
(图片来源网络,侵删)
特性 ls dir
所属 POSIX 标准,几乎所有 Unix-like 系统都有 GNU 扩展,主要用于 Linux
默认行为 以单列形式列出文件名 以多列、彩色、带文件类型后缀的形式列出
常用选项 -l (长格式), -a (隐藏文件), -h (人类可读) 无需选项即可获得丰富的输出
适用场景 通用首选,在所有系统上行为一致,脚本编写首选。 快速浏览,在交互式 shell 中,dir 提供了更友好的默认视图。

ls 是行业标准,dirls 的一个“美化”版本。建议始终使用 ls,因为它更具可移植性。


cp vs mv

这两个命令都用于处理文件,但核心功能完全不同。

特性 cp (copy) mv (move)
核心功能 复制:创建源文件的一个或多个副本。 移动/重命名:将文件或目录从一个位置移动到另一个位置,或在同一位置内重命名。
对源文件的影响 源文件保持不变 源文件在原位置消失(除非移动到同一设备的不同路径,此时是“重命名”)。
常用选项 -r/-R (递归复制目录), -p (保留权限/时间戳), -i (交互式) -i (交互式), -f (强制), -u (仅当源比目标新时才移动)
适用场景 备份文件、将文件复制到其他目录、将目录结构复制到新位置。 整理文件、将文件移动到不同文件夹、重命名文件或目录。

cp 是“克隆”,mv 是“搬家/改名”,操作前务必分清,mv 操作是不可逆的(除非有备份)。


rm vs rmdir

这两个命令都用于删除,但删除的对象不同。

linux 命令对比-图2
(图片来源网络,侵删)
特性 rm (remove) rmdir (remove directory)
功能 删除文件目录(需要 -r 选项)。 仅删除空目录
删除目录 需要 -r (递归) 或 -R 选项。 不能删除非空目录
安全性 非常危险,尤其是 rm -rf 相对安全,因为它只删除空目录,不会误删文件。
适用场景 删除文件、删除整个目录树(无论是否为空)。 清理那些已经清空内容的目录。

rmdir 是一个“安全”但功能有限的命令,99% 的情况下你会使用 rm 来删除文件,使用 rm -r 或更安全的 rm -ri 来删除目录。


ln (硬链接 vs 软链接)

ln 命令用于创建链接,这是理解 Linux 文件系统的核心。

特性 硬链接 软链接 / 符号链接
本质 多个文件名指向同一个 inode 一个独立的文件指向另一个文件的路径。
inode 共享同一个 inode 拥有自己独立的 inode
与文件关系 必须在同一个文件系统内创建。 可以跨任意文件系统创建。
对源文件 如果删除源文件,硬链接仍然可用 如果删除源文件,软链接失效(变成“dangling link”)。
大小 大小与源文件相同,记录的是文件数据块。 大小很小,只记录目标文件的路径字符串。
适用场景 不常用,主要用于数据库等需要多个入口的场景。 极其常用,用于创建快捷方式、管理程序/库版本、组织文件。

创建命令:

  • 硬链接: ln source_file hardlink_name
  • 软链接: ln -s source_file softlink_name

软链接是你在日常工作中几乎唯一会用到的链接方式,它更灵活、更安全,就像 Windows 的快捷方式。

linux 命令对比-图3
(图片来源网络,侵删)

查看和处理

cat vs less vs more

这三个命令都用于查看文件内容,但交互方式和目的不同。

特性 cat (concatenate) more less
核心功能 一次性显示整个文件内容到终端。 分页显示,只能向前翻页。 分页显示,可以自由前后翻页、搜索。
交互性 ,输出后立即返回命令行。 有限,只能按空格/回车向下,按 q 退出。 高度交互,支持上下箭头、 搜索、 反向搜索等 vi 的按键。
适用场景 查看短文件内容、将内容重定向到其他命令或文件、快速确认文件末尾几行 (tail -n 10 file \| cat)。 在古老的系统上查看长文件,less 是其现代替代品。 查看长文件的首选,功能强大,是 Linux 用户必备的技能。

cat 用于“流式”处理,less 用于“交互式”阅读。99% 的情况下,用 less 查看文件,用 cat 处理文件


grep vs egrep vs fgrep

这三个命令都是强大的文本搜索工具,主要区别在于正则表达式的支持。

特性 grep (Global Regular Expression Print) egrep (Extended grep) fgrep (Fixed grep)
正则表达式 支持基本正则表达式 支持扩展正则表达式(, , , 等)。 不支持正则表达式,将所有字符视为普通字面量。
性能 标准性能。 通常比 grep -E 稍快一点点,但现代 grep 已经优化。 最快,因为它不需要解析复杂的正则语法。
现代用法 grep -E 已过时,直接使用 grep -E 即可。 已过时,直接使用 grep -F 即可。
适用场景 日常文本搜索。 需要使用扩展正则表达式时(匹配 "color" 或 "colour")。 搜索包含大量特殊字符的固定字符串,或当速度至关重要时。

egrepfgrep 是历史遗留命令,现代 Linux 中,直接使用 grep -Egrep -F 是更规范的做法。


sed vs awk

这两个都是流编辑器,用于对文本进行复杂的转换和提取,但设计哲学和适用场景不同。

特性 sed (Stream Editor) awk (Aho, Weinberger, Kernighan)
设计哲学 面向“行”的编辑器,逐行处理,执行指定的编辑命令(如替换、删除、插入)。 面向“列”的报告生成器,逐行处理,但默认按字段(列)来处理和格式化输出。
处理单位 整行。 默认按空白字符(空格、制表符)分割为字段$1, $2, ...),$0 代表整行。
主要用途 文本替换 (s/old/new/g)、删除行 (d)、插入/追加行 (i, a)。 提取列 (print $1, $3)、基于复杂条件进行格式化输出简单计算
编程能力 有简单的控制流(n, b, t 等),但较弱。 一门完整的脚本语言,支持变量、循环、函数、条件判断。
适用场景 快速、简单的行内修改,如批量替换文件中的字符串。 从结构化文本(如 ps aux, df -h, /etc/passwd)中提取和格式化数据。

sed 是“外科手术刀”,适合对单行或整块文本做精确修改。awk 是“数据分析师”,擅长从表格式的数据中提取信息并生成报表。


系统信息和进程管理

ps vs top vs htop

这三个命令都用于查看进程信息,但实时性和交互性不同。

特性 ps (Process Status) top htop
输出方式 快照,运行一次,输出一个当前进程的静态列表。 实时,持续刷新,动态显示进程状态。 实时,持续刷新,界面更美观、信息更丰富。
交互性 ,通过命令行选项控制输出。 有限,可以排序、杀死进程,但按键操作较原始。 高度交互,使用类似 vi/nano 的按键,鼠标支持,彩色显示,树状视图。
常用选项 aux (查看所有用户进程), ef (显示进程树), u (按用户显示) 默认持续运行,按 q 退出。 默认持续运行,按 F1 查看帮助,按 q 退出。
适用场景 脚本中获取特定进程的信息、一次性查看系统进程状态。 在没有 htop 的系统上监控资源使用情况。 日常监控系统的首选,直观、易用、功能强大。

ps 用于“取证”,top 用于“基本监控”,htop 用于“高级监控”。如果你的系统安装了 htop,就别再用 top


网络工具

ping vs traceroute/tracepath

这两个命令都与网络路径有关,但目的不同。

特性 ping traceroute / tracepath
核心功能 测试网络连通性,向目标主机发送 ICMP 回显请求,并等待响应。 追踪网络路由路径,显示数据包从源到目标所经过的所有路由器(跳)。
输出信息 往返时间、丢包率。 每一跳的 IP 地址、主机名(如果解析)和往返时间
工作原理 发送包到最终目标,由目标直接响应。 发送一系列包,并利用 IP 包的“TTL”(Time To Live)逐跳“逼退”路由器,让其返回错误信息。
适用场景 快速判断一个网站或服务器是否“活着” (ping google.com)。 网络故障排查,定位数据包在哪一跳丢失或延迟过高。

ping 回答“能通吗?”,traceroute 回答“走的哪条路?”。


搜索命令

find vs locate

这两个命令都用于在文件系统中查找文件,但原理和性能差异巨大。

特性 find locate
工作原理 实时搜索,从指定的目录开始,递归遍历整个文件系统,根据条件匹配文件。 基于数据库搜索,查询一个预先建立的文件名数据库 (/var/lib/mlocate/mlocate.db)。
速度 ,尤其是在大文件系统上。 极快,因为它只是在数据库中查询字符串。
数据实时性 实时、准确,总能找到当前系统中存在的文件。 可能过时,数据库通常是每天更新一次,所以可能找不到刚创建的文件。
灵活性 极高,可以按文件名、大小、类型、权限、修改时间、所有者等任何条件查找。 较低,只能按文件名(通配符)查找。
适用场景 需要根据复杂条件查找文件、需要确保结果是最新的。 快速查找一个记得名字的文件,不关心文件是否刚刚被创建。

find 是“地毯式搜索”,功能强大但慢。locate 是“查字典”,飞快但可能信息不全。先用 locate 快速查找,找不到再用 find


总结与学习建议

对比组 主要区别 何时用哪个?
列表 功能丰富度 vs 通用性 ls (首选), dir (可选)
文件操作 复制 vs 移动/重命名 cp (备份), mv (移动/改名)
删除 删除任何东西 vs 只删除空目录 rm (常用), rmdir (少用)
链接 共享 inode vs 独立文件 ln -s (软链接,首选)
查看文件 一次性显示 vs 交互式分页 cat (处理), less (阅读)
文本搜索 基本正则 vs 扩展正则 vs 固定字符串 grep (默认), grep -E (扩展), grep -F (固定)
流编辑 行编辑 vs 列处理/报表生成 sed (行修改), awk (列提取)
进程监控 快照 vs 实时监控 ps (脚本), htop (交互)
网络诊断 测试连通性 vs 追踪路径 ping (通不通), traceroute (在哪卡)
文件搜索 实时遍历 vs 数据库查询 locate (快), find (准/全)

学习建议:

  1. 从核心命令开始: 先熟练掌握 cd, ls, pwd, cp, mv, rm, mkdir, touch, cat, less, grep, find
  2. 理解而非死记: 不要只记住命令,要理解它们的设计哲学。awk 为什么擅长处理列?find 为什么慢?
  3. 多用 man: man 是你最好的老师,学会阅读 man 页中的 SYNOPSIS (用法) 和 DESCRIPTION (描述) 部分。
  4. 结合实践: 在你的 Linux 系统上多动手尝试,创建一些测试文件和目录,用不同的命令去操作它们,观察结果。
  5. 学习组合使用: 真正的威力在于管道 和重定向 >/>>ps aux \| grep nginx 就是一个非常经典的组合。

希望这份详细的对比能帮助你更好地理解和使用 Linux 命令!

分享:
扫描分享到社交APP
上一篇
下一篇