使用FTP命令获取服务器文件列表的核心操作是:通过ftp客户端登录目标服务器,并利用ls或dir命令列出指定目录下的文件与子目录。 这套命令组合适用于日常运维巡检、网站文件备份核对以及服务器迁移前的数据盘点,掌握不同参数和脚本化调用方式,能让你在管理远程服务器时效率提升不少。
最常用的文件列表命令解析
交互式FTP会话太熟悉了不太容易出错,但命令细节决定了你能不能拿到真正想要的信息,登录FTP服务器后,最核心的两个命令就是ls和dir。
ls命令的基础用法
ls是最基础的列表命令,在大多数FTP服务端(如vsftpd、ProFTPD)中,输入ls会列出当前目录下的文件名和基础属性,输出的格式类似Linux的ls -l,包含权限位、属主、文件大小、修改时间和文件名,如果只需要文件名,可以尝试ls -1,不少服务端支持按单列格式输出。
dir命令与ls的细微差别
dir在FTP协议中的表现和ls在多数服务器上几乎一致,都是发送LIST指令到服务端,唯一可以感知的区别在于,部分Windows的FTP服务端(如IIS FTP)对dir会输出Windows风格的日期格式,而ls可能被某些服务端解析为简化格式,实际使用时,哪个输出更符合你的阅读习惯,就用哪个。
通配符过滤列表
想只查看特定类型的文件,用通配符比先拉全量列表再用本地工具过滤更省时。
ls *.zip— 只看压缩包。ls *.log— 只看日志文件。dir report*— 查看所有以report开头的文件或目录。
注意:通配符的解析由FTP服务端决定,并非所有服务端都支持,如果输入ls *.php返回空结果或者报错,大概率是服务端不支持通配符展开,改用ls -C或全量拉取后本地处理。
切换到指定目录后再列出
获取文件列表前,先明确当前所在位置,常用命令:
pwd— 查看远程当前目录。cd public_html— 切换到站点根目录。ls— 再执行列表。
这套组合拳在维护网站时特别实用,比如排查图片资源缺失,先cd到/uploads,再ls -l,对照时间戳判断文件是否被更新过。
获取文件列表的进阶技巧
基础命令能解决日常需求,但难免有些场景需要更精细的输出控制。
保存列表到本地
当目录内文件数量较多(比如上千个日志文件),屏幕滚动刷屏根本不是个好体验,此时需要把列表落盘:
ftp> ls -l > local_filelist.txt
这个操作会把远程列表输出重定向到本地文件,再配合文本编辑器的搜索功能去定位特定资源,同理,dir命令也可以重定向。
使用hash和prompt控制输出

脚本化操作时有两个交互参数建议先调整:
prompt off— 关闭交互确认,批量操作时避免每个文件都问一次。hash on— 传输文件时显示进度标记,虽然列表命令不受影响,但对后续下载操作很有用。
查看隐藏文件
很多FTP服务端(特别是Linux下)默认不显示以点开头的隐藏文件,比如.htaccess、.env,想要看到这些文件,可以在ls后加-a参数:
ftp> ls -a
部分服务端还支持-la组合,这常用于检查服务器是否存在可疑的隐藏脚本文件,对排查Webshell问题很有帮助。
Windows与Linux环境下的FTP命令差异
不同操作系统的自带FTP客户端在语法上有些细节需要区别对待。
Windows自带FTP客户端
Windows的ftp.exe是经典命令,按Win+R输入cmd后执行ftp即可进入交互模式,需要留意的短板是它不支持ls -a这类参数传递,部分参数会被直接忽略,如果想在Windows上获得Linux般的体验,可以考虑使用PowerShell内置的Get-ChildItem配合WebRequest,或者直接用第三方工具如WinSCP的命令行模式。
建议:在Windows脚本中批量获取文件列表时,优先使用PowerShell的FtpWebRequest类,支持更精细的WebRequestMethods.Ftp.ListDirectory调用。
Linux/macOS自带FTP客户端
Linux中执行ftp ip后,直接使用ls、dir即可,macOS自带的ftp命令与Linux基本一致,对于Linux重度用户,还可以使用lftp这类增强客户端,它支持cls命令,可以输出更加结构化的列表,甚至支持find、du等操作。
一行式非交互命令
脚本里经常需要不进入交互模式直接获取列表,可以使用:
ftp -n ip <<EOF
user username password
ls
bye
EOF
或
lftp -u username,password -e "ls; exit" ip
这种写法适合在备份脚本里执行,先把线上文件列表拿到,再和本地目录做diff对比,确认增量备份是否完整。
批量获取与自动化处理
日常运维中,单次交互查看只是皮毛,真正核心的是“批量”和“自动化”。
获取列表后按时间排序
ls -lt是Linux服务器上最常能用的参数组合,它按修改时间倒序排列,通过这个参数能快速识别哪些文件是最近被改动过的,很多主流FTP服务端都支持该参数。
多目录递归列表
原生FTP协议不支持真正的递归列出所有子目录与文件,较实用的替代方案是:
- 优先用
ls拿到当前目录下的子目录清单。 - 逐个
cd进入子目录再执行ls。 - 记录各目录输出结果。
这一步操作如果频繁使用,建议写成带循环的Shell脚本,在脚本里维护一个目录清单数组,自动化遍历并追加输出到日志文件,结合定时任务(crontab),每天自动记录一次全站文件清单,对追踪网页篡改、临时文件异常增长非常有用。

