30、网络文件操作与传输全攻略

网络文件操作与传输全攻略

1. 脚本文件的包含与用户输入读取

在脚本编写中,有时需要包含其他脚本文件的内容。例如,执行以下命令可以运行 config.sh 文件中的命令:

. config.sh

这种文件“包含”的语法不会启动子 shell,对于一组需要使用同一个配置文件的脚本来说非常有用。

另外, read 命令可以从标准输入读取一行文本,并将其存储在一个变量中。示例如下:

$ read var

这是一个 shell 内置命令,它可以和 shell 的其他未在本文中提及的功能结合使用。

2. 何时(不)使用 shell 脚本

shell 的功能十分丰富,很难在一篇文章中涵盖其所有重要元素。如果你对 shell 的其他功能感兴趣,可以参考一些关于 shell 编程的书籍。不过,当你开始使用 read 命令等时,需要思考是否使用了正确的工具。要记住,shell 脚本最擅长处理文件和简单命令。如果编写的内容变得复杂,尤其是涉及字符串操作或复杂的算术运算时,或许应该考虑使用 Python、Perl 或 awk 等脚本语言。

3. 网络文件传输方式

在网络环境中,经常需要在不同计算机之间传输和共享文件。下面介绍几种常见的文件传输方法。

3.1 快速复制

如果你想快速将本地计算机上的一个或多个文件复制到网络中的另一台计算机,而不考虑将其复制回来或进行复杂操作,可以使用 Python 来实现。操作步骤如下:
1. 进入包含要复制文件的目录。
2. 执行以下命令:

$ python -m SimpleHTTPServer

这个命令会启动一个基本的 Web 服务器,使该目录对网络中的任何浏览器可用。通常,它会在端口 8000 上运行。例如,如果执行该命令的计算机 IP 地址是 10.1.2.4,那么在目标计算机上访问 http://10.1.2.4:8000 就可以获取所需的文件。

3.2 rsync 工具

如果要移动整个目录结构, scp -r 是一种方法,或者使用 tar 管道可以获得更好的性能:

$ tar cBvf - diretório | ssh host_remoto tar xBvpf -

但这些方法不够灵活,传输完成后,远程主机可能无法获得目录的精确副本。如果需要定期执行此类任务,尤其是计划自动化该过程,建议使用专门的同步工具 rsync 。在 Linux 中, rsync 是标准的同步工具,性能良好,且提供了多种传输方式。

以下是 rsync 的一些基本操作模式和特点:
- 基本使用 :要使 rsync 在两个主机之间工作,源主机和目标主机都必须安装 rsync ,并且需要有从一台计算机访问另一台计算机的方式。最简单的文件传输方式是使用远程 shell 账户,通常假设使用 SSH 访问。例如,将一组文件复制到远程主机的主目录,可以使用以下命令:

$ rsync arquivo1 arquivo2 ... host:

在现代系统中, rsync 默认使用 SSH 连接到远程主机。需要注意错误信息 rsync not found ,这表示远程 shell 无法在系统中找到 rsync 。如果 rsync 不在远程路径中,但系统中已安装,可以使用 --rsync-path=path 手动指定其位置。如果远程主机的用户名不同,需要在主机名前加上用户名,如:

$ rsync arquivo1 arquivo2 ... usuário@host:

默认情况下, rsync 只复制文件。如果指定一个目录作为参数,会看到 skipping directory dir 的提示。要完整地传输整个目录层次结构,包括符号链接、权限、模式和设备等,需要使用 -a 选项。如果要将文件复制到远程主机的其他目录,可以这样操作:

$ rsync -a dir host:dir_destino

如果不确定文件传输会产生什么结果,可以使用 -nv 选项组合。 -n 表示以“试运行”模式操作,即不实际复制任何文件; -v 表示详细模式,会显示传输细节和涉及的文件:

$ rsync -nva dir host:dir_destino

输出示例如下:

