rclone、rsync、scp使用总结

数据同步工具使用总结【rclone、rsync、scp】

  • 一、数据处理背景
  • 二、数据处理方法对比
    • 1、数据关系梳理
    • 2、不同工具处理方法
    • 3、经验总结
  • 三、工具扩展知识
    • 1、rclone工具介绍
      • (1)、rclone概述
      • (2)、安装工具及配置
        • 本地文件迁移到云上服务
        • 本地文件同步到云上服务
    • 2、rsync工具介绍
      • (1)、rsync(Remote Sync,远程同步)
      • (2)rsync同步源
      • (3)、配置rsync源
        • 配置源的两种表达方式
        • 免交互格式
    • 3、scp工具介绍

一、数据处理背景

  • 作为数据工作者,日常工作中常见工作有:数据同步,网络数据抓取,系统数据入库,日志数据搜集,还有数据分析、挖掘等等。数据数据同步工作,本地数据文件的复制,本地服务器间数据同步,本地服务器到网络存储(网盘、NAS、对象存储等)的数据同步,网络存储之间的数据同步,大数据非结构性数据同步等。
  • 本文主要是希望将十几个T的数据,从A服务器同步到B服务器,数据源是由MinIO实现的对象存储服务提供(部署在C服务器),mount挂载在A服务器制定路径(由于服务器访问安全问题,访问策略上如此定义)。

二、数据处理方法对比

1、数据关系梳理

  • 数据源由MinIO服务提供,挂载在A服务器制定路径。在数据同步过程我们无需关注A服务器和C服务器之间的访问关系。在数据同步效率上可能带来的瓶颈由:a、A服务器和C服务器之间的网络带宽;b、C服务器提供MinIO服务的并发能力。
  • A服务器和B服务器可通过SSH访问,但无法访问C服务器。
    B服务器ssh访问A服务器,端口默认22
    用户名:root 密码:1qaz@wsx
    A服务器IP:192.168.1.100; 数据路径:/data/bigdata
    B服务器数据路径:/data/bigdata; 数据路径:/data/bigdata

2、不同工具处理方法

  • scp复制
    • 简单直接,比较适合小文件传输,没有复杂的配置。
    • 该命令和本地cp命令参数大致相同,区别在于跨服务器复制。
    • 命令格式:sudo scp [属性参数] 源数据路径 目标数据路径
    • 如果源数据路径为远程服务器,则意味着数据从远程服务器复制到本地;如果源数据路径为本地,则意味着数据由本地复制到远程服务器。
    • 登录B服务器,执行如下脚本:
sudo scp -r root@192.168.1.100:/data/bigdata /data/

上述命令实现数据从A服务器复制到B服务器。该命令在执行大文件复制时,可能因为网络环境因素导致数据复制终端,不支持断点续传。

  • rsync同步
    • 支持断点续传,同步执行失败,可以再次执行,检查数据状态,继续完成前次未同步数据
    • Linux系统包自带工具,需要单独安装,命令参数相对复杂,日常简单的数据同步工作基本满足需求
    • 数据传输效率较scp高些,结合inotify-tools可实现数据实时同步; parallel可以实现多线程并行处理
    • 命令格式:sudo rsync [属性] 源数据路径 目标数据路径
    • 如果源数据路径为远程服务器,则意味着数据从远程服务器复制到本地;如果源数据路径为本地,则意味着数据由本地复制到远程服务器。
    • 登录B服务器,执行如下脚本:
sudo rsync -av root@192.168.1.100:/data/bigdata /data/bigdata

上述命令实现数据从A服务器到B服务器数据同步。适合比较大的文件同步,支持断点续传。需要注意的是,源数据路径和目标数据路径均需指定明确存在的路径,然后将路径下所有数据资源同步到目标路径下,不会创建根路径名称。

  • rclone同步
    • 支持断点续传,可实现服务器间的数据同步,复制工作,功能非常强大
    • 需要自主安装的第三方工具包。支持本地数据同步功能,具有与unix命令rsync、cp、mv、mount、ls、ncdu、tree、rm和cat相当的强大云功能
    • 支持大文件的快速传输,默认支持多线程,数据同步效率大约是rsync的三倍
    • 命令格式:sudo rclone 源数据路径 目标数据路径 [属性]
    • 如果源数据路径为远程服务器,则意味着数据从远程服务器复制到本地;如果源数据路径为本地,则意味着数据由本地复制到远程服务器。
    • 登录B服务器,首先需要配置rclone配置文件:
