lsd(LSDeluxe)命令完整参考:选项、参数、环境变量与配置实战指南
2026/9/21 15:31:46 网站建设 项目流程

lsd(LSDeluxe)命令完整参考:选项、参数、环境变量与配置实战指南

【免费下载链接】lsdThe next gen ls command项目地址: https://gitcode.com/gh_mirrors/ls/lsd

lsd 是一款以 Rust 重写 GNUls的现代化目录列表工具,为传统ls增加了丰富的色彩、图标、树形视图与更多格式化能力,仓库中的 doc/lsd.md 即其标准手册(man page)源文档。本文以该手册为骨架,结合 README.md、src/app.rs 中的 CLI 定义、src/flags.rs 的标志位解析逻辑以及 doc/samples 目录下的真实配置样例,为你系统讲解 lsd 的全部命令行选项、位置参数、环境变量与配置文件机制,读完后你将能够完全掌控 lsd 的显示、排序与主题定制。

一、命令概览:名称、语法与定位

  • 名称(NAME)lsd,即 LSDeluxe。
  • 语法(SYNOPSIS)
lsd [FLAGS] [OPTIONS] [--] [FILE]...
  • 定位(DESCRIPTION):lsd 是一个带大量漂亮颜色(pretty colours)并内置若干增强能力的ls命令,用于丰富和强化目录列表体验。

语法中的[--]用于显式终止选项解析,之后的所有内容都按文件名处理;[FILE]...表示可同时传入多个文件或目录,默认值为.(当前目录)。这一点在 src/app.rs 中有直接对应实现:inputs: Vec<PathBuf>字段的默认值即为"."

从 src/main.rs 的主入口可以看到完整运行链路:Cli::parse_from解析命令行 → 按--ignore-config/--config-file加载配置 →Flags::configure_from合并 CLI 与配置文件生成最终标志位 →Core::new(flags).run(inputs)执行目录遍历与渲染。

二、FLAGS 类选项:显示行为开关

这类选项只改变行为、不带值,对应 src/app.rs 中bool类型的#[arg]定义。

2.1 条目显示范围

选项作用
-a,--all不忽略以.开头的条目(即包含隐藏文件)
-A,--almost-all列出除隐含的...之外的所有条目

两个选项可叠加使用,lsd -la即同时开启长格式与隐藏文件显示。在 src/app.rs 中,all通过overrides_with = "almost_all"声明了二者互斥覆盖关系。

2.2 符号链接与目录处理

选项作用
-L,--dereference显示符号链接所指向目标文件的信息,而非链接本身
-d,--directory-only只显示目录自身而不进入其内容;与--tree联用时递归生效
--no-symlink不显示符号链接的指向目标

注意-d-R(recursive)在源码中通过conflicts_with = "recursive"声明为互斥(src/app.rs)。

2.3 布局与递归

选项作用
-l,--long以表格形式展示扩展元数据(权限、属主、大小、日期等)
-1,--oneline每行仅显示一个条目
-R,--recursive递归进入所有子目录
--tree递归进入目录并以树形结构展示结果
--header显示块(列)头,即各列的标题行

-R--tree同样在源码中通过conflicts_with声明互斥(src/app.rs),二者不能同时使用。

2.4 元数据与信息增强

选项作用
-i,--inode显示每个文件的索引节点号(index number)
-F,--classify在文件名末尾追加指示符,可选* / = > @ |之一(分别对应可执行、目录、套接字、符号链接、管道等)
--total-size显示目录的总大小
-Z,--context显示 SELinux 或 SMACK 安全上下文标签
--git显示 git 状态;目录的 git 状态是其包含文件状态的递归汇总

其中--git通常配合-l使用,在 src/app.rs 的注释中明确写着 "Only when used with --long option"。

2.5 兼容与信息类

选项作用
--classic启用经典模式(无颜色、无图标),输出尽可能接近传统ls
-h,--human-readable仅为了与ls兼容而存在,当前版本默认即开启,无需手动指定
-N,--literal文件名不加引号原样打印(默认对特殊字符文件名会加引号)
--help打印帮助信息
-V,--version打印版本信息

--classic是一个全局开关:根据 config-sample.yaml 中的说明,它会一次性把color.when强制为neversorting.dir-grouping强制为nonedate强制为dateicons.when强制为never,是追求ls向后兼容的最快方式。

三、OPTIONS 类选项:带值的精确控制

这类选项需要携带参数值,涵盖显示格式、排序、主题与筛选。

3.1 排序相关

选项作用
-X,--extensionsort按文件扩展名排序
-S,--sizesort按文件大小排序
-t,--timesort按修改时间排序
-v,--versionsort对文本中的数字进行自然(版本号)排序
--sort <WORD>按指定关键字排序,<WORD>可选:sizetimeversionextensiongit
-U,--no-sort不排序,按目录原始顺序列出
-r,--reverse反转排序顺序
--group-dirs <mode>目录与文件的排序位置,<mode>可选:none(默认)、first(目录在前)、last(目录在后)
--group-directories-first目录排在文件之前,等价于--group-dirs=first

