主题
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 -atext
. .. .bashrc .profile .ssh assets docs index.md对比可见,多了
.bashrc、.ssh等隐藏项,以及.(当前目录)和..(上级目录)。
示例 3:长格式 + 可读大小(最高频组合)
bash
ls -lhtext
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 /etctext
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实际列出的为准。
七、新手易错点
ls -l输出的第 1 列不是"文件名":第一列是权限,名字在最后一列,别看错。- 看不到隐藏文件不是文件不存在:加
-a;配置类文件(.bashrc、.ssh)默认都藏着。 ls -l 目录会列出目录里面:只想看目录这一行,记得加-d。- 大小数字默认是字节:裸
ls -l看到4096是字节,加-h才是4.0K。 - 权限位里的
d/l/-要先看:第一个字符决定它是目录、链接还是普通文件。 ls是只读命令,可放心使用:它只看不改,不会破坏任何文件。