快速方便地下载huggingface的模型库和数据集
快速方便地下载huggingface的模型库和数据集
- 方法一:用于使用 aria2/wget+git 下载 Huggingface 模型和数据集的 CLI 工具
- 特点
- Usage
- 方法二:模型下载【个人使用记录】
- 保持目录结构
- 数据集下载
- 不足之处
方法一:用于使用 aria2/wget+git 下载 Huggingface 模型和数据集的 CLI 工具
来自https://gist.github.com/padeoe/697678ab8e528b85a2a7bddafea1fa4f。
使用方法:将hfd.sh拷贝过去,然后参考下面的参考命令,下载数据集或者模型
🤗Huggingface 模型下载器
考虑到官方 huggingface-cli 缺乏多线程下载支持,以及错误处理不足在 hf_transfer 中,这个命令行工具巧妙地利用 wget 或 aria2 来处理 LFS 文件,并使用 git clone 来处理其余文件。
特点
- ⏯️ 从断点恢复:您可以随时重新运行它或按 Ctrl+C。
- 🚀 多线程下载:利用多线程加速下载过程。
- 🚫 文件排除:使用
--exclude或--include跳过或指定文件,为具有重复格式的模型(例如,*.bin或*.safetensors)节省时间)。 - 🔐 身份验证支持:对于需要 Huggingface 登录的门控模型,请使用
--hf_username和--hf_token进行身份验证。 - 🪞 镜像站点支持:使用“HF_ENDPOINT”环境变量进行设置。
- 🌍代理支持:使用“HTTPS_PROXY”环境变量进行设置。
- 📦 简单:仅依赖
git、aria2c/wget。
Usage
首先,下载 hfd.sh 或克隆此存储库,然后授予脚本执行权限。
chmod a+x hfd.sh
为了方便起见,您可以创建一个别名
alias hfd="$PWD/hfd.sh"
使用说明:
$ ./hfd.sh -h
Usage:hfd <repo_id> [--include include_pattern] [--exclude exclude_pattern] [--hf_username username] [--hf_token token] [--tool aria2c|wget] [-x threads] [--dataset] [--local-dir path]Description:Downloads a model or dataset from Hugging Face using the provided repo ID.Parameters:repo_id The Hugging Face repo ID in the format 'org/repo_name'.--include (Optional) Flag to specify a string pattern to include files for downloading.--exclude (Optional) Flag to specify a string pattern to exclude files from downloading.include/exclude_pattern The pattern to match against filenames, supports wildcard characters. e.g., '--exclude *.safetensor', '--include vae/*'.--hf_username (Optional) Hugging Face username for authentication. **NOT EMAIL**.--hf_token (Optional) Hugging Face token for authentication.--tool (Optional) Download tool to use. Can be aria2c (default) or wget.-x (Optional) Number of download threads for aria2c. Defaults to 4.--dataset (Optional) Flag to indicate downloading a dataset.--local-dir (Optional) Local directory path where the model or dataset will be stored.Example:hfd bigscience/bloom-560m --exclude *.safetensorshfd meta-llama/Llama-2-7b --hf_username myuser --hf_token mytoken -x 4hfd lavita/medical-qa-shared-task-v1-toy --dataset
下载模型:
hfd bigscience/bloom-560m
下载模型需要登录
从https://huggingface.co/settings/tokens获取huggingface令牌,然后
hfd meta-llama/Llama-2-7b --hf_username YOUR_HF_USERNAME_NOT_EMAIL --hf_token YOUR_HF_TOKEN
下载模型并排除某些文件(例如.safetensors):
hfd bigscience/bloom-560m --exclude *.safetensors
使用 aria2c 和多线程下载:
hfd bigscience/bloom-560m
输出:
下载过程中,将显示文件 URL:
$ hfd bigscience/bloom-560m --tool wget --exclude *.safetensors
...
Start Downloading lfs files, bash script:wget -c https://huggingface.co/bigscience/bloom-560m/resolve/main/flax_model.msgpack
# wget -c https://huggingface.co/bigscience/bloom-560m/resolve/main/model.safetensors
wget -c https://huggingface.co/bigscience/bloom-560m/resolve/main/onnx/decoder_model.onnx
...
# 安装包
apt update
apt-get install aria2
apt-get install iftop
apt-get install git-lfs
#参考命令
bash /xxx/xxx/hfd.sh mmaaz60/ActivityNet-QA-Test-Videos --tool aria2c -x 16 --dataset --local-dir /xxx/xxx/ActivityNet
hfd.sh
#!/usr/bin/env bash
# Color definitions
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Colortrap 'printf "${YELLOW}\nDownload interrupted. If you re-run the command, you can resume the download from the breakpoint.\n${NC}"; exit 1' INTdisplay_help() {cat << EOF
Usage:hfd <repo_id> [--include include_pattern] [--exclude exclude_pattern] [--hf_username username] [--hf_token token] [--tool aria2c|wget] [-x threads] [--dataset] [--local-dir path] Description:Downloads a model or dataset from Hugging Face using the provided repo ID.Parameters:repo_id The Hugging Face repo ID in the format 'org/repo_name'.--include (Optional) Flag to specify a string pattern to include files for downloading.--exclude (Optional) Flag to specify a string pattern to exclude files from downloading.include/exclude_pattern The pattern to match against filenames, supports wildcard characters. e.g., '--exclude *.safetensor', '--include vae/*'.--hf_username (Optional) Hugging Face username for authentication. **NOT EMAIL**.--hf_token (Optional) Hugging Face token for authentication.--tool (Optional) Download tool to use. Can be aria2c (default) or wget.-x (Optional) Number of download threads for aria2c. Defaults to 4.--dataset (Optional) Flag to indicate downloading a dataset.--local-dir (Optional) Local directory path where the model or dataset will be stored.Example:hfd bigscience/bloom-560m --exclude *.safetensorshfd meta-llama/Llama-2-7b --hf_username myuser --hf_token mytoken -x 4hfd lavita/medical-qa-shared-task-v1-toy --dataset
EOFexit 1
}MODEL_ID=$1
shift# Default values
TOOL="aria2c"
THREADS=4
HF_ENDPOINT=${HF_ENDPOINT:-"https://hf-mirror.com"}while [[ $# -gt 0 ]]; docase $1 in--include) INCLUDE_PATTERN="$2"; shift 2 ;;--exclude) EXCLUDE_PATTERN="$2"; shift 2 ;;--hf_username) HF_USERNAME="$2"; shift 2 ;;--hf_token) HF_TOKEN="$2"; shift 2 ;;--tool) TOOL="$2"; shift 2 ;;-x) THREADS="$2"; shift 2 ;;--dataset) DATASET=1; shift ;;--local-dir) LOCAL_DIR="$2"; shift 2 ;;*) shift ;;esac
done# Check if aria2, wget, curl, git, and git-lfs are installed
check_command() {if ! command -v $1 &>/dev/null; thenecho -e "${RED}$1 is not installed. Please install it first.${NC}"exit 1fi
}# Mark current repo safe when using shared file system like samba or nfs
ensure_ownership() {if git status 2>&1 | grep "fatal: detected dubious ownership in repository at" > /dev/null; thengit config --global --add safe.directory "${PWD}"printf "${YELLOW}Detected dubious ownership in repository, mark ${PWD} safe using git, edit ~/.gitconfig if you want to reverse this.\n${NC}" fi
}[[ "$TOOL" == "aria2c" ]] && check_command aria2c
[[ "$TOOL" == "wget" ]] && check_command wget
check_command curl; check_command git; check_command git-lfs[[ -z "$MODEL_ID" || "$MODEL_ID" =~ ^-h ]] && display_helpif [[ -z "$LOCAL_DIR" ]]; thenLOCAL_DIR="${MODEL_ID#*/}"
fiif [[ "$DATASET" == 1 ]]; thenMODEL_ID="datasets/$MODEL_ID"
fi
echo "Downloading to $LOCAL_DIR"if [ -d "$LOCAL_DIR/.git" ]; thenprintf "${YELLOW}%s exists, Skip Clone.\n${NC}" "$LOCAL_DIR"cd "$LOCAL_DIR" && ensure_ownership && GIT_LFS_SKIP_SMUDGE=1 git pull || { printf "${RED}Git pull failed.${NC}\n"; exit 1; }
elseREPO_URL="$HF_ENDPOINT/$MODEL_ID"GIT_REFS_URL="${REPO_URL}/info/refs?service=git-upload-pack"echo "Testing GIT_REFS_URL: $GIT_REFS_URL"response=$(curl -s -o /dev/null -w "%{http_code}" "$GIT_REFS_URL")if [ "$response" == "401" ] || [ "$response" == "403" ]; thenif [[ -z "$HF_USERNAME" || -z "$HF_TOKEN" ]]; thenprintf "${RED}HTTP Status Code: $response.\nThe repository requires authentication, but --hf_username and --hf_token is not passed. Please get token from https://huggingface.co/settings/tokens.\nExiting.\n${NC}"exit 1fiREPO_URL="https://$HF_USERNAME:$HF_TOKEN@${HF_ENDPOINT#https://}/$MODEL_ID"elif [ "$response" != "200" ]; thenprintf "${RED}Unexpected HTTP Status Code: $response\n${NC}"printf "${YELLOW}Executing debug command: curl -v %s\nOutput:${NC}\n" "$GIT_REFS_URL"curl -v "$GIT_REFS_URL"; printf "\n${RED}Git clone failed.\n${NC}"; exit 1fiecho "GIT_LFS_SKIP_SMUDGE=1 git clone $REPO_URL $LOCAL_DIR"GIT_LFS_SKIP_SMUDGE=1 git clone $REPO_URL $LOCAL_DIR && cd "$LOCAL_DIR" || { printf "${RED}Git clone failed.\n${NC}"; exit 1; }ensure_ownershipwhile IFS= read -r file; dotruncate -s 0 "$file"done <<< $(git lfs ls-files | cut -d ' ' -f 3-)
fiprintf "\nStart Downloading lfs files, bash script:\ncd $LOCAL_DIR\n"
files=$(git lfs ls-files | cut -d ' ' -f 3-)
declare -a urlswhile IFS= read -r file; dourl="$HF_ENDPOINT/$MODEL_ID/resolve/main/$file"file_dir=$(dirname "$file")mkdir -p "$file_dir"if [[ "$TOOL" == "wget" ]]; thendownload_cmd="wget -c \"$url\" -O \"$file\""[[ -n "$HF_TOKEN" ]] && download_cmd="wget --header=\"Authorization: Bearer ${HF_TOKEN}\" -c \"$url\" -O \"$file\""elsedownload_cmd="aria2c --console-log-level=error --file-allocation=none -x $THREADS -s $THREADS -k 1M -c \"$url\" -d \"$file_dir\" -o \"$(basename "$file")\""[[ -n "$HF_TOKEN" ]] && download_cmd="aria2c --header=\"Authorization: Bearer ${HF_TOKEN}\" --console-log-level=error --file-allocation=none -x $THREADS -s $THREADS -k 1M -c \"$url\" -d \"$file_dir\" -o \"$(basename "$file")\""fi[[ -n "$INCLUDE_PATTERN" && ! "$file" == $INCLUDE_PATTERN ]] && printf "# %s\n" "$download_cmd" && continue[[ -n "$EXCLUDE_PATTERN" && "$file" == $EXCLUDE_PATTERN ]] && printf "# %s\n" "$download_cmd" && continueprintf "%s\n" "$download_cmd"urls+=("$url|$file")
done <<< "$files"for url_file in "${urls[@]}"; doIFS='|' read -r url file <<< "$url_file"printf "${YELLOW}Start downloading ${file}.\n${NC}" file_dir=$(dirname "$file")if [[ "$TOOL" == "wget" ]]; then[[ -n "$HF_TOKEN" ]] && wget --header="Authorization: Bearer ${HF_TOKEN}" -c "$url" -O "$file" || wget -c "$url" -O "$file"else[[ -n "$HF_TOKEN" ]] && aria2c --header="Authorization: Bearer ${HF_TOKEN}" --console-log-level=error --file-allocation=none -x $THREADS -s $THREADS -k 1M -c "$url" -d "$file_dir" -o "$(basename "$file")" || aria2c --console-log-level=error --file-allocation=none -x $THREADS -s $THREADS -k 1M -c "$url" -d "$file_dir" -o "$(basename "$file")"fi[[ $? -eq 0 ]] && printf "Downloaded %s successfully.\n" "$url" || { printf "${RED}Failed to download %s.\n${NC}" "$url"; exit 1; }
doneprintf "${GREEN}Download completed successfully.\n${NC}"
方法二:模型下载【个人使用记录】
这个代码不能保持目录结构,见下面的改进版
import datetime
import os
import threadingfrom huggingface_hub import hf_hub_url
from huggingface_hub.hf_api import HfApi
from huggingface_hub.utils import filter_repo_objects# 执行命令
def execCmd(cmd):print("命令%s开始运行%s" % (cmd, datetime.datetime.now()))os.system(cmd)print("命令%s结束运行%s" % (cmd, datetime.datetime.now()))if __name__ == '__main__':# 需下载的hf库名称repo_id = "Salesforce/blip2-opt-2.7b"# 本地存储路径save_path = './blip2-opt-2.7b'# 获取项目信息_api = HfApi()repo_info = _api.repo_info(repo_id=repo_id,repo_type="model",revision='main',token=None,)# 获取文件信息filtered_repo_files = list(filter_repo_objects(items=[f.rfilename for f in repo_info.siblings],allow_patterns=None,ignore_patterns=None,))cmds = []threads = []# 需要执行的命令列表for file in filtered_repo_files:# 获取路径url = hf_hub_url(repo_id=repo_id, filename=file)# 断点下载指令cmds.append(f'wget -c {url} -P {save_path}')print(cmds)print("程序开始%s" % datetime.datetime.now())for cmd in cmds:th = threading.Thread(target=execCmd, args=(cmd,))th.start()threads.append(th)for th in threads:th.join()print("程序结束%s" % datetime.datetime.now())
保持目录结构
import datetime
import os
import threading
from pathlib import Pathfrom huggingface_hub import hf_hub_url
from huggingface_hub.hf_api import HfApi
from huggingface_hub.utils import filter_repo_objects# 执行命令
def execCmd(cmd):print("命令%s开始运行%s" % (cmd, datetime.datetime.now()))os.system(cmd)print("命令%s结束运行%s" % (cmd, datetime.datetime.now()))if __name__ == '__main__':# 需下载的hf库名称repo_id = "Salesforce/blip2-opt-2.7b"# 本地存储路径save_path = './blip2-opt-2.7b'# 创建本地保存目录Path(save_path).mkdir(parents=True, exist_ok=True)# 获取项目信息_api = HfApi()repo_info = _api.repo_info(repo_id=repo_id,repo_type="model",revision='main',token=None,)# 获取文件信息filtered_repo_files = list(filter_repo_objects(items=[f.rfilename for f in repo_info.siblings],allow_patterns=None,ignore_patterns=None,))cmds = []threads = []# 需要执行的命令列表for file in filtered_repo_files:# 获取路径url = hf_hub_url(repo_id=repo_id, filename=file)# 在本地创建子目录local_file = os.path.join(save_path, file)local_dir = os.path.dirname(local_file)Path(local_dir).mkdir(parents=True, exist_ok=True)# 断点下载指令cmds.append(f'wget -c {url} -P {local_dir}')print(cmds)print("程序开始%s" % datetime.datetime.now())for cmd in cmds:th = threading.Thread(target=execCmd, args=(cmd,))th.start()threads.append(th)for th in threads:th.join()print("程序结束%s" % datetime.datetime.now())
数据集下载
import datetime
import os
import threading
from pathlib import Pathfrom huggingface_hub import HfApi
from huggingface_hub.utils import filter_repo_objects# 执行命令
def execCmd(cmd):print("命令%s开始运行%s" % (cmd, datetime.datetime.now()))os.system(cmd)print("命令%s结束运行%s" % (cmd, datetime.datetime.now()))if __name__ == '__main__':# 需下载的数据集IDdataset_id = "openai/webtext"# 本地存储路径save_path = './webtext'# 创建本地保存目录Path(save_path).mkdir(parents=True, exist_ok=True)# 获取数据集信息_api = HfApi()dataset_info = _api.dataset_info(dataset_id=dataset_id,revision='main',token=None,)# 获取文件信息filtered_dataset_files = list(filter_repo_objects(items=[f.rfilename for f in dataset_info.siblings],allow_patterns=None,ignore_patterns=None,))cmds = []threads = []# 需要执行的命令列表for file in filtered_dataset_files:# 获取路径url = dataset_info.get_file_url(file)# 在本地创建子目录local_file = os.path.join(save_path, file)local_dir = os.path.dirname(local_file)Path(local_dir).mkdir(parents=True, exist_ok=True)# 断点下载指令cmds.append(f'wget -c {url} -P {local_dir}')print(cmds)print("程序开始%s" % datetime.datetime.now())for cmd in cmds:th = threading.Thread(target=execCmd, args=(cmd,))th.start()threads.append(th)for th in threads:th.join()print("程序结束%s" % datetime.datetime.now())
不足之处
不支持需要授权的库。
文件太多可能会开很多线程。


♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠
相关文章:
快速方便地下载huggingface的模型库和数据集
快速方便地下载huggingface的模型库和数据集 方法一:用于使用 aria2/wgetgit 下载 Huggingface 模型和数据集的 CLI 工具特点Usage 方法二:模型下载【个人使用记录】保持目录结构数据集下载不足之处 方法一:用于使用 aria2/wgetgit 下载 Hugg…...
JAVA小白学习日记Day10
1.线程锁 使用Runnable接口和Lambda表达式: 在 EasyThreadA 类的 mainA 方法中,通过创建 Runnable 实例 run,并使用Lambda表达式。 EasyThreadA::method 绑定到 run 上。然后创建两个线程 a 和 b,分别启动它们,它们会…...
分布式相关理论详解
目录 1.绪论 2.什么是分布式系统,和集群的区别 3.CAP理论 3.1 什么是CAP理论 3.2 一致性 3.2.1 计算机的一致性说明 1.事务中的一致性 2.并发场景下的一致性 3.分布式场景下的一致性 3.2.2 一致性分类 3.2.3 强一致性 1.线性一致性 a) 定义 a) Raft算法…...
Linux基础知识之Shell命令行及终端中的快捷键
1.察看历史命令快捷键 按键 操作 ctrl p 返回上一次输入命令字符 ctrl n 返回下一次输入命令字符 ctrl r 输入单词甚至词组搜索匹配历史命令 alt p 输入字符查找与字符相接近的历史命令 alt . 向之前执行的命令的最后一个参数轮循, 并将之添加到当前光标之后…...
研究生选择学习Android开发的利与弊?
在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「Android的资料从专业入门到高级教程」, 点个关注在评论区回复“888”之后私信回复“888”,全部无偿共享给大家!!!产品经理可以学学Axure快…...
怎么评价程序员40岁了竟然还在撸代码?
怎么评价外卖员40岁了竟然还在送外卖? 怎么评价滴滴司机40岁了竟然还在跑滴滴? 怎么评价老师40岁了竟然还在教书?难道程序员的本职工作不是敲代码吗?无论你是管理层还是螺丝钉,工业环境下怎么可能一行代码都不敲呢&…...
SQL优化(一)基础概念
基数(cardinality) 表中某个列的唯一键的数量叫做基数,主键列的基数就是表中数据的总行数。 可以用select count(distinct 列名) from 表名来计算基数。 基数的高低影像列的数据分布。 例如:先用Scott账户创建一个测试表test …...
【C++高阶】哈希:全面剖析与深度学习
目录 🚀 前言一: 🔥 unordered系列关联式容器1.1 unordered_map1.2 unordered_set 二: 🔥 哈希的底层结构 ⭐ 2.1 哈希概念⭐ 2.2 哈希冲突⭐ 2.3 哈希函数⭐ 2.4 哈希冲突解决2.4.1 🌄闭散列2.4.2 &#x…...
PHP西陆招聘求职系统小程序源码
🔥【职场新宠】西陆招聘求职系统,你的职场加速器🚀 🎉【开篇安利:一站式求职新体验】🎉 还在为找工作焦头烂额吗?是时候告别传统招聘网站的繁琐与低效了!今天给大家种草一个超赞的…...
系统移植(十一)根文件系统(未整理)
文章目录 一、根文件系统中各个目录文件功能解析:二、对busybox进行配置和编译(一)执行make help命令获取make的帮助信息(二)对busybox源码进行配置,配置交叉编译器(三)执行make men…...
mac中docker常用命令总结
在Mac中,Docker的常用命令可以总结如下表格: 命令用途docker run运行一个新的容器实例。可以指定镜像名来启动容器,并支持多种参数来调整容器的运行方式。docker ps列出当前正在运行的容器。可以通过添加-a参数来列出所有容器(包…...
Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3(含分析过程)
Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3(含分析过程) 目录 Python 【机器学习】 进阶 之 【实战案例】房价数据中位数分析 [ 项目介绍 ] [ 获取数据 ] [ 创建测试集 ]| 1/3&#x…...
Linux 4: Bash
1 Bash环境 1 命令执行的顺序 1 绝对路径、相对路径 2 alias 3 内置的builtin 4 $PATH找到的第一个命令 2 bash的登录信息,保存在哪里? 保存在/etc/issue. 3 bash的环境配置文件 1 如果是login shell,读以下,有优先级:如果…...
第十四天学习笔记2024.7.25
Git安装 1.安装git 2.创建git仓库 3.创建文件并且提交文件 (git add . 将文件提交到缓存)(git commit -m 说明)(git log 查看历史) 4.分支创建与解决分支冲突问题 创建主机(git 192.1…...
花几千上万学习Java,真没必要!(三十七)
IO 流: 读取数据到内存的过程:可以包括从硬盘、网络或其他存储设备中将数据加载到内存中,以便程序能够访问和处理这些数据。 写入数据到硬盘的过程:通常是将内存中的数据保存到硬盘或其他持久性存储设备中,以便长期存…...
SSA-GRU(自适应平滑自回归门控循环单元)预测模型及其Python和MATLAB实现
SSA-GRU(自适应平滑自回归门控循环单元)预测模型是结合了SSA(Singular Spectrum Analysis,奇异谱分析)和GRU(Gated Recurrent Unit,门控循环单元)模型的一种时间序列预测方法。以下是…...
【ROS】让你的回调函数并行起来
【前言】 众所周知,ROS中的所有回调函数,都由 ros::spin() 这个家伙来统一管理和唤醒。这里说的是所有通过ROS方式创建出来的回调函数,比如ros::Subscriber、ros::Timer等等的回调函数。 【举例】 我们先来看一个示例节点: #i…...
M12电连接器的编码分类及应用领域分析
12电连接器的编码主要包括A、B、C、D、X、S、T、K、L等类型,每种编码都有其特定的应用场景和功能: A编码:适用于传感器、直流电、1G以太网。 B编码:主要用于PROFIBUS总线系统。 C编码:适用于交流电。 D编码&#x…...
基于YOLOv8的道路裂缝坑洼检测系统
基于YOLOv8的道路裂缝坑洼检测系统 (价格88) 包含 【“裂缝”,“凹坑”】 2个类 通过PYQT构建UI界面,包含图片检测,视频检测,摄像头实时检测。 (该系统可以根据数据训练出的yolov8的权重文件,运用在其他检测系…...
蓝鹏测径仪非标定制订制流程
测径仪通常属于非标定制设备,非标定制意味着这些设备不是按照标准规格批量生产的,而是根据特定的客户需求和应用场景设计和制造的。例如,某些测径仪可能需要特殊的测量范围、精度、传感器或软件来满足特定的工业检测要求。 测径仪非标定制的…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
地震勘探——干扰波识别、井中地震时距曲线特点
目录 干扰波识别反射波地震勘探的干扰波 井中地震时距曲线特点 干扰波识别 有效波:可以用来解决所提出的地质任务的波;干扰波:所有妨碍辨认、追踪有效波的其他波。 地震勘探中,有效波和干扰波是相对的。例如,在反射波…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
在四层代理中还原真实客户端ngx_stream_realip_module
一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...
