当前位置:首页>Linux>Linux ls 命令详细教程

Linux ls 命令详细教程

  • 2026-08-18 18:15:32
Linux ls 命令详细教程

ls[1] 程序用于列出文件(包括目录)的信息。选项和文件参数可以按任意顺序混合使用,这是其常见特性。如果选项之间存在冲突,后出现的选项会覆盖先前的。

ls [OPTION]... [FILE]...

基本行为

  • 目录参数:默认情况下,ls 会列出指定目录中的内容(非递归),并且忽略名称以点(.)开头的文件。
# 列出 work 目录$ ls workt.py                  tempCodeRunnerFile.py vim
  • 非目录参数:默认情况下,ls 只列出文件名。
$ ls work/t.pywork/t.py
  • 无参数时:如果没有指定任何非选项参数,ls 会操作当前目录,其行为等同于使用一个参数 .
$ lst.py                  tempCodeRunnerFile.py vim# 等同于$ ls .t.py                  tempCodeRunnerFile.py vim

默认排序与输出格式

# 准备测试文件touch file{1..6}.txt
  • 排序:默认情况下,ls 会根据当前生效的区域设置,按字母顺序列出每个目录的内容。

  • 如果标准输出连接到一个终端,输出会以列的形式显示(垂直排序),并且控制字符会安全地显示为问号(?)。

$ lsfile1.txt             file4.txt             t.pyfile2.txt             file5.txt             tempCodeRunnerFile.pyfile3.txt             file6.txt             vim
  • 如果标准输出不是终端,输出会每行一项,并且控制字符会原样输出。
$ ls > ls_output.txt$ cat ls_output.txtfile1.txtfile2.txtfile3.txtfile4.txtfile5.txtfile6.txtls_output.txtt.pytempCodeRunnerFile.pyvim

退出状态

  • 0: 成功
  • 1: 小问题(例如,不能访问子目录)
  • 2: 严重错误(例如,不能访问命令行参数)

1. 列出哪些文件

这些选项决定了 ls 会显示哪些文件的信息。

选项
全称/别名
功能描述
-a--all
列出所有文件,包括以点(.)开头的隐藏文件。
-A--almost-all
列出几乎所有文件,但仍忽略当前目录(.)和父目录(..)。注意:-a 选项会覆盖此选项。
-B--ignore-backups
忽略以波浪符(~)结尾的备份文件。等价于 --ignore='*~' --ignore='.*~'
-d--directory
将目录本身视为普通文件列出,而不是列出其内容。除非指定了 -H-L 或 --dereference-command-line-symlink-to-dir 选项,否则不会解引用命令行中列出的符号链接。
-H--dereference-command-line
如果命令行参数指定了一个符号链接,则显示该链接指向的文件的信息,而不是链接本身的信息。
--dereference-command-line-symlink-to-dir
通常不解引用符号链接,但有一个例外:如果命令行参数指定了一个指向目录的符号链接,则显示该目录的信息。这是默认行为,除非使用了长格式或以下任一选项生效:-F-d-L 或 -H
--hide=模式
在目录中,忽略名称匹配指定 shell 模式的文件,除非同时给出了 -a 或 -A 选项。此选项类似于 --ignore,但当 -a 或 -A 生效时,此选项无效。
-I 模式--ignore=模式
在目录中,忽略名称匹配指定 shell 模式(不是正则表达式)的文件。类似于 shell 通配符,文件名开头的点(.)不匹配模式开头的通配符。可以多次使用此选项来忽略多种模式。
-L--dereference
显示符号链接信息时,显示链接指向的文件的信息,而不是链接本身的信息。但,ls 仍会打印链接本身的名称,而不是其指向的文件名。
-R--recursive
递归地列出所有目录的内容。

示例:

  • $ ls --ignore='.??*' --ignore='.[^.]' --ignore='#*'
    • 第一个 --ignore 忽略以 . 开头且长度大于等于 3 的文件名。
    • 第二个 --ignore 忽略以 . 开头的所有两字符文件名,除了 ..
    • 第三个 --ignore 忽略以 # 开头的文件名。

2. 列出哪些信息

这些选项影响 ls 显示的信息。默认情况下,只显示文件名。