building file list ... done
ml/nftrans/nftrans.html
[more files]
wrote 2183 bytes read 24 bytes 401.27 bytes/sec
  • 创建目录结构的精确副本 :默认情况下, rsync 复制文件和目录时不考虑目标目录的先前内容。例如,将包含文件 a 和 b 的目录 d 传输到已经有文件 d/c 的计算机上,传输后目标目录将包含 d/a 、 d/b 和 d/c 。要创建源目录的精确副本,需要删除目标目录中不存在于源目录的文件,可以使用 --delete 选项:
$ rsync -a --delete dir host:dir_destino

需要注意的是,这可能很危险,通常应该检查目标目录,避免意外删除重要文件。如果不确定,可以使用 -n 选项进行“试运行”。

  • 使用结尾斜杠的影响 :在 rsync 命令中指定目录作为源时,结尾的斜杠会显著改变其行为。例如:
$ rsync -a dir host:dir_dest

执行该命令后,远程主机的 dir_dest 目录中会包含一个 dir 子目录。而使用:

$ rsync -a dir/ host:dir_dest

rsync 会将 dir 目录中的所有内容复制到远程主机的 dir_dest 目录中,而不会在目标主机上创建 dir 目录。需要注意的是,在传输文件和目录时,意外添加结尾斜杠通常只是一种不便;但将结尾斜杠与 --delete 选项结合使用时,要格外小心,以免误删文件。

  • 排除文件和目录 : rsync 可以排除文件和目录的传输。例如,要将本地的 src 目录传输到远程主机,但排除所有名为 .git 的文件和目录,可以使用以下命令:
$ rsync -a --exclude=.git src host:

如果要排除特定的项目,可以定义以 / 开头的绝对路径,如:

$ rsync -a --exclude=/src/.git src host:

这里的第一个 / 不是系统的根目录,而是传输的基础目录。以下是一些排除模式的技巧:
- 可以使用任意数量的 --exclude 参数。
- 如果相同的排除模式经常使用,可以将它们放在一个简单的文本文件中(每行一个模式),并使用 --exclude-from=arquivo 。
- 要排除名为 item 的目录,但包含同名的文件,可以使用 --exclude=item/ 。
- 排除模式基于完整的文件名或目录名组件,可以包含简单的通配符。例如, t*s 可以匹配 this ,但不匹配 ethers 。
- 如果排除的目录或文件名模式过于严格,可以使用 --include 来明确包含其他文件或目录。

  • 传输完整性、安全措施和详细模式 :为了提高操作速度, rsync 使用快速检查来确定传输源中的文件是否已经存在于目标中。这种快速检查结合了文件大小和最后修改日期。第一次将完整的目录层次结构传输到远程主机时, rsync 会发现目标中没有任何文件并进行全部传输。使用 rsync -n 可以进行测试。

当源文件和目标文件不同时, rsync 会传输源文件并覆盖远程目标中的任何现有文件。但默认行为可能不够合适,你可能需要额外的保证或安全措施。以下是一些实用的选项:
- --checksum (缩写: -c ):计算文件的校验和(通常是唯一签名),以确保文件相同。这会在传输过程中消耗额外的 I/O 和 CPU 资源,但在处理敏感数据或大小一致的文件时是必要的。
- --ignore-existing :不覆盖目标中已经存在的文件。
- --backup (缩写: -b ):不覆盖目标中已有的文件,而是在传输新文件之前,将现有文件重命名并添加后缀 ~ 。
- --suffix=s :将 --backup 使用的后缀从 ~ 更改为 s 。
- --update (缩写: -u ):不覆盖目标中日期晚于源文件的文件。

默认情况下, rsync 会在出现问题时才输出信息。可以使用 rsync -v 启用详细模式,或使用 rsync -vv 获取更详细的信息。要在传输完成后获得完整的摘要,可以使用 rsync --stats 。

以下是 rsync 常用选项的总结表格:
| 选项 | 作用 |
| ---- | ---- |
| -a | 递归传输目录,保留文件属性 |
| -n | 试运行,不实际复制文件 |
| -v | 详细模式,显示传输细节 |
| --delete | 删除目标目录中不存在于源目录的文件 |
| --checksum | 计算文件校验和 |
| --ignore-existing | 不覆盖目标中已有的文件 |
| --backup | 备份目标中已有的文件 |
| --suffix=s | 修改备份文件的后缀 |
| --update | 不覆盖目标中日期较新的文件 |
| -z | 压缩数据传输 |
| --bwlimit | 限制带宽 |

