菜鸟科技网

ftp命令mlsd

MLSDMachine List Standard Directory 的缩写,它是一个现代 FTP 协议中用于列出目录内容的命令。

ftp命令mlsd-图1
(图片来源网络,侵删)

MLSD 是什么?

MLSD 是一个为机器(程序)而非人类设计的目录列表命令,它的主要特点是:

  • 格式固定:输出的格式是标准化的,通常使用 key=value 对的形式,每一行代表一个文件或目录。
  • 易于解析:由于格式固定,程序(脚本、客户端软件)可以非常容易、可靠地解析输出内容,提取出文件名、大小、修改时间、权限等信息。
  • 功能强大:它提供了比传统的 LIST (或 LS) 命令更丰富的文件属性信息。

可以把它看作是 FTP 版本的 ls -l 的机器可读版本。


MLSDLIST / NLST 的核心区别

这是理解 MLSD 的关键,我们通过一个对比表格来看:

特性 MLSD (Machine List Standard) LIST (或 LS) NLST (Name List)
设计目标 机器可读 人类可读 机器可读(仅文件名)
输出格式 标准化,通常是 fact=value 对,用空格分隔。 非标准化,格式因 FTP 服务器操作系统而异 (Unix, Windows, VMS 等)。 简单,每行一个文件名或目录名。
可靠性 ,程序可以稳定解析。 ,程序需要复杂的逻辑来处理不同格式的输出。 ,但信息非常有限。
使用场景 自动化脚本、文件同步工具、需要精确获取文件属性的程序。 用户手动在命令行交互查看目录内容。 快速获取文件列表,例如检查某个文件是否存在。

MLSD 的工作原理

  1. 发送命令:客户端向 FTP 服务器发送 MLSD 命令。
  2. 建立数据连接:服务器会像 LIST 命令一样,建立一个数据连接(通常是被动模式 PASV)来传输数据。
  3. 接收数据:服务器通过数据连接将格式化的目录列表信息发送给客户端。
  4. 关闭连接:数据传输完毕后,数据连接会自动关闭。

MLSD 的输出格式详解

MLSD 的输出是每行一个条目,每个条目由一组或多组 fact=value 组成,最后是文件名。

ftp命令mlsd-图2
(图片来源网络,侵删)

常见的 fact (属性) 包括:

  • type: 文件类型。dir 表示目录,file 表示文件,cdir 表示当前目录,pdir 表示父目录。
  • size: 文件大小(字节)。
  • modify: 文件最后修改时间,格式通常为 YYYYMMDDHHMMSS[+/-]HHMM
  • perm: 文件权限。a 表示允许所有(读、写、执行/进入),r 表示只读,w 表示可写,f 表示可重命名/删除。
  • unique: 文件的唯一标识符(类似于 Unix 的 inode 号)。
  • unix.mode: Unix 权限位(如 0755)。
  • unix.owner: Unix 文件所有者 ID。
  • unix.group: Unix 文件所属组 ID。

示例输出:

假设一个目录下有一个名为 report.txt 的文件和一个名为 archive 的子目录,MLSD 的输出可能如下:

type=file;size=1024;modify=20251027103000;perm=r; report.txt
type=dir;size=0;modify=20251020090000;perm=e; archive

如何解析:

  • 第一行:描述 report.txt
    • type=file: 这是一个文件。
    • size=1024: 文件大小为 1024 字节。
    • modify=20251027103000: 最后修改时间是 2025年10月27日 10:30:00。
    • perm=r: 权限是只读。
    • report.txt: 文件名(注意前面有一个空格)。
  • 第二行:描述 archive
    • type=dir: 这是一个目录。
    • size=0: 目录的大小通常为 0。
    • modify=20251020090000: 最后修改时间是 2025年10月20日 09:00:00。
    • perm=e: 权限是允许进入(e for enter)。
    • archive: 目录名。

如何使用 MLSD (在命令行)

在标准的 FTP 客户端(如 Windows 的 ftp.exe 或 Linux/macOS 的 ftp)中,使用 MLSD 非常简单。

# 1. 连接到 FTP 服务器
$ ftp ftp.example.com
Connected to ftp.example.com.
220-Welcome to the FTP example server.
220-Please visit our website at http://www.example.com
220 You will be disconnected after 15 minutes of inactivity.
Name (ftp.example.com:user): myusername
331 Password required for myusername.
Password:
230-User logged in.
230 Access granted.
# 2. 进入目标目录 (可选)
ftp> cd /path/to/your/directory
250 Directory successfully changed.
# 3. 发送 MLSD 命令
ftp> mlsd
200 Command okay.
150 Opening data connection for MLSD.
# 4. 查看服务器返回的机器可读格式列表
type=file;size=1024;modify=20251027103000;perm=r; report.txt
type=dir;size=0;modify=20251020090000;perm=e; archive
226 Transfer complete.
ftp: 32 bytes received in 0.00Seconds 32.00Kbytes/sec.
# 5. 退出 FTP
ftp> bye
221 Goodbye.

重要注意事项

  • 服务器支持MLSD 是在 RFC 3659 中定义的相对较新的标准,非常老旧的 FTP 服务器可能不支持此命令,如果服务器不支持,它会返回 500 'MLSD': command not recognized 这样的错误。
  • 数据连接:和 LIST 一样,MLSD 依赖于一个独立的数据连接来传输数据,如果防火墙或网络配置有问题,数据连接可能会失败。
  • MLST 的区别:还有一个相关的命令叫 MLST (Machine List)。MLSD 列出当前目录下的所有内容,而 MLST 只列出单个文件或目录的详细信息,并且其输出通常以状态行开头,以文件名结尾。MLST 常用于在操作前检查一个特定文件的属性。

MLSD 是现代 FTP 自动化任务中首选的目录列表命令,它为程序提供了可靠、标准化的方式来获取文件系统信息,避免了传统 LIST 命令因平台差异带来的解析难题,如果你正在编写任何与 FTP 交互的脚本或程序,都应该优先使用 MLSD 来获取目录内容。

ftp命令mlsd-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