选项
全称/别名
功能描述
--author
在长格式输出中,列出每个文件的作者(在 GNU/Hurd 系统中,文件作者可能与所有者不同)。
-D--dired
在主输出后,额外打印专用于 Emacs 编辑器的格式行,记录每个文件名在输出中的字节位置,方便 Emacs 准确定位。此选项隐含了长格式输出并禁用超链接。
--full-time
使用长格式输出,并列出完整的时间戳。等价于 -l --time-style=full-iso
-g
使用长格式输出,但省略所有者信息。
-G--no-group
在长格式输出中,抑制显示组信息。(这是某些非 GNU 版本 ls 的默认行为。)
-h--human-readable
以人类可读格式显示文件大小(例如,K、M、G),使用 1024 为基数。M 表示 1,048,576 字节。等价于 --block-size=human-readable。如需使用 1000 为基数,请使用 --si 选项。
-i--inode
在每个文件名的左侧打印其 inode 号(索引节点号)。
-l--format=long
 / --format=verbose
使用长格式输出详细信息。包括:文件类型、权限位、硬链接数、所有者、所属组、大小和时间戳(默认为修改时间 mtime)。对于特殊文件(块/字符设备),大小字段会被设备的主/次设备号替代。
-n--numeric-uid-gid
使用长格式输出,但显示数字形式的用户 ID 和组 ID,而不是用户名和组名。
-o
使用长格式输出,但省略组信息。等价于 -l -G
-s--size
在每个文件名的左侧打印其文件系统分配大小(通常是 1024 字节的块数)。此大小可能因文件系统特性(如稀疏文件)而与其内容大小不同。
--si
以 SI 标准(国际单位制)显示文件大小(例如,k、M、G),使用 1000 为基数。M 表示 1,000,000 字节。等价于 --block-size=si。如需使用 1024 为基数,请使用 -h 选项。
-Z--context
显示 SELinux 安全上下文,如果未找到则显示 ?。在长格式中,安全上下文显示在大小列的左侧。
$ ls -ltotal 36-rw-r--r-- 1 root root 4136 Dec 10 16:47 ascii.sh-rw-r--r-- 1 root root    0 Jan  6 15:24 back~-rw-r--r-- 1 root root 1360 Dec  1 15:36 opts_parse.sh-rwxr-xr-x 1 root root 9257 Dec 10 13:29 printf.sh-rw-r--r-- 1 root root  628 Nov 23 21:12 return.sh-rw-r--r-- 1 root root  793 Nov 23 21:18 trap_debug.shdrwxr-xr-x 3 root root 4096 Dec 30 16:03 work-rw-r--r-- 1 root root    0 Oct  1  2023 xx.txtlrwxrwxrwx 1 root root    6 Jan  6 15:27 xx.txtt -> xx.txt

-l 选项的详细说明:

  • 第一列 - 文件类型:

    • -:普通文件
    • b:块设备文件
    • c:字符设备文件
    • d:目录
    • l:符号链接
    • p:命名管道 (FIFO)
    • s:套接字
    • ?:其他类型
  • 后续 9 列 - 权限位:rwxrwxrwx(所有者-组-其他用户)

    • s:设置了 set-user-ID 或 set-group-ID 位,且对应的可执行位也被设置。
    • S:设置了 set-user-ID 或 set-group-ID 位,但对应的可执行位未设置。
    • t:设置了 sticky 位 (t),且其他用户的可执行位也被设置。
    • T:设置了 sticky 位 (t),但其他用户的可执行位未设置。
    • x:设置了可执行位,且以上情况均不适用。
    • -:以上情况均不适用。
    • 特殊位表示:
  • 额外字符:权限位之后可能有一个额外字符,表示文件的替代访问方法(如 ACL):

    • (空格):无替代访问方法。
    • .:具有安全上下文,但无其他替代访问方法(GNU ls 特有)。
    • +:具有其他组合的替代访问方法。
    • ?:无法确定。

3. 排序输出

这些选项改变 ls 输出目录中文件信息的顺序。默认按文件名根据 LC_COLLATE 区域设置进行字母排序。

选项
全称/别名
功能描述
-c--time=ctime
 / --time=status