sudo rcllone config 
  • 按照向导提示,配置远程服务器的参数信息。证书部分如果均为空,则按照用户名,密码方式认证,生成参数结果如下:
    配置参数也可以复制如下信息,仅仅修改标识符,服务器B的IP,user, port, 其他保持不变。
[svra]                      # 标识符,很重要,可以随意起
type = sftp
host = 192.168.1.100        # 改为服务器B的ip
user = root                 # 默认root用户
port = 22                   # 默认22端口,如果是其他端口请修改
# key_file = ~/.ssh/rclone-merged  #证书认证,可以删除该行,仅仅用户名密码认证方式
shell_type = unix
md5sum_command = md5sum     # 向导生成时可以选择为空
sha1sum_command = sha1sum   # 向导生成时可以选择为空
  • 执行如下命令,实现数据同步
sudo rclone sync svra:/data/bigdata /data/bigdata -u -v -P --transfers=20 --ignore-errors --buffer-size=128M  --drive-acknowledge-abuse

上述命令实现数据从A服务器到B服务器数据同步。适合比较大的文件同步,支持断点续传。需要注意的是,源数据路径和目标数据路径均需指定明确存在的路径,然后将路径下所有数据资源同步到目标路径下,不会创建根路径名称。

3、经验总结

  • scp 小白救星,但大文件是噩梦。优势​​:命令简单、加密传输、系统预装;致命缺陷​​:​​断点续传=0​​!传输10GB文件若中断,必须重头再来;​​适用场景​​:单文件<1GB、临时备份、内网低风险环境
  • rsync:企业级神器,增量同步碾压全场。核心理由​​:仅传输差异部分,​​节省带宽70%+​;–partial:断点续传;bwlimit=5000:限速5MB/s避免挤爆业务;​​实测数据​​:同步100GB变化文件,​​scp需1.5小时 → rsync仅18分钟
  • rclone:强大的数据同步工具,云时代数据搬运神奇。支持几乎所有云存储,网盘,本地服务器之间的数据同步。重点需要维护好配置文件中各个存储资源信息

三、工具扩展知识

1、rclone工具介绍

(1)、rclone概述

Rclone 是一款的命令行工具,支持在不同对象存储、网盘间同步、上传、下载数据。
官网网址:https://rclone.org/
Github 项目:https://github.com/ncw/rclone
最近有一个不幸的消息是:Amazon 禁止了 rclone 在他家存储上使用,好忧伤。
新闻地址:https://forum.rclone.org/t/rclone-has-been-banned-from-amazon-drive/2314
新闻地址:https://www.lowendtalk.com/discussion/115117/rclone-banned-from-amazon-drive
支持的主流对象存储有:
    Google Drive
    Amazon S3
    Openstack Swift / Rackspace cloud files / Memset Memstore
    Dropbox
    Google Cloud Storage
    Amazon Drive
    Microsoft One Drive
    Hubic
    Backblaze B2
    Yandex Disk

The local filesystem

(2)、安装工具及配置

  • 工具安装
    以Ubuntu系统为例,执行在线安装命令,亦可下载安装包,离线安装。
sudo -v ; curl https://rclone.org/install.sh | sudo bash
  • 资源配置
    执行下面命令,按照向导选择对应资源配置类型,生成配置文件
