Section 7.1: ls 命令的参数选项

下面是通过ls --help命令得到的输出结果,包含了 ls 命令中可以用的全部选项

用法:ls [选项]... [文件]...
列出 <文件>(默认为当前目录)的信息。
如果既没有指定 -cftuvSUX 中任何一个,也没有指定 --sort,则按字母排序项目。

长选项的必选参数对于短选项也是必选的。
  -a, --all                  不要隐藏以 . 开头的项目
  -A, --almost-all           列出除 . 及 .. 以外的所有项目
      --author               与 -l 同时使用时,列出每个文件的作者
  -b, --escape               以 C 风格的转义序列表示不可打印的字符
      --block-size=大小      与 -l 同时使用时,打印大小前将其除以 <大小>;
                             例如:"--block-size=M";参见下方的 <大小> 格式

  -B, --ignore-backups       不要列出以 ~ 结尾的项目
  -c                         与 -lt 一起使用时:按照 ctime 排序,并显示
                             ctime(文件状态信息最后修改的时间);
                             与 -l 一起使用时:显示 ctime 并按照名称排序;
                             其它情况:按照 ctime 排序,最新的最前

  -C                         逐列列出项目
      --color[=何时]         指定 <何时> 使用彩色输出;更多信息请见下文
  -d, --directory            列出目录本身,而不是目录的内容
  -D, --dired                产生适合 Emacs 的 dired 模式使用的输出
  -f                         按照目录顺序列出各项目
  -F, --classify[=何时]      指定 <何时> 在项目后追加指示符号(*/=@| 中的一个)
      --file-type            类似,但不追加 "*" 字符
      --format=关键字        across 同 -x、commas 同 -m、horizontal 同 -x、
                               long 同 -l、single-column 同 -1、verbose 同 -l、
                               vertical 同 -C

      --full-time            等于 -l --time-style=full-iso
  -g                         类似 -l,但不列出所有者
      --group-directories-first
                             将目录排在文件前面;
                             此选项可与 --sort 一起使用,但是一旦使用
                             --sort=none (-U) 则禁用此选项

  -G, --no-group             使用长列表格式时,不输出组名
  -h, --human-readable       同时使用 -l 或 -s 时,将大小表示为 1K 234M 2G 等
      --si                   类似,但是使用 1000 的幂,而不是 1024
  -H, --dereference-command-line
                             跟随命令行中列出的符号链接
      --dereference-command-line-symlink-to-dir
                             跟随命令行中列出的、指向目录的符号链接

      --hide=模式            隐藏符合 shell <模式> 的项目
                             (-a 或 -A 使此选项失效)

      --hyperlink[=何时]     指定 <何时> 使用超链接显示文件名
      --indicator-style=关键字  指定在项目名称后追加的指示符号的风格:
                                none(默认)、slash(同 -p)、
                                file-type(同 --file-type)、classify(同 -F)

  -i, --inode                显示每个文件的索引编号(inode 号)
  -I, --ignore=模式          隐藏符合 shell <模式> 的项目
  -k, --kibibytes            显示文件系统使用量时,默认使用 1024 字节的块大小;
                             只用于 -s 和每个目录的总计

  -l                         使用长列表格式
  -L, --dereference          当显示符号链接的文件信息时,显示符号链接指向
                             的文件的信息,而非符号链接本身的信息

  -m                         所有项目以逗号分隔,并填满整行行宽
  -n, --numeric-uid-gid      类似 -l,但列出用户和组的 ID 号
  -N, --literal              输出不加引号的项目名称
  -o                         类似 -l,但不列出有关组的信息
  -p, --indicator-style=slash
                             对目录追加 "/" 作为指示符号
  -q, --hide-control-chars   以 "?" 字符代替不可打印的字符
      --show-control-chars   原样显示无法打印的字符(这是默认行为,除非被调用
                             时的程序名是 "ls" 且在终端中进行输出)

  -Q, --quote-name           在项目名称两侧加上双引号
      --quoting-style=关键字  使用指定的加引号方式显示项目名称:
                              literal、locale、shell、shell-always、
                              shell-escape、shell-escape-always、c、escape
                              (该选项优先于 QUOTING_STYLE 环境变量)

  -r, --reverse              排序时逆序排列
  -R, --recursive            递归地列出子目录
  -s, --size                 显示给每个文件分配的大小,单位为块
  -S                         根据文件大小排序,最大的最前
      --sort=关键字          按照 <关键字> 而非名称进行排序:none(同 -U)、
                               size(同 -S)、time(同 -t)、version(同 -v)、
                               extension(同 -X)、width

      --time=关键字          选择用于显示或排序的时间戳;
                               访问时间(同 -u):atime、access、use;
                               元数据变更时间(同 -c):ctime、status;
                               修改时间(默认):mtime、modification;
                               创建时间:birth、creation;
                             和 -l 同时使用时,<关键字> 指定要显示的时间类型;
                             和 --sort=time 同时使用时,按照 <关键字> 进行排序
                               (最新的最前)

      --time-style=时间风格
                             使用 -l 时显示的时间/日期格式;参见下面
                             <时间风格> 的相关内容
  -t                         按时间排序,最新的最前;参见 --time
  -T, --tabsize=列数         指定制表符宽度为 <列数>,而非默认的 8
  -u                         与 -lt 同时使用时:显示访问时间且按访问时间排序;
                             与 -l 同时使用时:显示访问时间但按名称排序;
                             其他情况:按访问时间排序,最新的最前

  -U                         不进行排序;按照目录顺序列出项目
  -v                         对文本中的数字(或版本号)进行自然排序
  -w, --width=列数           设置输出宽度为 <列数>。0 表示无限制
  -x                         逐行列出项目而不是逐列列出
  -X                         按照扩展名的字母顺序排序
  -Z, --context              输出每个文件的所有安全上下文信息
      --zero                 以 NUL 字符而非换行结束每个输出行
  -1                         每行只列出一个文件
      --help        显示此帮助信息并退出
      --version     显示版本信息并退出