在长格式中,显示状态变更时间 (ctime) 而非修改时间。在按时间排序时,也根据 ctime 排序。
-f
不排序,并且列出所有文件(包括隐藏文件)。效果如同 -U -a 的组合。
--group-directories-first
列出目录时,优先分组显示子目录,然后再显示非目录文件,并对这两组分别进行排序。
-r--reverse
反转当前排序的顺序(例如,反向字母序、最旧优先、最大优先等)。当 -U 生效时,此选项无效。
-S--sort=size
按文件大小排序,最大的优先。
-t--sort=time
按修改时间 (mtime) 排序,最新的优先。可以使用 --time 选项更改排序依据的时间戳类型。
-u--time=atime
 / --time=access / --time=use
在长格式中,显示最后访问时间 (atime)。在按时间排序时,也根据 atime 排序。
--time=mtime
 / --time=modification
默认的时间戳显示和排序模式。在长格式中显示修改时间 (mtime)。
--time=birth
 / --time=creation
在长格式中,显示文件创建时间(如果可用),否则回退到修改时间 (mtime)。按时间排序时,根据创建时间排序。
-U--sort=none
不排序;按文件在目录中存储的原始顺序列出。在列出大型目录时,可以避免排序带来的性能开销。注意:与 -f 不同,此选项不隐含 -a
-v--sort=version
按版本名称和编号进行自然排序(将数字序列按数值处理),版本号低的优先。
--sort=name
按文件名排序。这是 ls 的默认操作,可显式指定以覆盖先前设置的排序选项。
--sort=width
按文件名的打印宽度排序。与 -C 输出格式结合使用时,可使文件列表的显示最紧凑。
-X--sort=extension
按文件扩展名(最后一个点 . 之后的部分)的字母顺序排序;无扩展名的文件优先列出。

4. 通用输出格式

这些选项影响整体输出的外观。

选项
全称/别名
功能描述
--format=single-column
每行只列出一个文件名。这是当标准输出不是终端时 ls 的默认格式。
-1
每行列出一个文件。类似于 --format=single-column,但如果长格式生效,此选项无效。
-C--format=vertical
以垂直排序的列形式列出文件。这是当标准输出是终端时 ls 的默认格式。GNU ls 使用可变宽度列来在尽可能少的行中显示最多的文件。
--color[=when]
指定是否使用颜色来区分文件类型。when 可以是:never(从不)、auto(仅当输出到终端时,默认)、always(总是)。使用 --color 而不指定 何时 等价于 --color=always
-F--classify[=when]
 / --indicator-style=classify
在文件名后追加字符以指示文件类型。可执行文件后加 *。目录 /,符号链接 @,FIFO ,套接字 =when 参数同--color
--file-type
 / --indicator-style=file-type
在文件名后追加字符以指示文件类型。类似于 -F,但不标记可执行文件。
--hyperlink[=when]
输出一些终端支持的超链接代码,使用 file:// URI 格式链接到文件。when 参数同 --color
--indicator-style=style
指定文件名后的指示符样式。style 可为:none(无)、slash(目录后加 /,同 -p)、file-type(同 --file-type)、classify(同 -F)。
-k--kibibytes
将默认块大小设置为 1024 字节,覆盖环境变量中的设置。但 --block-size-h 或 --si 选项的优先级更高。此选项影响长格式输出的目录总块数和 -s 选项的输出,不影响文件字节大小。
-m--format=commas
以逗号加空格(,)分隔文件,水平列出,每行尽可能多地放置文件名。
-p--indicator-style=slash
仅在目录名后追加 /
-x--format=across
 / --format=horizontal
以水平排序的列形式列出文件。
-T 列数--tabsize=列数
假设每个制表符(Tab)宽度为指定列数。默认是 8。设为 0 则完全不使用制表符。如果终端硬件制表位设置非默认,需配合此选项或 TABSIZE 环境变量。
-w 列数--width=列数
假设屏幕宽度为指定列数。默认取自终端设置,否则取自 COLUMNS 环境变量,否则为 80。设为 0 表示输出行长度无限制,并用空格而非制表符分隔。
--zero
在每行末尾输出零字节(ASCII NUL)而不是换行符。这使得其他程序即使面对包含换行符的文件名也能正确解析输出。此选项隐含 -1--color=none 和 --quoting-style=literal,且与 -D 选项不兼容。