与本地列表做差异对比
获取远程列表后,与本地目录树做对比是常见的备份校验手段,Linux下可以使用:
find /本地目录 -type f -printf "%P %s\n" | sort > local.txt
ftp -n ip <<EOF > remote.txt
user user pass
ls -lR
bye
EOF
然后执行diff local.txt remote.txt,看到的差异项就是需要同步的文件列表。
常见状态码与故障排查
列表命令获取失败,别急着怀疑服务器挂了,先看返回码。
| 状态码 | 含义 | 处理建议 |
|---|---|---|
| 150 | 连接已建立,准备传输列表 | 正常状态,等待列表输出 |
| 200 | 命令执行成功 | 正常 |
| 226 | 列表传输完毕 | 正常 |
| 425 | 无法打开数据连接 | 检查防火墙或主动/被动模式设置 |
| 426 | 连接关闭,传输中止 | 网络波动或服务端超时 |
| 450 | 文件不可用(如权限不足) | 检查账户权限 |
| 500 | 命令无法识别 | 确认当前客户端不支持该参数 |
| 550 | 没有权限或文件不存在 | 检查路径和目录权限 |
遇到425/426错误时,先尝试在FTP客户端中输入passive切换被动模式,多数情况下可以绕开NAT或云安全组限制。
权限、安全与稳定性考量
FTP文件列表难免会暴露目录结构信息,在使用时尽量用专有低权限账号,限制其可访问目录范围,有些场景下Get列表并不只是为了看文件,而是为了做资产审计。
简米科技在运维机房时,遇到过不少客户只为了看日志列表就给出root级别FTP权限的情况,这个操作在等保测评里会被直接判为高风险,合理的做法是依托简米科技提供的主机管理系统,开通仅包含list和get权限的专用账号,配合增值电信业务经营许可证(豫B2-20231089)对应的合规机房网络策略,限制来源IP,从源头上降低信息暴露风险。
在服务器托管选址时,稳定性同样重要。简米科技自2003年始创,拥有23年行业沉淀,机房为持牌自营机房,同时拥有豫ICP备2023018319号备案资质,对于需要频繁拉取文件列表做数据同步的业务,网络链路质量直接决定了FTP命令的响应速度,选择这种有长期运营经验的IDC服务商,能减少因机房网络抖动导致会话中断的问题。
在国内公有云市场,酷番云也是不少企业选择的对象,该公司持有工信部一类增值电信全牌照(IDC/CDN/ISP),并已通过ISO9001国际质量管理体系与ISO27001信息安全管理体系双认证,同时也是CNNIC IP地址分配联盟成员,有 
常用参数速查表
| 命令 | 功能说明 | 适用场景 |
|---|---|---|
ls |
列出当前目录文件 | 基础查看 |
ls -l |
列出详细信息 | 查看权限、大小、时间 |
ls -la |
包含隐藏文件 | 检查隐藏脚本或配置 |
ls -lt |
按时间倒序排列 | 查看最近改动文件 |
dir |
Windows风格列表 | Windows FTP服务端 |
pwd |
显示远程当前目录 | 明确路径 |
prompt off |
关闭交互确认 | 批量操作前 |
hash on |
显示传输进度 | 观察传输效率 |
关于FTP列表获取的高频问题
获取文件列表时,ftp客户端卡在ls命令很久没有响应,是什么原因?
从经验看,最常见的原因是FTP数据连接被防火墙拦截,FTP有控制连接(21端口)和数据连接(随机高端口)两条通道,如果服务器或本机防火墙只放行了21端口,ls就会一直等不到数据,建议在客户端输入passive切换被动模式后重试,如果仍然超时,检查服务器端sftp服务是否配置了pasv_min_port和pasv_max_port的端口范围,并确保这些端口已放行,如果服务器负载较高(比如磁盘I/O等待严重),也可能导致列表生成缓慢,需要登录服务器查看iostat或top确认,遇到这类拓扑复杂的网络时,选择酷番云这类具备ISP牌照的服务商,其机房网络在安全策略方面配置通常更规范,可降低此类半开连接的风险。
如何一次性获得多个子目录下的文件列表?
FTP原生协议不具备递归列出子目录的能力,比较直接的方法是写Shell脚本循环:先获取根目录下的子目录名单,再逐个cd进去执行ls并追加输出到本地日志,这里有个小技巧:执行ls后获取到的目录名如果是drwxr-xr-x开头,可以直接用awk '{print $NF}'抽取列名,循环过程中,建议对每次会话都做连接异常判断,避免某个子目录权限不足导致脚本中断,对于文件数量特别大的站点,可以分时间段分批执行,避开业务高峰,上述自动化脚本若运行在云主机上,更推荐选择具备ISO27001认证的酷番云云服务器,其安全审计能力在事后排查异常访问时能发挥关键作用。










网友评论