[Topic DIscussion] 局域网传输文件你们用哪些手段?
Tofloor
poster avatar
babyfengfjx
Super Moderator
CQA
2024-06-17 17:33
Author

前言

测试同学日常测试时,可能都是多台测试设备并行使用(每人少说手上有三四台设备),在不同设备上发现的问题,或者一些资料需要传输到其他设备时,可能每个人的做法不一样,当然这样也就出现了效率上的差异,在此仅分享一些日常工作过程中尝试过的场景,以及使用的一些手段,希望能抛砖引玉,获得铁子们日常高效的操作手法,以便共同学习提效增产🙂

楼下已经有很多其他优秀方案了,这绝对是抛砖引玉了😁

文件传输场景(一次性传输场景,极力推荐Python 的内置 HTTP 服务器模块)

局域网传输文件或者修改文件的场景肯定是非常普遍的,特别是在工作中几乎每天都会遇到,一般来说你们第一个想到的会是U盘吗?那如果是,相信下面的场景或许对你有所帮助。

通过U盘

这个方法估计一般人都能想到,也是比较靠谱的方式,但这种方式太老旧了不是嘛?效率低下不说,还不一定能找到U盘呢,如果你习惯守旧到倒也是能完成局域网传输的目的。

通过smb服务器

当然前提是你得有一个smb服务器对吧,还需要花时间在源主机和目标主机上挂载smb服务,然后将需要传输的文件上传至smb服务器中转存,再下载到目标主机即可。

通过文件夹共享

deepin的文件夹共享服务其实也是smb协议,也非常好用,这样也可以快速进行文件的传输共享,当然在公司内部使用还是要注意信息安全,共享完成记得关闭共享,或者共享时记得设置密码对吧。

通过三方文件共享工具

比如 LocalSend 工具,比较简洁好用的吧,类似工具应该不少,择好而用之即可。这种方式其实也麻烦,需要双方都安装对应的应用,稳定性可能也存在问题。

通过scp命令传输

这个方式虽然有点复杂,但对于我们linux使用者来说应该都用过,记得最开始用linxu就只知道通过这个来传输两台linux之间的文件。

下面复习一下其基本用法

  1. 从本地复制到远程

    scp /path/to/local/file username@remote_host:/path/to/remote/directory
    

    这个命令会将本地文件或目录复制到远程主机指定的目录中。

  2. 从远程复制到本地

    scp username@remote_host:/path/to/remote/file /path/to/local/directory
    

    这个命令会将远程主机上的文件或目录复制到本地指定的目录中。

  3. 复制整个目录

    • 从本地复制到远程:
      scp -r /path/to/local/directory username@remote_host:/path/to/remote/directory
      
    • 从远程复制到本地:
      scp -r username@remote_host:/path/to/remote/directory /path/to/local/directory
      

    -r 参数表示递归复制整个目录及其内容。

  4. 压缩和解压文件

    • 从本地复制到远程时压缩:
      tar -czvf - /path/to/local/directory | ssh username@remote_host "tar -xzvf - -C /path/to/remote/directory"
      
    • 从远程复制到本地时解压:
      ssh username@remote_host "tar -czvf - /path/to/remote/directory" | tar -xzvf -
      

    这种方法使用 tar 命令来压缩和解压文件,并通过管道 | 将数据传输到 ssh 会话中。

  5. 指定端口

    scp -P port_number /path/to/local/file username@remote_host:/path/to/remote/directory
    

    -P 参数用于指定远程主机的端口号。

  6. 使用特定的SSH配置

    scp -F /path/to/ssh_config /path/to/local/file username@remote_host:/path/to/remote/directory
    

    -F 参数用于指定使用特定的SSH配置文件。

  7. 使用密码进行认证
    如果你的SSH密钥没有设置无密码登录,你可能需要在命令中指定身份验证方式:

    scp -o PreferredAuthentications=password /path/to/local/file username@remote_host:/path/to/remote/directory
    

    -o 参数用于指定SSH选项,这里指定只使用密码认证。

  8. 使用SSH代理
    如果你使用SSH代理,可能需要指定代理命令:

    scp -o "ProxyCommand nc -x localhost:8080 %h %p" /path/to/local/file username@remote_host:/path/to/remote/directory
    

    -o 参数用于指定SSH代理命令。

极力推荐Python 的内置 HTTP 服务器模块

直接终端执行一句命令就完成了一个服务的搭建,然后在目标主机直接访问即可下载文件,简直不要太方便!

sudo python -m http.server

image.png

目标主机中直接输入源目标主机的 IP:8000即可:

image.png

要哪点哪就完事,还要啥自行车?

文本复制编辑场景

ssh链接远程编辑

这个方式还是比较快速的,直接ssh链接到目标主机,然后在本机远程编辑复制即可。

通过wall来发送广播消息

这种也是比较便捷的方式,可以快速将想要的文本内容展示到本机上。

  1. 先用本机ssh链接到目标主机上’;
  2. 然后在目标主机上将想要的文本信息通过wall命令广播出去;
  3. 这个时候在你本机上应该就能看到广播的信息;
  4. 接下来Ctrl C V 完事。