5. 格式化文件时间戳

默认情况下,文件时间戳以简略形式列出:非最近的文件使用类似 Mar 30 2025 的日期,最近的文件(6 个月内)使用类似 Mar 30 23:45 的日期和时间(不含年份)。具体格式受当前区域设置影响。

选项
功能描述
--time-style=样式
使用指定的样式列出时间戳。

--time-style 样式详解:

  • +format:使用自定义的 format 字符串,语法同 date 命令。例如:--time-style="+%Y-%m-%d %H:%M:%S" 会输出 2025-12-10 16:47:18。如果格式字符串中包含换行符,则前一部分用于非最近文件,后一部分用于最近文件。
  • full-iso:完整的 ISO 8601 风格,包含日期、时间(纳秒精度)和时区。例如:2025-12-10 16:47:18.955327007 +0800。等价于 +%Y-%m-%d %H:%M:%S.%N %z
  • long-iso:ISO 8601 风格,精确到分钟。例如:2025-12-10 16:47。等价于 +%Y-%m-%d %H:%M
  • iso:非最近文件用 ISO 8601 日期(如 2024-03-30),最近文件用月-日 时:分(如 03-30 23:45)。较为紧凑。
  • locale:依赖于区域设置 (LC_TIME) 的格式。易于阅读,但格式不统一,不易解析。是默认样式
  • posix-style:当 LC_TIME 区域设置为 POSIX 时,使用 POSIX 区域格式,否则使用 样式 指定的格式。例如,posix-long-iso 在 POSIX 区域下输出 Mar 30 2025 和 Mar 30 23:45,否则输出 2025-03-30 23:45

环境变量:可以使用 TIME_STYLE 环境变量设置 --time-style 的默认值。如果未设置,默认样式是 locale

export TIME_STYLE="+%Y-%m-%d %H:%M:%S"

6. 格式化文件名

这些选项改变文件名本身的打印方式。

选项
全称/别名
功能描述
-b--escape
 / --quoting-style=escape
对文件名中的非图形字符使用类似 C 语言的字母和八进制反斜杠转义序列。
-N--literal
 / --quoting-style=literal
不引用文件名。但当输出到终端且未指定 --show-control-chars 时,非图形字符仍显示为问号。
-q--hide-control-chars
将文件名中的非图形字符打印为问号。如果输出是终端且程序是 ls,这是默认行为。
-Q--quote-name
 / --quoting-style=c
用双引号包围文件名,并像 C 语言字符串那样转义非图形字符。
--quoting-style=style
使用指定的样式来引用文件名和其他可能包含任意字符的字符串。

--quoting-style 样式详解:

  • literal:原样输出字符串。同 -N
  • shell:如果字符串包含 shell 元字符或会导致歧义输出,则为 shell 引用。适用于 bash 等 POSIX 兼容 shell,但不总适用于 csh 等。
  • shell-always:始终为 shell 引用字符串,即使通常不需要。
  • shell-escape:类似于 shell,但使用 POSIX $'...' 语法引用非打印字符。这是输出到终端时的默认格式,因为它能明确、安全地表示任何文件名。结合 LC_ALL=C 使用可避免某些终端字符转换问题。
  • shell-escape-always:类似于 shell-escape,但始终引用字符串。
  • c:像 C 字符串字面量一样引用,包括外围双引号。同 -Q
  • c-maybe:像 C 字符串字面量一样引用,但如果不需要转义,则省略外围双引号。
  • escape:像 C 字符串字面量一样引用,但省略外围双引号。同 -b
  • clocale:像 C 字符串字面量一样引用,但使用适合区域设置的外围引号。
  • locale:像 C 字符串字面量一样引用,但使用适合区域设置的外围引号。在默认 C 区域设置中,使用单引号 'like this' 而非双引号,显示更美观。
选项
功能描述
--show-control-chars
将文件名中的非图形字符原样输出。除非输出是终端且程序是 ls,否则这是默认行为。

环境变量:可以使用 QUOTING_STYLE 环境变量设置 --quoting-style 的默认值。如果未设置,当输出是终端时,默认值是 shell-escape,否则是 literal

参考资料

[1] 

ls: https://www.gnu.org/software/coreutils/manual/html_node/ls-invocation.html

最新文章

随机文章