Linux tftp命令是简单文件传输协议(Trivial File Transfer Protocol)客户端工具,用于在网络上传输小文件。
tftp [选项] [主机名 [端口]]
| 选项 | 说明 |
|---|---|
-v |
显示详细信息 |
-V |
显示版本信息 |
-e |
使用扩展的tftp模式 |
-c 命令 |
指定要执行的命令(非交互模式) |
-m 模式 |
设置传输模式(netascii、octet) |
-t 超时 |
设置传输超时时间(秒) |
-r 文件 |
指定要获取的远程文件名 |
-l 文件 |
指定要上传的本地文件名 |
-p |
使用被动模式(某些版本) |
主机名 |
TFTP服务器地址 |
端口 |
TFTP服务器端口(默认69) |
--help |
显示帮助信息 |
| 命令 | 说明 | 示例 |
|---|---|---|
connect |
连接到TFTP服务器 | connect 192.168.1.100 |
get |
从服务器下载文件 | get config.txt |
put |
上传文件到服务器 | put firmware.bin |
quit |
退出tftp客户端 | quit |
status |
显示当前状态 | status |
verbose |
切换详细模式 | verbose |
mode |
设置传输模式 | mode binary |
timeout |
设置超时时间 | timeout 10 |
rexmt |
设置重传超时 | rexmt 2 |
ascii |
设置ASCII传输模式 | ascii |
binary |
设置二进制传输模式 | binary |
?或help |
显示帮助信息 | ?或help |
# 启动tftp客户端
tftp
# 在tftp提示符下连接服务器
tftp> connect 192.168.1.100
# 或直接指定服务器
tftp 192.168.1.100
# 连接指定端口
tftp 192.168.1.100 9069
# 连接到服务器并下载文件
tftp> connect 192.168.1.100
tftp> get config.txt
# 或使用相对路径
tftp> get /tftp/config.txt
# 下载并指定本地文件名
tftp> get remote_file.txt local_copy.txt
# 上传文件到服务器
tftp> connect 192.168.1.100
tftp> put firmware.bin
# 上传并指定远程文件名
tftp> put local_file.bin remote_name.bin
# 直接下载文件(非交互模式)
tftp -r config.txt -g 192.168.1.100
# 直接上传文件
tftp -l firmware.bin -p 192.168.1.100
# 使用扩展模式下载
tftp -e -r boot.img -g 192.168.1.100
# 设置二进制模式传输
tftp> binary
tftp> get image.jpg
# 设置ASCII模式传输文本文件
tftp> ascii
tftp> get readme.txt
# 使用命令行选项设置模式
tftp -m binary -r firmware.bin -g 192.168.1.100
# 设置超时时间
tftp> timeout 30
# 设置重传超时
tftp> rexmt 5
# 显示当前状态
tftp> status
# 输出示例:
# Connected to 192.168.1.100.
# Mode: netascii Verbose: off Tracing: off
# Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
#!/bin/bash
# 批量下载TFTP文件脚本
TFTP_SERVER="192.168.1.100"
FILES="config.txt firmware.bin logo.jpg"
for file in $FILES; do
echo "正在下载: $file"
tftp -r "$file" -g "$TFTP_SERVER"
if [ -f "$file" ]; then
echo "成功下载: $file"
else
echo "下载失败: $file"
fi
done
echo "所有文件下载完成"
# 在PXE启动过程中,tftp常用于下载启动文件
# 下载内核镜像
tftp -r vmlinuz -g tftp-server.example.com
# 下载初始化内存盘
tftp -r initrd.img -g tftp-server.example.com
# 下载配置文件
tftp -r pxelinux.cfg/default -g tftp-server.example.com
| 模式 | 说明 | 适用场景 | 命令 |
|---|---|---|---|
| netascii | ASCII文本模式,转换换行符 | 文本文件、配置文件 | ascii或mode netascii |
| octet | 二进制模式,原样传输 | 可执行文件、镜像文件 | binary或mode octet |
# Ubuntu/Debian系统
sudo apt-get update
sudo apt-get install tftpd-hpa
# CentOS/RHEL系统
sudo yum install tftp-server
# 启动TFTP服务器(Ubuntu/Debian)
sudo systemctl start tftpd-hpa
sudo systemctl enable tftpd-hpa
# 启动TFTP服务器(CentOS/RHEL)
sudo systemctl start tftp
sudo systemctl enable tftp
# Ubuntu/Debian配置示例
# 编辑配置文件
sudo nano /etc/default/tftpd-hpa
# 添加或修改以下内容
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create"
# 创建TFTP目录并设置权限
sudo mkdir -p /var/lib/tftpboot
sudo chown -R tftp:tftp /var/lib/tftpboot
sudo chmod -R 777 /var/lib/tftpboot
# 重启服务
sudo systemctl restart tftpd-hpa
可能原因: TFTP服务器未运行或防火墙阻止
解决:
# 检查TFTP服务状态
systemctl status tftpd-hpa
# 检查防火墙规则
sudo ufw status
# 检查端口是否开放
netstat -tuln | grep 69
可能原因: 权限问题或文件不存在
解决:
# 检查TFTP目录权限
ls -la /var/lib/tftpboot/
# 检查文件是否存在
ls -la /var/lib/tftpboot/文件名
解决: 调整传输参数
# 设置更大的超时时间
tftp> timeout 60
# 设置更大的重传超时
tftp> rexmt 10
解决: 使用正确的传输模式
# 对于二进制文件使用binary模式
tftp> binary
# 对于文本文件使用ascii模式
tftp> ascii
ftp - 完整功能的文件传输协议客户端sftp - SSH文件传输协议客户端scp - 基于SSH的安全复制wget - 从Web下载文件curl - 支持多种协议的数据传输rsync - 高效的文件同步工具