sudo rclone config
Current remotes:
n) New remote
s) Set configuration password
q) Quit config
n/s/q> q
  • 生成配置文件类型举例:

    • 服务器资源
    [svra]                      # 标识符,很重要,可以随意起
    type = sftp
    host = 192.168.1.100        # 改为服务器B的ip
    user = root                 # 默认root用户
    port = 22                   # 默认22端口,如果是其他端口请修改
    # key_file = ~/.ssh/rclone-merged  #证书认证,可以删除该行,仅仅用户名密码认证方式
    shell_type = unix
    md5sum_command = md5sum     # 向导生成时可以选择为空
    sha1sum_command = sha1sum   # 向导生成时可以选择为空
    
    • S3协议类型
     # cat /root/.config/rclone/rclone.conf [src] #s数据源服务type = s3provider = Minioenv_auth = falseaccess_key_id = xxxxxxsecret_access_key = xxxxxxregion = cn-east-1endpoint = http://10.0.176.163:22829location_constraint = server_side_encryption = [des] #目标数据服务服务type = s3provider = Minioenv_auth = falseaccess_key_id = xxxxxxsecret_access_key = xxxxxxregion = cn-east-1endpoint = http://10.0.176.163:20445location_constraint = server_side_encryption = 
    
  • 服务期间免密登录设置(按需)

    • 生成密钥对
      在客户端上执行命令,生成密钥对。然后,合并秘钥,最终会在~/.ssh/目录下生成 rclone.pub,rclone,以及rclone-merged 三个文件
      注意:ssh生成的秘钥文件,保存在当前用户目录下的.ssh目录下,即:~/.ssh/
    ssh-keygen -q -t rsa -b 4096 -C "rclone key" -N "" -f ~/.ssh/rclone     #静默生成rclone密钥对
    cd ~/.ssh/
    cat rclone* > rclone-merged   # 将密钥对合并,否则会连接失败
    
    • 复制公钥到远程访问服务器
      • 命令方式复制
        假设服务器的ip是192.168.1.100,ssh端口是22,使用以下命令,然后输入服务器的密码即可。
    ssh-copy-id -i ~/.ssh/rclone.pub -f -p 22 root@192.168.1.100   #自行修改为你自己的
    
    • 手动方式复制
      在客户端上打开rclone.pub,复制里面的内容,在服务器上~/.ssh/的目录下,新建authorized_keys文件,粘贴内容到authorized_keys
  • 挂载远程服务到本地路径

    • 使用rclone mount命令,将远程服务挂载到本地
    sudo rclone mount svra:/data/bigdata    /data/bigdata --allow-other  --allow-non-empty --umask 0002
    ll /data/bigdata
    
  • 后台运行rclone

    nohup sudo rclone sync svra:/data/bigdata /data/bigdata -u -v -P --transfers=20 --ignore-errors --buffer-size=128M  --drive-acknowledge-abuse  sync.log 2 > &1 &
    

    其他例子:

     #复制最近7天的消息 --max-age 7d ,支持d、h、m、s,将minio:test的最近7天数据复制到minio1:test,并将日志写入copyrclone.log
    #不带--max-age 7d则是复制所有数据
    nohup rclone -P copy --max-age 7d --no-traverse minio:test minio1:test > copyrclone.log 2>&1 &#保留最近30天的数据,30天前的全部删除 --min-age 30d ,支持d、h、m、s,删除minio:test 30天前的数据,并将日志写入derclone.log
    #不带--mix-age 30d则是删除所有数据
    #相反--max-age 30d则是删除最近30天的数据
    nohup rclone -P delete --min-age 30d --no-traverse minio:test > derclone.log 2>&1 &
    
