Skip to content

ls 命令详解:列出目录内容 ​

本文是 Linux 命令速查 中 ls 的从 0 到 1 详解。 目标:把 ls --help 里的每个选项讲清楚,多看几遍后,你在服务器上敲 ls --help 就知道该用哪个选项。 环境依据:GNU coreutils 8.32(Ubuntu 22.04 自带;RHEL/Rocky 自带版本用法一致,个别选项见文末差异)。

一、命令是干什么的 ​

ls 是 list(列出) 的缩写,用来列出一个目录里有哪些文件和子目录,是 Linux 里使用频率最高的命令(没有之一)。

  • 不带参数:列出当前目录的内容;
  • 带目录名:列出指定目录的内容;
  • 加选项:可以看隐藏文件、详细信息、文件大小、修改时间,并按各种方式排序。

类比:ls 就像 Windows 里"打开一个文件夹看里面有什么",只不过它用文字列表的方式呈现,并且能显示比图形界面更丰富的信息(权限、属主、大小、时间、inode 等)。

二、命令语法 ​

bash
ls [选项]... [文件或目录]...
  • [选项]:可选,用来控制显示内容和格式(如 -l、-a、-h),可以多个组合;
  • [文件或目录]:可选,指定要看谁;不写就看当前目录;可以一次给多个。

最简单的用法:

bash
ls

三、选项全表(对照 ls --help) ​

ls 选项很多,下面按功能分组讲解。短选项(如 -a)和等价长选项(如 --all)放在一起。

1. 控制"显示哪些文件" ​

选项中文含义什么场景用
-a,--all显示所有文件,包括以 . 开头的隐藏文件想看 .bashrc、.ssh 等隐藏内容时(最常用)
-A,--almost-all类似 -a,但不显示 . 和 .. 这两个特殊目录想看隐藏文件又不想被 .、.. 占行时
-d,--directory只列目录本身,不列出目录里面的内容想看某个目录的权限信息(如 ls -ld /etc)时
-B,--ignore-backups不显示以 ~ 结尾的备份文件目录里备份文件太多想忽略时
-I PATTERN,--ignore=PATTERN不显示匹配通配符 PATTERN 的文件如 ls -I "*.log" 隐藏所有日志
--hide=PATTERN同上,隐藏匹配项(会被 -a 覆盖)临时隐藏某类文件
-R,--recursive递归列出所有子目录里的内容想一次性看清整个目录树结构时

说明:Linux 里以 . 开头的文件默认是"隐藏文件",并不是被加密,只是 ls 默认不显示,加 -a 就能看到。

2. 控制"显示多详细"(长格式) ​

选项中文含义什么场景用
-l使用长格式列出(权限、属主、大小、时间等)想看文件详细信息时(最常用,常与 -h 组合)
-g类似 -l,但不显示属主只关心组和权限时
-o类似 -l,但不显示属组只关心属主时
-n,--numeric-uid-gid类似 -l,但用数字 UID/GID 代替用户名组名用户名解析不出来、想看数字 ID 时
-G,--no-group长格式里不输出组名精简输出时
--author配合 -l,额外显示文件作者较少用
--full-time类似 -l,但时间显示完整(含秒)需要精确到秒的时间时
-i,--inode显示每个文件的 inode 编号排查硬链接、文件系统问题时
-s,--size显示每个文件占用的磁盘块大小想看实际占用块时
-Z,--context显示 SELinux 安全上下文RHEL 开了 SELinux 排查权限时

3. 控制"文件大小怎么显示" ​

选项中文含义什么场景用
-h,--human-readable大小用人类可读格式(K、M、G)配合 -l 看大小(极常用:ls -lh)
--si类似 -h,但按 1000 而不是 1024 换算想看厂商口径大小
--block-size=SIZE按指定单位显示大小,如 --block-size=M想统一用某单位时
-k,--kibibytes按 1024 字节块显示占用配合 -s 使用

4. 控制"时间怎么显示和排序" ​

选项中文含义什么场景用
-t按修改时间排序(新的在前)想找最近被改动的文件时
-u配合 -lt 按访问时间排序显示关心文件最近何时被看过
-c配合 -lt 按**状态改变时间(ctime)**排序关心权限/属性何时被改
--time=WORD指定显示哪种时间(atime/ctime/birth)想看访问时间或创建时间
--time-style=STYLE时间格式(full-iso/long-iso/iso/locale)想改时间显示样式

5. 控制"排序方式" ​

选项中文含义什么场景用
-r,--reverse逆序排列想让结果倒过来时
-S按文件大小排序(大的在前)想找最占空间的文件
-X按扩展名排序想把同类文件归到一起
-v按文本里的版本号自然排序文件名带数字版本(如 file1、file10)时
-U不排序,按目录原始顺序追求列出速度时
--sort=WORD按指定方式排序(none/size/time/extension/version)用长选项明确排序方式
--group-directories-first目录排在文件前面想先看子目录时(很好用)

6. 控制"输出格式与颜色" ​