<大小> 参数是一个整数,后面可以跟一个单位(例如:10K 指 10*1024)。
可用的单位有 K、M、G、T、P、E、Z、Y、R、Q(1024 的幂),
以及 KB、MB、...(1000 的幂)。
也可以使用二进制前缀:KiB=K、MiB=M,以此类推。

<时间风格> 参数可以是 full-iso、long-iso、iso、locale,或者 +格式。
<格式> 的解析方式同 date(1)。如果 <格式> 是 格式1<换行符>格式2 的话,
则 <格式1> 将应用于时间较久远的文件,<格式2> 将应用于时间较近的文件。
<时间风格> 如果带有 "posix-" 前缀,则它只会在区域设置非 POSIX 时生效。
另外,可以使用 TIME_STYLE 环境变量设置默认使用的风格。

<何时> 参数的默认值是 "always",也可以设为 "auto" 或 "never"。

使用颜色来区分文件类型的功能默认禁用,也可以使用 --color=never 禁用。
若使用 --color=auto 选项,ls 只在标准输出连接至终端时才生成颜色代码。
LS_COLORS 环境变量可以改变颜色设置。可以使用 dircolors(1) 命令来设置它。

退出状态:
 0  表示正常,
 1  表示小问题(例如:无法访问子目录),
 2  表示严重问题(例如:无法使用命令行参数)。

Section 7.2: ls命令的最常用例子

ls 命令显示当前工作目录中的文件和目录。默认情况下没有传递任何参数,它不会显示以 . 开头的隐藏文件。

demouser@demohosts:/var$ ls
backups  cache  crash  lib  local  lock  log  mail  metrics  opt  run  snap  spool  tmp

使用 ls -a 或 ls --all 查看所有文件(包括 隐藏文件/文件夹)。