从源码看,快捷排序开关(-X/-S/-t/-v)与--sort之间存在覆盖关系:--sort通过overrides_with_all覆盖全部快捷开关,而-U又覆盖--sort与所有快捷开关(src/app.rs)。也就是说一旦指定-U,其他排序参数均被忽略。

3.2 显示格式与列控制

选项作用
--blocks <blocks>...指定长格式/树形布局下显示的列及其顺序,可选值:permissionusergroupsizedatenameinodegit
--date <date>...日期列格式,可选值:date(默认)、localerelative+日期格式字符串
--permission <mode>权限列格式,可选值:rwx(Linux 默认)、octalattributes(Windows 默认)、disable
--size <mode>大小列格式,可选值:default(默认,人类可读)、short(短格式)、bytes(原始字节数)
--truncate-owner-after <num>用户名/组名超过指定字符数时截断
--truncate-owner-marker <str>截断后追加的标记字符串

需要特别说明--date的自定义格式:以+开头后接 strftime 风格字符串,例如--date '+%d %b %y %X'会输出类似17 Jun 21 20:14:55的日期。该值在 src/app.rs 中经过validate_date_argument校验,且在 src/flags/date.rs 中逐字符验证格式说明符(支持%Y%m%d%H:%M:%S%.3f毫秒等),无效格式会直接报错拒绝。此外 src/flags/date.rs 还支持从环境变量TIME_STYLE读取日期样式:full-isolong-isoisolocale+格式均可用。

3.3 颜色、图标与超链接

选项作用
--color <mode>何时使用终端颜色,可选值:alwaysauto(默认)、never
--icon <mode>何时打印图标,可选值:alwaysauto(默认)、never
--icon-theme <theme>图标主题,可选值:fancy(默认,Nerd Font 字形)、unicode(Unicode emoji)
--hyperlink <mode>是否给文件名附加超链接,可选值:alwaysautonever(默认)

图标的默认字形集合定义在 src/theme/icon.rs 中(如目录、文件、可执行文件),而unicode主题则定义于 src/theme/icon.rs(如目录📂、文件📄)。注意auto模式意味着仅在检测到输出为终端(而非管道/重定向)时才启用颜色与图标。

3.4 过滤与配置来源

选项作用
-I,--ignore-glob <pattern>...忽略名称匹配 glob 模式的文件/目录,可重复指定多个模式
--ignore-config忽略配置文件,完全使用内置默认值
--config-file <path>从自定义路径加载配置文件
--depth <num>递归时到达指定深度后停止深入

--ignore-config在 src/main.rs 中实现为直接使用Config::with_none()(所有配置项均为 None,即全部回落到内置默认值);而--config-file则强制从指定路径解析 YAML。

四、ARGS:位置参数

参数说明
<FILE>...要列出的文件或目录,默认值为.(当前目录),可传多个

该参数在 src/app.rs 中定义为Vec<PathBuf>,支持任意数量与混合路径。

五、实战示例:从入门到组合技巧

手册(doc/lsd.md)给出的三个基础示例:

命令效果
lsd列出当前目录
lsd /etc列出/etc目录内容
lsd -la列出当前目录全部内容(含.开头的文件与当前目录自身条目),并以长格式展示

在此基础上,结合 README.md 中的别名建议,可以组合出更高效的日常命令:

alias ls='lsd' # 完全替代 ls alias l='lsd -l' # 长格式 alias la='lsd -a' # 显示隐藏文件 alias lla='lsd -la' # 长格式 + 隐藏文件 alias lt='lsd --tree' # 树形视图

更高级的组合示例:

lsd -la --group-dirs=first # 目录置顶 + 隐藏文件 + 长格式 lsd --tree --depth 3 # 树形结构,最深 3 层 lsd -l --git # 长格式并显示 git 状态 lsd -l --sort time --reverse # 按修改时间倒序排列 lsd --date relative -l # 长格式 + 相对日期(如 "2 hours ago") lsd -S --total-size # 按大小排序并显示目录总大小 lsd -I '*.log' -I node_modules # 忽略日志文件与 node_modules 目录 lsd -l --blocks permission,size,name # 只显示权限、大小、名称三列

需要注意各选项的组合边界:-R--tree互斥,-d-R互斥,-U会覆盖其他排序选项。

六、ENVIRONMENT:环境变量解析

6.1LS_COLORS

