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
英文地址,請注明出處:http://en.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…