linux的dir命令详解
2026/7/18 13:04:00 网站建设 项目流程

Linux dir 命令超详细详解

dir是 Linux 系统中ls功能几乎完全一致的目录列表命令,最初是为了兼容 DOS/Windows 用户的使用习惯而设计。在 GNU/Linux 系统中,dirlsvdir同一个二进制文件的不同硬链接,共享 99% 以上的参数和功能,仅在默认输出行为上存在细微差异。

⚠️ 核心结论:绝大多数情况下,dir可以完全替代ls,反之亦然。了解两者的差异主要是为了避免踩坑和适应不同的使用习惯。

一、核心定位与实现原理

核心定位

  • POSIX 标准定义的目录列表命令,行为更规范、更可预测
  • 专为习惯 DOS/Windowsdir命令的用户设计
  • 输出更适合脚本处理,默认转义特殊字符
  • ls完全兼容,所有ls的参数都可以直接用于dir

实现原理

在 GNU coreutils 中,dirlsvdir是同一个程序的三个不同入口:

bash

运行

# 查看三个命令的 inode 号(完全相同) ls -i /bin/ls /bin/dir /bin/vdir # 输出示例:123456 /bin/dir 123456 /bin/ls 123456 /bin/vdir

程序通过判断argv[0](命令名)来决定默认行为:

  • ls:默认多列显示,不转义特殊字符,终端输出时启用颜色
  • dir:默认多列显示,强制转义特殊字符,默认不启用颜色
  • vdir:默认长格式显示,相当于dir -l

二、基础语法与默认行为

基础语法

bash

运行