通过目标主机发送广播信息:
image.png

本机能及时收到文本信息:

image.png

截图传递场景

有时候需要将截图信息传递到其他电脑端进行提单操作,这个时候同样可以将其当做普通文件传递即可。

当然日常工作中更加快捷的方式是通过VNC链接目标主机,直接通过本机截图使用,效率更加高效。

vnc客户端推荐使用 VNC Viewer 好用的很。

image.png

Reply Favorite View the author
All Replies
vivian_me
deepin testing team
2024-06-17 17:39
#1

古德古德proud

Reply View the author
owen_337
deepin testing team
2024-06-17 17:43
#2

agree 👍

Reply View the author
(´◓Д◔`)
deepin
2024-06-17 17:58
#3

like

老冯出手就是精品帖

Reply View the author
风月相知
deepin
2024-06-17 18:07
#4

真不错,有没有测试过哪个更快

Reply View the author
Amber
deepin
2024-06-17 18:14
#5

在用U盘,谢谢joy

Reply View the author
阿尼樱奈奈
Moderator
2024-06-17 18:32
#6

感谢,不过我主要用ftpjoy

Reply View the author
TXOS-C.User
deepin
2024-06-17 18:36
#7

还是传统的局域网分享模式好

Reply View the author
我是昵称
deepin
2024-06-17 19:39
#8

使用 Python内置 http.server模块有个前提条件:提供服务的机器上需要装有 Python。这里推荐一个备选方案:使用 https://github.com/static-web-server/static-web-server,为两个目标机器 x86_64-pc-windows-gnux86_64-unknown-linux-musl构建一次就可,后续在目标机器上直接运行即可,无需安装依赖。

Reply View the author
Tonny
deepin
2024-06-17 20:37
#9
It has been deleted!
raspbian
deepin
2024-06-17 21:01
#10

论坛上人均万兆路由器 超七类网线 我给大家拖后腿了

效率低下不说有线传输变成效率低下了?

1T以下数据我选择用硬盘传输

1T以上数据我选择用卡车拉硬盘传输

Reply View the author
神末shenmo
deepin
Spark-App
2024-06-17 21:04
#11

wall:哇袄

Reply View the author
希声
deepin
2024-06-17 21:26
#12
  • trzsz-go
    • 
      	  # 安装
      	  本地和远程都要安装 :/usr/local/bin
      	  yay -Syu
      	  yay -S trzsz
      
      	  # 本地安装:zenity
      	  sudo -E pacman -S zenity geoclue 
      
      	  git clone https://github.com/trzsz/trzsz-go.git
      	  cd trzsz-go
      	  make
      	  sudo make install
      
      	  # usage 
      
      	  If trz -b binary upload fails, and login to server using telnet or docker exec.
      	  Try to escape all known control characters, e.g., trz -eb.
      
      	  Python3 < 3.7 supports base64 mode, just don’t use trz -b, use trz instead.
      
      	  It is recommended to set alias ssh="trzsz ssh" for convenience, alias ssh="trzsz -d ssh" for dragging files.
      
      	  If using tmux on the local computer, run tmux ( without trzsz ) first, then trzsz ssh to login.
      
      	   Add trzsz --dragfile before the ssh to enable drag files and directories to upload, e.g.:
      
      	  trzsz -d ssh x.x.x.x
      	  trzsz --dragfile ssh x.x.x.x    
      
    • [[distrobox]]
      • 
        		  # 有问题
        		  trzsz distrobox-enter -n arch-dev -v
        		  tmux
        		  trzsz -r ssh root@n110
        		  trz
        
        
        		  # 要用隧道传输,就必须要在 docker 内开启 ssh 登录,然后用 tssh 登录到 docker 内,在 docker 内再用 tssh 登录到远程服务器。大概流程是这样的:
        
        		  tssh user@docker
        		  tmux
        		  tssh user@remote
        		  trz / tsz
        
    • https://trzsz.github.io/cn/
    • tssh: 支持 trzsz ( trz / tsz ) 的 ssh 客户端 (gitee.com)
Reply View the author
花雨落逝
Moderator
2024-06-17 22:03
#13

墙裂推荐“闪电藤文件传输”这个应用,deepin和uos的x86-64架构均可从系统应用商店&星火应用商店安装

Reply View the author
op
deepin
2024-06-17 22:58
#14

局域网共享可以一次同时复制多个文件夹或文件,通过可写入的局域网共享文件夹,还可以使用安卓手机的“CX文件管理器”应用实现电脑与手机互传文件。

详见此帖:https://bbs.deepin.org/post/260710

此外,在安卓电视上可以直接访问局域网共享文件夹里的视频文件在电视上播放。

Reply View the author
大多时候吃素
deepin
2024-06-18 09:16
#15
风月相知

真不错,有没有测试过哪个更快

不同的场景,用不同的方法吧。

临时传文件,可以用python的http模块、scp等直接的方式,如果比较固定的,文件共享比较好吧

Reply View the author
liujindong
deepin
2024-06-18 15:51
#16

我直接用的smb共享文件夹。。。。办公室五台电脑每台一个共享文件夹,我要把文件发给谁,就扔谁文件夹里= =

Reply View the author
流浪的加菲
deepin
2024-06-18 16:05
#17

又来骗我的赞和收藏,给你了tail

Reply View the author
魔法师
deepin
2024-06-18 17:33
#18

自己开发的一个小工具:传输能力只是工具的一小部分。

  • https://gitee.com/zinface/go.ywloader-cli

它起源就是因为 python -m http.server 命令太长了,这玩意 http 服务器啥传输能力都没有,非常不建议使用rage

$ ywloader-cli serve -h
启动一个web服务(默认:8080),默认为当前目录,可接受指定(目录|文件)路径或标准输入(-)

Usage:
  ywloader serve [flags]

Flags:
      --attachment-filename string   标准输入时的文件命名,用于响应(Content-Disposition)支持 (default "UnknowFile")
      --cache-size uint              标准输入时的缓冲区大小(mb),用于响应(Content-Length)支持 (default 50)
  -h, --help                         help for serve
  -p, --port int                     端口号 (default 8080)
  1. 如果你只想开个静态服务器,那么

    $ ywloader-cli serve [dir]
    # 可选填写目录
    
  2. 如果你想开个单文件下载,那么

    $ ywloader-cli serve  
    # 必须指定一个文件,并建议设置 --attachment-filename 描述资源的下载名称,有时候适用于纯二进制数据命名
    
  3. 如果你想传输二进制数据,那么可以这样做:

    # A 机器使用 tar 打包当前目录所有数据管道到小工具的服务器
    $ tar cf - . | ywloader-cli serve -
    
    # B 机器使用 curl + tar xf - 获取数据并解压
    $ curl   | tar xf - 
    
    
    # 场景1:A 机开发项目,B 机(虚拟机、网内其它架构机器) 获取并进行编译测试
    # 场景2:备份&同步(由A机决定B机可获取数据
    
  4. 如果你想传递本机构建的 docker 镜像,A -> B 直接传输(同数据传递)

    $ docker save  | ywloader-cli serve -
    
    $ curl  | docker load
    
  5. 可跨网传输的工具(当然只限于想像,并尝试过一种基于 socket 的方案)

    $ tar cf - . | water-pipe push
    
    $ water-pipe pull | tar xf -
    
    # 场景:适用于 北京 - 广州 共享与拉取一个数据流的方式
    # 场景:dbus-monitor | water-pipe push 对标  water-pipe pull 直接跨机器日志传递输出
    
Reply View the author
babyfengfjx
Super Moderator
CQA
2024-06-19 09:27
#19
魔法师

自己开发的一个小工具:传输能力只是工具的一小部分。

  • https://gitee.com/zinface/go.ywloader-cli

它起源就是因为 python -m http.server 命令太长了,这玩意 http 服务器啥传输能力都没有,非常不建议使用rage

$ ywloader-cli serve -h
启动一个web服务(默认:8080),默认为当前目录,可接受指定(目录|文件)路径或标准输入(-)

Usage:
  ywloader serve [flags]

Flags:
      --attachment-filename string   标准输入时的文件命名,用于响应(Content-Disposition)支持 (default "UnknowFile")
      --cache-size uint              标准输入时的缓冲区大小(mb),用于响应(Content-Length)支持 (default 50)
  -h, --help                         help for serve
  -p, --port int                     端口号 (default 8080)
  1. 如果你只想开个静态服务器,那么

    $ ywloader-cli serve [dir]
    # 可选填写目录
    
  2. 如果你想开个单文件下载,那么

    $ ywloader-cli serve  
    # 必须指定一个文件,并建议设置 --attachment-filename 描述资源的下载名称,有时候适用于纯二进制数据命名
    
  3. 如果你想传输二进制数据,那么可以这样做:

    # A 机器使用 tar 打包当前目录所有数据管道到小工具的服务器
    $ tar cf - . | ywloader-cli serve -
    
    # B 机器使用 curl + tar xf - 获取数据并解压
    $ curl   | tar xf - 
    
    
    # 场景1:A 机开发项目,B 机(虚拟机、网内其它架构机器) 获取并进行编译测试
    # 场景2:备份&同步(由A机决定B机可获取数据
    
  4. 如果你想传递本机构建的 docker 镜像,A -> B 直接传输(同数据传递)

    $ docker save  | ywloader-cli serve -
    
    $ curl  | docker load
    
  5. 可跨网传输的工具(当然只限于想像,并尝试过一种基于 socket 的方案)

    $ tar cf - . | water-pipe push
    
    $ water-pipe pull | tar xf -
    
    # 场景:适用于 北京 - 广州 共享与拉取一个数据流的方式
    # 场景:dbus-monitor | water-pipe push 对标  water-pipe pull 直接跨机器日志传递输出
    

这是相当不错,这不就把玉引出来了么😄 ,我们使用http那个服务一般都是临时一次性用用😬 ,因为测试的设备经常重装……

Reply View the author