选项中文含义什么场景用
-1每行只列一个文件输出给脚本处理、或想一行一个时
-C多列、按纵向排列默认在终端就是多列
-x多列、按横向排列想按行排列时
-m用逗号分隔填满一行想紧凑列出时
-F,--classify给名字加类型标记(/目录、*可执行、@链接)想一眼区分文件类型
-p给目录名后加 /只想标记目录
--color[=WHEN]彩色显示(always/auto/never)区分文件类型;终端默认开启
--hyperlink[=WHEN]文件名加超链接支持的终端里可点击打开
-w COLS,--width=COLS设定输出宽度(0 为不限)脚本里控制排版
-T COLS,--tabsize=COLS设定制表符宽度对齐输出时
-L,--dereference显示软链接指向的文件信息想看链接目标而不是链接本身
-N,--literal文件名不加引号原样输出特殊字符文件名
-Q,--quote-name文件名用双引号括起来文件名含空格时看清边界
-q,--hide-control-chars不可显示字符用 ? 代替默认行为
-b,--escape不可显示字符用 C 风格转义排查特殊字符文件名
-f不排序并开启 -aU、关闭颜色快速原样列出
-H,--dereference-command-line跟随命令行给出的软链接处理命令行符号链接

四、由浅入深的典型示例 ​

示例 1:基本列出 ​

bash
ls

输出(当前目录内容):

text
assets  docs  index.md  package.json  README.md

示例 2:列出所有文件,含隐藏文件 ​

bash
ls -a
text
.  ..  .bashrc  .profile  .ssh  assets  docs  index.md

对比可见,多了 .bashrc、.ssh 等隐藏项,以及 .(当前目录)和 ..(上级目录)。

示例 3:长格式 + 可读大小(最高频组合) ​

bash
ls -lh
text
total 24K
drwxr-xr-x 2 wiki wiki 4.0K Sep 30 10:00 assets
-rw-r--r-- 1 wiki wiki 1.2K Sep 30 09:12 index.md
-rw-r--r-- 1 wiki wiki  860  Sep 29 22:40 package.json

逐列解释 -l 的输出:

text
drwxr-xr-x  2  wiki  wiki  4.0K  Sep 30 10:00  assets
└───┬───┘  └┬┘  └─┬─┘  └─┬─┘  └─┬─┘  └────┬────┘  └─┬─┘
  权限类型  硬链接数 属主   属组   大小     修改时间    名字
  • 第 1 个字符:d 目录、- 普通文件、l 软链接;
  • 后面 9 位:属主/属组/其他人的 rwx 权限;
  • -h 让 4096 显示成 4.0K。

示例 4:看某个目录本身的信息(不进入它) ​

bash
ls -ld /etc
text
drwxr-xr-x 134 root root 4.0K Sep 30 08:00 /etc

不加 -d 的话,ls -l /etc 会把 /etc 里面成百上千个文件全列出来;加了 -d 只看目录这一行。

示例 5:按时间排序,找最近改动的文件 ​

bash
ls -lt

最新修改的排在最上面。想倒过来(最旧的在前)就 ls -ltr。

示例 6:按大小排序,找最占空间的文件 ​

bash
ls -lhS

大文件排最前,配合 -h 直接读出大小。

示例 7:目录排在前面 + 人类可读 ​

bash
ls -lh --group-directories-first

子目录统一排在文件前面,浏览结构更清晰。

示例 8:递归列出所有子目录 ​

bash
ls -R

会一层层进入每个子目录列出内容;目录很深时输出很长,可配合 less:ls -R | less。

示例 9:一次列多个目录 ​

bash
ls -lh /var/log /tmp

会分别列出两个目录的内容,并用目录名做分隔标题。

五、高频组合速记 ​

实际工作中基本就这几个组合,记住即可:

命令用途
ls -l看详细信息
ls -lh详细信息 + 可读大小(最常用)
ls -la详细信息 + 隐藏文件
ls -lah详细 + 可读大小 + 隐藏(信息最全)
ls -ltr按时间逆序,最旧的在上、最新的在底部
ls -lt按时间排序,最新在上
ls -lhS按大小排序,最大在上
ls -ld 目录只看目录本身
ll很多系统里是 ls -alF 的别名(可用 alias 查看)

六、RHEL 系与 Debian 系差异 ​

ls 属于 GNU coreutils,RHEL/CentOS/Rocky 与 Ubuntu/Debian 的用法几乎完全一致,上述选项通用。仅有的细微差别:

  • 默认是否开启彩色:Ubuntu 一般默认 --color=auto;RHEL 系通过 alias ls='ls --color=auto' 提供,效果相同;
  • 别名 ll:两系通常都定义为长格式列出,具体可用 alias ll 确认;
  • 老版本 coreutils 可能缺少极少数新选项(如 --hyperlink),以本机 ls --help 实际列出的为准。

七、新手易错点 ​

  1. ls -l 输出的第 1 列不是"文件名":第一列是权限,名字在最后一列,别看错。
  2. 看不到隐藏文件不是文件不存在:加 -a;配置类文件(.bashrc、.ssh)默认都藏着。
  3. ls -l 目录 会列出目录里面:只想看目录这一行,记得加 -d。
  4. 大小数字默认是字节:裸 ls -l 看到 4096 是字节,加 -h 才是 4.0K。
  5. 权限位里的 d/l/- 要先看:第一个字符决定它是目录、链接还是普通文件。
  6. ls 是只读命令,可放心使用:它只看不改,不会破坏任何文件。

八、相关命令与文档 ​

  • 速查页:Linux 命令速查
  • 想看目录树结构:tree(详解见 tree)
  • 想按条件查找文件:find(详解见 find)
  • 想看文件占用了多少空间:du(详解见 du)
  • 想看文件系统整体空间:df(详解见 df)
  • 权限位读不懂:见 chmod