以下是 rsync 基本操作的流程图:

graph TD;
    A[开始] --> B[指定源和目标];
    B --> C{是否需要排除文件};
    C -- 是 --> D[使用 --exclude 选项];
    C -- 否 --> E{是否需要创建精确副本};
    D --> E;
    E -- 是 --> F[使用 --delete 选项];
    E -- 否 --> G{是否需要详细信息};
    F --> G;
    G -- 是 --> H[使用 -v 选项];
    G -- 否 --> I[执行 rsync 命令];
    H --> I;
    I --> J[结束];

通过以上介绍,你可以根据不同的需求选择合适的文件传输方法和 rsync 选项,确保文件在网络中的安全、高效传输。

3.2 rsync 工具(续)
  • 压缩 :很多用户喜欢将 -z 选项与 -a 选项结合使用,在传输前压缩数据:
$ rsync -az dir host:dir_destino

压缩在某些情况下可以提高性能,比如通过慢速连接(如许多 DSL 连接的上行慢速链路)传输大量数据,或者两台主机之间的延迟较高时。但在快速的本地网络中,两端的计算机可能会受到压缩和解压缩数据所需的 CPU 时间限制,此时不进行压缩的传输可能会更快。

  • 限制带宽 :向远程主机上传大量数据时,很容易导致互联网连接的上行链路拥塞。即使在传输过程中不使用下行链路(通常带宽较高),如果让 rsync 以最快速度运行,由于 TCP 输出数据包(如 HTTP 请求)需要与传输数据竞争上行链路带宽,连接仍会显得很慢。
    为了解决这个问题,可以使用 --bwlimit 选项为上行链路留出一些空间。例如,要将带宽限制为 10000 Kbps,可以执行以下命令:
$ rsync --bwlimit=10000 -a dir host:dir_destino
  • 从远程计算机传输文件到本地 : rsync 不仅可以将本地计算机的文件复制到远程主机,还可以将远程计算机的文件传输到本地主机。只需在命令行中将远程主机和远程源路径作为第一个参数即可。例如,要将远程主机上的 dir_orig 目录传输到本地主机的 dir_dest 目录,可以执行以下命令:
$ rsync -a host:dir_orig dir_dest

如前文所述,如果完全省略 host: ,可以使用 rsync 在本地计算机上复制目录。

  • rsync 相关的其他主题 :当需要复制多个文件时, rsync 应该是首先想到的工具之一。以批量模式运行 rsync 特别有用,并且有多种选项可用于使用与命令选项、日志记录和传输状态相关的辅助文件。特别是状态文件可以使长时间的传输更快,并且在传输中断时更容易恢复。
    rsync 还可用于创建备份。例如,可以将互联网存储区域(如亚马逊的 S3)与 Linux 系统关联,然后使用 rsync --delete 定期将文件系统与网络存储区域同步,从而创建一个高效的备份系统。
    除了本文介绍的命令行选项外, rsync 还有很多其他选项。要获取概述,可以执行 rsync --help 。更详细的信息可以在 rsync(1) 手册页以及 rsync 的主页 http://rsync.samba.org/ 上找到。
4. 文件共享简介

你的 Linux 计算机可能不是网络中唯一的设备,当网络中有多台计算机时,通常有必要在它们之间共享文件。在后续内容中,主要关注 Windows 和 Mac OS X 计算机之间的文件共享,因为这是常见的跨平台文件共享场景。

文件共享可以让不同计算机方便地访问和使用彼此的文件资源。通过共享文件,可以提高工作效率,方便团队协作。例如,在一个项目中,团队成员可以将相关文件共享在一个网络位置,大家都可以随时访问和更新这些文件。

在实现文件共享时,需要考虑安全性和权限管理。不同的用户可能需要不同的访问权限,如只读、读写等。同时,还需要确保共享文件的完整性和可用性,避免数据丢失或损坏。