用于决定文件名显示颜色,语义遵循dir_colors规范。该变量是 GNUls生态的通用颜色方案,lsd 同样读取它来定制文件类型的颜色(doc/colors.md 中说明:"You can customize filetype colors usingLS_COLORS")。文件类型颜色与主题颜色是两套体系:LS_COLORS控制文件类型配色,其余颜色通过colors.yaml主题文件控制。

6.2XDG_CONFIG_HOME

用于定位可选配置文件。如果设置了XDG_CONFIG_HOME,则使用$XDG_CONFIG_HOME/lsd/config.yaml;否则使用$HOME/.config/lsd/config.yaml。在 src/config_file.rs 中,配置目录查找顺序依次为:$HOME/.config/lsddirs::config_dir()对应的目录、XDG Base Directory 规范目录,并且同时兼容config.yamlconfig.yml两种扩展名(src/config_file.rs)。

6.3SHELL_COMPLETIONS_DIROUT_DIR

用于指定 shell 补全文件的生成目录。二者均未设置时不生成补全文件;目标目录不存在时会自动创建。这是构建期(构建脚本生成补全)相关的变量。

七、配置文件的纵深理解:CLI 与 YAML 的优先级

手册未展开、但对实战至关重要的配置机制补充如下:

lsd 支持三类配置文件,均位于上述配置目录中(README.md):

  1. config.yaml— 主配置,完整样例见 doc/samples/config-sample.yaml
  2. colors.yaml— 颜色主题,完整样例见 doc/samples/colors-sample.yaml
  3. icons.yaml— 图标覆盖,完整样例见 doc/samples/icons-sample.yaml

三者独立生效:例如只放icons.yaml即可仅定制图标,无需其他两个文件。配置目录内的默认config.yaml内容即 src/config_file.rs 中内嵌的DEFAULT_CONFIG常量;命令行选项--generate-config可将该默认配置直接打印到标准输出,方便复制到配置目录后修改。

取值优先级定义在 src/flags.rs 的Configurabletrait 中,从高到低为:

  1. 命令行参数(from_cli
  2. 环境变量(from_environment,如TIME_STYLE
  3. 配置文件(from_config
  4. 内置默认值(Default::default()

这意味着命令行参数始终压过配置文件;而配置解析失败时(如 src/config_file.rs 所示)会在 stderr 打印 "Configuration file ... format error" 并回落到默认值。

config.yaml的核心配置节包括:classic(经典模式总开关)、blocks(列顺序)、color.when/themedatedereferencedisplayall/almost-all/directory-only)、icons.when/theme/separatorignore-globsindicatorslayoutgrid/tree/oneline)、recursion.enabled/depthsizepermissionsorting.column/reverse/dir-groupingno-symlinktotal-sizehyperlinksymlink-arrow(如)、headerliteraltruncate-owner.after/marker。注意其中的icons.separator可解决个别终端模拟器(如 Konsole)下文件名首字符被裁切的问题,将分隔符改为两个不可见字符即可。

colors.yaml用于定义用户/组、权限、日期、大小、inode、链接、树形边线与 git 状态等元素的颜色,支持 256 色调色板数字与dark_greendark_red等具名颜色。icons.yaml则支持三种覆盖维度:name(按完整文件名)、extension(按扩展名)、filetype(按文件类型如dirfilepipesocketexecutablesymlink-dir等),用户自定义条目会与 src/theme/icon.rs 中的默认图标表合并,Nerd Font 字形与 Unicode emoji 均可直接使用。

八、常见问题速查

  • 图标不显示:先执行echo $'\uf115'验证终端能否渲染目录图标字形;若显示为方框或问号,说明字体缺少对应字形,需要安装 Nerd Font 补丁字体并将终端字体切换为该字体(README.md)。
  • 首字符被裁切:属于个别终端模拟器(如 Konsole)的已知问题,可先运行lsd --icon never --ignore-config验证是否字体导致;也可通过icons.separator配置规避。
  • 输出出现 � 字符:说明文件名包含非法 UTF-8 字节,lsd 会用U+FFFD REPLACEMENT CHARACTER表示,属正常行为。
  • 图标显示错乱:Nerd Fonts v3.0 调整了 Material Design Icons 码点,建议使用 Nerd Fonts v2.3.0 及以上版本补丁的字体。
  • Windows 自定义颜色不生效:检查系统环境变量LS_COLORS是否缺失,需在 Windows 上手动设置该变量。

综上所述,lsd的手册虽短,但每个选项背后都有清晰的源码实现与可验证的配置样例支撑。无论是追求开箱即用的多彩目录浏览,还是希望通过 config.yaml、colors.yaml、icons.yaml 与LS_COLORS打造完全个人化的终端体验,本文列出的选项矩阵与优先级规则都足以让你精准控制 lsd 的每一个输出细节。

【免费下载链接】lsdThe next gen ls command项目地址: https://gitcode.com/gh_mirrors/ls/lsd

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

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

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

立即咨询