demouser@demohosts:/var$ ls -a
.   backups  crash  local  log   metrics  run   spool  .updated
..  cache    lib    lock   mail  opt      snap  tmp
demouser@demohosts:/var$ ls --all
.   backups  crash  local  log   metrics  run   spool  .updated
..  cache    lib    lock   mail  opt      snap  tmp

使用 ls -F 或 ls --classify 可以区分文件和文件夹、符号链接和其他

demouser@demohosts:~$ ls -F
公共/  图片/  音乐/        daemon_symbolic@             docker-gitlab.yml   HardwareList.xml
模板/  文档/  桌面/        docker-compose-linux-x86_64*  docker-lskypro.yml  snap/
视频/  下载/  daemon.json  docker-compose.yml            HardwareList.html   typecho/
demouser@demohosts:~$ ls --classify
公共/  图片/  音乐/        daemon_symbolic@              docker-gitlab.yml   HardwareList.xml
模板/  文档/  桌面/        docker-compose-linux-x86_64*  docker-lskypro.yml  snap/
视频/  下载/  daemon.json  docker-compose.yml            HardwareList.html   typecho/

在输出结束中结尾的字符用于区分文件和文件夹。

  • / 代表目录

  • * 代表可执行文件

  • @ 代表链接文件

To get more details about the files and directories, use ls -l

要获得有关文件和目录的更多详细信息,就需要用到 ls -l 这个命令了。

demouser@demohosts:~$ ls -l
总计 1072
drwxr-xr-x 2 demouser demouser   4096  9月 23 19:50 公共
drwxr-xr-x 2 demouser demouser   4096  9月 23 19:50 模板
drwxr-xr-x 2 demouser demouser   4096  9月 23 19:50 视频
drwxr-xr-x 2 demouser demouser   4096  9月 23 19:50 图片
drwxr-xr-x 2 demouser demouser   4096  9月 23 19:50 文档
drwxr-xr-x 2 demouser demouser   4096  9月 23 19:50 下载
drwxr-xr-x 2 demouser demouser   4096  9月 23 19:50 音乐
drwxr-xr-x 2 demouser demouser   4096  9月 23 19:50 桌面
-rw-r--r-- 1 demouser demouser     66 10月 24 09:41 daemon.json
lrwxrwxrwx 1 demouser demouser     23 11月  5 12:00 daemon_symbolic -> /etc/docker/daemon.json
-rwxrwxr-x 1 demouser demouser 620528 11月  2 10:52 docker-compose-linux-x86_64
-rw-rw-r-- 1 demouser demouser    886 10月 31 21:19 docker-compose.yml
-rw-rw-r-- 1 demouser demouser    428 10月 31 22:32 docker-gitlab.yml
-rw-rw-r-- 1 demouser demouser    155 11月  1 22:32 docker-lskypro.yml
-rw-rw-r-- 1 demouser demouser 249670 11月  5 10:43 HardwareList.html
-rw-rw-r-- 1 demouser demouser 165808 11月  5 10:43 HardwareList.xml
drwx------ 4 demouser demouser   4096 10月 31 21:00 snap
drwxr-xr-x 4 root     root       4096 10月 31 21:24 typecho

在这个例子中,目录当前内容(不含子目录的内容)的总大小是1072KB。

然后,每个文件/目录都有一行条目,顺序按字母排列,数字开头排最前面,接着是中文等字符,最后大写字母在小写字母之前。

  • 第一个字符是类型(例如d - directory, l - link)

  • 接下来的9个字符显示用户、组和其他用户的权限。

  • 接下来是硬链接的数量,然后是所有者的名字和组。

  • 下一个字段是以字节为单位的大小。这可以通过添加-h选项以人类友好的形式显示。如:docker-compose-linux-x86_64文件的 “620528” 显示为 “606K”。

  • 接下来是一个时间戳(通常是修改时间)。

  • 最后一个字段是名字。注意:链接也显示链接的目标,如上面的daemon_symbolic -> /etc/docker/daemon.json。