以下是常见的文件共享方式对比表格:
| 共享方式 | 优点 | 缺点 | 适用场景 |
| ---- | ---- | ---- | ---- |
| 基于网络协议(如 SMB、NFS) | 支持多平台,可设置详细权限 | 需要配置服务器,安全性要求高 | 企业内部网络,多用户共享 |
| 使用云存储 | 方便远程访问,自动备份 | 依赖网络,可能有存储限制和费用 | 个人或团队需要远程协作 |
| 直接连接共享(如 USB 共享) | 简单快速,无需网络 | 共享范围有限 | 临时文件共享 |

以下是文件共享基本流程的流程图:

graph TD;
    A[开始] --> B[选择共享方式];
    B --> C{是否需要配置服务器};
    C -- 是 --> D[配置服务器和权限];
    C -- 否 --> E[设置共享文件或目录];
    D --> E;
    E --> F{是否需要加密};
    F -- 是 --> G[设置加密];
    F -- 否 --> H[允许其他计算机访问];
    G --> H;
    H --> I[结束];

通过合理选择文件共享方式和配置相关参数,可以满足不同场景下的文件共享需求,提高工作和生活的便利性。

总之,在网络环境中进行文件操作和传输时,无论是快速复制文件、使用 rsync 工具进行目录同步,还是实现文件共享,都有多种方法和工具可供选择。根据具体的需求和场景,选择合适的方式和工具,并正确配置相关参数,能够确保文件的安全、高效传输和共享,为工作和生活带来极大的便利。

相关推荐

CSP-J/S备考全攻略:从零基础到复赛高分,家长必看的避坑指南

本文为家长和学生提供CSP-J/S备考的全面指南,从竞赛体系解读到学习路径规划,涵盖初赛和复赛的实战策略。通过科学的学习方法和避坑建议,帮助零基础学生逐步提升至复赛高分水平,同时整合NOIP和信息学赛事相关资源,助力孩子在编程竞赛中脱颖而出。

ik678901234的博客 1042

SFTP 实战指南:从基础连接到批量操作

本文详细介绍了SFTP的基础连接、文件操作、批处理脚本及常见问题排查,帮助用户掌握安全文件传输的核心技巧。从简单的终端命令到自动化脚本编写,全面提升SFTP使用效率,确保数据传输的安全性与稳定性。

weixin_42524708的博客 394

ADB连接MuMu模拟器全攻略:从基础到高阶

ADB(Android Debug Bridge)是Android开发中不可或缺的调试工具,通过TCP/IP或USB协议实现设备与开发机的通信。其核心原理是通过adb server管理设备连接,支持安装应用、调试、文件传输等功能。在自动化测试和移动开发领域,ADB与模拟器的配合能显著提升效率,特别是MuMu模拟器这类支持多开的Android虚拟化环境。本文以MuMu模拟器为例,详解端口配置、多开管理、文件操作等实战技巧,并针对adb connect失败、端口冲突等常见问题提供解决方案。掌握这些方法可快速搭建

conghuang7343的博客 420

PVE虚拟机中qemu-guest-agent的5个实用技巧:从安装到排错全攻略

本文详细介绍了在PVE虚拟机中配置和使用qemu-guest-agent的5个实用技巧,涵盖从基础安装到高级排错的全过程。通过qemu-guest-agent,用户可以高效管理虚拟机状态、执行远程命令、实现优雅关机等操作,大幅提升PVE虚拟化环境的管理效率。文章还深入解析了QGA的工作原理和安全机制,为系统管理员提供全面的技术指导。

weixin_30275415的博客 231

闲置N1盒子别扔!30分钟打造支持远程访问的轻量级NAS(2024最新版)

本文详细介绍了如何利用闲置的N1盒子在30分钟内打造一款支持远程访问的轻量级家庭NAS(2024最新版)。通过Armbian系统和CasaOS管理平台的结合,实现低功耗、高性价比的家庭存储解决方案,特别适合需要低成本、低能耗的家庭用户。

