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强制为never、sorting.dir-grouping强制为none、date强制为date、icons.when强制为never,是追求ls向后兼容的最快方式。
三、OPTIONS 类选项:带值的精确控制
这类选项需要携带参数值,涵盖显示格式、排序、主题与筛选。
3.1 排序相关
| 选项 | 作用 |
|---|---|
-X,--extensionsort | 按文件扩展名排序 |
-S,--sizesort | 按文件大小排序 |
-t,--timesort | 按修改时间排序 |
-v,--versionsort | 对文本中的数字进行自然(版本号)排序 |
--sort <WORD> | 按指定关键字排序,<WORD>可选:size、time、version、extension、git |
-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>... | 指定长格式/树形布局下显示的列及其顺序,可选值:permission、user、group、size、date、name、inode、git |
--date <date>... | 日期列格式,可选值:date(默认)、locale、relative、+日期格式字符串 |
--permission <mode> | 权限列格式,可选值:rwx(Linux 默认)、octal、attributes(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-iso、long-iso、iso、locale或+格式均可用。
3.3 颜色、图标与超链接
| 选项 | 作用 |
|---|---|
--color <mode> | 何时使用终端颜色,可选值:always、auto(默认)、never |
--icon <mode> | 何时打印图标,可选值:always、auto(默认)、never |
--icon-theme <theme> | 图标主题,可选值:fancy(默认,Nerd Font 字形)、unicode(Unicode emoji) |
--hyperlink <mode> | 是否给文件名附加超链接,可选值:always、auto、never(默认) |
图标的默认字形集合定义在 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/lsd、dirs::config_dir()对应的目录、XDG Base Directory 规范目录,并且同时兼容config.yaml与config.yml两种扩展名(src/config_file.rs)。
6.3SHELL_COMPLETIONS_DIR或OUT_DIR
用于指定 shell 补全文件的生成目录。二者均未设置时不生成补全文件;目标目录不存在时会自动创建。这是构建期(构建脚本生成补全)相关的变量。
七、配置文件的纵深理解:CLI 与 YAML 的优先级
手册未展开、但对实战至关重要的配置机制补充如下:
lsd 支持三类配置文件,均位于上述配置目录中(README.md):
config.yaml— 主配置,完整样例见 doc/samples/config-sample.yamlcolors.yaml— 颜色主题,完整样例见 doc/samples/colors-sample.yamlicons.yaml— 图标覆盖,完整样例见 doc/samples/icons-sample.yaml
三者独立生效:例如只放icons.yaml即可仅定制图标,无需其他两个文件。配置目录内的默认config.yaml内容即 src/config_file.rs 中内嵌的DEFAULT_CONFIG常量;命令行选项--generate-config可将该默认配置直接打印到标准输出,方便复制到配置目录后修改。
取值优先级定义在 src/flags.rs 的Configurabletrait 中,从高到低为:
- 命令行参数(
from_cli) - 环境变量(
from_environment,如TIME_STYLE) - 配置文件(
from_config) - 内置默认值(
Default::default())
这意味着命令行参数始终压过配置文件;而配置解析失败时(如 src/config_file.rs 所示)会在 stderr 打印 "Configuration file ... format error" 并回落到默认值。
config.yaml的核心配置节包括:classic(经典模式总开关)、blocks(列顺序)、color.when/theme、date、dereference、display(all/almost-all/directory-only)、icons.when/theme/separator、ignore-globs、indicators、layout(grid/tree/oneline)、recursion.enabled/depth、size、permission、sorting.column/reverse/dir-grouping、no-symlink、total-size、hyperlink、symlink-arrow(如⇒)、header、literal、truncate-owner.after/marker。注意其中的icons.separator可解决个别终端模拟器(如 Konsole)下文件名首字符被裁切的问题,将分隔符改为两个不可见字符即可。
colors.yaml用于定义用户/组、权限、日期、大小、inode、链接、树形边线与 git 状态等元素的颜色,支持 256 色调色板数字与dark_green、dark_red等具名颜色。icons.yaml则支持三种覆盖维度:name(按完整文件名)、extension(按扩展名)、filetype(按文件类型如dir、file、pipe、socket、executable、symlink-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),仅供参考