当前位置: 首页 > news >正文

Ubuntu 虚拟机文件传输到 Windows的一种好玩的办法

背景

当文件存储在 Ubuntu 虚拟机中时,需要将这些文件传输到 Windows 主机。本文档介绍使用 Python HTTP 服务器的方式实现文件传输,以及相关的配置和优化方法。

方案选择:Python HTTP 服务器

在众多文件传输方案中(共享文件夹、SCP/SFTP、云存储、USB直通等),Python HTTP 服务器方案具有以下优势:

  • 简单快捷:无需安装额外软件
  • 即用即走:适合临时文件传输
  • 跨平台:只需浏览器即可访问
  • Python 内置:Ubuntu 默认包含 Python3

一、基础使用

1.1 启动 HTTP 服务器

在需要分享的文件所在目录执行:

python3 -m http.server 8000

这会在当前目录启动一个 HTTP 服务器,监听 8000 端口。

参数说明:

  • 8000:端口号,可以改为其他未占用的端口(如 8080、9000 等)

1.2 查看虚拟机 IP 地址

在 Ubuntu 虚拟机中执行以下任一命令:

方法一:简洁输出

hostname -I

方法二:详细信息

ip addr show

方法三:仅显示 IPv4 地址

ip -4 addr show | grep inet

方法四:获取第一个 IP

hostname -I | awk '{print $1}'

通常会得到类似 192.168.x.x10.x.x.x 的 IP 地址。

1.3 从 Windows 访问文件

  1. 确保虚拟机网络模式为 桥接模式NAT 模式(可访问宿主机)
  2. 在 Windows 浏览器中访问:
    http://虚拟机IP:8000
    
    例如:http://192.168.1.100:8000
  3. 在浏览器中点击文件即可下载

二、后台运行

基础命令会占用终端窗口,关闭终端后服务也会停止。以下是让服务后台运行的方法。

2.1 使用 nohup 和 & 符号

nohup python3 -m http.server 8000 > /dev/null 2>&1 &

命令解析:

  • nohup:忽略挂断信号,即使终端关闭进程也继续运行
  • > /dev/null:将标准输出重定向到空设备(不显示输出)
  • 2>&1:将错误输出也重定向到标准输出
  • &:在后台运行

查看进程:

ps aux | grep http.server

停止服务:

kill <PID>

其中 <PID> 是进程 ID,可以从 ps 命令输出中获取。

2.2 使用 screen(推荐用于临时调试)

安装 screen:

sudo apt install screen

使用步骤:

# 1. 创建新会话
screen -S httpserver# 2. 运行服务器
python3 -m http.server 8000# 3. 按 Ctrl+A,然后按 D 键分离会话(服务继续运行)# 4. 重新连接会话
screen -r httpserver# 5. 查看所有会话
screen -ls

2.3 使用 tmux(screen 的替代方案)

安装 tmux:

sudo apt install tmux

使用步骤:

# 1. 创建新会话
tmux new -s httpserver# 2. 运行服务器
python3 -m http.server 8000# 3. 按 Ctrl+B,然后按 D 键分离会话# 4. 重新连接
tmux attach -t httpserver# 5. 列出所有会话
tmux ls

三、开机自动启动

如果需要长期使用此服务,可以配置为系统服务,实现开机自动启动。

3.1 创建 systemd 服务文件

使用 systemd 是 Ubuntu 推荐的服务管理方式。

创建服务文件:

sudo nano /etc/systemd/system/httpserver.service

添加以下内容:

[Unit]
Description=Python HTTP Server for File Sharing
After=network.target[Service]
Type=simple
User=me
WorkingDirectory=/home/me/oneos-multi
ExecStart=/usr/bin/python3 -m http.server 8000
Restart=on-failure
RestartSec=5s[Install]
WantedBy=multi-user.target

配置说明:

  • Description:服务描述
  • After=network.target:确保网络启动后再启动服务
  • User:运行服务的用户(改为你的用户名)
  • WorkingDirectory:要分享的目录路径(改为你的实际路径)
  • ExecStart:启动命令
  • Restart=on-failure:失败时自动重启
  • RestartSec=5s:重启前等待 5 秒

3.2 启用并启动服务

# 重新加载 systemd 配置
sudo systemctl daemon-reload# 启用服务(开机自动启动)
sudo systemctl enable httpserver.service# 立即启动服务
sudo systemctl start httpserver.service

3.3 服务管理命令

# 查看服务状态
sudo systemctl status httpserver# 停止服务
sudo systemctl stop httpserver# 重启服务
sudo systemctl restart httpserver# 禁用开机自动启动
sudo systemctl disable httpserver# 查看服务日志
sudo journalctl -u httpserver -f