### (3)、命令介绍
- Rclone将一个目录树从一个存储系统同步到另一个。它的语法是这样的语法:[选项] 子命令 <参数> <参数…>
- 常见子命令查看一个远端目录:rclone ls remote:path拷贝一个本地目录到远端的目录:rclone copy /local/path remote:path将本地目录同步到远端的目录:rclone sync --interactive /local/path remote:pathrclone最常用的命令如下,完整的命令列表可以通过help或者是rclone提供的文档查看:```bashrclone config - Enter an interactive configuration session.rclone copy - Copy files from source to dest, skipping already copied.rclone sync - Make source and dest identical, modifying destination only.rclone bisync - Bidirectional synchronization between two paths.rclone move - Move files from source to dest.rclone delete - Remove the contents of path.rclone purge - Remove the path and all of its contents.rclone mkdir - Make the path if it doesn't already exist.rclone rmdir - Remove the path.rclone rmdirs - Remove any empty directories under the path.rclone check - Check if the files in the source and destination match.rclone ls - List all the objects in the path with size and path.rclone lsd - List all directories/containers/buckets in the path.rclone lsl - List all the objects in the path with size, modification time and path.rclone md5sum - Produce an md5sum file for all the objects in the path.rclone sha1sum - Produce a sha1sum file for all the objects in the path.rclone size - Return the total size and number of objects in remote:path.rclone version - Show the version number.rclone cleanup - Clean up the remote if possible.rclone dedupe - Interactively find duplicate files and delete/rename them.rclone authorize - Remote authorization.rclone cat - Concatenate any files and send them to stdout.rclone copyto - Copy files from source to dest, skipping already copied.rclone genautocomplete - Output shell completion scripts for rclone.rclone gendocs - Output markdown docs for rclone to the directory supplied.rclone listremotes - List all the remotes in the config file.rclone mount - Mount the remote as a mountpoint.rclone moveto - Move file or directory from source to dest.rclone obscure - Obscure password for use in the rclone.confrclone cryptcheck - Check the integrity of an encrypted remote.rclone about - Get quota information from the remote.```>官网 https://rclone.org/### (4)、应用场景
#### 从一个集群服务迁移到另一个集群服务
从一个集群将对应的文件迁移到另一个集群的应用是比较常见的一种应用情况,下面以对象服务的迁移为例进行简单的介绍:首先我们需要对两个服务都进行配置,第一个集群是test1,第二个集群是test2,现在需要将test1集群中的桶bucket1迁移到test2中。可以使用如下的命令:
```bash
rclone copy test://bucket1 test2://bucket1

如果在test2集群上没有这个桶bucket1的话,我们可以选择先手动在test2上创建对应的桶bucket1,也可以选择添加参数 --create-empty-src-dirs来自动创建:

rclone --create-empty-src-dirs copy test1://bucket1 test2://bucket2

如果想要实时监控进度的话,可以使用参数—progress;

本地文件迁移到云上服务

本地存在文件需要上云的情况下,也可以使用rclone来完成这个任务:

rclone copy $localpath $remote://$bucket/$prefix

可以用这个参数结构执行命令来完成任务,也可以根据实际情况添加相应的参数。

本地文件同步到云上服务

本地文件在拷贝过一次后,或者是首次直接迁移到云端,也可以使用sync命令来完成:

rclone sync $src_path  $dest_path

eg: rclone sync /mnt/test test://bucket1/test
sync与copy最大的区别在于sync命令是以“同步”为目的,也就是说,如果存在一个文件,dest端有而src端没有的话,会将dest端的文件清理掉。

2、rsync工具介绍

(1)、rsync(Remote Sync,远程同步)

一款开源的快速备份工具
支持本地复制
也可以在不同主机(例如:其他SSH、rsync主机)之间镜像同步整个目录树,支持增量备份,并保持钳接和权限。
采用优化的同步算法,传输前执行压缩,,因此非常适用于异地备份、镜像服务器等应用。

(2)rsync同步源

在远程同步任务中,负责发起rsync司步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为同步源(备份源)。在同步过程中,同步源负责提供文件的原始位置,发起端应对该位置具有读取权限。
例:
A服务器同步B服务器的数据,B服务器就是备份源
反过来,B服务器同步A服务器的数据,那么A服务器就是备份源
在这里插入图片描述

(3)、配置rsync源

  • 基本思路

    • 建立rsyncd.conf配置文件、独立的rsync账号文件
      • 配置文件rsyncd.conf
        需手动配置,语法类似于Samba配置
        认证配置auth users、secrets file,不加则为匿名
      • rsync账号文件
        采用“用户名:密码”的格式记录,每行一个用户记录
        独立的账号数据,不依赖系统账号
    • 启用rsync服务
      通过 --daemon独自提供服务:rsync --daemon
      可以通过执行kill $(cat /var/run/rsyncd.pid)关闭服务
  • rsync命令

#命令的用法
rsync [选项] 原始位置 目标位置#----------常用选项--------------------------
-r:递归模式,包含目录及子目录中的所有文件。
-l:对于符号链接文件仍然复制为符号链接文件。
-v:显示同步过程的详细(verbose)信息。
-z:在传输文件时进行压缩(compress)。
-a:归档模式,保留文件的权限、属性等信息,等同于组合选项“-rlptgoD”。
-p:保留文件的权限标记。
-t:保留文件的时间标记。
-g:保留文件的属组标记(仅超级用户使用)。
-o:保留文件的属主标记(仅超级用户使用)。
-H:保留硬连接文件。
-A:保留 ACL 属性信息。
-D:保留设备文件及其他特殊文件。
--delete:删除目标位置有而原始位置没有的文件,即删除差异文件,保留一致性。
--checksum:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件。
--password-file=file:从file中得到密码,用于免交互处理,file文件的权限要是600
配置源的两种表达方式

将指定的资源下载到本地/root 目录下进行备份。
格式一:
用户名@主机地址::共享模块名
例如:
backuper@192.168.163.10::wwwroot /opt

格式二:
rsync://用户名@主机地址/共享模块名
例如:
rsync://backuper@192.168.163.10/wwwroot /opt
免交互格式
echo "密码" > /etc/密码文件
chmod 600 /etc/密码文件#设置周期性任务
crontab -e
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/密码文件 backuper@192.168.163.10::wwwroot /optsystemctl restart crond
systemctl enable crond
-----------------------------------
rsync进程数量 rsync支持多线程
https://blog.51cto.com/u_16213679/10351277

3、scp工具介绍

系统内核命令,基本能力不再赘述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/917417.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/917417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

用latex+vscode+ctex写毕业论文

文章目录前言一、安装latex二、安装ctex包三、更新ctex包四、使用ctex文档类前言 用latexvscodectex写毕业论文。&#xff08;英文论文不用安装ctex&#xff09; CTEX 宏集是面向中文排版的通用 LATEX 排版框架&#xff0c;为中文 LATEX 文档提供了汉字输出支持、标点压缩、字…

深度学习·mmsegmentation基础教程

mmsegmentation的使用教程 mmsegmentation微调方法总结 自定义自己的数据集&#xff1a;mmsegmentation\configs\_base_\datasets\ZihaoDataset_pipeline.py注册&#xff1a;mmsegmentation\configs\_base_\datasets\__init__.py定义训练和测试的pipeline&#xff1a;mmsegme…

InfluxDB 与 Node.js 框架:Express 集成方案(二)

四、优化与注意事项 &#xff08;一&#xff09;性能优化技巧 连接池管理&#xff1a;使用连接池可以有效减少创建和销毁数据库连接的开销。在 Node.js 中&#xff0c;可以借助influx模块结合第三方连接池库&#xff0c;如generic-pool来实现连接池的管理 。通过设置连接池的…

单位长度上的RC参数

1inch1000mil25.4mm2.54cm 使用SI9000计算导线上电容电感参数并使用Q2D进行仿真验证。使用SI9000建立一个阻抗为50欧的微带线模型&#xff0c;后对该模型进行1GHz频域计算 通过计算得到结果&#xff0c;可知1GHz频率下单位传输线上的RLGC参数使用SI9000计算好单位长度上的RLGC参…

基于Dockerfile 部署一个 Flask 应用

Docker 与 Python&#xff1a;容器化部署应用&#xff0c;实现快速发布与弹性伸缩 以下是一个简单的 Flask 应用 # app.py - 一个简单的Flask应用 from flask import Flask import osapp Flask(__name__)app.route("/") def hello():env os.environ.get(FLASK_ENV,…

DFT设计中的不同阶段介绍

在DFT&#xff08;Design for Test&#xff0c;可测试性设计&#xff09;软件开发中&#xff0c;针对设计检测的完整流程通常包含Setup&#xff08;设置&#xff09;、Analysis&#xff08;分析&#xff09;、Insertion&#xff08;插入&#xff09;和Verification&#xff08;…

自动化测试准备工作:概念篇

自动化 什么是自动化? 超市的自动闸门&#xff0c;不需要手动的开门关门生活中的自动动化案例有效的减少了人力的消耗&#xff0c;同时也提高了生活的质量。 软件自动化测试同理&#xff0c;通过编写自动化测试程序&#xff08;减少人力和时间的消耗&#xff0c;提高软件的…

每日主题切换网页:用纯前端技术打造随心情变化的动态界面

&#x1f3a8; 每日主题切换网页&#xff1a;用纯前端技术打造随心情变化的动态界面 项目地址&#xff1a;https://github.com/hhse/daily-theme-switcher 在线演示&#xff1a;https://hhse.github.io/daily-theme-switcher 这里写目录标题&#x1f3a8; 每日主题切换网页&…

TOPSIS(Technique for Order Preference by Similarity to Ideal Solution )简介与简单示例

前言 提醒&#xff1a; 文章内容为方便作者自己后日复习与查阅而进行的书写与发布&#xff0c;其中引用内容都会使用链接表明出处&#xff08;如有侵权问题&#xff0c;请及时联系&#xff09;。 其中内容多为一次书写&#xff0c;缺少检查与订正&#xff0c;如有问题或其他拓展…

uniapp 富文本rich-text 文本首行缩进和图片居中

1. uniapp 富文本rich-text 文本首行缩进和图片居中 1.1. rich-text 文本首行缩进使用 rich-text 组件渲染html格式的代码&#xff0c;常常因为不能自定义css导致文本不能缩进&#xff0c;以及图片不能居中等问题&#xff0c;这里可以考虑使用js的replace方法&#xff0c;替换…

Apple基础(Xcode③-Singbox Core)

brew install go open ~/.bash_profile export PATH="$PATH:$(go env GOPATH)/bin" 先确保工具链完整 go install github.com/sagernet/gomobile/cmd/gomobile@v0.1.4 go install github.com/sagernet/gomobile/cmd/gobind@v0.1.4 gomobile init -v # 关键:-v …

JVM学习日记(十四)Day14——性能监控与调优(一)

经过前几篇的铺垫&#xff0c;现在开始正式进入调优篇&#xff0c;也是大火实际用的到的和感兴趣的&#xff0c;但是前期的知识积累还是有必要的&#xff0c;所以还对JVM基础没什么了解的&#xff0c;建议还是回看主包的前几篇内容&#xff0c;当然看其他优秀的博主也是可以的。…

使用 Elasticsearch 和 AI 构建智能重复项检测

作者&#xff1a;来自 Elastic Dayananda Srinivas 探索组织如何利用 Elasticsearch 检测和处理贷款或保险申请中的重复项。 Elasticsearch 带来了大量新功能&#xff0c;帮助你为你的使用场景构建最佳搜索方案。深入了解我们的示例 notebooks&#xff0c;开始免费云试用&#…

如何在不依赖 Office 的情况下转换 PDF 为可编辑文档

在日常工作里&#xff0c;我们经常需要处理各种文件格式的转换问题&#xff0c;像Word转PDF或者PDF转Excel这样的需求屡见不鲜。它是一款功能全面的PDF转换工具&#xff0c;能够帮助你轻松应对多种文档处理任务。不仅能够实现PDF与其他格式之间的转换&#xff0c;如Word、Excel…

嵌入式学习笔记-MCU阶段--DAY09

1. oled屏幕的接口IIC应用场合&#xff1a;2.IIC通信原理概念&#xff1a;IIC&#xff08;Inter-Integrated Circuit&#xff09;其实是IICBus简称&#xff0c;所以中文应该叫集成电路总线&#xff0c;它是一种串行通信总线&#xff0c;使用多主从架构&#xff0c;由飞利浦公司…

解决 Node.js 托管 React 静态资源的跨域问题

在 Node.js 项目中托管 React 打包后的静态资源时&#xff0c;可能会遇到跨域问题&#xff08;CORS&#xff09;。以下是几种解决方案&#xff1a; 1. 使用 Express 中间件设置 CORS 头 const express require(express); const path require(path); const app express();// …

【Linux】多路转接之epoll

优化poll进行拷贝的开销poll开销过大将整个 pollfd 数组拷贝到内核态&#xff0c;以便内核检查 fd 是否就绪&#xff08;从用户态 → 内核态&#xff09;。内核检查 fd 状态&#xff0c;并填充 revents。将 pollfd 数组从内核态拷贝回用户态&#xff0c;让应用程序可以读取 rev…

下载一个JeecgBoot-master项目 导入idea需要什么操作启动项目

官网&#xff1a;开发环境搭建 | JEECG 文档中心 一般做开发的电脑里都是有的&#xff0c;没有的只能下载了 前端安装 node官网:https://nodejs.org/zh-cnpnpm安装:通过命令 后端安装: jdk17 :https://www.oracle.com/cn/java/technologies/downloads/#java17maven :https://m…

解决 InputStream 只能读取一次问题

是的&#xff0c;InputStream 的一个重要特性是它通常只能被读取一次。这是因为&#xff1a;输入流通常是单向的、顺序访问的数据源很多流&#xff08;如网络流、文件流&#xff09;读取后指针就移动了&#xff0c;无法回退有些流&#xff08;如Socket流&#xff09;甚至读取后…

数据分析面试题

技都测试 1、请列举5个 Excel 中常用的函数及写法。[ if ] IF(A1>60, "及格", "不及格") —— 若 A1 单元格数值≥60&#xff0c;返回 “及格”&#xff0c;否则返回 “不及格”。IF(B2>100, B2*0.8, B2) —— 若 B2 数值 > 100&#xff0c…