dir [选项] [目录/文件路径]
  • 选项:与ls完全相同,所有ls的参数都可以直接使用
  • 目录 / 文件路径:要列出的目录或文件,默认为当前目录(.

默认行为(与ls的核心差异)

表格

行为dirls
显示格式始终多列显示(无论输出到终端还是文件)终端输出多列,管道 / 文件输出单列
特殊字符默认转义所有不可打印字符(-b默认直接显示不可打印字符(可能导致终端乱码)
颜色输出默认不启用颜色终端输出时默认启用颜色
隐藏文件默认不显示默认不显示
排序方式按文件名升序按文件名升序

简单来说:dir等价于ls -C -b --color=never

三、核心常用参数

由于dirls参数完全兼容,这里只列出最常用的参数,完整参数请参考ls命令详解。

1. 基础显示控制

表格

参数含义
-a/--all显示所有文件,包括隐藏文件和...
-A/--almost-all显示所有隐藏文件,但不显示...
-l以长格式显示详细信息(权限、所有者、大小、时间等)
-h/--human-readable以人类可读格式显示文件大小(KB、MB、GB)
-1(数字 1)每行只显示一个文件
-m以逗号分隔格式显示文件名

2. 排序控制

表格

参数含义
-t按修改时间降序排列(最新的在前)
-S按文件大小降序排列(最大的在前)
-r/--reverse反转排序顺序
-v按版本号自然排序
-X按文件扩展名排序

3. 时间与详细信息

表格

参数含义
-i/--inode显示文件的 inode 号
-c显示状态改变时间(ctime)并按其排序
-u显示访问时间(atime)并按其排序
--full-time显示完整的时间戳(精确到纳秒)

4. 目录与类型

表格

参数含义
-d/--directory只显示目录本身,不显示目录内容
-R/--recursive递归列出所有子目录的内容
-F/--classify在文件名后添加类型标识符号
--color=auto启用彩色输出(与ls相同的颜色规则)

四、dir vs ls 全面对比

表格

特性dirls
设计初衷兼容 DOS/Windows 习惯Unix 原生目录列表命令
默认输出ls -C -b --color=never终端:ls -C --color=auto;管道 / 文件:ls -1
特殊字符处理默认转义,输出安全默认直接显示,可能乱码
颜色输出默认关闭终端默认开启
输出一致性无论输出到哪里都是多列输出到终端多列,管道 / 文件单列
别名支持系统通常不预定义别名系统通常预定义llla等别名
脚本适用性更适合脚本(输出更可预测)更适合日常交互使用
跨平台兼容性POSIX 标准,行为更统一不同 Unix 变体行为略有差异

五、高频实战示例

1. 基本使用(与 ls 完全一致)

bash

运行

# 列出当前目录非隐藏文件 dir # 列出所有文件(包括隐藏) dir -a # 长格式显示详细信息 dir -l # 长格式+人类可读大小 dir -lh

2. 启用彩色输出(最常用)

由于dir默认没有颜色,建议在别名中添加--color=auto

bash

运行

# 临时启用颜色 dir --color=auto # 永久设置别名(添加到 ~/.bashrc) echo "alias dir='dir --color=auto'" >> ~/.bashrc source ~/.bashrc

3. 按时间和大小排序

bash

运行

# 按修改时间降序(最新的在前) dir -lt # 按修改时间升序(最旧的在前) dir -ltr # 按文件大小降序(最大的在前) dir -lhS # 按文件大小升序(最小的在前) dir -lhSr

4. 只显示目录本身

bash

运行

# 查看 /var 目录的权限和属性 dir -ld /var # 只显示当前目录下的所有子目录 dir -d */

5. 处理含特殊字符的文件名(dir 的优势)

dir默认转义特殊字符,输出更安全,不会被 shell 误解析:

bash

运行

# 创建一个含空格和换行的文件 touch "file with spaces"$'\n'"and newline" # ls 的输出(可能导致终端乱码,无法直接复制) ls # 输出:file with spaces?and newline # dir 的输出(安全转义,可以直接复制使用) dir # 输出:'file with spaces'$'\n''and newline'

6. 递归列出所有文件

bash

运行

# 递归列出当前目录及其所有子目录 dir -R # 递归显示所有文件的详细信息 dir -lR

六、相关命令:vdir

vdirdir的另一个变体,默认以长格式显示,相当于dir -l

bash

运行

# 以下两个命令完全等价 vdir dir -l

vdir同样与ls完全兼容,所有参数都可以直接使用。

七、避坑重点与最佳实践

避坑重点

  1. 默认没有颜色这是dir最容易被吐槽的地方,建议在~/.bashrc中添加别名启用颜色:

    bash

    运行

    alias dir='dir --color=auto' alias vdir='vdir --color=auto'
  2. 输出始终多列dir的输出通过管道传递给其他命令时,仍然是多列格式,可能导致解析错误。如果需要单列输出,必须显式加-1参数:

    bash

    运行

    # 错误:多列输出无法正确统计行数 dir | wc -l # 正确:强制单列输出 dir -1 | wc -l
  3. 没有预定义别名系统通常不会为dir预定义llla等别名,需要手动添加:

    bash

    运行

    alias dl='dir -l' alias dla='dir -la' alias dlt='dir -lht'

最佳实践

  1. 日常交互优先使用 lsls有默认颜色输出和丰富的预定义别名,使用体验更好。

  2. 脚本中优先使用 dirdir的输出更可预测,默认转义特殊字符,处理含空格、换行等特殊字符的文件名更安全。

  3. 处理特殊文件名时使用 dir当目录中存在大量含特殊字符的文件时,dir的输出比ls更清晰、更安全。

  4. 跨平台脚本使用 dirdir是 POSIX 标准命令,在不同 Unix 变体上的行为更统一,而ls的某些参数是 GNU 扩展。

八、常用组合速查表

表格

命令组合含义
dir列出当前目录非隐藏文件(多列,转义特殊字符)
dir -a列出所有文件(包括隐藏)
dir -l长格式显示非隐藏文件
dir -lh长格式显示,人类可读大小
dir -lt按修改时间降序排列
dir -lS按文件大小降序排列
dir -ld /dir查看目录本身的详细信息
dir -1强制单列输出(适合脚本)
dir --color=auto启用彩色输出

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询