四、安全注意事项

⚠️ 重要提醒:

  1. 内网使用:此方法适合内网环境,不建议暴露到公网
  2. 无认证:Python HTTP 服务器没有密码保护,任何知道 IP 的人都可以访问
  3. 只读访问:默认只能下载文件,不能上传或删除
  4. 防火墙:确保防火墙允许 8000 端口访问

允许防火墙通过(如果需要):

sudo ufw allow 8000/tcp

关闭防火墙端口(停止分享后):

sudo ufw delete allow 8000/tcp

五、高级技巧

5.1 指定端口和绑定地址

# 绑定到特定 IP(只允许特定网络访问)
python3 -m http.server 8000 --bind 192.168.1.100# 使用其他端口
python3 -m http.server 9000

5.2 使用更强大的 HTTP 服务器

如果需要更多功能(如上传、认证),可以考虑:

安装 uploadserver(支持上传):

pip3 install uploadserver
python3 -m uploadserver 8000

使用 nginx(生产环境):

sudo apt install nginx
# 配置 nginx 提供文件服务

5.3 临时分享单个文件

如果只想分享单个文件,可以使用更轻量的方式:

# 使用 Python 创建简单的文件下载服务
python3 -c "import http.server; http.server.test()" 8000

六、故障排除

6.1 无法访问服务

检查服务是否运行:

ps aux | grep http.server

检查端口是否监听:

sudo netstat -tulpn | grep 8000
# 或
sudo ss -tulpn | grep 8000

检查防火墙:

sudo ufw status

6.2 端口被占用

如果 8000 端口已被占用:

# 查找占用端口的进程
sudo lsof -i :8000# 使用其他端口
python3 -m http.server 8001

6.3 虚拟机网络问题

  • 确保虚拟机网络模式正确(桥接或 NAT)
  • 尝试 ping 虚拟机 IP:ping 192.168.x.x
  • 检查虚拟机网络适配器是否启用

七、总结

本文介绍了使用 Python HTTP 服务器从 Ubuntu 虚拟机传输文件到 Windows 主机的完整流程:

  1. 基础使用:启动服务器、查看 IP、浏览器访问
  2. 后台运行:使用 nohup、screen 或 tmux
  3. 开机自启:配置 systemd 服务
  4. 安全建议:防火墙配置和注意事项
  5. 故障排查:常见问题解决方案

这个方案特别适合快速、临时的文件分享需求。如果需要更稳定、长期的解决方案,建议使用虚拟机共享文件夹或 Samba 服务。


最后执行的命令:

nohup python3 -m http.server 8000 > /dev/null 2>&1 &

服务已在后台运行,进程 ID: 23032

访问地址:

http://你的虚拟机IP:8000

愉快地传输文件吧!🚀

http://www.dtcms.com/a/605570.html

相关文章:

  • 找别人做网站都需要注意啥wordpress访问私密帖子
  • 网站备案需要关闭台州华燕网业有限公司
  • 3D装配动画结合MES系统,助力制造业无纸化办公
  • Tetracycline-Biotin,四环素-生物素,化学性质
  • 李飞飞World Labs发布Marble:用一句话生成可编辑的3D世界
  • Zookeeper 笔记
  • WebSocket 通俗讲解
  • 面向大数据与物联网的下一代时序数据库选型指南:Apache IoTDB 解析与应用
  • 网站建设与管理是什么工作网站开发网络
  • 科普:VB(Visual Basic)和VBS(VBScript)
  • 如何做电商网站首页开发一个电商平台
  • Hadess入门到精通 - 如何管理Helm制品
  • springboot的依赖管理机制和构建插件
  • 学Java第四十四天——Map实现类的源码解析
  • 4.网络原理及编程
  • BDS 执行平台相关动作
  • 代码随想录打卡day27:509.斐波那契数列、70.爬楼梯
  • 怎么接单做网站上优化
  • 11月3-5年Web前端开发面试需要达到的强度
  • 网站搭建吧网站开发计入什么科目
  • C++---万能指针 void* (不绑定具体数据类型,能指向任意类型的内存地址)
  • 感知 - 调控 - 追溯:档案馆恒温恒湿全闭环控制系统方案
  • Microsoft Excel 效率专题:创建下拉列表,规范数据输入
  • 网站服务器建立怎么在网站做浮动图标
  • 安装SAP Business one for HANA之前的准备
  • C语言编译软件的获取 | 如何高效选择和下载适合的编译器
  • 数据分析案例详解:基于smardaten实现智慧交通运营指标数据分析展示
  • 竞价网站asp网站设置
  • 软件设计模式-外观模式
  • 谷歌推“Cameyo”方案,助力企业从Win系统转型ChromeOS