weixin_29172963的博客 299

OpenClaw + Ollama 本地大模型部署教程:彻底告别Token焦虑

OpenClaw + Ollama 本地大模型部署教程:彻底告别Token焦虑

leaning_java的博客 1228

避开PFC设计大坑:从环路分析到参数整定的5个常见误区与解决方案

本文深入解析PFC电路设计中从环路分析到参数整定的5个常见误区,包括电感参数设计、小信号模型适用边界、电压环与电流环耦合效应等。通过实际案例和PSIM仿真数据,提供工程落地的解决方案,帮助工程师避开设计陷阱,提升电路性能与可靠性。

weixin_30666401的博客 325

论文阅读:Visual Relationship Detection with Language Priors

Visual Relationship Detection with Language Priors(ECCV2016) 文章   尽管大多数的relationship并不常见,但是它们的object和predicate却更频繁地独立出现。paper用这个insight分别独立训练训练object和predicate的模型,然后再进行组合来预测relationship。Visual relatio...

Kivee的博客 2877

simulink中MIL测试简单理解

输入信号设置如下:选中New Test Case1 ---INPUT。5、新建(选择New,Test from Spreadsheet)6、可以新建也可以导入(Use existing test)Source:Output为自己预测结果。3、右键子系统(Create)打开生成表格,可以自己调试。4、创建测试用例表格。保存路径为模型路径。保存路径在模型路径。8、运行测试设h置。

lingdianhuat的博客 1784

PICO640红外探测器配置模块verilog

Ulis pico 640红外探测器配置模块

Go Forward Forever! 2033

MetaERP 的管理单元在设计哲学和实现逻辑上,确实与 Oracle EBS 的业务实体(OU)一脉相承,你可以放心地在已知的 Oracle 多组织架构框架下进行理解。它并没有推翻这套经典的核算模型

MetaERP的管理单元设计继承了Oracle EBS业务实体(OU)的核心思想,并进行了现代技术重构。管理单元(MU)作为OU的超集,延续了业务数据隔离与流程执行边界的定位,但通过元数据驱动的多租户架构实现更灵活的数据隔离。MetaERP采用三层解耦设计(核算单元、自然科目、核算维度),解决了EBS科目组合爆炸问题,并实现事件驱动的实时核算。相较于EBS的批处理模式,MetaERP通过云原生架构和元数据驱动配置,显著提升了灵活性、实时性和扩展性,支持跨法人的业务统一管理视图。

金牌架构师 576

小工匠聊架构-分布式场景下的并发幂等性常见的解决方案

Pre 我们来回顾下单体时代 单体时代,应用部署在一台主机上,可以使用JVM级别的锁来控制并发请求 。 随着应用规模的不断扩大,集群化或者微服务化的分布式部署越来越普及,每个应用都是一个单独的JVM应用,所以单体时代的这种处理方式已经无法满足当前架构下的业务需求了。 JVM级别的锁已经无法满足跨进程之间访问控制了,进而演化出来了分布式锁。 分布式锁 能否解决幂等性问题? 分布式锁解决什么问题? 简言之: 解决跨进程间无法共享本地资源的问题 ,解决的是分布式场景下并发访问的问题。 为什么需要确保并发.

小工匠 2万+

什么是 SAP Build Process Automation?

SAP Build Process Automation 是一款综合性的低代码工具,允许企业用户快速开发和自动化端到端业务流程。它整合了工作流管理、任务自动化和人工智能技术,提供了一个易于使用的平台,帮助企业更好地应对现代商业挑战。通过该工具,用户无需具备深厚的编程技能即可创建复杂的业务流程。例如,用户可以使用直观的拖放式界面设计流程、设置触发条件、定义任务分配规则,并通过内置的分析功能对流程效率进行评估。流程建模与设计:提供图形化界面,帮助用户直观地设计业务流程。任务自动化。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1260

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

上一篇: 45、体育中的攻击行为、观众效应与主场优势
下一篇: 46、体育中的观众、自我展示效应与团队凝聚力
杠精协会主席
博客等级 码龄3年 75粉丝 1287原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值