[{"content":"记录我读过的书籍 1.已看 已看 《万历十五年》 《恶意》 《希望只线》 《基督山伯爵》 《自控力》 2.正在看 正在看 《二十年目睹之怪现状》 《乌合之众》 3.待看 待看 《百年孤独》 ","permalink":"https://www.uiuuyr.top/posts/%E8%AF%BB%E4%B9%A6%E8%AE%B0%E5%BD%95/","summary":"\u003ch1 id=\"记录我读过的书籍\"\u003e记录我读过的书籍\u003c/h1\u003e\n\u003ch2 id=\"1已看\"\u003e1.已看\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth style=\"text-align: center\"\u003e已看\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003e《万历十五年》\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003e《恶意》\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003e《希望只线》\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003e《基督山伯爵》\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003e《自控力》\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"2正在看\"\u003e2.正在看\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth style=\"text-align: center\"\u003e正在看\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003e《二十年目睹之怪现状》\u003c/td\u003e\n      \u003c/tr\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003e《乌合之众》\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\u003ch2 id=\"3待看\"\u003e3.待看\u003c/h2\u003e\n\u003ctable\u003e\n  \u003cthead\u003e\n      \u003ctr\u003e\n          \u003cth style=\"text-align: center\"\u003e待看\u003c/th\u003e\n      \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n      \u003ctr\u003e\n          \u003ctd style=\"text-align: center\"\u003e《百年孤独》\u003c/td\u003e\n      \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e","title":"读书记录"},{"content":"问题背景 最近发现我的 PowerShell 启动异常缓慢，从正常的瞬间启动延长到了 5~7 秒。作为经常要使用到的使用终端，每次启动都要被硬控好几秒不能使用，这严重影响了效率。\n问题诊断过程 性能测量 首先使用 Measure-Command 测试正常启动时间： Terminal window\nMeasure-Command { pwsh.exe -Command \u0026#34;exit\u0026#34; } Terminal window\nPS C:\\Users\\Alaye\u0026gt; Measure-Command { powershell -Command \u0026#34;exit\u0026#34; } Days : 0 Hours : 0 Minutes : 0 Seconds : 5 Milliseconds : 859 Ticks : 58595344 TotalDays : 6.78186851851852E-05 TotalHours : 0.00162764844444444 TotalMinutes : 0.0976589066666667 TotalSeconds : 5.8595344 TotalMilliseconds : 5859.5344 5s\n测试无配置文件启动时间： Terminal window\nMeasure-Command { powershell -NoProfile -Command \u0026#34;exit\u0026#34; } Terminal window\nPS C:\\Users\\Alaye\u0026gt; Measure-Command { powershell -NoProfile -Command \u0026#34;exit\u0026#34; } Days : 0 Hours : 0 Minutes : 0 Seconds : 0 Milliseconds : 217 Ticks : 2171056 TotalDays : 2.5127962962963E-06 TotalHours : 6.03071111111111E-05 TotalMinutes : 0.00361842666666667 TotalSeconds : 0.2171056 TotalMilliseconds : 217.1056 0.22s\n对比正常启动时间和无配置文件启动时间，发现相差过大，则可以判断为是启动配置影响了启动时间。\n检查 PowerShell 配置文件 检查配置文件位置：\nTerminal window\n$PROFILE | Get-Member -Type NoteProperty Terminal window\nPS C:\\Users\\Alaye\u0026gt; $PROFILE | Get-Member -Type NoteProperty TypeName: System.String Name MemberType Definition ---- ---------- ---------- AllUsersAllHosts NoteProperty string AllUsersAllHosts=C:\\Program Files\\PowerShell\\7\\profile.ps1 AllUsersCurrentHost NoteProperty string AllUsersCurrentHost=C:\\Program Files\\PowerShell\\7\\Microsoft.PowerShell_prof… CurrentUserAllHosts NoteProperty string CurrentUserAllHosts=C:\\Users\\Alaye\\Documents\\PowerShell\\profile.ps1 CurrentUserCurrentHost NoteProperty string CurrentUserCurrentHost=C:\\Users\\Alaye\\Documents\\PowerShell\\Microsoft.PowerS… 检查配置文件内容来定位问题,可以查看对应路径的内容或者使用命令行：\nTerminal window\n$PROFILE | Get-Member -Type NoteProperty | ForEach-Object { $path = $PROFILE.($_.Name) Write-Host \u0026#34;`n=== $($_.Name) ===\u0026#34; -ForegroundColor Yellow Write-Host \u0026#34;路径: $path\u0026#34; if (Test-Path $path) { Write-Host \u0026#34;内容:\u0026#34; Get-Content $path | ForEach-Object { Write-Host \u0026#34; $_\u0026#34; } } else { Write-Host \u0026#34;文件不存在\u0026#34; } } 发现问题根源 在 CurrentUserAllHosts 配置文件中发现了 Conda 初始化代码：\nC:\\Users\\Alaye\\Documents\\PowerShell\\profile.ps1\n# region conda initialize # !! Contents within this block are managed by \u0026#39;conda init\u0026#39; !! If (Test-Path \u0026#34;D:\\DevEnv\\anaconda3\\Scripts\\conda.exe\u0026#34;) { (\u0026amp; \u0026#34;D:\\DevEnv\\anaconda3\\Scripts\\conda.exe\u0026#34; \u0026#34;shell.powershell\u0026#34; \u0026#34;hook\u0026#34;) | Out-String | ?{$_} | Invoke-Expression } #endregion 根本原因：PowerShell 启动时会尝试执行该初始化脚本，导致长时间等待。\n解决方案 实现 Conda 延迟加载 为了在保持快速启动的同时仍能使用 Conda，实现延迟加载机制，修改配置文件：\nC:\\Users\\Alaye\\Documents\\PowerShell\\profile.ps1\n# 简单的 Conda 延迟加载 function Invoke-CondaInit { if (-not $script:CondaAlreadyInitialized) { Write-Host \u0026#34;正在初始化 Conda...\u0026#34; -ForegroundColor Yellow If (Test-Path \u0026#34;D:\\DevEnv\\anaconda3\\Scripts\\conda.exe\u0026#34;) { (\u0026amp; \u0026#34;D:\\DevEnv\\anaconda3\\Scripts\\conda.exe\u0026#34; \u0026#34;shell.powershell\u0026#34; \u0026#34;hook\u0026#34;) | Out-String | Where-Object {$_} | Invoke-Expression } $script:CondaAlreadyInitialized = $true } } # 只有在使用 conda 相关命令时才初始化 Set-Alias -Name conda -Value conda-wrapper function conda-wrapper { Invoke-CondaInit conda @args } 性能优化效果 优化前：\u0026gt;5 秒 使用延迟加载：启动\u0026lt;1 秒，首次使用 conda 时延迟加载 (约 2-3 秒) 总结 现在的配置方案既能保证 PowerShell 快速启动，又能在需要时使用 Conda 环境。\n关键原则：保持启动脚本的轻量化，将重量级功能改为按需加载，这是提升命令行启动响应速度的有效方法。\n文章来源\n","permalink":"https://www.uiuuyr.top/posts/%E4%BF%AE%E5%A4%8Dconda%E5%AF%BC%E8%87%B4%E7%9A%84powershell%E5%90%AF%E5%8A%A8%E7%BC%93%E6%85%A2/","summary":"\u003ch2 id=\"问题背景\"\u003e问题背景\u003c/h2\u003e\n\u003cp\u003e最近发现我的 PowerShell 启动异常缓慢，从正常的瞬间启动延长到了 5~7 秒。作为经常要使用到的使用终端，每次启动都要被硬控好几秒不能使用，这严重影响了效率。\u003c/p\u003e\n\u003ch2 id=\"问题诊断过程\"\u003e问题诊断过程\u003c/h2\u003e\n\u003ch3 id=\"性能测量\"\u003e性能测量\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e首先使用 \u003ccode\u003eMeasure-Command\u003c/code\u003e 测试正常启动时间：\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eTerminal window\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\nMeasure-Command { pwsh.exe -Command \u0026#34;exit\u0026#34; }\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eTerminal window\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\nPS C:\\Users\\Alaye\u0026gt; Measure-Command { powershell -Command \u0026#34;exit\u0026#34; }\n\nDays              : 0\nHours             : 0\nMinutes           : 0\nSeconds           : 5\nMilliseconds      : 859\nTicks             : 58595344\nTotalDays         : 6.78186851851852E-05\nTotalHours        : 0.00162764844444444\nTotalMinutes      : 0.0976589066666667\nTotalSeconds      : 5.8595344\nTotalMilliseconds : 5859.5344\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e5s\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e测试无配置文件启动时间：\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003eTerminal window\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003e\nMeasure-Command { powershell -NoProfile -Command \u0026#34;exit\u0026#34; }\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003eTerminal window\u003c/p\u003e","title":"修复Conda导致的PowerShell启动缓慢"},{"content":"前言 Rclone 是一个的命令行工具，支持在不同对象存储、网盘间同步、上传、下载数据。并且通过一些设置可以实现离线下载、服务器备份等非常实用的功能。本篇文章将讲解 Rclone 常用的一些命令参数。\n安装 Rclone Linux/macOS/BSD 官方提供了一键安装脚本：\ncurl https://rclone.org/install.sh | sudo bash Windows 下载\nRclone 设置 rclone config - 进入交互式配置选项，进行添加、删除、管理网盘等操作。详细操作参见：《Rclone 安装配置教程》\nrclone config file - 显示配置文件的路径，一般配置文件在 ~/.config/rclone/rclone.conf\nrclone config show - 显示配置文件信息\n命令语法 # 本地到网盘 rclone [功能选项] \u0026lt;本地路径\u0026gt; \u0026lt;网盘名称:路径\u0026gt; [参数] [参数] ... # 网盘到本地 rclone [功能选项] \u0026lt;网盘名称:路径\u0026gt; \u0026lt;本地路径\u0026gt; [参数] [参数] ... # 网盘到网盘 rclone [功能选项] \u0026lt;网盘名称:路径\u0026gt; \u0026lt;网盘名称:路径\u0026gt; [参数] [参数] ... 用法示例 rclone move -v /Download Onedrive:/Download --transfers=1 常用功能选项 rclone copy - 复制 rclone move - 移动，如果要在移动后删除空源目录，请加上 --delete-empty-src-dirs 参数 rclone sync - 同步：将源目录同步到目标目录，只更改目标目录。 rclone size - 查看网盘文件占用大小。 rclone delete - 删除路径下的文件内容。 rclone purge - 删除路径及其所有文件内容。 rclone mkdir - 创建目录。 rclone rmdir - 删除目录。 rclone rmdirs - 删除指定灵境下的空目录。如果加上 --leave-root 参数，则不会删除根目录。 rclone check - 检查源和目的地址数据是否匹配。 rclone ls - 列出指定路径下的所有的文件以及文件大小和路径。 rclone lsl - 比上面多一个显示上传时间。 rclone lsd 列出指定路径下的目录 rclone lsf - 列出指定路径下的目录和文件 常用参数 -n = --dry-run - 测试运行，用来查看 rclone 在实际运行中会进行哪些操作。 -P = --progress - 显示实时传输进度，500mS 刷新一次，否则默认 1 分钟刷新一次。 --cache-chunk-size SizeSuffi - 块的大小，默认5M，理论上是越大上传速度越快，同时占用内存也越多。如果设置得太大，可能会导致进程中断。 --cache-chunk-total-size SizeSuffix - 块可以在本地磁盘上占用的总大小，默认10G。 --transfers=N - 并行文件数，默认为4。在比较小的内存的VPS上建议调小这个参数，比如128M的小鸡上使用建议设置为1。 --config string - 指定配置文件路径，string为配置文件路径。 --ignore-errors - 跳过错误。比如 OneDrive 在传了某些特殊文件后会提示Failed to copy: failed to open source object: malwareDetected: Malware detected，这会导致后续的传输任务被终止掉，此时就可以加上这个参数跳过错误。但需要注意 RCLONE 的退出状态码不会为0。 日志 rclone 有 4 个级别的日志记录，ERROR，NOTICE，INFO 和 DEBUG。默认情况下，rclone 将生成 ERROR 和 NOTICE 级别消息。\n-q - rclone将仅生成 ERROR 消息。 -v - rclone将生成 ERROR，NOTICE 和 INFO 消息，推荐此项。 -vv - rclone 将生成 ERROR，NOTICE，INFO和 DEBUG 消息。 --log-level LEVEL - 标志控制日志级别。 输出日志到文件 使用 --log-file=FILE 选项，rclone 会将 Error，Info 和 Debug 消息以及标准错误重定向到 FILE，这里的 FILE 是你指定的日志文件路径。\n另一种方法是使用系统的指向命令，比如：\nrclone sync -v Onedrive:/DRIVEX Gdrive:/DRIVEX \u0026gt; \u0026#34;~/DRIVEX.log\u0026#34; 2\u0026gt;\u0026amp;1 文件过滤 --exclude - 排除文件或目录。\n--include - 包含文件或目录。\n--filter - 文件过滤规则，相当于上面两个选项的其它使用方式。包含规则以 + 开头，排除规则以 - 开头。\n文件类型过滤 比如 --exclude \u0026quot;*.bak\u0026quot;、--filter \u0026quot;- *.bak\u0026quot;，排除所有 bak 文件。也可以写作。\n比如 --include \u0026quot;*.{png,jpg}\u0026quot;、--filter \u0026quot;+ *.{png,jpg}\u0026quot;，包含所有 png 和 jpg 文件，排除其他文件。\n--delete-excluded 删除排除的文件。需配合过滤参数使用，否则无效。\n目录过滤 目录过滤需要在目录名称后面加上 /，否则会被当做文件进行匹配。以 / 开头只会匹配根目录（指定目录下），否则匹配所目录。这同样适用于文件。\n--exclude \u0026quot;.git/\u0026quot; 排除所有目录下的.git 目录。\n--exclude \u0026quot;/.git/\u0026quot; 只排除根目录下的.git 目录。\n--exclude \u0026quot;{Video,Software}/\u0026quot; 排除所有目录下的 Video 和 Software 目录。\n--exclude \u0026quot;/{Video,Software}/\u0026quot; 只排除根目录下的 Video 和 Software 目录。\n--include \u0026quot;/{Video,Software}/**\u0026quot; 仅包含根目录下的 Video 和 Software 目录的所有内容。\n文件大小过滤 默认大小单位为 kBytes ，但可以使用 k ，M 或 G 后缀。\n--min-size 过滤小于指定大小的文件。比如 --min-size 50 表示不会传输小于 50k 的文件。\n--max-size 过滤大于指定大小的文件。比如 --max-size 1G 表示不会传输大于 1G 的文件。\nTIPS: 博主在实际使用中发现大小过滤两个选项不能同时使用。\n过滤规则文件 --filter-from \u0026lt;规则文件\u0026gt; 从文件添加包含 / 排除规则。比如 --filter-from filter-file.txt。\n过滤规则文件示例：\n- secret*.jpg + *.jpg + *.png + file2.avi - /dir/Trash/** + /dir/** - * 这里只举例比较常用和简单的一些过滤用法，更复杂和高端的用法可以查看官方文档。\n环境变量 rclone 中的每个选项都可以通过环境变量设置。环境变量的名称可以通过长选项名称进行转换，删除 -- 前缀，更改 - 为_，大写并添加前缀 RCLONE_。环境变量的优先级会低于命令行选项，即通过命令行追加相应的选项时会覆盖环境变量设定的值。\n比如设置最小上传大小 --min-size 50，使用环境变量是 RCLONE_MIN_SIZE=50。当环境变量设置后，在命令行中使用 --min-size 100，那么此时环境变量的值就会被覆盖。\n常用环境变量 RCLONE_CONFIG - 自定义配置文件路径 RCLONE_CONFIG_PASS - 若 rclone 进行了加密设置，把此环境变量设置为密码，可自动解密配置文件。 RCLONE_RETRIES - 上传失败重试次数，默认 3 次 RCLONE_RETRIES_SLEEP - 上传失败重试等待时间，默认禁用，单位s、m、h分别代表秒、分钟、小时。 CLONE_TRANSFERS - 并行上传文件数。 RCLONE_CACHE_CHUNK_SIZE - 块的大小，默认5M，理论上是越大上传速度越快，同时占用内存也越多。如果设置得太大，可能会导致进程中断。 RCLONE_CACHE_CHUNK_TOTAL_SIZE - 块可以在本地磁盘上占用的总大小，默认10G。 RCLONE_IGNORE_ERRORS=true - 跳过错误。 参考资料 Rclone 官方文档\n本文作者：P3TERX\n**本文链接：**https://p3terx.com/archives/rclone-advanced-user-manual-common-command-parameters.html\n**版权声明：**本博客所有文章除特别声明外，均采用 CC BY-NC-SA 4.0 许可协议。非商业转载及引用请注明出处（作者、原文链接），商业转载请联系作者获得授权。\n","permalink":"https://www.uiuuyr.top/posts/rclone%E7%9A%84%E8%BF%9B%E9%98%B6%E4%BD%BF%E7%94%A8/","summary":"\u003ch2 id=\"前言\"\u003e前言\u003c/h2\u003e\n\u003cp\u003eRclone 是一个的命令行工具，支持在不同对象存储、网盘间同步、上传、下载数据。并且通过一些设置可以实现离线下载、服务器备份等非常实用的功能。本篇文章将讲解 Rclone 常用的一些命令参数。\u003c/p\u003e\n\u003ch2 id=\"安装-rclone\"\u003e安装 Rclone\u003c/h2\u003e\n\u003ch3 id=\"linuxmacosbsd\"\u003eLinux/macOS/BSD\u003c/h3\u003e\n\u003cp\u003e官方提供了\u003ca href=\"https://rclone.org/install/\"\u003e一键安装脚本\u003c/a\u003e：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl https://rclone.org/install.sh \u003cspan class=\"p\"\u003e|\u003c/span\u003e sudo bash\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"windows\"\u003eWindows\u003c/h3\u003e\n\u003cp\u003e\u003ca href=\"https://rclone.org/install/#windows\"\u003e下载\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"rclone-设置\"\u003eRclone 设置\u003c/h2\u003e\n\u003cp\u003e\u003ccode\u003erclone config\u003c/code\u003e - 进入交互式配置选项，进行添加、删除、管理网盘等操作。详细操作参见：《\u003ca href=\"https://p3terx.com/archives/rclone-installation-and-configuration-tutorial.html\"\u003eRclone 安装配置教程\u003c/a\u003e》\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003erclone config file\u003c/code\u003e  - 显示配置文件的路径，一般配置文件在  \t~/.config/rclone/rclone.conf\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003erclone config show\u003c/code\u003e - 显示配置文件信息\u003c/p\u003e\n\u003ch2 id=\"命令语法\"\u003e命令语法\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 本地到网盘\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erclone \u003cspan class=\"o\"\u003e[\u003c/span\u003e功能选项\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u0026lt;本地路径\u0026gt; \u0026lt;网盘名称:路径\u0026gt; \u003cspan class=\"o\"\u003e[\u003c/span\u003e参数\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e参数\u003cspan class=\"o\"\u003e]\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 网盘到本地\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erclone \u003cspan class=\"o\"\u003e[\u003c/span\u003e功能选项\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u0026lt;网盘名称:路径\u0026gt; \u0026lt;本地路径\u0026gt; \u003cspan class=\"o\"\u003e[\u003c/span\u003e参数\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e参数\u003cspan class=\"o\"\u003e]\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 网盘到网盘\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erclone \u003cspan class=\"o\"\u003e[\u003c/span\u003e功能选项\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u0026lt;网盘名称:路径\u0026gt; \u0026lt;网盘名称:路径\u0026gt; \u003cspan class=\"o\"\u003e[\u003c/span\u003e参数\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e参数\u003cspan class=\"o\"\u003e]\u003c/span\u003e ...\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"用法示例\"\u003e用法示例\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003erclone move -v /Download Onedrive:/Download --transfers\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"常用功能选项\"\u003e常用功能选项\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003erclone copy\u003c/code\u003e - 复制\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erclone move\u003c/code\u003e - 移动，如果要在移动后删除空源目录，请加上 \u003ccode\u003e--delete-empty-src-dirs\u003c/code\u003e 参数\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erclone sync\u003c/code\u003e - 同步：将源目录同步到目标目录，只更改目标目录。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erclone size\u003c/code\u003e - 查看网盘文件占用大小。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erclone delete\u003c/code\u003e - 删除路径下的文件内容。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erclone purge\u003c/code\u003e - 删除路径及其所有文件内容。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erclone mkdir\u003c/code\u003e - 创建目录。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erclone rmdir\u003c/code\u003e - 删除目录。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erclone rmdirs\u003c/code\u003e - 删除指定灵境下的空目录。如果加上 \u003ccode\u003e--leave-root\u003c/code\u003e 参数，则不会删除根目录。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erclone check\u003c/code\u003e - 检查源和目的地址数据是否匹配。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erclone ls\u003c/code\u003e - 列出指定路径下的所有的文件以及文件大小和路径。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erclone lsl\u003c/code\u003e - 比上面多一个显示上传时间。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erclone lsd\u003c/code\u003e 列出指定路径下的目录\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003erclone lsf\u003c/code\u003e - 列出指定路径下的目录和文件\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"常用参数\"\u003e常用参数\u003c/h2\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e-n\u003c/code\u003e = \u003ccode\u003e--dry-run\u003c/code\u003e - 测试运行，用来查看 rclone 在实际运行中会进行哪些操作。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e-P\u003c/code\u003e =  \u003ccode\u003e--progress\u003c/code\u003e - 显示实时传输进度，500mS 刷新一次，否则默认 1 分钟刷新一次。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--cache-chunk-size SizeSuffi\u003c/code\u003e - 块的大小，默认5M，理论上是越大上传速度越快，同时占用内存也越多。如果设置得太大，可能会导致进程中断。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--cache-chunk-total-size SizeSuffix\u003c/code\u003e - 块可以在本地磁盘上占用的总大小，默认10G。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--transfers=N\u003c/code\u003e - 并行文件数，默认为4。在比较小的内存的VPS上建议调小这个参数，比如128M的小鸡上使用建议设置为1。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--config string\u003c/code\u003e - 指定配置文件路径，\u003ccode\u003estring\u003c/code\u003e为配置文件路径。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e--ignore-errors\u003c/code\u003e - 跳过错误。比如 OneDrive 在传了某些特殊文件后会提示\u003ccode\u003eFailed to copy: failed to open source object: malwareDetected: Malware detected\u003c/code\u003e，这会导致后续的传输任务被终止掉，此时就可以加上这个参数跳过错误。但需要注意 RCLONE 的退出状态码不会为\u003ccode\u003e0\u003c/code\u003e。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch2 id=\"日志\"\u003e日志\u003c/h2\u003e\n\u003cp\u003erclone 有 4 个级别的日志记录，\u003ccode\u003eERROR\u003c/code\u003e，\u003ccode\u003eNOTICE\u003c/code\u003e，\u003ccode\u003eINFO\u003c/code\u003e 和 \u003ccode\u003eDEBUG\u003c/code\u003e。默认情况下，rclone 将生成 \u003ccode\u003eERROR\u003c/code\u003e 和 \u003ccode\u003eNOTICE\u003c/code\u003e 级别消息。\u003c/p\u003e","title":"rclone的进阶使用"},{"content":"关于在win10上安装win11商店apple music体验版的方法 一、下包 在网页端微软商店搜索所需的软件，并进入软件详情页，本次的体验版软件地址如下：\nhttps://apps.microsoft.com/store/detail/apple-music-preview/9PFHDD62MXS1?hl=en-us\u0026amp;gl=us\n复制该地址，后打开 https://store.rg-adguard.net/ ，在搜索栏贴上，右侧勾选slow后回车\n找到标题中有所需软件名称，且后缀为msixbundle的选项，点击下载\n二、解包 下载完成后，将该文件的后缀改为 zip \\ 7z \\ rar 等压缩文件的后缀解压并打开\n打开后继续找到名称中含有“x64”的安装包，更改后缀为压缩包格式后，解压到其他文件夹并打开\n三、改包 找到 AppManifest.xml ，用记事本打开\n回到软件详情页，找到软件系统要求，\n复制要求的系统版号并在记事本中搜索（ctrl+F）\n更改10.0.*****.0中间那串就行\n在设置中找到自己电脑的系统版号，将刚刚搜索的软件要求系统版号修改为自己的系统版号\n保存并退出\n四、重封 借文章开头的参考文章中的链接下载WSAppBak，然后解压到任意目录，打开 WSAppBak.exe\n先复制上一步解压文件的所在地址，在 WSAppBak.exe 贴上，回车\n后在其他路径新建一个文件夹，复制该文件夹地址，贴上，回车\n等待流程走完，期间会有数个弹窗，直接点OK、是\n完成后 WSAppBak.exe 的进程会显示完成，点击任意键自动关闭\n五、签名 在上一步新建的文件夹中，找到后缀.cer的文件，点击打开\n点击安装证书——本地计算机——将所有证书都放入下列存储——受信任的根证书颁发机构\n（此步与先前提到的参考文章略有出入，如安装失败可跟着参考文章再来一次）\n六、安装 恭喜你，完成以上所有步骤后，你应该能完成安装啦！\n点击后缀为.appx的文件，即可进行安装。\n","permalink":"https://www.uiuuyr.top/posts/%E5%9C%A8win10%E4%B8%8A%E5%AE%89%E8%A3%85windows%E5%95%86%E5%BA%97%E4%B8%8A%E4%B8%8D%E8%83%BD%E5%AE%89%E8%A3%85%E7%9A%84%E5%BA%94%E7%94%A8/","summary":"\u003ch1 id=\"关于在win10上安装win11商店apple-music体验版的方法\"\u003e关于在win10上安装win11商店apple music体验版的方法\u003c/h1\u003e\n\u003ch2 id=\"一下包\"\u003e一、下包\u003c/h2\u003e\n\u003cp\u003e在网页端微软商店搜索所需的软件，并进入软件详情页，本次的体验版软件地址如下：\u003c/p\u003e\n\u003cp\u003e\u003ca href=\"https://apps.microsoft.com/store/detail/apple-music-preview/9PFHDD62MXS1?hl=en-us\u0026amp;amp;gl=us\"\u003ehttps://apps.microsoft.com/store/detail/apple-music-preview/9PFHDD62MXS1?hl=en-us\u0026amp;gl=us\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e复制该地址，后打开 \u003ca href=\"https://store.rg-adguard.net/\"\u003ehttps://store.rg-adguard.net/\u003c/a\u003e ，在搜索栏贴上，右侧勾选slow后回车\u003c/p\u003e\n\u003cp\u003e找到标题中有所需软件名称，且后缀为msixbundle的选项，点击下载\u003c/p\u003e\n\u003ch2 id=\"二解包\"\u003e二、解包\u003c/h2\u003e\n\u003cp\u003e下载完成后，将该文件的后缀改为 zip \\ 7z \\ rar 等压缩文件的后缀解压并打开\u003c/p\u003e\n\u003cp\u003e打开后继续找到名称中含有“x64”的安装包，更改后缀为压缩包格式后，解压到其他文件夹并打开\u003c/p\u003e\n\u003ch2 id=\"三改包\"\u003e三、改包\u003c/h2\u003e\n\u003cp\u003e找到 AppManifest.xml ，用记事本打开\u003c/p\u003e\n\u003cp\u003e回到软件详情页，找到软件系统要求，\u003c/p\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/ffxdpie/blog/main/fx/查看版本号.png\" alt=\"查看版本号\" /\u003e\n\u003cp\u003e复制要求的系统版号并在记事本中搜索（ctrl+F）\u003c/p\u003e\n\u003cp\u003e更改10.0.*****.0中间那串就行\u003c/p\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/ffxdpie/blog/main/fx/修改版本号.png\" alt=\"修改版本号\" /\u003e\n\u003cp\u003e在设置中找到自己电脑的系统版号，将刚刚搜索的软件要求系统版号修改为自己的系统版号\u003c/p\u003e\n\u003cp\u003e保存并退出\u003c/p\u003e\n\u003ch2 id=\"四重封\"\u003e四、重封\u003c/h2\u003e\n\u003cp\u003e借文章开头的参考文章中的链接下载WSAppBak，然后解压到任意目录，打开  \u003ca href=\"https://github.com/Wapitiii/WSAppBak\"\u003e WSAppBak.exe\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e先复制上一步解压文件的所在地址，在 \u003ca href=\"https://github.com/Wapitiii/WSAppBak\"\u003e WSAppBak.exe\u003c/a\u003e 贴上，回车\u003c/p\u003e\n\u003cp\u003e后在其他路径新建一个文件夹，复制该文件夹地址，贴上，回车\u003c/p\u003e\n\u003cp\u003e等待流程走完，期间会有数个弹窗，直接点OK、是\u003c/p\u003e\n\u003cp\u003e完成后 WSAppBak.exe 的进程会显示完成，点击任意键自动关闭\u003c/p\u003e\n\u003ch2 id=\"五签名\"\u003e五、签名\u003c/h2\u003e\n\u003cp\u003e在上一步新建的文件夹中，找到后缀.cer的文件，点击打开\u003c/p\u003e\n\u003cp\u003e点击安装证书——本地计算机——将所有证书都放入下列存储——受信任的根证书颁发机构\u003c/p\u003e\n\u003cp\u003e（此步与先前提到的参考文章略有出入，如安装失败可跟着参考文章再来一次）\u003c/p\u003e\n\u003ch2 id=\"六安装\"\u003e六、安装\u003c/h2\u003e\n\u003cp\u003e恭喜你，完成以上所有步骤后，你应该能完成安装啦！\u003c/p\u003e\n\u003cp\u003e点击后缀为.appx的文件，即可进行安装。\u003c/p\u003e","title":"在win10上安装windows商店上不能安装的应用"},{"content":"步骤 1：更新系统和软件源 首先，确保系统的软件包是最新的：\nsudo apt update sudo apt upgrade -y 步骤 2：编译安装 Nginx apt install git -y #安装git git clone https://github.com/nginx/nginx.git\t#下载nginx源码 cd nginx # auto/configure --prefix=/usr/local/nginx \\ # --with-http_ssl_module \\ # --with-stream_ssl_module \\ # --with-stream_ssl_preread_module \\ # --with-http_v2_module \\ # --with-http_gzip_static_module \\ # --with-pcre \\ # --with-http_realip_module \\ # --with-stream_geoip_module=dynamic \\ # --with-stream ./auto/configure --prefix=/usr/local/nginx \\ --with-http_ssl_module \\ --with-http_v2_module \\ --with-http_v3_module \\ --with-stream \\ --with-stream_ssl_module \\ --with-stream_ssl_preread_module \\ --with-http_realip_module \\ --with-http_gzip_static_module \\ --with-pcre \\ --with-openssl=/usr/local/src/openssl \\ --with-threads \\ --with-file-aio \\ --with-http_stub_status_module \\ --with-http_auth_request_module \\ --with-cc-opt=\u0026#39;-O3 -march=native\u0026#39; make -j$(nproc) make install\t#安装在 \u0026#34;/usr/local/nginx/sbin/nginx\u0026#34; 安装开机自启服务\n创建一个 systemd 服务文件：\nnano /usr/lib/systemd/system/nginx.service 将以下内容添加:\n[Unit] Description=nginx After=network.target [Service] Type=forking ExecStart=/usr/local/nginx/sbin/nginx ExecReload=/usr/local/nginx/sbin/nginx -s reload ExecStop=/usr/local/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target 重新加载 systemd 配置并启动 Nginx：\nsudo systemctl daemon-reload sudo systemctl enable nginx.service sudo systemctl start nginx 查看nginx状态\nsystemctl status nginx.service nginx.service - nginx Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled; vendor\u0026gt; Active: inactive (dead) # 很奇怪，明明启动成功了，为什么显示Active: inactive (dead)？ 杀死nginx重启nginx\npkill -9 nginx ps -aux|grep nginx root 29703 0.0 0.1 12112 1108 pts/0 R+ 04:10 0:00 grep --color=auto nginx systemctl start nginx 再次查看状态，变成了active，搞定。\n将 Nginx 添加到 PATH\n如果 Nginx 成功安装，并且你想在任何地方使用 nginx 命令，可以将 Nginx 的 sbin 目录添加到系统的 PATH 环境变量中。编辑 ~/.bashrc 文件（或 ~/.bash_profile，取决于你的 shell 配置文件）：\nnano ~/.bashrc 在文件的末尾添加以下行：\nexport PATH=$PATH:/usr/local/nginx/sbin 保存并退出后，运行以下命令使修改生效：\nsource ~/.bashrc 现在，你可以在任何地方直接运行 nginx 命令了。\n步骤 3：安装docker 和 docker-compose 安装依赖包\napt install apt-transport-https ca-certificates curl software-properties-common 执行以下命令，导入 Docker 的 GPG 密钥：\ncurl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg 将 Docker 的官方 APT 仓库添加到系统中：\necho \u0026#34;deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable\u0026#34; | sudo tee /etc/apt/sources.list.d/docker.list \u0026gt; /dev/null 再次更新包索引，以便系统能够识别新添加的 Docker 仓库：\napt update 安装 Docker CE（社区版）：\napt install docker-ce 安装完成后，启动 Docker 并设置开机自启动：\nsystemctl start docker systemctl enable docker 通过运行以下命令来验证 Docker 是否安装成功：\ndocker --version 输出类似如下内容，表示安装成功：Docker version 20.10.8, build 3967b7d\n下载 Docker Compose\n从 GitHub 上下载 Docker Compose 的最新稳定版本：\napt install jq -y sudo curl -L \u0026#34;https://github.com/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | jq -r .tag_name)/docker-compose-$(uname -s)-$(uname -m)\u0026#34; -o /usr/local/bin/docker-compose 此命令会下载 Docker Compose 并将其保存到 /usr/local/bin/docker-compose。\n为 Docker Compose 文件授予可执行权限：\nsudo chmod +x /usr/local/bin/docker-compose 运行以下命令验证 Docker Compose 是否成功安装：\ndocker-compose --version 输出类似如下内容，表示安装成功：\ndocker-compose version 1.29.2, build 5becea4c 将当前用户添加到 Docker 组（推荐）\n如果你不希望每次都使用 sudo，可以将当前用户添加到 docker 组，这样就能直接运行 Docker 命令而无需 sudo。\n步骤：\n将当前用户（fenxiang）添加到 Docker 组：\nsudo usermod -aG docker fenxiang 这会将用户 fenxiang 添加到 Docker 组。\n退出当前会话并重新登录，或者运行以下命令来应用组的更改：\nnewgrp docker 或者退出并重新登录，以便 fenxiang 用户可以继承新的组权限。\n之后，你就可以直接运行 Docker 和 Docker Compose 命令，而无需使用 sudo 了：\ndocker-compose up -d 验证权限是否生效\n在你将用户添加到 docker 组之后，验证一下是否生效：\ndocker ps 如果没有出现权限问题，并且能够成功列出正在运行的容器，那么权限已经正确配置。\n步骤 4：安装acme 安装很简单，一条命令:\ncurl https://get.acme.sh | sh -s email=ssy329504125@gmail.com acme使用说明\nexport CF_Key=\u0026#34;763eac4f1bcebd8b5c95e9fc50d010b4\u0026#34; export CF_Email=\u0026#34;alice@example.com\u0026#34; ./acme.sh --issue --dns dns_cf -d example.com -d \u0026#39;*.example.com\u0026#39; 安装证书\nacme.sh --install-cert -d uiuuyr.top \\ --key-file /usr/local/nginx/conf/cert/key.pem \\ --fullchain-file /usr/local/nginx/conf/cert/cert.pem ","permalink":"https://www.uiuuyr.top/posts/%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%AE%89%E8%A3%85/","summary":"\u003ch3 id=\"步骤-1更新系统和软件源\"\u003e步骤 1：更新系统和软件源\u003c/h3\u003e\n\u003cp\u003e首先，确保系统的软件包是最新的：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt update\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt upgrade -y\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"步骤-2编译安装-nginx\"\u003e步骤 2：编译安装 Nginx\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-bash\" data-lang=\"bash\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eapt install git -y \t\t\t\t\t\t\t\t\t\u003cspan class=\"c1\"\u003e#安装git\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit clone https://github.com/nginx/nginx.git\t\t\u003cspan class=\"c1\"\u003e#下载nginx源码\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e nginx\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# auto/configure --prefix=/usr/local/nginx \\\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#            --with-http_ssl_module \\\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#            --with-stream_ssl_module \\\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#            --with-stream_ssl_preread_module \\\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#            --with-http_v2_module \\\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#            --with-http_gzip_static_module \\\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#            --with-pcre \\\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#            --with-http_realip_module \\\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#            --with-stream_geoip_module=dynamic \\\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#            --with-stream\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e./auto/configure --prefix\u003cspan class=\"o\"\u003e=\u003c/span\u003e/usr/local/nginx \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --with-http_ssl_module \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --with-http_v2_module \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --with-http_v3_module \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --with-stream \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --with-stream_ssl_module \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --with-stream_ssl_preread_module \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --with-http_realip_module \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --with-http_gzip_static_module \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --with-pcre \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --with-openssl\u003cspan class=\"o\"\u003e=\u003c/span\u003e/usr/local/src/openssl \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --with-threads \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --with-file-aio \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --with-http_stub_status_module \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --with-http_auth_request_module \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    --with-cc-opt\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;-O3 -march=native\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emake -j\u003cspan class=\"k\"\u003e$(\u003c/span\u003enproc\u003cspan class=\"k\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emake install\t\t\t\t\t\t\t\t\t\t\u003cspan class=\"c1\"\u003e#安装在 \u0026#34;/usr/local/nginx/sbin/nginx\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e安装开机自启服务\u003c/strong\u003e\u003c/p\u003e","title":"服务器安装"},{"content":"acme.sh Github地址\n1.申请证书 acme.sh --issue --dns dns_cf -d \u0026#39;*.uiuuyr.top\u0026#39; 2.安装证书 acme.sh --install-cert -d *.uiuuyr.top \\ --key-file /etc/nginx/*.uiuuyr.top/key.pem \\ --fullchain-file /etc/nginx/*.uiuuyr.top/cert.pem \\ --reloadcmd \u0026#34;service nginx reload\u0026#34; ","permalink":"https://www.uiuuyr.top/posts/acme%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/","summary":"\u003cp\u003e\u003ca href=\"https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E\"\u003eacme.sh Github地址\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cimg alt=\"image-20250525225810163\" loading=\"lazy\" src=\"https://raw.githubusercontent.com/ffxdpie/blog/main/fx/image-20250525225810163.png\"\u003e\u003c/p\u003e\n\u003ch6 id=\"1申请证书\"\u003e1.申请证书\u003c/h6\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eacme.sh --issue --dns dns_cf -d \u003cspan class=\"s1\"\u003e\u0026#39;*.uiuuyr.top\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch6 id=\"2安装证书\"\u003e2.安装证书\u003c/h6\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eacme.sh --install-cert -d *.uiuuyr.top \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e--key-file       /etc/nginx/*.uiuuyr.top/key.pem  \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e--fullchain-file /etc/nginx/*.uiuuyr.top/cert.pem \u003cspan class=\"se\"\u003e\\\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e--reloadcmd     \u003cspan class=\"s2\"\u003e\u0026#34;service nginx reload\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"acme使用方法"},{"content":"进入文件路径 /home/fenxiang/nsgkapi\n就修改后的文件上传\n构建docker 命令\ndocker build -t kulipa/nsgkapi . 运行docker\ndocker run -d --network api --name nsgkapi kulipa/nsgkapi 登录docker\ndocker login 推送到dockerhub命令\ndocker push Kulipa/nsgkapi:latest 拉取命令\ndocker pull kulipa/nsgkapi:latest ","permalink":"https://www.uiuuyr.top/posts/fastapi-docker%E6%9E%84%E5%BB%BA/","summary":"\u003cp\u003e进入文件路径   /home/fenxiang/nsgkapi\u003c/p\u003e\n\u003cp\u003e就修改后的文件上传\u003c/p\u003e\n\u003cp\u003e构建docker 命令\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker build -t kulipa/nsgkapi .\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e运行docker\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker run -d --network api --name nsgkapi kulipa/nsgkapi \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e登录docker\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker login\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e推送到dockerhub命令\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker push Kulipa/nsgkapi:latest\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e拉取命令\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker pull kulipa/nsgkapi:latest\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"构建fastapi docker"},{"content":"本地部署 DeepSeek-R1 大模型！ **1、本地部署，**我们可以通过Ollama来进行安装\nOllama 官方版：【点击前往】 Web UI 控制端【点击安装】\n安装命令\n1.5B Qwen DeepSeek R1\nollama run deepseek-r1:1.5b 7B Qwen DeepSeek R1\nollama run deepseek-r1:7b 8B Llama DeepSeek R1\nollama run deepseek-r1:8b 14B Qwen DeepSeek R1\nollama run deepseek-r1:14b 32B Qwen DeepSeek R1\nollama run deepseek-r1:32b 70B Llama DeepSeek R1\nollama run deepseek-r1:70b ","permalink":"https://www.uiuuyr.top/posts/%E5%BC%80%E6%BA%90%E6%A8%A1%E5%9E%8B%E6%90%AD%E5%BB%BA/","summary":"\u003ch1 id=\"本地部署-deepseek-r1-大模型\"\u003e本地部署 DeepSeek-R1 大模型！\u003c/h1\u003e\n\u003cp\u003e**1、本地部署，**\u003cstrong\u003e我们可以通过Ollama来进行安装\u003c/strong\u003e\u003c/p\u003e\n\u003ch2 id=\"ollama-官方版点击前往\"\u003e\u003cstrong\u003eOllama 官方版：\u003c/strong\u003e【\u003ca href=\"https://ollama.com/\"\u003e点击前往\u003c/a\u003e】\u003c/h2\u003e\n\u003cp\u003e\u003cstrong\u003eWeb UI 控制端【\u003ca href=\"https://chromewebstore.google.com/detail/page-assist-%E6%9C%AC%E5%9C%B0-ai-%E6%A8%A1%E5%9E%8B%E7%9A%84-web/jfgfiigpkhlkbnfnbobbkinehhfdhndo\"\u003e点击安装\u003c/a\u003e】\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e安装命令\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e1.5B Qwen DeepSeek R1\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eollama run deepseek-r1:1.5b\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e7B Qwen DeepSeek R1\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eollama run deepseek-r1:7b\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e8B Llama DeepSeek R1\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eollama run deepseek-r1:8b\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e14B Qwen DeepSeek R1\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eollama run deepseek-r1:14b\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e32B Qwen DeepSeek R1\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eollama run deepseek-r1:32b\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e70B Llama DeepSeek R1\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eollama run deepseek-r1:70b\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"开源模型搭建"},{"content":"用户模型 用户的信息: 姓名 性别\n# -*- coding:utf-8 -*- \u0026#34;\u0026#34;\u0026#34; @Des: 基础模型 \u0026#34;\u0026#34;\u0026#34; from tortoise import fields from tortoise.models import Model class TimestampMixin(Model): create_time = fields.DatetimeField(auto_now_add=True, description=\u0026#39;创建时间\u0026#39;) update_time = fields.DatetimeField(auto_now=True, description=\u0026#34;更新时间\u0026#34;) class Meta: abstract = True class UserWechat(TimestampMixin): city = fields.CharField(null=True, max_length=255, description=\u0026#39;城市\u0026#39;) country = fields.CharField(null=True, max_length=255, description=\u0026#39;国家\u0026#39;) headimgurl = fields.CharField(null=True, max_length=255, description=\u0026#39;微信头像\u0026#39;) nickname = fields.CharField(null=True, max_length=255, description=\u0026#39;微信昵称\u0026#39;) openid = fields.CharField(unique=True, max_length=255, description=\u0026#39;openid\u0026#39;) unionid = fields.CharField(unique=True, null=True, max_length=255, description=\u0026#39;unionid\u0026#39;) province = fields.CharField(null=True, max_length=255, description=\u0026#39;省份\u0026#39;) sex = fields.IntField(null=True, description=\u0026#39;性别\u0026#39;) user: fields.OneToOneRelation[\u0026#34;UserWechat\u0026#34;] = \\ fields.OneToOneField(\u0026#34;base.User\u0026#34;, related_name=\u0026#34;wechat\u0026#34;, on_delete=fields.CASCADE) class Meta: table_description = \u0026#34;用户微信\u0026#34; table = \u0026#34;user_wechat\u0026#34; class User(TimestampMixin): role: fields.ManyToManyRelation[\u0026#34;Role\u0026#34;] = \\ fields.ManyToManyField(\u0026#34;base.Role\u0026#34;, related_name=\u0026#34;user\u0026#34;, on_delete=fields.CASCADE) username = fields.CharField(null=True, max_length=20, description=\u0026#34;用户名\u0026#34;) user_type = fields.BooleanField(default=False, description=\u0026#34;用户类型 True:超级管理员 False:普通管理员\u0026#34;) password = fields.CharField(null=True, max_length=255) nickname = fields.CharField(default=\u0026#39;binkuolo\u0026#39;, max_length=255, description=\u0026#39;昵称\u0026#39;) user_phone = fields.CharField(null=True, description=\u0026#34;手机号\u0026#34;, max_length=11) user_email = fields.CharField(null=True, description=\u0026#39;邮箱\u0026#39;, max_length=255) full_name = fields.CharField(null=True, description=\u0026#39;姓名\u0026#39;, max_length=255) user_status = fields.IntField(default=0, description=\u0026#39;0未激活 1正常 2禁用\u0026#39;) header_img = fields.CharField(null=True, max_length=255, description=\u0026#39;头像\u0026#39;) sex = fields.IntField(default=0, null=True, description=\u0026#39;0未知 1男 2女\u0026#39;) remarks = fields.CharField(null=True, max_length=30, description=\u0026#34;备注\u0026#34;) client_host = fields.CharField(null=True, max_length=19, description=\u0026#34;访问IP\u0026#34;) wechat: fields.OneToOneRelation[UserWechat] class Meta: table_description = \u0026#34;用户表\u0026#34; table = \u0026#34;user\u0026#34; class Role(TimestampMixin): user: fields.ManyToManyRelation[User] role_name = fields.CharField(max_length=15, description=\u0026#34;角色名称\u0026#34;) access: fields.ManyToManyRelation[\u0026#34;Access\u0026#34;] = \\ fields.ManyToManyField(\u0026#34;base.Access\u0026#34;, related_name=\u0026#34;role\u0026#34;, on_delete=fields.CASCADE) role_status = fields.BooleanField(default=False, description=\u0026#34;True:启用 False:禁用\u0026#34;) role_desc = fields.CharField(null=True, max_length=255, description=\u0026#39;角色描述\u0026#39;) class Meta: table_description = \u0026#34;角色表\u0026#34; table = \u0026#34;role\u0026#34; class Access(TimestampMixin): role: fields.ManyToManyRelation[Role] access_name = fields.CharField(max_length=15, description=\u0026#34;权限名称\u0026#34;) parent_id = fields.IntField(default=0, description=\u0026#39;父id\u0026#39;) scopes = fields.CharField(unique=True, max_length=255, description=\u0026#39;权限范围标识\u0026#39;) access_desc = fields.CharField(null=True, max_length=255, description=\u0026#39;权限描述\u0026#39;) menu_icon = fields.CharField(null=True, max_length=255, description=\u0026#39;菜单图标\u0026#39;) is_check = fields.BooleanField(default=False, description=\u0026#39;是否验证权限 True为验证 False不验证\u0026#39;) is_menu = fields.BooleanField(default=False, description=\u0026#39;是否为菜单 True菜单 False不是菜单\u0026#39;) class Meta: table_description = \u0026#34;权限表\u0026#34; table = \u0026#34;access\u0026#34; class AccessLog(TimestampMixin): user_id = fields.IntField(description=\u0026#34;用户ID\u0026#34;) target_url = fields.CharField(null=True, description=\u0026#34;访问的url\u0026#34;, max_length=255) user_agent = fields.CharField(null=True, description=\u0026#34;访问UA\u0026#34;, max_length=255) request_params = fields.JSONField(null=True, description=\u0026#34;请求参数get|post\u0026#34;) ip = fields.CharField(null=True, max_length=32, description=\u0026#34;访问IP\u0026#34;) note = fields.CharField(null=True, max_length=255, description=\u0026#34;备注\u0026#34;) class Meta: table_description = \u0026#34;用户操作记录表\u0026#34; table = \u0026#34;access_log\u0026#34; class SystemParams(TimestampMixin): params_name = fields.CharField(unique=True, max_length=255, description=\u0026#34;参数名\u0026#34;) params = fields.JSONField(description=\u0026#34;参数\u0026#34;) class Meta: table_description = \u0026#34;系统参数表\u0026#34; table = \u0026#34;system_params\u0026#34; ","permalink":"https://www.uiuuyr.top/posts/fastapi/","summary":"\u003ch1 id=\"用户模型\"\u003e用户模型\u003c/h1\u003e\n\u003cp\u003e用户的信息:  姓名  性别\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# -*- coding:utf-8 -*-\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e@Des: 基础模型\n\u003c/span\u003e\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u0026#34;\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etortoise\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003etortoise.models\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eModel\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eTimestampMixin\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eModel\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecreate_time\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eDatetimeField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eauto_now_add\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;创建时间\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eupdate_time\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eDatetimeField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eauto_now\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;更新时间\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMeta\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003eabstract\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eUserWechat\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eTimestampMixin\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecity\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;城市\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ecountry\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;国家\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eheadimgurl\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;微信头像\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003enickname\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;微信昵称\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eopenid\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eunique\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;openid\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eunionid\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eunique\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;unionid\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eprovince\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;省份\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eIntField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;性别\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003euser\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eOneToOneRelation\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;UserWechat\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \\\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eOneToOneField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;base.User\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erelated_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;wechat\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eon_delete\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCASCADE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMeta\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etable_description\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;用户微信\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etable\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;user_wechat\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eTimestampMixin\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erole\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eManyToManyRelation\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Role\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \\\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eManyToManyField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;base.Role\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erelated_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;user\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eon_delete\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCASCADE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eusername\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e20\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;用户名\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003euser_type\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eBooleanField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;用户类型 True:超级管理员 False:普通管理员\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003epassword\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003enickname\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;binkuolo\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;昵称\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003euser_phone\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;手机号\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e11\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003euser_email\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;邮箱\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003efull_name\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;姓名\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003euser_status\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eIntField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;0未激活 1正常 2禁用\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eheader_img\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;头像\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esex\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eIntField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;0未知 1男 2女\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eremarks\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e30\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;备注\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eclient_host\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e19\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;访问IP\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ewechat\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eOneToOneRelation\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eUserWechat\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMeta\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etable_description\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;用户表\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etable\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;user\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eRole\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eTimestampMixin\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003euser\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eManyToManyRelation\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eUser\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erole_name\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e15\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;角色名称\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eaccess\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eManyToManyRelation\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;Access\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \\\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eManyToManyField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;base.Access\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003erelated_name\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;role\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eon_delete\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCASCADE\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erole_status\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eBooleanField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;True:启用 False:禁用\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erole_desc\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;角色描述\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMeta\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etable_description\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;角色表\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etable\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;role\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eAccess\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eTimestampMixin\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erole\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eManyToManyRelation\u003c/span\u003e\u003cspan class=\"p\"\u003e[\u003c/span\u003e\u003cspan class=\"n\"\u003eRole\u003c/span\u003e\u003cspan class=\"p\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eaccess_name\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e15\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;权限名称\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eparent_id\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eIntField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e0\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;父id\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003escopes\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eunique\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;权限范围标识\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eaccess_desc\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;权限描述\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003emenu_icon\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;菜单图标\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eis_check\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eBooleanField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;是否验证权限 True为验证 False不验证\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eis_menu\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eBooleanField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edefault\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eFalse\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s1\"\u003e\u0026#39;是否为菜单 True菜单 False不是菜单\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMeta\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etable_description\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;权限表\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etable\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;access\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eAccessLog\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eTimestampMixin\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003euser_id\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eIntField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;用户ID\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003etarget_url\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;访问的url\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003euser_agent\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;访问UA\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003erequest_params\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eJSONField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;请求参数get|post\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eip\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e32\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;访问IP\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003enote\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003enull\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;备注\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMeta\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etable_description\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;用户操作记录表\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etable\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;access_log\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eSystemParams\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eTimestampMixin\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eparams_name\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eCharField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eunique\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eTrue\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_length\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"mi\"\u003e255\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;参数名\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eparams\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003efields\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eJSONField\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003edescription\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;参数\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eMeta\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etable_description\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;系统参数表\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"n\"\u003etable\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;system_params\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"fastapi用户模型备份"},{"content":"mklink 是 Windows 操作系统中的命令行工具，用于创建符号链接（symbolic link）或硬链接（hard link）。这两种链接类型都是文件系统中的对象引用，它们允许将一个文件或目录链接到另一个位置，而无需复制实际的数据。\n符号链接（Symbolic Link）:\n符号链接是一种指向目标文件或目录的快捷方式。它类似于快捷方式（Shortcut），但是在操作系统级别上更为透明。 符号链接可以链接到文件或目录，甚至可以链接到网络位置。 符号链接支持相对路径和绝对路径。 例如，创建符号链接的命令如下：\nmklink /d [目标] [源] 其中 /d 表示创建目录的符号链接，[目标] 是新链接的路径，[源] 是源文件或目录的路径。\n硬链接（Hard Link）:\n硬链接是在文件系统中创建的两个或多个文件条目，它们都指向相同的实际数据块。 硬链接只能链接到同一文件系统中的文件，并且不能链接到目录。 删除原始文件不会删除硬链接，只有在删除所有硬链接后，实际数据块才会被释放。 例如，创建硬链接的命令如下：\nmklink [目标] [源] [目标] 是新链接的路径，[源] 是源文件的路径。\n这些链接可以用来简化文件和目录的组织，创建备份，或者在不同位置共享相同的数据。需要注意的是，创建符号链接和硬链接通常需要管理员权限。\nmklink /j 是 Windows 操作系统中的命令，用于创建一个目录的符号链接，也被称为“联接”（junction）。这个命令的作用是在文件系统中创建一个目录的符号链接，使得该链接指向另一个目录，而不是一个文件。这类似于硬链接，但是是针对目录的链接。\n具体的命令格式如下：\nmklink /j [目标] [源] 其中：\n/j 表示创建目录的符号链接。 [目标] 是新链接的路径，即符号链接将被创建的位置。 [源] 是源目录的路径，即符号链接将指向的位置。 这种符号链接的创建可以使得一个目录的内容在文件系统中出现在多个位置，而实际上只占用一份磁盘空间。这在一些情况下是很有用的，例如，你可能想要在不同的位置使用相同的数据，但不想在每个位置都复制整个目录的内容。符号链接允许你在这些位置之间共享相同的目录结构。\n需要注意的是，创建符号链接通常需要管理员权限。\nmklink /d 和 mklink /j 是 Windows 操作系统中用于创建符号链接的两个不同的选项，它们主要用于链接目录。以下是它们之间的主要区别：\n目标存在时的行为:\n/d: 创建目录的符号链接。可以链接到一个已经存在的目录，但要求目标目录不存在。即，如果目标目录已经存在，无法创建 /d 类型的符号链接。 /j: 创建目录的符号链接（联接）。可以链接到一个已经存在的目录，并且不要求目标目录不存在。如果目标目录已经存在，/j 会将链接指向现有目录，而不创建新目录。 支持的文件系统:\n/d: 可以在所有支持 NTFS 文件系统的版本上使用。 /j: 主要用于支持 NTFS 文件系统的版本，特别是用于链接目录到一个卷（卷是文件系统上的一个单独的逻辑存储单元）。 用途:\n/d: 适用于大多数一般目的的符号链接需求，可以链接到目录或文件。 /j: 主要用于创建目录的符号链接，特别是用于在同一卷上链接目录，而且它对一些应用程序和操作系统组件的期望也更符合。 举例说明：\nmklink /d C:\\LinkToFolder C:\\TargetFolder 这将在 C:\\ 目录下创建一个指向 C:\\TargetFolder 的目录符号链接。\nmklink /j C:\\LinkToFolder C:\\TargetFolder 这将创建一个目录符号链接，将 C:\\LinkToFolder 指向 C:\\TargetFolder，但无论 C:\\LinkToFolder 是否存在，都会链接到 C:\\TargetFolder。\n总体而言，选择 /d 还是 /j 取决于你的具体需求，如是否希望链接存在的目录、是否链接到同一卷等。\n虽然符号链接（Symbolic Links）和快捷方式（Shortcuts）在某些方面可以达到类似的目标，它们之间有一些关键的区别：\n层次不同：\n符号链接： 是在文件系统级别创建的，它提供了一个透明的链接，操作系统和应用程序在处理符号链接时会将其视为实际的文件或目录。符号链接在文件系统中具有其自己的入口，可以在命令行或资源管理器中访问。 快捷方式： 是用户级别的快捷方式，只在文件资源管理器等文件浏览工具中可见。快捷方式不是文件系统对象，而是包含有关目标的信息的文件。 透明度：\n符号链接： 提供了更高的透明度，操作系统和应用程序可以无感知地访问符号链接指向的内容。符号链接可以指向文件或目录，支持相对路径和绝对路径。 快捷方式： 是用户可见的，双击快捷方式将打开目标文件或目录。用户可以创建和管理快捷方式，但它们不提供与文件系统交互的透明性。 支持的对象类型：\n符号链接： 可以链接到文件或目录，也可以链接到网络位置。符号链接对应用程序来说更透明，因为它们提供了一个伪装成目标的入口。 快捷方式： 主要用于链接到文件或应用程序。快捷方式中包含有关目标位置的信息，但不提供对目录的透明链接。 使用权限：\n符号链接： 创建符号链接通常需要管理员权限。 快捷方式： 用户可以创建和管理快捷方式，通常无需管理员权限。 在选择使用符号链接还是快捷方式时，取决于你的具体需求。如果你希望在文件系统级别上创建透明的链接，使用符号链接可能更合适。如果你只是需要在用户级别上创建快捷方式以方便访问目标，那么使用快捷方式可能更为简便。\n","permalink":"https://www.uiuuyr.top/posts/mklink%E7%9A%84%E4%BD%BF%E7%94%A8/","summary":"\u003cp\u003emklink 是 Windows 操作系统中的命令行工具，用于创建符号链接（symbolic link）或硬链接（hard link）。这两种链接类型都是文件系统中的对象引用，它们允许将一个文件或目录链接到另一个位置，而无需复制实际的数据。\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e符号链接（Symbolic Link）:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e符号链接是一种指向目标文件或目录的快捷方式。它类似于快捷方式（Shortcut），但是在操作系统级别上更为透明。\u003c/li\u003e\n\u003cli\u003e符号链接可以链接到文件或目录，甚至可以链接到网络位置。\u003c/li\u003e\n\u003cli\u003e符号链接支持相对路径和绝对路径。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e例如，创建符号链接的命令如下：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emklink /d \u003cspan class=\"o\"\u003e[\u003c/span\u003e目标\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e源\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e其中 \u003ccode\u003e/d\u003c/code\u003e 表示创建目录的符号链接，\u003ccode\u003e[目标]\u003c/code\u003e 是新链接的路径，\u003ccode\u003e[源]\u003c/code\u003e 是源文件或目录的路径。\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e硬链接（Hard Link）:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e硬链接是在文件系统中创建的两个或多个文件条目，它们都指向相同的实际数据块。\u003c/li\u003e\n\u003cli\u003e硬链接只能链接到同一文件系统中的文件，并且不能链接到目录。\u003c/li\u003e\n\u003cli\u003e删除原始文件不会删除硬链接，只有在删除所有硬链接后，实际数据块才会被释放。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e例如，创建硬链接的命令如下：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emklink \u003cspan class=\"o\"\u003e[\u003c/span\u003e目标\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e源\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003ccode\u003e[目标]\u003c/code\u003e 是新链接的路径，\u003ccode\u003e[源]\u003c/code\u003e 是源文件的路径。\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e这些链接可以用来简化文件和目录的组织，创建备份，或者在不同位置共享相同的数据。需要注意的是，创建符号链接和硬链接通常需要管理员权限。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003emklink /j\u003c/code\u003e 是 Windows 操作系统中的命令，用于创建一个目录的符号链接，也被称为“联接”（junction）。这个命令的作用是在文件系统中创建一个目录的符号链接，使得该链接指向另一个目录，而不是一个文件。这类似于硬链接，但是是针对目录的链接。\u003c/p\u003e\n\u003cp\u003e具体的命令格式如下：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emklink /j \u003cspan class=\"o\"\u003e[\u003c/span\u003e目标\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003e源\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e其中：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e/j\u003c/code\u003e 表示创建目录的符号链接。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[目标]\u003c/code\u003e 是新链接的路径，即符号链接将被创建的位置。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e[源]\u003c/code\u003e 是源目录的路径，即符号链接将指向的位置。\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e这种符号链接的创建可以使得一个目录的内容在文件系统中出现在多个位置，而实际上只占用一份磁盘空间。这在一些情况下是很有用的，例如，你可能想要在不同的位置使用相同的数据，但不想在每个位置都复制整个目录的内容。符号链接允许你在这些位置之间共享相同的目录结构。\u003c/p\u003e\n\u003cp\u003e需要注意的是，创建符号链接通常需要管理员权限。\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003emklink /d\u003c/code\u003e 和 \u003ccode\u003emklink /j\u003c/code\u003e 是 Windows 操作系统中用于创建符号链接的两个不同的选项，它们主要用于链接目录。以下是它们之间的主要区别：\u003c/p\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e目标存在时的行为:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e/d\u003c/code\u003e: 创建目录的符号链接。可以链接到一个已经存在的目录，但要求目标目录不存在。即，如果目标目录已经存在，无法创建 \u003ccode\u003e/d\u003c/code\u003e 类型的符号链接。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e/j\u003c/code\u003e: 创建目录的符号链接（联接）。可以链接到一个已经存在的目录，并且不要求目标目录不存在。如果目标目录已经存在，\u003ccode\u003e/j\u003c/code\u003e 会将链接指向现有目录，而不创建新目录。\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e支持的文件系统:\u003c/strong\u003e\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003e/d\u003c/code\u003e: 可以在所有支持 NTFS 文件系统的版本上使用。\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e/j\u003c/code\u003e: 主要用于支持 NTFS 文件系统的版本，特别是用于链接目录到一个卷（卷是文件系统上的一个单独的逻辑存储单元）。\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e用途:\u003c/strong\u003e\u003c/p\u003e","title":"mklink的使用"},{"content":"解决一个Windows下启动项重复的问题 ​ 我喜欢Windows在运行的时候，任务管理器出现在右下的系统托盘里，便于监视系统的运行情况。为了能够开机自动运行任务管理器，我在”开始菜单”\u0026ndash;\u0026gt;“程序”\u0026ndash;\u0026gt;“启动”项中增加了指向任务管理器(taskmgr.exe)的快捷方式。这时问题出现了，当我开机的时候，taskmgr.exe会运行两次。\n​ 运行Windows自动的工具msconfig，发现startup栏中有两条taskmgr记录：\ntaskmgr C:\\WINDOWS\\System32\\taskmgr.exe Common Startup taskmgr C:\\WINDOWS\\System32\\taskmgr.exe Startup ​ 为什么会出现Common Startup和Startup这两条记录呢？通过搜索互联网，我找到 参考资料一。这篇文件详细介绍了msconfig中的这些startup记录是如何来的，自然也讲到了Common Startup和Startup的由来：（假设我登录Windows的用户名是tom）\n​ 1. Common Startup对应C:\\Documents and Settings\\ All Users\\Start Menu\\Programs\\Startup目录下的项；\n​ 2. Startup对应C:\\Documents and Settings\\tom\\Start Menu\\Programs\\Startup目录下的项。\n​ 文章还给出了一种验证的方法：右击“开始菜单”\u0026ndash;\u0026gt;“程序”\u0026ndash;\u0026gt;“启动”，在弹出的上下文菜单中，单击最上面的“打开”项，出来的目录是对应Startup项的；如果单击第二项“打开所有用户”，出来的目录是对应Common Startup项的。奇怪的是，我按照这种验证方法，出来目录的全都是指向All Users，没有指向tom这个用户的，这也是taskmgr.exe会运行两次的根本原因。\n​ 继续上网查找，找到了 参考资料二，里面的大牛指出了上述行为是受注册表控制的。我打开我的注册表，看到了下面两条：\n[HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ Shell Folders] Start Menu = C:\\Documents and Settings\\All Users\\Start Menu Startup = C:\\Documents and Settings\\All Users\\Start Menu\\Programs\\Startup [HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\ User Shell Folders] Start Menu = %ALLUSERSPROFILE%\\Start Menu Startup = %ALLUSERSPROFILE%\\Start Menu\\Programs\\Startup ​ 很明显，第一条Shell Folders对应的是Common Startup，第二User Shell Folders条对应的是Startup。因为%ALLUSERSPROFILE%等于C:\\Documents and Settings\\All Users，所以我系统里的Common Startup和Startup指向了同一目录。\n​ 到此为止，终于找到真凶了，原来是注册表乱了。解决办法很简单，将注册表指向正确的位置就可以了。\n​ 参考资料： ​ 一、https://mail.google.com/mail/u/0/#label/Study%2FComputer/131f97e61fa83fc0 ​ 二、http://topic.csdn.net/u/20101219/08/3068cb0f-4fae-4922-9bcf-cdeebf537037.html\n","permalink":"https://www.uiuuyr.top/posts/%E8%A7%A3%E5%86%B3%E4%B8%80%E4%B8%AAwindows%E4%B8%8B%E5%90%AF%E5%8A%A8%E9%A1%B9%E9%87%8D%E5%A4%8D%E7%9A%84%E9%97%AE%E9%A2%98/","summary":"\u003ch1 id=\"解决一个windows下启动项重复的问题\"\u003e解决一个Windows下启动项重复的问题\u003c/h1\u003e\n\u003cp\u003e​    我喜欢Windows在运行的时候，任务管理器出现在右下的系统托盘里，便于监视系统的运行情况。为了能够开机自动运行任务管理器，我在”开始菜单”\u0026ndash;\u0026gt;“程序”\u0026ndash;\u0026gt;“启动”项中增加了指向任务管理器(taskmgr.exe)的快捷方式。这时问题出现了，当我开机的时候，taskmgr.exe会运行两次。\u003c/p\u003e\n\u003cp\u003e​    运行Windows自动的工具msconfig，发现startup栏中有两条taskmgr记录：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          taskmgr   C:\u003cspan class=\"se\"\u003e\\W\u003c/span\u003eINDOWS\u003cspan class=\"se\"\u003e\\S\u003c/span\u003eystem32\u003cspan class=\"se\"\u003e\\t\u003c/span\u003easkmgr.exe   Common Startup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e          taskmgr   C:\u003cspan class=\"se\"\u003e\\W\u003c/span\u003eINDOWS\u003cspan class=\"se\"\u003e\\S\u003c/span\u003eystem32\u003cspan class=\"se\"\u003e\\t\u003c/span\u003easkmgr.exe   Startup\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e​    为什么会出现Common Startup和Startup这两条记录呢？通过搜索互联网，我找到 \u003ca href=\"https://mail.google.com/mail/u/0/#label/Study%2FComputer/131f97e61fa83fc0\"\u003e参考资料一\u003c/a\u003e。这篇文件详细介绍了msconfig中的这些startup记录是如何来的，自然也讲到了Common Startup和Startup的由来：（假设我登录Windows的用户名是tom）\u003c/p\u003e\n\u003cp\u003e​    1. Common Startup对应C:\\Documents and Settings\\ All Users\\Start Menu\\Programs\\Startup目录下的项；\u003c/p\u003e\n\u003cp\u003e​    2. Startup对应C:\\Documents and Settings\\tom\\Start Menu\\Programs\\Startup目录下的项。\u003c/p\u003e\n\u003cp\u003e​    文章还给出了一种验证的方法：右击“开始菜单”\u0026ndash;\u0026gt;“程序”\u0026ndash;\u0026gt;“启动”，在弹出的上下文菜单中，单击最上面的“打开”项，出来的目录是对应Startup项的；如果单击第二项“打开所有用户”，出来的目录是对应Common Startup项的。奇怪的是，我按照这种验证方法，出来目录的全都是指向All Users，没有指向tom这个用户的，这也是taskmgr.exe会运行两次的根本原因。\u003c/p\u003e\n\u003cp\u003e​    继续上网查找，找到了 \u003ca href=\"http://topic.csdn.net/u/20101219/08/3068cb0f-4fae-4922-9bcf-cdeebf537037.html\"\u003e参考资料二\u003c/a\u003e，里面的大牛指出了上述行为是受注册表控制的。我打开我的注册表，看到了下面两条：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e[\u003c/span\u003eHKEY_CURRENT_USER\u003cspan class=\"se\"\u003e\\S\u003c/span\u003eoftware\u003cspan class=\"se\"\u003e\\M\u003c/span\u003eicrosoft\u003cspan class=\"se\"\u003e\\W\u003c/span\u003eindows\u003cspan class=\"se\"\u003e\\C\u003c/span\u003eurrentVersion\u003cspan class=\"se\"\u003e\\E\u003c/span\u003explorer\u003cspan class=\"se\"\u003e\\ \u003c/span\u003eShell Folders\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                Start \u003cspan class=\"nv\"\u003eMenu\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e C:\u003cspan class=\"se\"\u003e\\D\u003c/span\u003eocuments and Settings\u003cspan class=\"se\"\u003e\\A\u003c/span\u003ell Users\u003cspan class=\"se\"\u003e\\S\u003c/span\u003etart Menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nv\"\u003eStartup\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e C:\u003cspan class=\"se\"\u003e\\D\u003c/span\u003eocuments and Settings\u003cspan class=\"se\"\u003e\\A\u003c/span\u003ell Users\u003cspan class=\"se\"\u003e\\S\u003c/span\u003etart Menu\u003cspan class=\"se\"\u003e\\P\u003c/span\u003erograms\u003cspan class=\"se\"\u003e\\S\u003c/span\u003etartup\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e[\u003c/span\u003eHKEY_CURRENT_USER\u003cspan class=\"se\"\u003e\\S\u003c/span\u003eoftware\u003cspan class=\"se\"\u003e\\M\u003c/span\u003eicrosoft\u003cspan class=\"se\"\u003e\\W\u003c/span\u003eindows\u003cspan class=\"se\"\u003e\\C\u003c/span\u003eurrentVersion\u003cspan class=\"se\"\u003e\\E\u003c/span\u003explorer\u003cspan class=\"se\"\u003e\\ \u003c/span\u003eUser Shell Folders\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                Start \u003cspan class=\"nv\"\u003eMenu\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e %ALLUSERSPROFILE%\u003cspan class=\"se\"\u003e\\S\u003c/span\u003etart Menu\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"nv\"\u003eStartup\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e %ALLUSERSPROFILE%\u003cspan class=\"se\"\u003e\\S\u003c/span\u003etart Menu\u003cspan class=\"se\"\u003e\\P\u003c/span\u003erograms\u003cspan class=\"se\"\u003e\\S\u003c/span\u003etartup\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e​    很明显，第一条Shell Folders对应的是Common Startup，第二User Shell Folders条对应的是Startup。因为%ALLUSERSPROFILE%等于C:\\Documents and Settings\\All Users，所以我系统里的Common Startup和Startup指向了同一目录。\u003c/p\u003e","title":"解决一个Windows下启动项重复的问题"},{"content":"OpenWrt的编译和使用 lede仓库源码和教程 OpenWrt的编译和使用\nFlippy 的 Openwrt 打包源码 Flippy 的 Openwrt 打包源码\npasswall仓库 kenzok8\n仓库 里面有armbian和openwrt以及内核 ophub\n注意 不要用 root 用户进行编译\n国内用户编译前最好准备好梯子\n默认登陆IP 192.168.1.99 密码 password\n编译命令 首先装好 Linux 系统，推荐 Debian 11 或 Ubuntu LTS 安装编译依赖 sudo apt update -y sudo apt full-upgrade -y sudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \\ bzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \\ git gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \\ libmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \\ mkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pyelftools \\ libpython3-dev qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip \\ vim wget xmlto xxd zlib1g-dev python3-setuptools 下载源代码，更新 feeds 并选择配置 git clone https://github.com/coolsnowwolf/lede cd lede ./scripts/feeds update -a ./scripts/feeds install -a make menuconfig 下载 dl 库，编译固件 （-j 后面是线程数，第一次编译推荐用单线程） make download -j8 make V=s -j1 本套代码保证肯定可以编译成功。里面包括了 R23 所有源代码，包括 IPK 的。\n你可以自由使用，但源码编译二次发布请注明我的 GitHub 仓库链接。谢谢合作！\n二次编译： cd lede git pull ./scripts/feeds update -a ./scripts/feeds install -a make defconfig make download -j8 make V=s -j$(nproc) 如果需要重新配置：\nrm -rf ./tmp \u0026amp;\u0026amp; rm -rf .config make menuconfig make V=s -j$(nproc) 编译完成后输出路径： bin/targets\n固件使用说明： 默认IP： 192.168.1.1 默认密码： password 注：如果用这个固件做旁路由的话不要忘了加自定义防火墙规则（网络-\u0026gt;防火墙-\u0026gt;自定义规则）：\niptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE 也可以尝试（有桥接存在的情况下）\niptables -t nat -I POSTROUTING -o br-lan -j MASQUERADE AdguardHome: 固件里不包含，可以用docker方式安装, 可以双开甚至多开，灵活性很强，升级也不依赖于固件，直接用docker命令升级。\nsmall仓库的使用 一键命令\nsed -i \u0026#39;$a src-git kenzo https://github.com/kenzok8/openwrt-packages\u0026#39; feeds.conf.default sed -i \u0026#39;$a src-git small https://github.com/kenzok8/small\u0026#39; feeds.conf.default git pull ./scripts/feeds update -a ./scripts/feeds install -a make menuconfig 注意\n编译新版Sing-box和hysteria，需golang版本1.20或者以上版本 ，可以用以下命令\npushd feeds/packages/lang rm -rf golang \u0026amp;\u0026amp; svn co https://github.com/openwrt/packages/branches/openwrt-23.05/lang/golang popd smartdns使用教程 smartdns 部分直接 vim 编辑 /etc/config/smartdns 照抄即可，无需手动设置，配置完记得界面上点击保存应用，或者uci命令刷新配置，我里面有杭州电信的DNS服务器，不是杭州的记得自己改掉，否则可能有负面效果。\nconfig smartdns option server_name \u0026#39;smartdns\u0026#39; option port \u0026#39;6053\u0026#39; option tcp_server \u0026#39;1\u0026#39; option seconddns_tcp_server \u0026#39;1\u0026#39; option coredump \u0026#39;0\u0026#39; option seconddns_server_group \u0026#39;passwall\u0026#39; option seconddns_no_speed_check \u0026#39;1\u0026#39; option seconddns_no_dualstack_selection \u0026#39;1\u0026#39; option prefetch_domain \u0026#39;1\u0026#39; option ipv6_server \u0026#39;0\u0026#39; option force_aaaa_soa \u0026#39;1\u0026#39; option dualstack_ip_selection \u0026#39;1\u0026#39; option serve_expired \u0026#39;1\u0026#39; option redirect \u0026#39;dnsmasq-upstream\u0026#39; option rr_ttl_min \u0026#39;300\u0026#39; option seconddns_port \u0026#39;7913\u0026#39; option seconddns_enabled \u0026#39;1\u0026#39; option seconddns_no_rule_nameserver \u0026#39;1\u0026#39; option seconddns_no_rule_addr \u0026#39;0\u0026#39; option seconddns_no_rule_soa \u0026#39;0\u0026#39; option seconddns_no_rule_ipset \u0026#39;0\u0026#39; option cache_size \u0026#39;300\u0026#39; option seconddns_no_cache \u0026#39;1\u0026#39; option enabled \u0026#39;1\u0026#39; list old_redirect \u0026#39;dnsmasq-upstream\u0026#39; list old_port \u0026#39;6053\u0026#39; list old_enabled \u0026#39;1\u0026#39; config server option name \u0026#39;aliyun\u0026#39; option ip \u0026#39;223.5.5.5\u0026#39; option port \u0026#39;53\u0026#39; option type \u0026#39;udp\u0026#39; option blacklist_ip \u0026#39;0\u0026#39; option server_group \u0026#39;cn\u0026#39; option enabled \u0026#39;1\u0026#39; config server option name \u0026#39;114\u0026#39; option ip \u0026#39;114.114.114.114\u0026#39; option port \u0026#39;53\u0026#39; option type \u0026#39;udp\u0026#39; option blacklist_ip \u0026#39;0\u0026#39; option server_group \u0026#39;cn\u0026#39; option enabled \u0026#39;1\u0026#39; config server option enabled \u0026#39;1\u0026#39; option type \u0026#39;udp\u0026#39; option name \u0026#39;电信\u0026#39; option ip \u0026#39;202.101.172.35\u0026#39; option port \u0026#39;53\u0026#39; option server_group \u0026#39;cn\u0026#39; option blacklist_ip \u0026#39;0\u0026#39; config server option enabled \u0026#39;1\u0026#39; option type \u0026#39;udp\u0026#39; option name \u0026#39;电信\u0026#39; option ip \u0026#39;202.101.172.47\u0026#39; option port \u0026#39;53\u0026#39; option server_group \u0026#39;cn\u0026#39; option blacklist_ip \u0026#39;0\u0026#39; config server option type \u0026#39;udp\u0026#39; option port \u0026#39;53\u0026#39; option name \u0026#39;DNSPod\u0026#39; option ip \u0026#39;119.29.29.29\u0026#39; option blacklist_ip \u0026#39;0\u0026#39; option server_group \u0026#39;cn\u0026#39; option enabled \u0026#39;1\u0026#39; config server option enabled \u0026#39;1\u0026#39; option name \u0026#39;cloud\u0026#39; option ip \u0026#39;1.1.1.1\u0026#39; option port \u0026#39;853\u0026#39; option type \u0026#39;tls\u0026#39; option server_group \u0026#39;passwall\u0026#39; option blacklist_ip \u0026#39;0\u0026#39; option addition_arg \u0026#39; -exclude-default-group\u0026#39; config server option enabled \u0026#39;1\u0026#39; option type \u0026#39;udp\u0026#39; option name \u0026#39;CNNIC SDNS\u0026#39; option ip \u0026#39;1.2.4.8\u0026#39; option port \u0026#39;53\u0026#39; option server_group \u0026#39;cn\u0026#39; option blacklist_ip \u0026#39;0\u0026#39; 如何验证？ 登录路由器 使用 dig 或者 nslookup 检查下各端口的DNS以及分流情况\nnslookup www.taobao.com 127.0.0.1:7913 返回的是节点对应淘宝最快的IP nslookup www.taobao.com 127.0.0.1:6053 返回的是国内最快的IP nslookup www.taobao.com 应该是国内 注：如果手动查询规则列表内的域名，使用端口6053，然后匹配规则，转发给7913，然后被缓存住。（国外因为跳过测速，所以多个域名是正确的）\n","permalink":"https://www.uiuuyr.top/posts/openwrt%E7%9A%84%E7%BC%96%E8%AF%91%E5%92%8C%E4%BD%BF%E7%94%A8/","summary":"\u003ch1 id=\"openwrt的编译和使用\"\u003eOpenWrt的编译和使用\u003c/h1\u003e\n\u003cp\u003elede仓库源码和教程    \u003ca href=\"https://github.com/coolsnowwolf/lede\"\u003eOpenWrt的编译和使用\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003eFlippy 的 Openwrt 打包源码 \u003ca href=\"https://github.com/unifreq/openwrt_packit\"\u003eFlippy 的 Openwrt 打包源码\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003epasswall仓库 \u003ca href=\"https://github.com/kenzok8/small\"\u003ekenzok8\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e仓库 里面有armbian和openwrt以及内核 \u003ca href=\"https://github.com/ophub\"\u003eophub\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"注意\"\u003e注意\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e不要用 root 用户进行编译\u003c/strong\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e国内用户编译前最好准备好梯子\u003c/strong\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e\u003cstrong\u003e默认登陆IP 192.168.1.99 密码 password\u003c/strong\u003e\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2 id=\"编译命令\"\u003e编译命令\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003ch6 id=\"首先装好-linux-系统推荐-debian-11-或-ubuntu-lts\"\u003e首先装好 Linux 系统，推荐 Debian 11 或 Ubuntu LTS\u003c/h6\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003ch6 id=\"安装编译依赖\"\u003e安装编译依赖\u003c/h6\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003esudo apt update -y\nsudo apt full-upgrade -y\nsudo apt install -y ack antlr3 asciidoc autoconf automake autopoint binutils bison build-essential \\\nbzip2 ccache cmake cpio curl device-tree-compiler fastjar flex gawk gettext gcc-multilib g++-multilib \\\ngit gperf haveged help2man intltool libc6-dev-i386 libelf-dev libglib2.0-dev libgmp3-dev libltdl-dev \\\nlibmpc-dev libmpfr-dev libncurses5-dev libncursesw5-dev libreadline-dev libssl-dev libtool lrzsz \\\nmkisofs msmtp nano ninja-build p7zip p7zip-full patch pkgconf python2.7 python3 python3-pyelftools \\\nlibpython3-dev qemu-utils rsync scons squashfs-tools subversion swig texinfo uglifyjs upx-ucl unzip \\\nvim wget xmlto xxd zlib1g-dev python3-setuptools\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003ch6 id=\"下载源代码更新-feeds-并选择配置\"\u003e下载源代码，更新 feeds 并选择配置\u003c/h6\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003egit clone https://github.com/coolsnowwolf/lede\ncd lede\n./scripts/feeds update -a\n./scripts/feeds install -a\nmake menuconfig\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003ch6 id=\"下载-dl-库编译固件--j-后面是线程数第一次编译推荐用单线程\"\u003e下载 dl 库，编译固件 （-j 后面是线程数，第一次编译推荐用单线程）\u003c/h6\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode\u003emake download -j8\nmake V=s -j1\n\u003c/code\u003e\u003c/pre\u003e\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e本套代码保证肯定可以编译成功。里面包括了 R23 所有源代码，包括 IPK 的。\u003c/p\u003e","title":"OpenWrt的编译和使用"},{"content":"巫师三 巫师3存档消失 1.打开Steam文件夹 2.找到userdata文件 3.在文件里面搜索gamesaves\n4.找到日期为你最近存档时间的sav文件和png就是你的存档，复制几个最近的 5.打开文档找到The Witcher 3文件 6.打开gamesaves文件，粘贴进去复制好的文件\n","permalink":"https://www.uiuuyr.top/posts/%E5%B7%AB%E5%B8%88%E4%B8%89/","summary":"\u003ch2 id=\"巫师三\"\u003e巫师三\u003c/h2\u003e\n\u003cdiv class=\"steam-widget\" style=\"margin: 1rem 0;\"\u003e\n    \u003ciframe src=\"https://store.steampowered.com/widget/292030/\" \n            frameborder=\"0\" \n            width=\"100%\" \n            height=\"190\" \n            style=\"border-radius: 5px;\"\u003e\n    \u003c/iframe\u003e\n\u003c/div\u003e\n\u003ch2 id=\"巫师3存档消失\"\u003e巫师3存档消失\u003c/h2\u003e\n\u003cp\u003e1.打开Steam文件夹\n2.找到userdata文件\n3.在文件里面搜索gamesaves\u003cbr\u003e\n4.找到日期为你最近存档时间的sav文件和png就是你的存档，复制几个最近的\n5.打开文档找到The Witcher 3文件\n6.打开gamesaves文件，粘贴进去复制好的文件\u003c/p\u003e","title":"巫师三"},{"content":"要Docker容器中运行Python程序 安装Docker： 如果您尚未安装Docker，首先需要安装Docker。可以参考Docker官方网站上的安装指南，选择适合您操作系统的版本。\n创建一个Dockerfile： 在您的项目目录中创建一个名为Dockerfile的文件，该文件将包含Docker容器的配置。以下是一个简单的示例Dockerfile：\n#python版本 FROM python:alpine3.18 #设置工作目录 WORKDIR /app #复制当前目录中的所有文件到容器的工作目录 COPY . . #安装Python依赖 RUN pip install -r requirements.txt #运行Python程序 CMD [\u0026#34;python\u0026#34;, \u0026#34;your_script.py\u0026#34;] 在这个示例中，我们使用了官方的Python 3.9基础镜像，设置了工作目录，并将当前目录中的所有文件复制到容器中。接下来，我们通过pip install安装了Python程序所需的依赖，并使用CMD指令运行了Python程序（假设您的Python程序文件名为your_script.py）。\n构建Docker镜像： 执行以下命令在项目目录中构建Docker镜像（确保您的Dockerfile位于项目目录中）：\ndocker build -t \u0026lt;yourusername/镜像名称\u0026gt;:\u0026lt;标签\u0026gt; \u0026lt;Dockerfile路径\u0026gt; 这会创建一个Docker镜像。\n运行Docker容器： 使用以下命令在Docker容器中运行Python程序：\ndocker run my-python-app 这将启动一个Docker容器，运行您的Python程序。请注意，容器将在程序执行完毕后自动停止。\n这些步骤假定您已经有一个Python程序，并且可能有一个名为requirements.txt的文件来指定程序的依赖项。根据您的项目的实际情况，您可以自定义Dockerfile和容器的配置。\n上传到Docker Hub 如果您希望将这个镜像上传到Docker Hub或其他容器仓库以供他人使用，您需要首先登录到Docker Hub（或其他仓库），然后使用 docker push 命令将镜像推送到仓库。例如：\ndocker login docker push \u0026lt;yourusername/镜像名称\u0026gt;:\u0026lt;标签\u0026gt; docker run 命令 docker run 命令用于在Docker中运行容器。以下是一些常见的 docker run 命令的选项和示例用法：\n基本用法：\ndocker run [OPTIONS] IMAGE [COMMAND] [ARG...] OPTIONS: 用于指定各种选项的参数，如端口映射、环境变量、卷挂载等。 IMAGE: 指定要运行的Docker镜像。 COMMAND（可选）: 指定容器内要执行的命令。如果不提供，则默认运行镜像中的默认命令。 ARG...（可选）: 传递给容器内命令的参数。 常用选项： -d 或 --detach: 让容器在后台运行（分离模式）。 -p 或 --publish: 指定端口映射，将容器内的端口映射到主机上的端口。例如 -p 8080:80 将容器内的端口80映射到主机上的端口8080。 -e 或 --env: 设置环境变量。例如 -e MYSQL_ROOT_PASSWORD=pass 可以设置MySQL的root密码。 -v 或 --volume: 挂载卷，将主机文件或目录挂载到容器内的路径。例如 -v /host/folder:/container/folder 可以将主机上的文件夹挂载到容器内的路径。 --name: 为容器指定一个名称。 --rm: 当容器停止后自动删除容器。 -it: 使用交互式终端运行容器，通常与 -d 不一起使用。 示例用法： 运行一个简单的容器并在后台运行：\ndocker run -d my-image 运行容器并设置环境变量：\ndocker run -e MYSQL_ROOT_PASSWORD=my-secret-pw mysql 运行容器并映射端口：\ndocker run -p 8080:80 my-web-app 运行容器并挂载卷：\ndocker run -v /host/data:/container/data my-app 这些示例只是 docker run 命令的一些基本用法。您可以根据您的具体需求使用不同的选项和参数来配置容器的运行方式。运行 docker run \u0026ndash;help 命令可以查看更多详细的帮助信息。\n在运行容器时，可以使用 \u0026ndash;restart 标志来指定容器的重启策略。以下是一些可用的重启策略选项：\n--restart=always：容器将始终在退出时自动重启。 --restart=on-failure：容器只在非正常退出（退出代码非零）时重启。 --restart=unless-stopped：容器将始终在退出时自动重启，除非您明确停止它。 例如，要创建一个一直运行并在退出时自动重启的容器，可以运行以下命令：\ndocker run --name my-container --restart=always my-image 这将创建一个名为 \u0026ldquo;my-container\u0026rdquo; 的容器，使用 \u0026ldquo;my-image\u0026rdquo; 镜像，并指定容器在退出时始终自动重启。\n请注意，\u0026ndash;restart 选项是用于 docker run 命令的一部分，而不是Docker容器本身的配置。这意味着每次运行容器时都需要指定该选项。\n如果您已经运行了一个容器，并希望为其添加重启策略，您可以使用 docker update 命令来更新容器的配置，如下所示：\ndocker update --restart=always my-container 这将为名为 \u0026ldquo;my-container\u0026rdquo; 的容器添加一个始终自动重启的策略。\n要让容器在后台运行，您可以使用 -d 标志（或 \u0026ndash;detach）来运行 docker run 命令。这将使容器以分离模式运行，不会占用您的终端，并且容器将在后台持续运行。\n以下是一个示例命令，将容器在后台运行：\ndocker run -d --name my-container my-image 在这个命令中：\n-d 表示以分离模式（后台）运行容器。 \u0026ndash;name my-container 为容器指定一个名称（这里是 \u0026ldquo;my-container\u0026rdquo;）。 my-image 是要运行的Docker镜像的名称。\ndocker stop my-container 停止名为 \u0026ldquo;my-container\u0026rdquo; 的容器。\n查看Docker容器占用的内存 使用 docker stats 命令： docker stats 命令可以显示所有正在运行的容器的资源使用情况，包括内存、CPU、网络等。默认情况下，它将以实时模式显示容器的统计信息。\ndocker stats 这将显示一个表格，其中包括每个容器的内存使用情况（包括 使用的内存和限制的内存）。您可以按 Ctrl+C 来停止实时显示。\n使用 docker stats 查看特定容器的内存： 如果您只想查看特定容器的内存使用情况，可以提供容器的名称或ID作为参数：\ndocker stats my-container 这将显示名为 \u0026ldquo;my-container\u0026rdquo; 的容器的内存使用情况。\n通过上述方法，您可以查看Docker容器的内存使用情况，以便监控和管理容器的资源。\n","permalink":"https://www.uiuuyr.top/posts/docker%E7%9B%B8%E5%85%B3%E5%B8%AE%E5%8A%A9/","summary":"\u003ch2 id=\"要docker容器中运行python程序\"\u003e要Docker容器中运行Python程序\u003c/h2\u003e\n\u003cp\u003e安装Docker： 如果您尚未安装Docker，首先需要安装Docker。可以参考Docker官方网站上的安装指南，选择适合您操作系统的版本。\u003c/p\u003e\n\u003cp\u003e创建一个Dockerfile： 在您的项目目录中创建一个名为Dockerfile的文件，该文件将包含Docker容器的配置。以下是一个简单的示例Dockerfile：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#python版本\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFROM python:alpine3.18\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#设置工作目录\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eWORKDIR /app\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#复制当前目录中的所有文件到容器的工作目录\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCOPY . .\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#安装Python依赖\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eRUN pip install -r requirements.txt\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#运行Python程序\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCMD \u003cspan class=\"o\"\u003e[\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;python\u0026#34;\u003c/span\u003e, \u003cspan class=\"s2\"\u003e\u0026#34;your_script.py\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e在这个示例中，我们使用了官方的Python 3.9基础镜像，设置了工作目录，并将当前目录中的所有文件复制到容器中。接下来，我们通过pip install安装了Python程序所需的依赖，并使用CMD指令运行了Python程序（假设您的Python程序文件名为your_script.py）。\u003c/p\u003e\n\u003cp\u003e构建Docker镜像： 执行以下命令在项目目录中构建Docker镜像（确保您的Dockerfile位于项目目录中）：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker build -t \u0026lt;yourusername/镜像名称\u0026gt;:\u0026lt;标签\u0026gt; \u0026lt;Dockerfile路径\u0026gt;\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e这会创建一个Docker镜像。\u003c/p\u003e\n\u003cp\u003e运行Docker容器： 使用以下命令在Docker容器中运行Python程序：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker run my-python-app\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e这将启动一个Docker容器，运行您的Python程序。请注意，容器将在程序执行完毕后自动停止。\u003c/p\u003e\n\u003cp\u003e这些步骤假定您已经有一个Python程序，并且可能有一个名为requirements.txt的文件来指定程序的依赖项。根据您的项目的实际情况，您可以自定义Dockerfile和容器的配置。\u003c/p\u003e\n\u003ch2 id=\"上传到docker-hub\"\u003e上传到Docker Hub\u003c/h2\u003e\n\u003cp\u003e如果您希望将这个镜像上传到Docker Hub或其他容器仓库以供他人使用，您需要首先登录到Docker Hub（或其他仓库），然后使用 docker push 命令将镜像推送到仓库。例如：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker login\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker push \u0026lt;yourusername/镜像名称\u0026gt;:\u0026lt;标签\u0026gt; \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"docker-run-命令\"\u003edocker run 命令\u003c/h2\u003e\n\u003cp\u003edocker run 命令用于在Docker中运行容器。以下是一些常见的 docker run 命令的选项和示例用法：\u003c/p\u003e\n\u003cp\u003e基本用法：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker run \u003cspan class=\"o\"\u003e[\u003c/span\u003eOPTIONS\u003cspan class=\"o\"\u003e]\u003c/span\u003e IMAGE \u003cspan class=\"o\"\u003e[\u003c/span\u003eCOMMAND\u003cspan class=\"o\"\u003e]\u003c/span\u003e \u003cspan class=\"o\"\u003e[\u003c/span\u003eARG...\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eOPTIONS: 用于指定各种选项的参数，如端口映射、环境变量、卷挂载等。\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eIMAGE: 指定要运行的Docker镜像。\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eCOMMAND（可选）: 指定容器内要执行的命令。如果不提供，则默认运行镜像中的默认命令。\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eARG...（可选）: 传递给容器内命令的参数。\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e常用选项：\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-d 或 --detach: 让容器在后台运行（分离模式）。\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-p 或 --publish: 指定端口映射，将容器内的端口映射到主机上的端口。例如 -p 8080:80 将容器内的端口80映射到主机上的端口8080。\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-e 或 --env: 设置环境变量。例如 -e \u003cspan class=\"nv\"\u003eMYSQL_ROOT_PASSWORD\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003epass 可以设置MySQL的root密码。\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-v 或 --volume: 挂载卷，将主机文件或目录挂载到容器内的路径。例如 -v /host/folder:/container/folder 可以将主机上的文件夹挂载到容器内的路径。\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e--name: 为容器指定一个名称。\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e--rm: 当容器停止后自动删除容器。\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-it: 使用交互式终端运行容器，通常与 -d 不一起使用。\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"示例用法\"\u003e示例用法：\u003c/h2\u003e\n\u003cp\u003e运行一个简单的容器并在后台运行：\u003c/p\u003e","title":"docker相关帮助"},{"content":"#from PyQt5.Qt import * from PyQt5.QtWidgets import QApplication, QMainWindow, QMessageBox import sys from PyQt5 import QtCore from C:\\python file\\wisdom\\zhui.py import Ui_MainWindow #替换成自己的 class Window(QMainWindow): def __init__(self, parent=None, *args, **kwargs): super().__init__(parent, *args, **kwargs) self.ui = Ui_MainWindow() self.ui.setupUi(self) self.ui.pushButton.clicked.connect(self.login_button_clicked) #将按钮与事件绑定 # self.setWindowFlags(Qt.FramelessWindowHint) #隐藏标题栏 # self.setAttribute(Qt.WA_TranslucentBackground) #隐藏多余背景 def login_button_clicked(self): #事件 try: # 获取文本输入框中的账号、密码、最大值和最小值 username = self.ui.lineEdit.text() password = self.ui.lineEdit_2.text() max_1 = int(self.ui.lineEdit_3.text()) min_1 = int(self.ui.lineEdit_4.text()) # 在此进行输入的合法性验证 res = run(username, password, min_1, max_1) self.ui.textBrowser.append(res) except ValueError: # 处理类型转换错误 QMessageBox.warning(self, \u0026#34;Error\u0026#34;, \u0026#34;输入正确的值，最大值不能小于最小值\u0026#34;) except Exception as e: # 处理其他异常 QMessageBox.warning(self, \u0026#34;Error\u0026#34;, \u0026#34;检查账户和网络: {}\u0026#34;.format(str(e))) if __name__ == \u0026#39;__main__\u0026#39;: QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_()) ","permalink":"https://www.uiuuyr.top/posts/pyqt5%E7%9A%84%E5%9B%BA%E5%AE%9A%E5%86%99%E6%B3%95/","summary":"\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-python\" data-lang=\"python\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e#from PyQt5.Qt import *\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003ePyQt5.QtWidgets\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eQApplication\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eQMainWindow\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eQMessageBox\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003esys\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003ePyQt5\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"n\"\u003eQtCore\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"kn\"\u003efrom\u003c/span\u003e \u003cspan class=\"nn\"\u003eC\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\\\u003cspan class=\"n\"\u003epython\u003c/span\u003e \u003cspan class=\"n\"\u003efile\u003c/span\u003e\\\u003cspan class=\"n\"\u003ewisdom\u003c/span\u003e\\\u003cspan class=\"n\"\u003ezhui\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epy\u003c/span\u003e \u003cspan class=\"kn\"\u003eimport\u003c/span\u003e \u003cspan class=\"nn\"\u003eUi_MainWindow\u003c/span\u003e   \u003cspan class=\"c1\"\u003e#替换成自己的\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eclass\u003c/span\u003e \u003cspan class=\"nc\"\u003eWindow\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eQMainWindow\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003eparent\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003e\u003cspan class=\"kc\"\u003eNone\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"nb\"\u003esuper\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"fm\"\u003e__init__\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eparent\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e*\u003c/span\u003e\u003cspan class=\"n\"\u003eargs\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"o\"\u003e**\u003c/span\u003e\u003cspan class=\"n\"\u003ekwargs\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eui\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eUi_MainWindow\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eui\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esetupUi\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eui\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003epushButton\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eclicked\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003econnect\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elogin_button_clicked\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e \u003cspan class=\"c1\"\u003e#将按钮与事件绑定\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# self.setWindowFlags(Qt.FramelessWindowHint)  #隐藏标题栏\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"c1\"\u003e# self.setAttribute(Qt.WA_TranslucentBackground)  #隐藏多余背景\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"k\"\u003edef\u003c/span\u003e \u003cspan class=\"nf\"\u003elogin_button_clicked\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e):\u003c/span\u003e                 \u003cspan class=\"c1\"\u003e#事件\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003etry\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"c1\"\u003e# 获取文本输入框中的账号、密码、最大值和最小值\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eusername\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eui\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elineEdit\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etext\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003epassword\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eui\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elineEdit_2\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etext\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003emax_1\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eui\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elineEdit_3\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etext\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003emin_1\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"nb\"\u003eint\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eui\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003elineEdit_4\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etext\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"c1\"\u003e# 在此进行输入的合法性验证\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eres\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003erun\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eusername\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003epassword\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emin_1\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"n\"\u003emax_1\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eui\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003etextBrowser\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eappend\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eres\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"ne\"\u003eValueError\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"c1\"\u003e# 处理类型转换错误\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eQMessageBox\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewarning\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Error\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;输入正确的值，最大值不能小于最小值\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"ne\"\u003eException\u003c/span\u003e \u003cspan class=\"k\"\u003eas\u003c/span\u003e \u003cspan class=\"n\"\u003ee\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"c1\"\u003e# 处理其他异常\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"n\"\u003eQMessageBox\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003ewarning\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"bp\"\u003eself\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Error\u0026#34;\u003c/span\u003e\u003cspan class=\"p\"\u003e,\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;检查账户和网络: \u003c/span\u003e\u003cspan class=\"si\"\u003e{}\u003c/span\u003e\u003cspan class=\"s2\"\u003e\u0026#34;\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eformat\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"nb\"\u003estr\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003ee\u003c/span\u003e\u003cspan class=\"p\"\u003e)))\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"k\"\u003eif\u003c/span\u003e \u003cspan class=\"vm\"\u003e__name__\u003c/span\u003e \u003cspan class=\"o\"\u003e==\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;__main__\u0026#39;\u003c/span\u003e\u003cspan class=\"p\"\u003e:\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eQtCore\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eQCoreApplication\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003esetAttribute\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eQtCore\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eQt\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eAA_EnableHighDpiScaling\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003eapp\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eQApplication\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003esys\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eargv\u003c/span\u003e\u003cspan class=\"p\"\u003e)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ewindow\u003c/span\u003e \u003cspan class=\"o\"\u003e=\u003c/span\u003e \u003cspan class=\"n\"\u003eWindow\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003ewindow\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eshow\u003c/span\u003e\u003cspan class=\"p\"\u003e()\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"n\"\u003esys\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eexit\u003c/span\u003e\u003cspan class=\"p\"\u003e(\u003c/span\u003e\u003cspan class=\"n\"\u003eapp\u003c/span\u003e\u003cspan class=\"o\"\u003e.\u003c/span\u003e\u003cspan class=\"n\"\u003eexec_\u003c/span\u003e\u003cspan class=\"p\"\u003e())\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"PyQt5的固定写法"},{"content":"解决方案 解决方法1 Windows 系统，开始-\u0026gt;运行-\u0026gt;cmd-\u0026gt;\nicacls C:\\ /setintegritylevel M 解决方法2 Windows 系统\n[!IMPORTANT]\n开始-\u0026gt;运行-\u0026gt;regedit-\u0026gt;HKEY_LOCAL_MACHINE-\u0026gt;SOFTWARE-\u0026gt;Microsoft-\u0026gt;Windows-\u0026gt;CurrentVersion-\u0026gt;Policies-\u0026gt;System-\u0026gt;EnableLUA\n将其值修改为0-\u0026gt;重启计算机。\n如果你不想修改计算机的这些属性，可以在C盘中先创建一个文件夹，再将文件创建或复制到文件夹里也是可以的，但如果文件必须直接创建在C盘中，那就只能用这些方式修改计算机的属性了。\n","permalink":"https://www.uiuuyr.top/posts/%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%B2%A1%E7%94%A8%E6%89%80%E9%9C%80%E7%89%B9%E6%9D%83%E7%9A%84%E5%A4%84%E7%90%86/","summary":"\u003ch1 id=\"解决方案\"\u003e解决方案\u003c/h1\u003e\n\u003ch2 id=\"解决方法1\"\u003e解决方法1\u003c/h2\u003e\n\u003cp\u003eWindows 系统，开始-\u0026gt;运行-\u0026gt;cmd-\u0026gt;\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eicacls C:\u003cspan class=\"se\"\u003e\\ \u003c/span\u003e/setintegritylevel M\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"解决方法2\"\u003e解决方法2\u003c/h2\u003e\n\u003cp\u003eWindows 系统\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e[!IMPORTANT]\u003c/p\u003e\n\u003cp\u003e开始-\u0026gt;运行-\u0026gt;regedit-\u0026gt;HKEY_LOCAL_MACHINE-\u0026gt;SOFTWARE-\u0026gt;Microsoft-\u0026gt;Windows-\u0026gt;CurrentVersion-\u0026gt;Policies-\u0026gt;System-\u0026gt;EnableLUA\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e将其值修改为0-\u0026gt;重启计算机。\u003c/p\u003e\n\u003cp\u003e如果你不想修改计算机的这些属性，可以在C盘中先创建一个文件夹，再将文件创建或复制到文件夹里也是可以的，但如果文件必须直接创建在C盘中，那就只能用这些方式修改计算机的属性了。\u003c/p\u003e","title":"客户端没用所需特权的处理"},{"content":"FFmpeg使用教程 转载自阮一峰\nFFmpeg 是视频处理最常用的开源软件。\n它功能强大，用途广泛，大量用于视频网站和商业软件（比如 Youtube 和 iTunes），也是许多音频和视频格式的标准编码/解码实现。 FFmpeg 本身是一个庞大的项目，包含许多组件和库文件，最常用的是它的命令行工具。本文介绍 FFmpeg 命令行如何处理视频，比桌面视频处理软件更简洁高效。\n如果你还没安装，可以根据 官方文档 先完成安装。\n概念 介绍 FFmpeg 用法之前，需要了解一些视频处理的基本概念。\n容器 视频文件本身其实是一个容器（container），里面包括了视频和音频，也可能有字幕等其他内容。\n常见的容器格式有以下几种。一般来说，视频文件的后缀名反映了它的容器格式。\nMP4\nMKV\nWebM\nAVI\n下面的命令查看 FFmpeg 支持的容器。\n$ ffmpeg -formats\n编码格式 视频和音频都需要经过编码，才能保存成文件。不同的编码格式（CODEC），有不同的压缩率，会导致文件大小和清晰度的差异。\n常用的视频编码格式如下。\nH.262 H.264 H.265 上面的编码格式都是有版权的，但是可以免费使用。此外，还有几种无版权的视频编码格式。\nVP8 VP9 AV1 常用的音频编码格式如下。\nMP3 AAC 上面所有这些都是有损的编码格式，编码后会损失一些细节，以换取压缩后较小的文件体积。无损的编码格式压缩出来的文件体积较大，这里就不介绍了。\n下面的命令可以查看 FFmpeg 支持的编码格式，视频编码和音频编码都在内。\nffmpeg -codecs 编码器 编码器（encoders）是实现某种编码格式的库文件。只有安装了某种格式的编码器，才能实现该格式视频/音频的编码和解码。\n以下是一些 FFmpeg 内置的视频编码器。\nlibx264：最流行的开源 H.264 编码器 NVENC：基于 NVIDIA GPU 的 H.264 编码器 libx265：开源的 HEVC 编码器 libvpx：谷歌的 VP8 和 VP9 编码器 libaom：AV1 编码器 音频编码器如下。\nlibfdk-aac aac 下面的命令可以查看 FFmpeg 已安装的编码器。\nffmpeg -encoders FFmpeg 的使用格式 FFmpeg 的命令行参数非常多，可以分成五个部分。\nffmpeg {1} {2} -i {3} {4} {5} 上面命令中，五个部分的参数依次如下。\n全局参数 输入文件参数 输入文件 输出文件参数 输出文件 参数太多的时候，为了便于查看，ffmpeg 命令可以写成多行。\nffmpeg \\[全局参数] \\[输入文件参数] \\-i [输入文件] \\[输出文件参数] \\[输出文件] 下面是一个例子。\nffmpeg \\ -y \\ # 全局参数 -c:a libfdk_aac -c:v libx264 \\ # 输入文件参数 -i input.mp4 \\ # 输入文件 -c:v libvpx-vp9 -c:a libvorbis \\ # 输出文件参数 output.webm # 输出文件 上面的命令将 mp4 文件转成 webm 文件，这两个都是容器格式。输入的 mp4 文件的音频编码格式是 aac，视频编码格式是 H.264；输出的 webm 文件的视频编码格式是 VP9，音频格式是 Vorbis。 如果不指明编码格式，FFmpeg 会自己判断输入文件的编码。因此，上面的命令可以简单写成下面的样子。\nffmpeg -i input.avi output.mp4 FFmpeg推流命令 ffmpeg -re -stream_loop -1 -i \u0026#34;/home/fx/video/睡前故事.mp4\u0026#34; -preset ultrafast -vcodec libx264 -g 60 -b:v 1500k -c:a aac -b:a 128k -strict -2 -f flv \u0026#34;rtmp://live-push.bilivideo.com/live-bvc/?streamname=live_26234208_7077477\u0026amp;key=16498bac00ebba87e45314359ddd437d\u0026amp;schedule=rtmp\u0026amp;pflag=1\u0026#34; 在ubuntu上使用脚本定时监控 如果你决定保留所有日志，而不仅仅是错误日志，那么你可以维持脚本不做修改，它会继续记录所有的ffmpeg输出消息。你的脚本如下：\n#!/bin/bash # 设置输入视频文件路径 input_video=\u0026#34;/home/video/睡前故事.mp4\u0026#34; # 设置RTMP推流地址 rtmp_url=\u0026#34;rtmp://live-push.bilivideo.com/live-bvc/?streamname=live_26234208_7077477\u0026amp;key=16498bac00ebba87e45314359ddd437d\u0026amp;schedule=rtmp\u0026amp;pflag=1\u0026#34; # 设置日志文件路径 log_file=\u0026#34;/home/video/ffmpeg_error_log.txt\u0026#34; # 检查运行状态并重新启动 check_and_restart() { if ! pgrep -x \u0026#34;ffmpeg\u0026#34; \u0026gt; /dev/null; then echo \u0026#34;FFmpeg is not running. Restarting...\u0026#34; ffmpeg -re -stream_loop -1 -i \u0026#34;$input_video\u0026#34; -preset ultrafast -vcodec libx264 -g 60 -b:v 1500k -c:a aac -b:a 128k -strict -2 -f flv \u0026#34;$rtmp_url\u0026#34; 2\u0026gt;\u0026gt; \u0026#34;$log_file\u0026#34; \u0026amp; fi } # 主循环，每60秒检查一次 while true; do check_and_restart sleep 60 done docker版ffmpeg 运行是视频卡顿\ndocker run --rm -it \\ -v /home/fx/video:/config \\ linuxserver/ffmpeg:arm64v8-latest \\ -stream_loop -1 -i \u0026#34;/config/睡前故事.mp4\u0026#34; -preset ultrafast -vcodec libx264 -g 60 -b:v 1500k -c:a aac -b:a 128k -strict -2 -f flv \u0026#34;rtmp://live-push.bilivideo.com/live-bvc/?streamname=live_26234208_7077477\u0026amp;key=16498bac00ebba87e45314359ddd437d\u0026amp;schedule=rtmp\u0026amp;pflag=1\u0026#34; 常用命令行参数 FFmpeg 常用的命令行参数如下。\nc：指定编码器 c copy：直接复制，不经过重新编码（这样比较快） c:v：指定视频编码器 c:a：指定音频编码器 i：指定输入文件 an：去除音频流 vn： 去除视频流 preset：指定输出的视频质量，会影响文件的生成速度，有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow。 y：不经过确认，输出时直接覆盖同名文件。 常见用法 下面介绍 FFmpeg 几种常见用法。\n查看文件信息 查看视频文件的元信息，比如编码格式和比特率，可以只使用-i参数。\nffmpeg -i input.mp4 上面命令会输出很多冗余信息，加上-hide_banner参数，可以只显示元信息。\nffmpeg -i input.mp4 -hide_banner 转换编码格式 转换编码格式（transcoding）指的是， 将视频文件从一种编码转成另一种编码。比如转成 H.264 编码，一般使用编码器libx264，所以只需指定输出文件的视频编码器即可。\nffmpeg -i [input.file] -c:v libx264 output.mp4 下面是转成 H.265 编码的写法。\nffmpeg -i [input.file] -c:v libx265 output.mp4 转换为m3u8格式 ffmpeg -i \u0026#34;D:\\下载\\Video\\睡前故事.mp4\u0026#34; -c:v libx264 -c:a aac -strict -2 -f hls -hls_list_size 2 -hls_time 60 output.m3u8 转换容器格式 转换容器格式（transmuxing）指的是，将视频文件从一种容器转到另一种容器。下面是 mp4 转 webm 的写法。\nffmpeg -i input.mp4 -c copy output.webm 上面例子中，只是转一下容器，内部的编码格式不变，所以使用-c copy指定直接拷贝，不经过转码，这样比较快。\n调整码率 调整码率（transrating）指的是，改变编码的比特率，一般用来将视频文件的体积变小。下面的例子指定码率最小为964K，最大为3856K，缓冲区大小为 2000K。\nffmpeg \\ -i input.mp4 \\ -minrate 964K -maxrate 3856K -bufsize 2000K \\ output.mp4 改变分辨率（transsizing） 下面是改变视频分辨率（transsizing）的例子，从 1080p 转为 480p 。\nffmpeg \\ -i input.mp4 \\ -vf scale=480:-1 \\ output.mp4 提取音频 有时，需要从视频里面提取音频（demuxing），可以像下面这样写。\nffmpeg \\ -i input.mp4 \\ -vn -c:a copy \\ output.aac 上面例子中，-vn表示去掉视频，-c:a copy表示不改变音频编码，直接拷贝。\n添加音轨 添加音轨（muxing）指的是，将外部音频加入视频，比如添加背景音乐或旁白。\nffmpeg \\ -i input.aac -i input.mp4 \\ output.mp4 上面例子中，有音频和视频两个输入文件，FFmpeg 会将它们合成为一个文件。\n截图 下面的例子是从指定时间开始，连续对1秒钟的视频进行截图。\nffmpeg \\ -y \\ -i input.mp4 \\ -ss 00:01:24 -t 00:00:01 \\ output_%3d.jpg 如果只需要截一张图，可以指定只截取一帧。\nffmpeg \\ -ss 01:23:45 \\ -i input \\ -vframes 1 -q:v 2 \\ output.jpg 上面例子中，-vframes 1指定只截取一帧，-q:v 2表示输出的图片质量，一般是1到5之间（1 为质量最高）。\n裁剪 裁剪（cutting）指的是，截取原始视频里面的一个片段，输出为一个新视频。可以指定开始时间（start）和持续时间（duration），也可以指定结束时间（end）。\nffmpeg -ss [start] -i [input] -t [duration] -c copy [output] ffmpeg -ss [start] -i [input] -to [end] -c copy [output] 下面是实际的例子。\nffmpeg -ss 00:01:50 -i [input] -t 10.5 -c copy [output] ffmpeg -ss 2.5 -i [input] -to 10 -c copy [output] 上面例子中，-c copy表示不改变音频和视频的编码格式，直接拷贝，这样会快很多。\n为音频添加封面 有些视频网站只允许上传视频文件。如果要上传音频文件，必须为音频添加封面，将其转为视频，然后上传。\n下面命令可以将音频文件，转为带封面的视频文件。\nffmpeg \\ -loop 1 \\ -i cover.jpg -i input.mp3 \\ -c:v libx264 -c:a aac -b:a 192k -shortest \\ output.mp4 上面命令中，有两个输入文件，一个是封面图片cover.jpg，另一个是音频文件input.mp3。-loop 1参数表示图片无限循环，-shortest参数表示音频文件结束，输出视频就结束。\nffplay 的用法 主要选项 ffplay [选项] [\u0026lsquo;输入文件\u0026rsquo;]\n\u0026#39;-x width\u0026#39; 强制以 \u0026#34;width\u0026#34; 宽度显示 \u0026#39;-y height\u0026#39; 强制以 \u0026#34;height\u0026#34; 高度显示 \u0026#39;-an\u0026#39; 禁止音频 \u0026#39;-vn\u0026#39; 禁止视频 \u0026#39;-ss pos\u0026#39; 跳转到指定的位置(秒) \u0026#39;-t duration\u0026#39; 播放 \u0026#34;duration\u0026#34; 秒音/视频 \u0026#39;-bytes\u0026#39; 按字节跳转 \u0026#39;-nodisp\u0026#39; 禁止图像显示(只输出音频) \u0026#39;-f fmt\u0026#39; 强制使用 \u0026#34;fmt\u0026#34; 格式 \u0026#39;-window_title title\u0026#39; 设置窗口标题(默认为输入文件名) \u0026#39;-loop number\u0026#39; 循环播放 \u0026#34;number\u0026#34; 次(0将一直循环) \u0026#39;-showmode mode\u0026#39; 设置显示模式 可选的 mode ：\n- \u0026#39;0, video\u0026#39; 显示视频 - \u0026#39;1, waves\u0026#39; 显示音频波形 - \u0026#39;2, rdft\u0026#39; 显示音频频带 - 默认值为 \u0026#39;video\u0026#39;，你可以在播放进行时，按 \u0026#34;w\u0026#34; 键在这几种模式间切换 - \u0026#39;-i input_file\u0026#39; 指定输入文件 一些高级选项 \u0026#39;-sync type\u0026#39; 设置主时钟为音频、视频、或者外部。默认为音频。主时钟用来进行音视频同步 \u0026#39;-threads count\u0026#39; 设置线程个数 \u0026#39;-autoexit\u0026#39; 播放完成后自动退出 \u0026#39;-exitonkeydown\u0026#39; 任意键按下时退出 \u0026#39;-exitonmousedown\u0026#39; 任意鼠标按键按下时退出 \u0026#39;-acodec codec_name\u0026#39; 强制指定音频解码器为 \u0026#34;codec_name\u0026#34; \u0026#39;-vcodec codec_name\u0026#39; 强制指定视频解码器为 \u0026#34;codec_name\u0026#34; \u0026#39;-scodec codec_name\u0026#39; 强制指定字幕解码器为 \u0026#34;codec_name\u0026#34; 一些快捷键 \u0026#39;q, ESC\u0026#39; 退出 \u0026#39;f\u0026#39; 全屏 \u0026#39;p, SPC\u0026#39; 暂停 \u0026#39;w\u0026#39; 切换显示模式(视频/音频波形/音频频带) \u0026#39;s\u0026#39; 步进到下一帧 \u0026#39;left/right\u0026#39; 快退/快进 10 秒 \u0026#39;down/up\u0026#39; 快退/快进 1 分钟 \u0026#39;page down/page up\u0026#39; 跳转到前一章/下一章(如果没有章节，快退/快进 10 分钟) \u0026#39;mouse click\u0026#39; 跳转到鼠标点击的位置(根据鼠标在显示窗口点击的位置计算百分比) ffplay 高级使用方式 循环播放\nffplay pm.mp4 -loop 10 播放 pm.mp4 ，播放完成后自动退出\nffplay -autoexit pm.mp4 以 320 x 240 的大小播放 test.mp4\nffplay -x 320 -y 240 pm.mp4 将窗口标题设置为 \u0026ldquo;myplayer\u0026rdquo;，循环播放 2 次\nffplay -window_title myplayer -loop 2 pm.mp4 播放 双通道 32K 的 PCM 音频数据\nffplay -f s16le -ar 32000 -ac 2 test.pcm ffplay音画同步 ffplay也是一个视频播放器，所以不得不提出来的一个问题是：音画同步。ffplay的音画同步的实现方式其实有三种，分别是：以音频为主时间轴作为同步源，以视频为主时间轴作为同步源，以外部时钟为主时间轴作为同步源。\n下面就以音频为主时间轴来作为同步源来作为案例进行讲解，而且ffplay默认也是以音频为基准进行对齐的，那么以音频作为对齐基准是如何实现的呢？\n首先需要说明的是，播放器接收到的视频帧或者音频帧，内部都是会有时间戳（PTS时钟）来标识它实际应该在什么时刻展示，实际的对齐策略如下：比较视频当前的播放时间和音频当前的播放时间，如果视频播放过快，则通过加大延迟或者重复播放来降低视频播放速度，如果视频播放满了，则通过减小延迟或者丢帧来追赶音频播放的时间点。关键就在于音视频时间的比较和延迟的计算，当前在比较的过程中会设置一个阈值，如果超过预设的阈值就应该作出调整（丢帧或者重复渲染），这就是整个对齐策略。\n在使用ffplay的时候，我们可以明确的指定使用那种对齐方式，比如\nffplay pm.mp4 -sync audio 上面这个命令显式的指定了使用以音频为基准进行音视频同步的方式播放视频文件，当然这也是ffplay的默认播放设置。\nffplay pm.mp4 -sync video 上面这个命令显式的指定了使用以视频为基准进行音视频同步的方式播放视频文件。\nffplay pm.mp4 -sync ext 上面这个命令显式的指定了使用外部时钟为基准进行音视频同步的方式播放视频文件。\n大家可以分别使用这三种方式进行播放，尝试听一听，做一些快进或者seek的操作，看看不同的对齐策略对最终的播放会产生什么样的影响。\n参考链接 FFmpeg libav tutorial\nDigital video introduction\nFFmpeg encoding and editing course\nMaking Slideshows w/FFMpeg\nThe Complete Guide for Using ffmpeg in Linux\nAdding subtitles to your videos the easy way\n播放媒体文件的工具ffplay\n","permalink":"https://www.uiuuyr.top/posts/ffmpeg%E7%9A%84%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/","summary":"\u003ch1 id=\"ffmpeg使用教程\"\u003eFFmpeg使用教程\u003c/h1\u003e\n\u003cp\u003e转载自\u003ca href=\"https://www.ruanyifeng.com/blog/2020/01/ffmpeg.html\"\u003e阮一峰\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eFFmpeg 是视频处理最常用的开源软件。\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e它功能强大，用途广泛，大量用于视频网站和商业软件（比如 Youtube 和 iTunes），也是许多音频和视频格式的标准编码/解码实现。\nFFmpeg 本身是一个庞大的项目，包含许多组件和库文件，最常用的是它的命令行工具。本文介绍 FFmpeg 命令行如何处理视频，比桌面视频处理软件更简洁高效。\u003c/p\u003e\n\u003cp\u003e如果你还没安装，可以根据  \u003ca href=\"https://www.ffmpeg.org/download.html\"\u003e官方文档\u003c/a\u003e  先完成安装。\u003c/p\u003e\n\u003ch2 id=\"概念\"\u003e概念\u003c/h2\u003e\n\u003cp\u003e介绍 FFmpeg 用法之前，需要了解一些视频处理的基本概念。\u003c/p\u003e\n\u003ch3 id=\"容器\"\u003e容器\u003c/h3\u003e\n\u003cp\u003e视频文件本身其实是一个容器（container），里面包括了视频和音频，也可能有字幕等其他内容。\u003c/p\u003e\n\u003cp\u003e常见的容器格式有以下几种。一般来说，视频文件的后缀名反映了它的容器格式。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eMP4\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eMKV\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWebM\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eAVI\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e下面的命令查看 FFmpeg 支持的容器。\u003c/p\u003e\n\u003cp\u003e$ ffmpeg -formats\u003c/p\u003e\n\u003ch3 id=\"编码格式\"\u003e编码格式\u003c/h3\u003e\n\u003cp\u003e视频和音频都需要经过编码，才能保存成文件。不同的编码格式（CODEC），有不同的压缩率，会导致文件大小和清晰度的差异。\u003c/p\u003e\n\u003cp\u003e常用的视频编码格式如下。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eH.262\u003c/li\u003e\n\u003cli\u003eH.264\u003c/li\u003e\n\u003cli\u003eH.265\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e上面的编码格式都是有版权的，但是可以免费使用。此外，还有几种无版权的视频编码格式。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eVP8\u003c/li\u003e\n\u003cli\u003eVP9\u003c/li\u003e\n\u003cli\u003eAV1\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e常用的音频编码格式如下。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eMP3\u003c/li\u003e\n\u003cli\u003eAAC\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e上面所有这些都是有损的编码格式，编码后会损失一些细节，以换取压缩后较小的文件体积。无损的编码格式压缩出来的文件体积较大，这里就不介绍了。\u003c/p\u003e\n\u003cp\u003e下面的命令可以查看 FFmpeg 支持的编码格式，视频编码和音频编码都在内。\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003effmpeg -codecs\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"编码器\"\u003e编码器\u003c/h3\u003e\n\u003cp\u003e编码器（encoders）是实现某种编码格式的库文件。只有安装了某种格式的编码器，才能实现该格式视频/音频的编码和解码。\u003c/p\u003e\n\u003cp\u003e以下是一些 FFmpeg 内置的视频编码器。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003elibx264：最流行的开源 H.264 编码器\u003c/li\u003e\n\u003cli\u003eNVENC：基于 NVIDIA GPU 的 H.264 编码器\u003c/li\u003e\n\u003cli\u003elibx265：开源的 HEVC 编码器\u003c/li\u003e\n\u003cli\u003elibvpx：谷歌的 VP8 和 VP9 编码器\u003c/li\u003e\n\u003cli\u003elibaom：AV1 编码器\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e音频编码器如下。\u003c/p\u003e","title":"ffmpeg的使用方法"},{"content":"教程如下： 关闭蒸汽\n以管理员身份打开cmd.exe（不是100%确定是否需要管理员）\n设置变量，whatever 可以是任何值\nset VPROJECT=whatever CD 进入steam目录\ncd \u0026#34;C:\\Program Files (x86)\\Steam\u0026#34; 启动第一个窗口\nsteam.exe -master_ipc_name_override test1 启动第二个窗口\nsteam.exe -master_ipc_name_override test2 打开两个 Steam 客户端，每个客户端登录不同的帐户\n在两个steam上添加\n-allowmultiple 到CSGO启动选项\n在两个实例上从 Steam 库中打开 csgo\n玩得愉快\n这样做的原因是 Steam 使用共享内存和事件来建立从游戏到 Steam 客户端的初始通信。默认情况下，共享内存和事件的名称为\nSteam3Master_SharedMemFile Steam3Master_SharedMemLock 但您可以通过设置环境变量用任何值覆盖 Steam3Master 部分。Steam 启动选项 -master_ipc_name_override 将使用自定义前缀创建这些对象，并为打开的任何游戏设置所需的环境变量，以及使用环境变量。\n仅仅这样仍然不能打开csgo，因为csgo会创建一个互斥锁，并且默认情况下不允许运行两个实例。这就是 -allowmultiple csgo 启动选项的用武之地。但是有一个警告，除非设置 VPROJECT env 变量，否则它将无法工作，所以必须在打开 Steam 之前设置它，以便 csgo 也将继承它，任何值都可以。\n","permalink":"https://www.uiuuyr.top/posts/%E5%8F%8C%E5%BC%80steam%E5%8F%8A%E5%85%B6%E6%B8%B8%E6%88%8F/","summary":"\u003ch2 id=\"教程如下\"\u003e教程如下：\u003c/h2\u003e\n\u003col\u003e\n\u003cli\u003e\n\u003cp\u003e关闭蒸汽\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e以管理员身份打开cmd.exe（不是100%确定是否需要管理员）\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e设置变量，whatever 可以是任何值\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eset\u003c/span\u003e \u003cspan class=\"nv\"\u003eVPROJECT\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ewhatever\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eCD 进入steam目录\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003ecd\u003c/span\u003e \u003cspan class=\"s2\"\u003e\u0026#34;C:\\Program Files (x86)\\Steam\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e启动第一个窗口\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esteam.exe -master_ipc_name_override test1\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e启动第二个窗口\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esteam.exe -master_ipc_name_override test2\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e打开两个 Steam 客户端，每个客户端登录不同的帐户\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e在两个steam上添加\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e-allowmultiple\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e到CSGO启动选项\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e在两个实例上从 Steam 库中打开 csgo\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003e玩得愉快\u003c/p\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp\u003e这样做的原因是 Steam 使用共享内存和事件来建立从游戏到 Steam 客户端的初始通信。默认情况下，共享内存和事件的名称为\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSteam3Master_SharedMemFile\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eSteam3Master_SharedMemLock\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e但您可以通过设置环境变量用任何值覆盖 Steam3Master 部分。Steam 启动选项 -master_ipc_name_override 将使用自定义前缀创建这些对象，并为打开的任何游戏设置所需的环境变量，以及使用环境变量。\u003c/p\u003e\n\u003cp\u003e仅仅这样仍然不能打开csgo，因为csgo会创建一个互斥锁，并且默认情况下不允许运行两个实例。这就是 -allowmultiple csgo 启动选项的用武之地。但是有一个警告，除非设置 VPROJECT env 变量，否则它将无法工作，所以必须在打开 Steam 之前设置它，以便 csgo 也将继承它，任何值都可以。\u003c/p\u003e","title":"双开steam及其游戏"},{"content":"conda 常用命令 查看安装了那些包 conda list 看当前存在哪些虚拟环境 conda env list conda info -e 检查更新当前的conda conda update conda Python创建虚拟环境 conda create -n your_env_name python=x.x anaconda命令创建python版本为x.x，名字为your_env_name的虚拟环境。your_env_name文件可以在Anaconda安装目录envs文件下找到。 激活或者切换虚拟环境 打开命令行，输入python \u0026ndash;version检查当前 python 版本。\nLinux:\nsource activate your_env_nam Windows:\nactivate your_env_name 对虚拟环境中安装额外的包 conda install -n your_env_name [package] 关闭虚拟环境(即从当前环境退出返回使用PATH环境中的默认python版本) deactivate env_name 或者activate root切回root环境\nLinux下：\nsource deactivate 删除虚拟环境 conda remove -n your_env_name --all 删除环境钟的某个包 conda remove --name $your_env_name $package_name 设置国内镜像 http://Anaconda.org 的服务器在国外，安装多个packages时，conda下载的速度经常很慢。清华TUNA镜像源有Anaconda仓库的镜像，将其加入conda的配置即可添加Anaconda的TUNA镜像 添加Anaconda的TUNA镜像,清华镜像源 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn ​\n设置搜索时显示通道地址 conda config --set show_channel_urls yes 恢复默认镜像 conda config --remove-key channels ","permalink":"https://www.uiuuyr.top/posts/conda%E7%9A%84%E5%9F%BA%E6%9C%AC%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95/","summary":"\u003ch2 id=\"conda-常用命令\"\u003econda 常用命令\u003c/h2\u003e\n\u003ch3 id=\"查看安装了那些包\"\u003e查看安装了那些包\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econda list\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"看当前存在哪些虚拟环境\"\u003e看当前存在哪些虚拟环境\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econda env list conda info -e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"检查更新当前的conda\"\u003e检查更新当前的conda\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econda update conda\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"python创建虚拟环境\"\u003ePython创建虚拟环境\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econda create -n your_env_name \u003cspan class=\"nv\"\u003epython\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003ex.x \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003eanaconda命令创建python版本为x.x，名字为your_env_name的虚拟环境。your_env_name文件可以在Anaconda安装目录envs文件下找到。\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"激活或者切换虚拟环境\"\u003e激活或者切换虚拟环境\u003c/h3\u003e\n\u003cp\u003e打开命令行，输入python \u0026ndash;version检查当前 python 版本。\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003eLinux:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003esource\u003c/span\u003e activate your_env_nam\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eWindows:\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eactivate your_env_name\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"对虚拟环境中安装额外的包\"\u003e对虚拟环境中安装额外的包\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econda install -n your_env_name \u003cspan class=\"o\"\u003e[\u003c/span\u003epackage\u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"关闭虚拟环境即从当前环境退出返回使用path环境中的默认python版本\"\u003e关闭虚拟环境(即从当前环境退出返回使用PATH环境中的默认python版本)\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edeactivate env_name\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cul\u003e\n\u003cli\u003e\n\u003cp\u003e或者\u003ccode\u003eactivate root\u003c/code\u003e切回root环境\u003c/p\u003e\n\u003c/li\u003e\n\u003cli\u003e\n\u003cp\u003eLinux下：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003esource\u003c/span\u003e deactivate \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch3 id=\"删除虚拟环境\"\u003e删除虚拟环境\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econda remove -n your_env_name --all\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"删除环境钟的某个包\"\u003e删除环境钟的某个包\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econda remove --name \u003cspan class=\"nv\"\u003e$your_env_name\u003c/span\u003e  \u003cspan class=\"nv\"\u003e$package_name\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"设置国内镜像\"\u003e设置国内镜像\u003c/h3\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"http://Anaconda.org\"\u003ehttp://Anaconda.org\u003c/a\u003e 的服务器在国外，安装多个packages时，conda下载的速度经常很慢。清华TUNA镜像源有Anaconda仓库的镜像，将其加入conda的配置即可添加Anaconda的TUNA镜像\u003c/li\u003e\n\u003cli\u003e添加Anaconda的TUNA镜像,清华镜像源\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003econda config --add channels https://mirrors.tuna.tsinghua.edu.cn\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e​\u003c/p\u003e","title":"conda 基本使用方法"},{"content":"安装ASF mkdir -p /root/ASF #新建可以任意文件夹 docker run -p 1242:1242 -v /root/ASF/config:/app/config -v /root/ASF/plugins:/app/plugins --name ASF --pull always justarchi/archisteamfarm:latest 配置文件 此示例假定您将使用单个 ASF 容器，所有配置文件都放在 /opt/docker/ASF/config。 您需要修改此处的配置文件路径以匹配您的环境。 如果您打算编写内容如下的 IPC.config 配置文件，则此 ASF 也能够正常启用 IPC 接口：\n{ \u0026#34;Kestrel\u0026#34;: { \u0026#34;Endpoints\u0026#34;: { \u0026#34;HTTP\u0026#34;: { \u0026#34;Url\u0026#34;: \u0026#34;http://*:1242\u0026#34; } } } } ASF.json { \u0026#34;AutoRestart\u0026#34;: true, \u0026#34;CommandPrefix\u0026#34;: \u0026#34;!\u0026#34;, \u0026#34;ConfirmationsLimiterDelay\u0026#34;: 10, \u0026#34;ConnectionTimeout\u0026#34;: 60, \u0026#34;CurrentCulture\u0026#34;: \u0026#34;zh-CN\u0026#34;, \u0026#34;Debug\u0026#34;: false, \u0026#34;FarmingDelay\u0026#34;: 15, \u0026#34;GiftsLimiterDelay\u0026#34;: 1, \u0026#34;Headless\u0026#34;: false, \u0026#34;IdleFarmingPeriod\u0026#34;: 8, \u0026#34;InventoryLimiterDelay\u0026#34;: 3, \u0026#34;IPC\u0026#34;: true, \u0026#34;IPCPassword\u0026#34;: \u0026#34;password\u0026#34;, \u0026#34;IPCPrefixes\u0026#34;: [ \u0026#34;http://*:1242/\u0026#34; ], \u0026#34;LoginLimiterDelay\u0026#34;: 10, \u0026#34;MaxFarmingTime\u0026#34;: 10, \u0026#34;MaxTradeHoldDuration\u0026#34;: 15, \u0026#34;OptimizationMode\u0026#34;: 0, \u0026#34;Statistics\u0026#34;: true, \u0026#34;SteamMessagePrefix\u0026#34;: \u0026#34;/me \u0026#34;, \u0026#34;SteamOwnerID\u0026#34;: 0, \u0026#34;SteamProtocols\u0026#34;: 7, \u0026#34;UpdateChannel\u0026#34;: 1, \u0026#34;UpdatePeriod\u0026#34;: 24, \u0026#34;WebLimiterDelay\u0026#34;: 200, \u0026#34;WebProxy\u0026#34;: null, \u0026#34;WebProxyPassword\u0026#34;: null, \u0026#34;WebProxyUsername\u0026#34;: null, \u0026#34;Blacklist\u0026#34;: [ 730, 440, 221100, 10, 240, 50, 70, 500, 550, 20, 30, 300, 320, 40, 60, 80, 360, 58610, 222880, 4000, 252490, 2100, 61700, 21970, 1250, 204300, 219640, 10180, 115300, 42700, 2400, 216250, 255220, 65800, 4920, 35450, 44350, 221040, 70000, 282800, 227100, 215470, 222480, 208090, 243800, 17710, 1200, 63000, 63500, 61730, 45500, 63200, 39000, 224260, 223710, 104900, 55110, 247730, 55100, 6510, 214360, 214630, 63970, 42160, 204080, 212410, 209610, 201070, 244630, 91310 ] } 简单介绍几个重要的配置：\n“Blacklist”：不挂卡的游戏 (这里排除了所有带 VAC 的游戏) “SteamOwnerID”：ASF 所有者的 SteamID；ASF 所有者可以使用全局指令 (例如：!exit、!restart、!update 等 ) 获取 SteamID 的方法：怎么获取 SteamID？ 详细的配置说明请参考：ASF.json 详细配置说明\n","permalink":"https://www.uiuuyr.top/posts/docker%E7%89%88asf%E7%9A%84%E5%AE%89%E8%A3%85/","summary":"\u003ch1 id=\"安装asf\"\u003e安装ASF\u003c/h1\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003emkdir -p /root/ASF \u003cspan class=\"c1\"\u003e#新建可以任意文件夹\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003edocker run -p 1242:1242 -v /root/ASF/config:/app/config -v /root/ASF/plugins:/app/plugins --name ASF --pull always justarchi/archisteamfarm:latest\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"配置文件\"\u003e配置文件\u003c/h2\u003e\n\u003cp\u003e此示例假定您将使用单个 ASF 容器，所有配置文件都放在 \u003ccode\u003e/opt/docker/ASF/config\u003c/code\u003e。 您需要修改此处的配置文件路径以匹配您的环境。 如果您打算编写内容如下的 \u003ccode\u003eIPC.config\u003c/code\u003e 配置文件，则此 ASF 也能够正常启用 IPC 接口：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"s2\"\u003e\u0026#34;Kestrel\u0026#34;\u003c/span\u003e: \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"s2\"\u003e\u0026#34;Endpoints\u0026#34;\u003c/span\u003e: \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"s2\"\u003e\u0026#34;HTTP\u0026#34;\u003c/span\u003e: \u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e                \u003cspan class=\"s2\"\u003e\u0026#34;Url\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;http://*:1242\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e            \u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e        \u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e    \u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"asfjson\"\u003eASF.json\u003c/h2\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e{\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;AutoRestart\u0026#34;\u003c/span\u003e: true,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;CommandPrefix\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;!\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ConfirmationsLimiterDelay\u0026#34;\u003c/span\u003e: 10,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;ConnectionTimeout\u0026#34;\u003c/span\u003e: 60,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;CurrentCulture\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;zh-CN\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Debug\u0026#34;\u003c/span\u003e: false,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;FarmingDelay\u0026#34;\u003c/span\u003e: 15,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;GiftsLimiterDelay\u0026#34;\u003c/span\u003e: 1,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Headless\u0026#34;\u003c/span\u003e: false,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;IdleFarmingPeriod\u0026#34;\u003c/span\u003e: 8,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;InventoryLimiterDelay\u0026#34;\u003c/span\u003e: 3,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;IPC\u0026#34;\u003c/span\u003e: true,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;IPCPassword\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;password\u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;IPCPrefixes\u0026#34;\u003c/span\u003e: \u003cspan class=\"o\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"s2\"\u003e\u0026#34;http://*:1242/\u0026#34;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;LoginLimiterDelay\u0026#34;\u003c/span\u003e: 10,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;MaxFarmingTime\u0026#34;\u003c/span\u003e: 10,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;MaxTradeHoldDuration\u0026#34;\u003c/span\u003e: 15,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;OptimizationMode\u0026#34;\u003c/span\u003e: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Statistics\u0026#34;\u003c/span\u003e: true,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;SteamMessagePrefix\u0026#34;\u003c/span\u003e: \u003cspan class=\"s2\"\u003e\u0026#34;/me \u0026#34;\u003c/span\u003e,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;SteamOwnerID\u0026#34;\u003c/span\u003e: 0,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;SteamProtocols\u0026#34;\u003c/span\u003e: 7,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;UpdateChannel\u0026#34;\u003c/span\u003e: 1,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;UpdatePeriod\u0026#34;\u003c/span\u003e: 24,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;WebLimiterDelay\u0026#34;\u003c/span\u003e: 200,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;WebProxy\u0026#34;\u003c/span\u003e: null,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;WebProxyPassword\u0026#34;\u003c/span\u003e: null,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;WebProxyUsername\u0026#34;\u003c/span\u003e: null,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"s2\"\u003e\u0026#34;Blacklist\u0026#34;\u003c/span\u003e: \u003cspan class=\"o\"\u003e[\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  730,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  440,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  221100,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  10,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  240,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  50,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  70,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  500,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  550,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  20,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  30,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  300,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  320,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  40,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  60,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  80,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  360,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  58610,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  222880,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  4000,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  252490,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  2100,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  61700,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  21970,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  1250,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  204300,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  219640,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  10180,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  115300,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  42700,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  2400,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  216250,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  255220,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  65800,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  4920,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  35450,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  44350,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  221040,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  70000,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  282800,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  227100,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  215470,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  222480,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  208090,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  243800,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  17710,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  1200,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  63000,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  63500,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  61730,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  45500,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  63200,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  39000,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  224260,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  223710,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  104900,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  55110,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  247730,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  55100,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  6510,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  214360,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  214630,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  63970,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  42160,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  204080,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  212410,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  209610,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  201070,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  244630,\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e  \u003cspan class=\"m\"\u003e91310\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e \u003cspan class=\"o\"\u003e]\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"o\"\u003e}\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e简单介绍几个重要的配置：\u003c/p\u003e","title":"docker版ASF的安装"},{"content":"git全局设置、查看、取消代理 下面两种二选一就可以了\n设置socks5代理 git config --global http.proxy \u0026#39;socks5://127.0.0.1:10808\u0026#39; git config --global https.proxy \u0026#39;socks5://127.0.0.1:10808\u0026#39; 设置github.com代理 http.https://github.com.proxy=socks5://127.0.0.1:8080 https.https://github.com.proxy=socks5://127.0.0.1:8080 设置http代理 git config --global http.proxy \u0026#39;http://127.0.0.1:10809\u0026#39; git config --global https.proxy \u0026#39;http://127.0.0.1:10809\u0026#39; 查看代理 git config --global --get http.proxy git config --global --get https.proxy 取消代理： git config --global --unset http.proxy git config --global --unset https.proxy 取消github.com代理 git config --global --unset http.https://github.com.proxy git config --global --unset https.https://github.com.proxy ","permalink":"https://www.uiuuyr.top/posts/git%E7%9A%84%E4%BD%BF%E7%94%A8/","summary":"\u003ch2 id=\"git全局设置查看取消代理\"\u003egit全局设置、查看、取消代理\u003c/h2\u003e\n\u003cp\u003e下面两种二选一就可以了\u003c/p\u003e\n\u003ch3 id=\"设置socks5代理\"\u003e设置socks5代理\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global http.proxy \u003cspan class=\"s1\"\u003e\u0026#39;socks5://127.0.0.1:10808\u0026#39;\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global https.proxy \u003cspan class=\"s1\"\u003e\u0026#39;socks5://127.0.0.1:10808\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"设置githubcom代理\"\u003e设置github.com代理\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehttp.https://github.com.proxy\u003cspan class=\"o\"\u003e=\u003c/span\u003esocks5://127.0.0.1:8080\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ehttps.https://github.com.proxy\u003cspan class=\"o\"\u003e=\u003c/span\u003esocks5://127.0.0.1:8080\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"设置http代理\"\u003e设置http代理\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e git config --global http.proxy \u003cspan class=\"s1\"\u003e\u0026#39;http://127.0.0.1:10809\u0026#39;\u003c/span\u003e \n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e git config --global https.proxy \u003cspan class=\"s1\"\u003e\u0026#39;http://127.0.0.1:10809\u0026#39;\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"查看代理\"\u003e查看代理\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global --get http.proxy\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global --get https.proxy\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"取消代理\"\u003e取消代理：\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global --unset http.proxy\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global --unset https.proxy\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"取消githubcom代理\"\u003e取消github.com代理\u003c/h3\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global --unset http.https://github.com.proxy\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003egit config --global --unset https.https://github.com.proxy\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e","title":"git的使用"},{"content":"参考教程 ：[N1盒子] N1刷Armbian系统并在Docker中安装OpenWrt旁路由的详细教程\n刷入Armbian Armbian（下载地址）：Armbian\n输入官方写入EMMC命令：\narmbian-install 安装及升级 Armbian 的相关说明 中文说明：https://github.com/ophub/amlogic-s9xxx-armbian/blob/main/README.cn.md\n更新 Armbian 内核 登录 Armbian 系统 → 输入命令：\n# 使用 root 用户运行 (sudo -i) # 如果不指定参数，将更新为最新版本。 armbian-update 安装常用软件 登录 Armbian 系统 → 输入命令：\narmbian-software 使用 armbian-software -u 命令可以更新本地的软件中心列表。根据用户在 Issue 中的需求反馈，逐步整合常用软件，实现一键安装/更新/卸载等快捷操作。包括 docker 镜像、桌面软件、应用服务 等。详见更多说明。\n修改 Armbian 配置 登录 Armbian 系统 → 输入命令：\narmbian-config 为 Armbian 创建 swap 如果你在使用 docker 等内存占用较大的应用时，觉得当前盒子的内存不够使用，可以创建 swap 虚拟内存分区，将磁盘空间的一定容量虚拟成内存来使用。下面命令输入参数的单位是 GB，默认为 1。\n登录 Armbian 系统 → 输入命令：\narmbian-swap 1 备份/还原 EMMC 原系统 支持在 TF/SD/USB 中对盒子的 EMMC 分区进行备份/恢复。建议您在全新的盒子里安装 Armbian 系统前，先对当前盒子自带的安卓 TV 系统进行备份，以便日后在恢复电视系统等情况下使用。\n请从 TF/SD/USB 启动 Armbian 系统 → 输入命令：\narmbian-ddbr 详情访问github\n清华源 /etc/apt/sources.list deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-backports main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free 安装docker apt install docker.io\n安装docker管理面板 docker volume create portainer_data docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer:linux-arm64 安装docker版openwrt F大教程\n开启网卡的混杂模式（这样是为了目前这个阶段能正常安装并配置，要永久开启需修改配置文件，稍后详述）\nip link set eth0 promisc on 创建docker的虚拟网络（可用docker network ls查看已创建了哪些）\ndocker network create -d macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parent=eth0 macnet 拉取镜像\ndocker pull unifreq/openwrt-aarch64:latest docker run --name=openwrt --restart always -d --network macnet --privileged unifreq/openwrt-aarch64:latest /sbin/init 其他事项 如此设置后，会存在如下问题：\n同网段设备均可以正常访问（包括ping）N1和op，但N1和op之间是不能互访的【需要将armbian的ip设置为静态的才行】\nvim /etc/config/network 设置openwrt的静态地址\nN1重启网卡混杂模式会失效，需设为永久开启\n解决方案是修改/etc/network/interfaces文件：（谨慎操作，可能导致armbian永远无网络）\nauto eth0 iface eth0 inet manual up ip link set eth0 promisc on auto macvlan iface macvlan inet static address 192.168.12.104→修改成你需要的 netmask 255.255.255.0 gateway 192.168.12.1→需改成你的主路由ip或192.168.12.5（旁路由的ip） dns-nameservers 192.168.12.1→需改成你的主路由ip或12.5或再加1个公共dns比如114 pre-up ip link add macvlan link eth0 type macvlan mode bridge post-down ip link del macvlan link eth0 type macvlan mode bridge 没有网的原因是没有添加dns服务\n安装docker版clash Clash在Docker中的部署\n部署可视化clash dashboard容器\n首先将dashboard的image pull下来。\ndocker pull haishanh/yacd 然后直接跑起来就行，注意映射一个没在使用的端口就行 docker run -p 1234:80 -d haishanh/yacd 在浏览器键入服务器地址跟端口号，我这里是输入192.168.199.10:1234，就可以打开dashboard页面 部署clash容器 准备好你的配置文件config.yaml，节点和订阅得自己想办法!\n将下边的代码覆盖入你原有的基础配置\nport: 7890 socks-port: 7891 #转发端口一定要配置 redir-port: 7892 #允许接管局域网流量 allow-lan: true #默认代理模式 mode: Rule log-level: warning #接口控制端口你可以自己设置，默认是9090 external-controller: 0.0.0.0:7070 #如果服务器对公网开放可以设置密码 secret: \u0026#34;\u0026#34; #external-ui: dashboard #配置由clash接管的dns解析 dns: enable: true #主要监听定向转发来的数据，后续会在路由表里配置转发端口为1053 listen: 0.0.0.0:1053 enhanced-mode: redir-host #见下方链接 nameserver: - \u0026#39;114.114.114.114\u0026#39; - \u0026#39;223.5.5.5\u0026#39; fallback: - \u0026#39;tls://1.1.1.1:853\u0026#39; - \u0026#39;tcp://1.1.1.1:53\u0026#39; - \u0026#39;tcp://208.67.222.222:443\u0026#39; - \u0026#39;tls://dns.google\u0026#39; 准备好配置文件之后 ，运行如下命令启动clash容器\ndocker run --name Clash -d -v /opt/docker/clash/config.yaml:/root/.config/clash/config.yaml --network macnet --ip 192.168.1.100 --cap-add=NET_ADMIN --privileged dreamacro/clash ","permalink":"https://www.uiuuyr.top/posts/n1%E5%AE%89%E8%A3%85armbian%E4%BB%A5%E5%8F%8A%E5%AE%89%E8%A3%85dockeropenwrt/","summary":"\u003cp\u003e参考教程 ：[\u003ca href=\"https://www.right.com.cn/forum/forum.php?mod=forumdisplay\u0026amp;fid=158\u0026amp;filter=typeid\u0026amp;typeid=21\"\u003eN1盒子]\u003c/a\u003e \u003cstrong\u003eN1刷Armbian系统并在Docker中安装OpenWrt旁路由的详细教程\u003c/strong\u003e\u003c/p\u003e\n\u003ch2 id=\"刷入armbian\"\u003e刷入Armbian\u003c/h2\u003e\n\u003cp\u003eArmbian（下载地址）：\u003ca href=\"https://github.com/ophub/amlogic-s9xxx-armbian\"\u003eArmbian\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e输入官方写入EMMC命令：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003earmbian-install\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"安装及升级-armbian-的相关说明\"\u003e安装及升级 Armbian 的相关说明\u003c/h2\u003e\n\u003cp\u003e中文说明：\u003ca href=\"https://github.com/ophub/amlogic-s9xxx-armbian/blob/main/README.cn.md\"\u003ehttps://github.com/ophub/amlogic-s9xxx-armbian/blob/main/README.cn.md\u003c/a\u003e\u003c/p\u003e\n\u003ch3 id=\"更新-armbian-内核\"\u003e更新 Armbian 内核\u003c/h3\u003e\n\u003cp\u003e登录 Armbian 系统 → 输入命令：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 使用 root 用户运行 (sudo -i)\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 如果不指定参数，将更新为最新版本。\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003earmbian-update\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"安装常用软件\"\u003e安装常用软件\u003c/h3\u003e\n\u003cp\u003e登录 Armbian 系统 → 输入命令：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003earmbian-software\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e使用 \u003ccode\u003earmbian-software -u\u003c/code\u003e 命令可以更新本地的软件中心列表。根据用户在 \u003ca href=\"https://github.com/ophub/amlogic-s9xxx-armbian/issues\"\u003eIssue\u003c/a\u003e 中的需求反馈，逐步整合常用\u003ca href=\"https://github.com/ophub/amlogic-s9xxx-armbian/blob/main/build-armbian/armbian-files/common-files/usr/share/ophub/armbian-software/software-list.conf\"\u003e软件\u003c/a\u003e，实现一键安装/更新/卸载等快捷操作。包括 \u003ccode\u003edocker 镜像\u003c/code\u003e、\u003ccode\u003e桌面软件\u003c/code\u003e、\u003ccode\u003e应用服务\u003c/code\u003e 等。详见更多\u003ca href=\"https://github.com/ophub/amlogic-s9xxx-armbian/blob/main/build-armbian/documents/armbian_software.md\"\u003e说明\u003c/a\u003e。\u003c/p\u003e\n\u003ch3 id=\"修改-armbian-配置\"\u003e修改 Armbian 配置\u003c/h3\u003e\n\u003cp\u003e登录 Armbian 系统 → 输入命令：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003earmbian-config\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"为-armbian-创建-swap\"\u003e为 Armbian 创建 swap\u003c/h3\u003e\n\u003cp\u003e如果你在使用 \u003ccode\u003edocker\u003c/code\u003e 等内存占用较大的应用时，觉得当前盒子的内存不够使用，可以创建 \u003ccode\u003eswap\u003c/code\u003e 虚拟内存分区，将磁盘空间的一定容量虚拟成内存来使用。下面命令输入参数的单位是 \u003ccode\u003eGB\u003c/code\u003e，默认为 \u003ccode\u003e1\u003c/code\u003e。\u003c/p\u003e\n\u003cp\u003e登录 Armbian 系统 → 输入命令：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003earmbian-swap \u003cspan class=\"m\"\u003e1\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch3 id=\"备份还原-emmc-原系统\"\u003e备份/还原 EMMC 原系统\u003c/h3\u003e\n\u003cp\u003e支持在 \u003ccode\u003eTF/SD/USB\u003c/code\u003e 中对盒子的 \u003ccode\u003eEMMC\u003c/code\u003e 分区进行备份/恢复。建议您在全新的盒子里安装 Armbian 系统前，先对当前盒子自带的安卓 TV 系统进行备份，以便日后在恢复电视系统等情况下使用。\u003c/p\u003e","title":"n1安装armbian以及安装docker、openwrt"},{"content":"直接使用该软件即可完成winrar的安装和注册，以下内容可以不看！！！！！ WinRAR-Extractor\nWinRAR 是一款不错的解压缩软件，但还是收费软件，广告不少，今天就总结了一下网上的各路教程 本教程搬运自吾爱破解论坛\n首先通过特殊方式获取软件许可： 新建一个文本文档\n在这个文本文档里输入内容：\n纯文本查看\nRAR registration data Federal Agency for Education 1000000 PC usage license UID=b621cca9a84bc5deffbf 6412612250ffbf533df6db2dfe8ccc3aae5362c06d54762105357d 5e3b1489e751c76bf6e0640001014be50a52303fed29664b074145 7e567d04159ad8defc3fb6edf32831fd1966f72c21c0c53c02fbbb 2f91cfca671d9c482b11b8ac3281cb21378e85606494da349941fa e9ee328f12dc73e90b6356b921fbfb8522d6562a6a4b97e8ef6c9f fb866be1e3826b5aa126a4d2bfe9336ad63003fc0e71c307fc2c60 64416495d4c55a0cc82d402110498da970812063934815d81470829275 然后将文件名改为：rarreg.key\n再将这个文件导入WinRAR的安装文件夹\n这时点开关于WinRAR，已经获取许可。\n接下来使用Resource Hacker软件打开winrar.exe\n进入字串表，找到“80”，删除“1267”和“1277”行 点击绿色三角形按钮，编译。\n然后：文件→另存为，进行保存。\n然后对源文件：winrar.exe进行替换,注意，要关闭winrar软件\n","permalink":"https://www.uiuuyr.top/posts/winrar%E6%B7%B1%E5%BA%A6%E5%8E%BB%E9%99%A4%E5%BC%B9%E7%AA%97%E5%B9%BF%E5%91%8A/","summary":"\u003ch2 id=\"直接使用该软件即可完成winrar的安装和注册以下内容可以不看\"\u003e直接使用该软件即可完成winrar的安装和注册，以下内容可以不看！！！！！\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://github.com/lvtx/WinRAR-Extractor\"\u003eWinRAR-Extractor\u003c/a\u003e\u003c/p\u003e\n\u003ch2 id=\"winrar-是一款不错的解压缩软件但还是收费软件广告不少今天就总结了一下网上的各路教程\"\u003eWinRAR 是一款不错的解压缩软件，但还是收费软件，广告不少，今天就总结了一下网上的各路教程\u003c/h2\u003e\n\u003cp\u003e\u003ca href=\"https://www.52pojie.cn/forum.php?mod=viewthread\u0026amp;tid=1143884\u0026amp;highlight=rar\"\u003e本教程搬运自吾爱破解论坛\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e首先通过特殊方式获取软件许可：\n新建一个文本文档\u003c/p\u003e\n\u003cp\u003e在这个文本文档里输入内容：\u003c/p\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/ffxdpie/blog/main/fx/密钥.png\" alt=\"密钥\" /\u003e\n\u003cp\u003e纯文本查看\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eRAR registration data\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eFederal Agency \u003cspan class=\"k\"\u003efor\u003c/span\u003e Education\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"m\"\u003e1000000\u003c/span\u003e PC usage license\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nv\"\u003eUID\u003c/span\u003e\u003cspan class=\"o\"\u003e=\u003c/span\u003eb621cca9a84bc5deffbf\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e6412612250ffbf533df6db2dfe8ccc3aae5362c06d54762105357d\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e5e3b1489e751c76bf6e0640001014be50a52303fed29664b074145\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e7e567d04159ad8defc3fb6edf32831fd1966f72c21c0c53c02fbbb\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e2f91cfca671d9c482b11b8ac3281cb21378e85606494da349941fa\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ee9ee328f12dc73e90b6356b921fbfb8522d6562a6a4b97e8ef6c9f\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003efb866be1e3826b5aa126a4d2bfe9336ad63003fc0e71c307fc2c60\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e64416495d4c55a0cc82d402110498da970812063934815d81470829275\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e然后将文件名改为：\u003cstrong\u003erar\u003c/strong\u003ereg.key\u003c/p\u003e\n\u003cimg src=\"214226p1hhh4syyssy0ocy.png\" alt=\"\" /\u003e\n\u003cp\u003e再将这个文件导入WinRAR的安装文件夹\u003c/p\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/ffxdpie/blog/main/fx/214322q3iy77nlx3bmy5lc.png\" alt=\"\" /\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/ffxdpie/blog/main/fx/214418hzbk2k2i0qjtboxg.png\" alt=\"\" /\u003e\n\u003cp\u003e这时点开关于WinRAR，已经获取许可。\u003c/p\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/ffxdpie/blog/main/fx/214523wozu2ik8ry808o88.png\" alt=\"\" /\u003e\n\u003cp\u003e接下来使用Resource Hacker软件打开winrar.exe\u003c/p\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/ffxdpie/blog/main/fx/214704hbjodro9drbf062r.png\" alt=\"\" /\u003e\n\u003cp\u003e进入字串表，找到“80”，删除“1267”和“1277”行\n点击绿色三角形按钮，编译。\u003c/p\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/ffxdpie/blog/main/fx/215135ubka54huovatfojh.png\" alt=\"\" /\u003e\n\u003cp\u003e然后：文件→另存为，进行保存。\u003c/p\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/ffxdpie/blog/main/fx/220229qbsuhlbw4el40hs0.jpg\" alt=\"\" /\u003e\n\u003cp\u003e然后对源文件：winrar.exe进行替换,注意，要关闭winrar软件\u003c/p\u003e\n\u003cimg src=\"https://raw.githubusercontent.com/ffxdpie/blog/main/fx/220929hpwlol99o99apph3.png\" /\u003e","title":"WinRAR深度去除弹窗广告"},{"content":"前言 现在纯 IPv6、nat IPv4 VPS 越来越多了，于是有人发现可以用 warp 解锁 Netflix、解决 Google 送中问题，但是大多数教程和一键脚本都是用 wgcf 来实现的。其实 wgcf 有相对不低的延迟，大部分情况下使用这种方案会造成打开网页缓慢的问题。因此我们可以利用 warp 官方客户端来提供 socks5 给别的软件分流使用。\n安装 以 Debian 11 为例：\n首先，安装存储库的 GPG 密钥：\napt install sudo gpg curl https://pkg.cloudflareclient.com/pubkey.gpg | sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg 然后添加存储库：\necho \u0026#39;deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ bullseye main\u0026#39; | sudo tee /etc/apt/sources.list.d/cloudflare-client.list 更新 APT 缓存：\nsudo apt update 安装 Cloudflare WARP\nsudo apt install cloudflare-warp 使用 注册一个 warp 账号：\nwarp-cli register 如果想要使用已经有的账号则可以指定 license (1.1.1.1 app 右上角 - 账户 - 按键），可以通过邀请新用户的方式为账号添加 warp + 高级流量，也可以通过脚本刷流量，点击前往教程。\nwarp-cli set-license \u0026lt;key\u0026gt; //将\u0026lt;key\u0026gt;替换为你的license 修改 warp-cli 运行模式：\nwarp-cli set-mode proxy 设置监听端口：\nwarp-cli set-proxy-port 10086 连接：\nwarp-cli connect 查看当前 warp 的 IP：\ncurl -4 ip.gs -x socks5://127.0.0.1:10086 然后我们就可以将其他软件需要分流的流量转发到 10086 端口了。\n以 Xray/V2Ray 为例：\n在配置文件中的添加 outbounds：\n{ \u0026#34;protocol\u0026#34;: \u0026#34;socks\u0026#34;, \u0026#34;settings\u0026#34;: { \u0026#34;servers\u0026#34;: [{ \u0026#34;address\u0026#34;: \u0026#34;127.0.0.1\u0026#34;, \u0026#34;port\u0026#34;: 10086 }] }, \u0026#34;tag\u0026#34;: \u0026#34;warp\u0026#34; } 在路由 routing 中加入：\n{ \u0026#34;type\u0026#34;: \u0026#34;field\u0026#34;, \u0026#34;outboundTag\u0026#34;: \u0026#34;warp\u0026#34;, \u0026#34;domain\u0026#34;: [ \u0026#34;geosite:netflix\u0026#34; ] } 然后重启即可：\nsystemctl restart xray.service 测试无误之后便可以设置 warp-cli 长期运行：\nwarp-cli enable-always-on 结语 这种方案相较于目前流行的 wireguard 方案的优势就是可以只分流需要分流的流量，其他无论什么流量都不会受到影响。\n另外 wireguard 的方案会造成 docker 的 bridge 模式无法使用，这种方案可以完美解决。\n参考链接 Announcing WARP for Linux and Proxy Mode Cloudflare Package Repository xray的配置文件 { \u0026#34;outbounds\u0026#34;:[ { \u0026#34;protocol\u0026#34;:\u0026#34;freedom\u0026#34; }, { \u0026#34;tag\u0026#34;:\u0026#34;warp\u0026#34;, \u0026#34;protocol\u0026#34;:\u0026#34;socks\u0026#34;, \u0026#34;settings\u0026#34;:{ \u0026#34;servers\u0026#34;:[ { \u0026#34;address\u0026#34;:\u0026#34;127.0.0.1\u0026#34;, \u0026#34;port\u0026#34;:40000 } ] } }, { \u0026#34;tag\u0026#34;:\u0026#34;WARP-socks5-v4\u0026#34;, \u0026#34;protocol\u0026#34;:\u0026#34;freedom\u0026#34;, \u0026#34;settings\u0026#34;:{ \u0026#34;domainStrategy\u0026#34;:\u0026#34;UseIPv4\u0026#34; }, \u0026#34;proxySettings\u0026#34;:{ \u0026#34;tag\u0026#34;:\u0026#34;warp\u0026#34; } }, { \u0026#34;tag\u0026#34;:\u0026#34;WARP-socks5-v6\u0026#34;, \u0026#34;protocol\u0026#34;:\u0026#34;freedom\u0026#34;, \u0026#34;settings\u0026#34;:{ \u0026#34;domainStrategy\u0026#34;:\u0026#34;UseIPv6\u0026#34; }, \u0026#34;proxySettings\u0026#34;:{ \u0026#34;tag\u0026#34;:\u0026#34;warp\u0026#34; } } ], \u0026#34;routing\u0026#34;:{ \u0026#34;rules\u0026#34;:[ { \u0026#34;type\u0026#34;:\u0026#34;field\u0026#34;, \u0026#34;domain\u0026#34;:[ \u0026#34;geosite:openai\u0026#34;, \u0026#34;ip.gs\u0026#34; ], \u0026#34;outboundTag\u0026#34;:\u0026#34;WARP-socks5-v4\u0026#34; }, { \u0026#34;type\u0026#34;:\u0026#34;field\u0026#34;, \u0026#34;domain\u0026#34;:[ \u0026#34;geosite:google\u0026#34;, \u0026#34;geosite:netflix\u0026#34;, \u0026#34;p3terx.com\u0026#34; ], \u0026#34;outboundTag\u0026#34;:\u0026#34;WARP-socks5-v6\u0026#34; } ] } } 原配置备份 { \u0026#34;api\u0026#34;: { \u0026#34;services\u0026#34;: [ \u0026#34;HandlerService\u0026#34;, \u0026#34;LoggerService\u0026#34;, \u0026#34;StatsService\u0026#34; ], \u0026#34;tag\u0026#34;: \u0026#34;api\u0026#34; }, \u0026#34;inbounds\u0026#34;: [ { \u0026#34;listen\u0026#34;: \u0026#34;127.0.0.1\u0026#34;, \u0026#34;port\u0026#34;: 62789, \u0026#34;protocol\u0026#34;: \u0026#34;dokodemo-door\u0026#34;, \u0026#34;settings\u0026#34;: { \u0026#34;address\u0026#34;: \u0026#34;127.0.0.1\u0026#34; }, \u0026#34;tag\u0026#34;: \u0026#34;api\u0026#34; } ], \u0026#34;outbounds\u0026#34;: [ { \u0026#34;protocol\u0026#34;: \u0026#34;freedom\u0026#34;, \u0026#34;settings\u0026#34;: {} }, { \u0026#34;protocol\u0026#34;: \u0026#34;blackhole\u0026#34;, \u0026#34;settings\u0026#34;: {}, \u0026#34;tag\u0026#34;: \u0026#34;blocked\u0026#34; } ], \u0026#34;policy\u0026#34;: { \u0026#34;system\u0026#34;: { \u0026#34;statsInboundDownlink\u0026#34;: true, \u0026#34;statsInboundUplink\u0026#34;: true } }, \u0026#34;routing\u0026#34;: { \u0026#34;rules\u0026#34;: [ { \u0026#34;inboundTag\u0026#34;: [ \u0026#34;api\u0026#34; ], \u0026#34;outboundTag\u0026#34;: \u0026#34;api\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;field\u0026#34; }, { \u0026#34;ip\u0026#34;: [ \u0026#34;geoip:private\u0026#34; ], \u0026#34;outboundTag\u0026#34;: \u0026#34;blocked\u0026#34;, \u0026#34;type\u0026#34;: \u0026#34;field\u0026#34; }, { \u0026#34;outboundTag\u0026#34;: \u0026#34;blocked\u0026#34;, \u0026#34;protocol\u0026#34;: [ \u0026#34;bittorrent\u0026#34; ], \u0026#34;type\u0026#34;: \u0026#34;field\u0026#34; } ] }, \u0026#34;stats\u0026#34;: {} } ","permalink":"https://www.uiuuyr.top/posts/wrap-cli%E7%9A%84%E4%BD%BF%E7%94%A8/","summary":"\u003ch2 id=\"前言\"\u003e前言\u003c/h2\u003e\n\u003cp\u003e现在纯 IPv6、nat IPv4 VPS 越来越多了，于是有人发现可以用 warp 解锁 Netflix、解决 Google 送中问题，但是大多数教程和一键脚本都是用 \u003ca href=\"https://github.com/ViRb3/wgcf\"\u003ewgcf\u003c/a\u003e 来实现的。其实 wgcf 有相对不低的延迟，大部分情况下使用这种方案会造成打开网页缓慢的问题。因此我们可以利用 warp 官方客户端来提供 socks5 给别的软件分流使用。\u003c/p\u003e\n\u003ch2 id=\"安装\"\u003e安装\u003c/h2\u003e\n\u003cp\u003e以 \u003ccode\u003eDebian 11\u003c/code\u003e 为例：\u003c/p\u003e\n\u003cp\u003e首先，安装存储库的 GPG 密钥：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eapt install sudo gpg\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ecurl https://pkg.cloudflareclient.com/pubkey.gpg \u003cspan class=\"p\"\u003e|\u003c/span\u003e sudo gpg --yes --dearmor --output /usr/share/keyrings/cloudflare-warp-archive-keyring.gpg\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e然后添加存储库：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"nb\"\u003eecho\u003c/span\u003e \u003cspan class=\"s1\"\u003e\u0026#39;deb [arch=amd64 signed-by=/usr/share/keyrings/cloudflare-warp-archive-keyring.gpg] https://pkg.cloudflareclient.com/ bullseye main\u0026#39;\u003c/span\u003e \u003cspan class=\"p\"\u003e|\u003c/span\u003e sudo tee /etc/apt/sources.list.d/cloudflare-client.list\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e更新 APT 缓存：\u003c/p\u003e\n\u003cpre tabindex=\"0\"\u003e\u003ccode class=\"language-首shell页\" data-lang=\"首shell页\"\u003esudo apt update\n\u003c/code\u003e\u003c/pre\u003e\u003cp\u003e安装 \u003ccode\u003eCloudflare WARP\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esudo apt install cloudflare-warp\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003ch2 id=\"使用\"\u003e使用\u003c/h2\u003e\n\u003cp\u003e注册一个 warp 账号：\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003ewarp-cli register\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e如果想要使用已经有的账号则可以指定 \u003ccode\u003elicense\u003c/code\u003e (1.1.1.1 app 右上角 - 账户 - 按键），可以通过邀请新用户的方式为账号添加 warp + 高级流量，也可以通过脚本刷流量，\u003ca href=\"https://yushum.com/archives/580\"\u003e点击前往教程\u003c/a\u003e。\u003c/p\u003e","title":"wrap-cli的使用"},{"content":"火柴人 VS 数学(Math) 火柴人 VS 数学(Math) ","permalink":"https://www.uiuuyr.top/posts/%E7%81%AB%E6%9F%B4%E4%BA%BAvs%E6%95%B0%E5%AD%A6math/","summary":"\u003ch2 id=\"火柴人-vs-数学math\"\u003e火柴人 VS 数学(Math)\u003c/h2\u003e\n\u003cdiv style=\"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\n    \u003ciframe \n        src=\"https://player.bilibili.com/player.html?bvid=BV1ph4y1g75E\u0026page=1\u0026high_quality=1\u0026danmaku=1\" \n        allowfullscreen=\"allowfullscreen\" \n        width=\"100%\" \n        height=\"500\" \n        scroll=\"no\" \n        frameborder=\"0\" \n        style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%;\"\u003e\n    \u003c/iframe\u003e\n\u003c/div\u003e\n\u003ch2 id=\"火柴人-vs-数学math-1\"\u003e火柴人 VS 数学(Math)\u003c/h2\u003e\n\u003cdiv style=\"position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;\"\u003e\n      \u003ciframe allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen\" loading=\"eager\" referrerpolicy=\"strict-origin-when-cross-origin\" src=\"https://www.youtube.com/embed/dQw4w9WgXcQ?autoplay=0\u0026amp;controls=1\u0026amp;end=0\u0026amp;loop=0\u0026amp;mute=0\u0026amp;start=0\" style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;\" title=\"YouTube video\"\u003e\u003c/iframe\u003e\n    \u003c/div\u003e","title":"火柴人 vs 数学(Math)"},{"content":"前言 本系列教程需要有一定的网络基础知识，具体需要基础到什么程度，看完第一节教程如果基本了解在讲什么就差不多了，如果完全看不懂的话可能不适合自建节点，VPN和机场才是你的选择。 内容为Youtube视频，本文只是作为视频的资料补充和导航\n教程是由浅入深循序渐进，下节教程需要有上节教程的知识储备作为基础，如果你是新手，不建议跳着看，否则可能有点蒙圈 个人水平有限，有些地方可能也没讲明白，若有疑问可在下方评论区留言，也可能存在错误，欢迎大家批评指正。\n本教程使用的是vultr商家的VPS并且使用Ubuntu22.04 LTS x64操作系统，只推荐学习阶段使用，正式搭建节点推荐CN2 GIA线路 新用户充值10美元赠送100美金（14天有效）：https://vps.bulianglin.com/ VPS注册视频教程：https://www.youtube.com/watch?v=3ivwonJuqyI\u0026amp;t=140s\n本系列教程仅供非中国大陆地区的用户进行技术交流与学习探讨，请遵守所在地区的法律法规。\n第一节：网络通信的基本过程 视频教程：点击进入观看 本节是纯理论，没有实操，主要让大家了解我们是如何与服务器进行通信的，清楚了这些对于之后认识各个翻墙协议的原理和特点有很大的帮助，涉及以下内容：\nIP的作用 端口的作用 MAC地址的作用 交换机的作用 路由器的作用 域名的作用 DNS的作用 NAT的作用 第二节：GFW拦截的原理与绕过 视频教程：点击进入观看 本节是纯理论，没有实操，主要让大家了解GFW是通过哪些方式阻断我们与被禁止的服务器进行通信的，以及通过什么手段可以绕过GFW的阻断，清楚了这些对于之后认识各个翻墙协议的原理和特点有很大的帮助，涉及以下内容：\nDNS污染 SNI阻断 TCP重置 传统VPN的问题 专为翻墙而生的shadowsocks 第三节：创建VPS与SS节点搭建 视频教程：点击进入观看 本节终于开始要进行实操了，首先给大家介绍了什么是VPS以及如何购买，并且通过SSH工具连接VPS进行远程管理，由于Linux是主流的服务器操作系统，所以本教程也是基于Linux来进行搭建，对于没有接触过Linux的朋友可能有点难度，但是这是必须要迈过去的坎\n其实Linux并不难，只是没有图形化界面让你感觉比较难，学习的时候你就把Linux当作是一台没有图形化界面的windows操作系统，把原来鼠标的操作变成了一条条命令，用这种思维去理解可能比较好接受\n连接VPS之后就开始搭建shadowsocks节点，在尝试连接的时候从日志中发现了GFW的主动探测，导致节点端口被秒封，可以认为SS协议存在被精准探测的情况，针对这种情况，引入了v2ray-plugin插件，将SS协议的数据封装成http协议的数据实现伪装，顺利绕过了GFW的主动探测。\n教程用到的工具： SSH连接工具（FinalShell）：http://www.hostbuf.com/t/988.html SS客户端(shadowsocks-windows)： https://github.com/shadowsocks/shadowsocks-windows shadowsocks插件(v2ray-plugin)：https://github.com/shadowsocks/v2ray-plugin 方便测速但不支持ss插件(v2rayN)：https://github.com/2dust/v2rayN\nshadowsocks相关命令：\n安装shadowsocks\napt install shadowsocks-libev\n查看shadowsocks状态\nsystemctl status shadowsocks-libev.service 编辑ss配置文件\nvim /etc/shadowsocks-libev/config.json\n重启shadowsocks\nsystemctl restart shadowsocks-libev.service 查看shadowsocks运行日志：\njournalctl -u shadowsocks-libev.service -f\nUbuntu防火墙设置：\n# 查看状态 ufw status # 开放端口 ufw allow 8388 # 拒绝端口 ufw deny 8388 # 删除规则 ufw delete allow 8388 # 关闭防火墙 ufw disable # 启动防火墙 ufw enable 视频时间线： 00:00 前言 00:40 什么是VPS? 02:20 购买并创建VPS 09:05 搭建shadowsocks 16:55 被主动探测端口秒封 20:37 plugin插件原理 23:28 搭建v2ray-plugin 33:40 总结\n第四节：trojan原理与搭建 视频教程：点击进入观看 上一节我们搭建了属于自己的shadowscosk节点，同时也验证SS节点存在被精准探测的情况，并且通过shadowsocks+plugin插件的方式将SS数据伪装成普通的http流量，成功的绕过了防火墙针对重点IP段的探测，不过上节演示的只是简单的伪装成http流量，又因为http是明文的数据，所以还是存在被防火墙探测的风险，想要将http流量进行加密又需要引入TLS，让他成为https流量，所以这次就来搭建trojan协议的节点，他是一种天生就是将数据伪装成https流量来达到科学上网目的的协议\n本节可以说是整个系列最重要的一节，给大家科普了什么是http(s)/tls(ssl)/网站证书/公钥/私钥/非对称加密，将会贯穿后面所有内容，因为任何基于TLS的节点都离不开本节讲的内容，而目前最稳定的科学上网方式依然是将流量伪装成https，是逃不开的，建议仔细观看\nSSH连接工具（FinalShell）：http://www.hostbuf.com/t/988.html trojan-go：https://github.com/p4gefau1t/trojan-go trojan-go官方文档：https://p4gefau1t.github.io/trojan-go/\ntrojan配置文件：\n{ \u0026#34;run_type\u0026#34;: \u0026#34;server\u0026#34;, \u0026#34;local_addr\u0026#34;: \u0026#34;0.0.0.0\u0026#34;, \u0026#34;local_port\u0026#34;: 443, \u0026#34;remote_addr\u0026#34;: \u0026#34;192.83.167.78\u0026#34;, \u0026#34;remote_port\u0026#34;: 80, \u0026#34;password\u0026#34;: [ \u0026#34;your_awesome_password\u0026#34; ], \u0026#34;ssl\u0026#34;: { \u0026#34;cert\u0026#34;: \u0026#34;server.crt\u0026#34;, \u0026#34;key\u0026#34;: \u0026#34;server.key\u0026#34; } } 申请证书：\n#安装acme： curl https://get.acme.sh | sh #安装socat： apt install socat #添加软链接： ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh #注册账号： acme.sh --register-account -m my@example.com #开放80端口： ufw allow 80 #申请证书： acme.sh --issue -d 替换为你的域名 --standalone -k ec-256 #安装证书： acme.sh --installcert -d 替换为你的域名 --ecc --key-file /root/trojan/server.key --fullchain-file /root/trojan/server.crt #如果默认CA无法颁发，则可以切换下列CA： #切换 Let’s Encrypt： acme.sh --set-default-ca --server letsencrypt #切换 Buypass： acme.sh --set-default-ca --server buypass #切换 ZeroSSL： acme.sh --set-default-ca --server zerossl 自签证书：\n#生成私钥： openssl ecparam -genkey -name prime256v1 -out ca.key #生成证书： openssl req -new -x509 -days 36500 -key ca.key -out ca.crt -subj \u0026#34;/CN=bing.com\u0026#34; 后台运行：\nnohup ./trojan-go \u0026gt; trojan.log 2\u0026gt;\u0026amp;1 \u0026amp; 视频时间线： 00:00 前言 01:20 http存在的问题 03:20 https的通信过程 12:20 trojan的通信过程 17:45 创建VPS 19:15 搭建trojan 23:00 申请网站证书 30:00 连接trojan节点 31:55 使用自签证书 36:50 后台运行trojan 37:50 总结\n第五节：vmess原理与搭建 视频教程：点击进入观看 vmess是一个比trojan出现更早、使用更广泛的协议 作为使用者，我们的重点是如何使用vmess，但是不讲vmess协议的通信流程又无法对这个协议的一些特性有深刻的认识，比如vmess节点为什么在电脑系统时间不对的时候无法链接？又比如为什么加密方式可以使用自动选择，按照之前讲ss节点说的，对称加密算法必须让两边都存在相同的密钥和加密方式才能正常解密。再比如额外ID(alterID)到底是个啥？还有承载vmess数据的传输协议与伪装的区别，本节的话就来带大家了解上述问题，并由浅入深实操搭建一个基于nginx实现web伪装的vmess节点。\n你可能听到一些人说做WEB伪装是自欺欺人，GFW根本就不会进行探测，我不明白说这句话的人是不是开发GFW的，能够如此肯定不会进行探测。GFW是黑盒状态，没有人能完全了解他的工作机制，既然伪装成了https，我们要做的是尽可能表现得和正常的网站行为是一样的，而不是去猜测GFW会不会来探测你的伪装。\nSSH连接工具（FinalShell）：http://www.hostbuf.com/t/988.html v2ray官方安装脚本：https://github.com/v2fly/fhs-install-v2ray\n申请证书：\n#安装acme： curl https://get.acme.sh | sh #安装socat： apt install socat #添加软链接： ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh #切换CA机构： acme.sh --set-default-ca --server letsencrypt #申请证书： acme.sh --issue -d 替换为你的域名 --standalone -k ec-256 #安装证书： acme.sh --installcert -d 替换为你的域名 --ecc --key-file /usr/local/etc/v2ray/server.key --fullchain-file /usr/local/etc/v2ray/server.crt vmess+tcp:\n{ \u0026#34;inbounds\u0026#34;: [ { \u0026#34;port\u0026#34;: 8388, \u0026#34;protocol\u0026#34;: \u0026#34;vmess\u0026#34;, \u0026#34;settings\u0026#34;: { \u0026#34;clients\u0026#34;: [ { \u0026#34;id\u0026#34;: \u0026#34;af41686b-cb85-494a-a554-eeaa1514bca7\u0026#34;, \u0026#34;alterId\u0026#34;: 0 } ] } } ], \u0026#34;outbounds\u0026#34;: [ { \u0026#34;protocol\u0026#34;: \u0026#34;freedom\u0026#34;, \u0026#34;settings\u0026#34;: {} } ] } vmess+tcp(ws)+tls:\n{ \u0026#34;inbounds\u0026#34;: [ { \u0026#34;port\u0026#34;: 8388, \u0026#34;protocol\u0026#34;: \u0026#34;vmess\u0026#34;, \u0026#34;settings\u0026#34;: { \u0026#34;clients\u0026#34;: [ { \u0026#34;id\u0026#34;: \u0026#34;af41686b-cb85-494a-a554-eeaa1514bca7\u0026#34;, \u0026#34;alterId\u0026#34;: 0 } ] }, \u0026#34;streamSettings\u0026#34;: { \u0026#34;network\u0026#34;: \u0026#34;tcp\u0026#34;, \u0026#34;security\u0026#34;: \u0026#34;tls\u0026#34;, \u0026#34;tlsSettings\u0026#34;: { \u0026#34;certificates\u0026#34;: [ { \u0026#34;certificateFile\u0026#34;: \u0026#34;/usr/local/etc/v2ray/server.crt\u0026#34;, \u0026#34;keyFile\u0026#34;: \u0026#34;/usr/local/etc/v2ray/server.key\u0026#34; } ] } } } ], \u0026#34;outbounds\u0026#34;: [ { \u0026#34;protocol\u0026#34;: \u0026#34;freedom\u0026#34;, \u0026#34;settings\u0026#34;: {} } ] } vmess+ws+tls+web:\n{ \u0026#34;inbounds\u0026#34;: [ { \u0026#34;port\u0026#34;: 8388, \u0026#34;listen\u0026#34;:\u0026#34;127.0.0.1\u0026#34;, \u0026#34;protocol\u0026#34;: \u0026#34;vmess\u0026#34;, \u0026#34;settings\u0026#34;: { \u0026#34;clients\u0026#34;: [ { \u0026#34;id\u0026#34;: \u0026#34;af41686b-cb85-494a-a554-eeaa1514bca7\u0026#34;, \u0026#34;alterId\u0026#34;: 0 } ] }, \u0026#34;streamSettings\u0026#34;: { \u0026#34;network\u0026#34;: \u0026#34;ws\u0026#34;, \u0026#34;wsSettings\u0026#34;: { \u0026#34;path\u0026#34;: \u0026#34;/ray\u0026#34; } } } ], \u0026#34;outbounds\u0026#34;: [ { \u0026#34;protocol\u0026#34;: \u0026#34;freedom\u0026#34;, \u0026#34;settings\u0026#34;: {} } ] } nginx设置：\n#安装nginx： apt install nginx #重新加载nginx配置： systemctl reload nginx.service nginx配置（替换http{}里的内容）：\nserver { listen 443 ssl; listen [::]:443 ssl; server_name v.buliang0.tk; #你的域名 ssl_certificate /usr/local/etc/v2ray/server.crt; ssl_certificate_key /usr/local/etc/v2ray/server.key; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; location / { proxy_pass https://www.bing.com; #伪装网址 proxy_ssl_server_name on; proxy_redirect off; sub_filter_once off; sub_filter \u0026#34;www.bing.com\u0026#34; $server_name; proxy_set_header Host \u0026#34;www.bing.com\u0026#34;; proxy_set_header Referer $http_referer; proxy_set_header X-Real-IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header Accept-Encoding \u0026#34;\u0026#34;; proxy_set_header Accept-Language \u0026#34;zh-CN\u0026#34;; } location /ray { proxy_redirect off; proxy_pass http://127.0.0.1:10000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection \u0026#34;upgrade\u0026#34;; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server { listen 80; server_name v.buliang0.tk; #你的域名 rewrite ^(.*)$ https://${server_name}$1 permanent; } 视频时间线： 00:00 vmess和v2ray的关系 01:54 vmess通信过程 11:25 vmess被精准探测 13:42 搭建vmess+tcp 17:15 vmess+tcp(ws)+tls原理 21:07 传输协议承载和伪装的区别 24:53 搭建vmess+tcp(ws)+tls 28:15 vmess+ws+tls+web原理 33:25 搭建vmess+ws+tls+web 36:35 总结：vmess还有优势吗？\n第六节：vless原理与搭建 视频教程：点击进入观看 上节我们详细介绍了vmess协议的通信流程以及搭建vmess+ws+tls+web的节点，达到了最大的伪装效果 但是上节我说过，vmess他没有类似trojan可以自带伪装，所以要给vmess协议做伪装的话还得单独搭建一个web服务器（nginx）来接收不是vmess流量的数据并对其进行分流实现伪装，而且vmess对于现在都套tls的情况下还是会对协议头部数据进行加密，并且还得和系统时间对应,显得有些冗余 针对这种情况，vless协议应运而生，他的出现就是为了解决vmess上述问题，不会进行额外加密也无需校对时间，可以看成是轻量化的vmess，这节我们就来讲讲vless协议，并使用xray内核来搭建vless节点。\n#关闭防火墙： ufw disable #xray官方一键安装脚本： bash -c \u0026#34;$(curl -L github.com/XTLS/Xray-install/raw/main/install-release.sh)\u0026#34; @ install -u root #启动Xray： systemctl start xray.service #重启Xray： systemctl restart xray.service #Xray状态： systemctl status xray.service 申请证书：\n#安装acme： curl https://get.acme.sh| sh #安装socat： apt install socat #添加软链接： ln -s /root/.acme.sh/acme.sh /usr/local/bin/acme.sh #切换CA机构： acme.sh --set-default-ca --server letsencrypt #申请证书： acme.sh --issue -d 替换为你的域名 --standalone -k ec-256 #安装证书： acme.sh --installcert -d 替换为你的域名 --ecc --key-file /usr/local/etc/xray/server.key --fullchain-file /usr/local/etc/xray/server.crt xray配置文件：\n{ \u0026#34;log\u0026#34;: { \u0026#34;loglevel\u0026#34;: \u0026#34;warning\u0026#34; }, \u0026#34;inbounds\u0026#34;: [ { \u0026#34;port\u0026#34;: 443, \u0026#34;protocol\u0026#34;: \u0026#34;vless\u0026#34;, \u0026#34;settings\u0026#34;: { \u0026#34;clients\u0026#34;: [ { \u0026#34;id\u0026#34;: \u0026#34;72bac1c4-02de-49b4-e498-fa8767638c23\u0026#34;, \u0026#34;flow\u0026#34;: \u0026#34;xtls-rprx-direct\u0026#34; } ], \u0026#34;decryption\u0026#34;: \u0026#34;none\u0026#34;, \u0026#34;fallbacks\u0026#34;: [ { \u0026#34;dest\u0026#34;: 8388 } ] }, \u0026#34;streamSettings\u0026#34;: { \u0026#34;network\u0026#34;: \u0026#34;tcp\u0026#34;, \u0026#34;security\u0026#34;: \u0026#34;xtls\u0026#34;, \u0026#34;xtlsSettings\u0026#34;: { \u0026#34;alpn\u0026#34;: [ \u0026#34;http/1.1\u0026#34; ], \u0026#34;certificates\u0026#34;: [ { \u0026#34;certificateFile\u0026#34;: \u0026#34;/usr/local/etc/xray/server.crt\u0026#34;, \u0026#34;keyFile\u0026#34;: \u0026#34;/usr/local/etc/xray/server.key\u0026#34; } ] } } }, { \u0026#34;port\u0026#34;: 8388, \u0026#34;listen\u0026#34;: \u0026#34;127.0.0.1\u0026#34;, \u0026#34;protocol\u0026#34;: \u0026#34;trojan\u0026#34;, \u0026#34;settings\u0026#34;: { \u0026#34;clients\u0026#34;: [ { \u0026#34;password\u0026#34;: \u0026#34;111\u0026#34; } ], \u0026#34;fallbacks\u0026#34;: [ { \u0026#34;dest\u0026#34;: \u0026#34;180.76.138.44:80\u0026#34; } ] }, \u0026#34;streamSettings\u0026#34;: { \u0026#34;network\u0026#34;: \u0026#34;tcp\u0026#34;, \u0026#34;security\u0026#34;: \u0026#34;none\u0026#34; } } ], \u0026#34;outbounds\u0026#34;: [ { \u0026#34;protocol\u0026#34;: \u0026#34;freedom\u0026#34; } ] } 视频时间线： 00:00 vmess的问题和vless的出现 01:18 吃瓜：V2Ray和Xray为什么分家？ 04:40 vless+xtls+回落通信过程 14:48 XTLS存在被主动探测的特征 19:15 vless+xtls+回落实战搭建 26:37 总结和下集预告\n第七节：你的节点怎么这么慢 视频教程：点击进入观看 前面的教程都是教大家怎么搭建节点，使用的是vultr商家的vps，搭建出来的节点速度很拉胯，作为电信用户的我高峰期基本上无法正常使用的，为什么速度会这么拉胯？是搭建的方式不对吗？\n但是联通用户同样使用vultr的vps却有着不错的速度，这又是什么情况？\n相信搭建节点的朋友都有这样的疑问，自己一顿猛如虎的操作，结果测速只有0.1m/s，影响翻墙速度的因素到底有哪些？\n怎么才提升vps的翻墙速度，以及路由为什么会绕路？\n针对以上这些问题，这节给大家讲讲线路的相关知识。端口转发/隧道中转/BGP/自治系统/单线机房/多线机房\n路由跟踪：https://tools.ipip.net/traceroute.php\n视频时间线： 00:00 为什么你的节点这么慢？ 00:48 互联网是怎么互联的？ 05:00 什么是单线、双线机房和BGP机房？ 06:40 全球互联与长城防火墙 09:40 代理服务器登场 11:36 节点速度慢的真正原因 13:16 要速度快就得换精品线路 18:08 直连线路总结 18:55 需要中转线路的原因 20:55 中转机和端口转发、隧道中转 24:26 三网回程CMI路由跟踪\n第八节：节点免费提速方案 视频教程：点击进入观看 这是节点搭建系列的最后一节，给大家讲讲不花钱的免费提升节点速度的方案，主要给大家介绍套用cloudflare提供的免费CDN以及BBR拥塞控制算法，并且通过配合x-ui面板实现vless+ws+tls+web+cdn的节点搭建\nx-ui面板：https://github.com/vaxilu/x-ui CF优选IP：https://github.com/XIU2/CloudflareSpeedTest CF官网：https://cloudflare.com CF-CDN-IP段：https://www.cloudflare.com/zh-cn/ips/\n# 安装nginx： apt install nginx # 配置nginx： vim /etc/nginx/nginx.conf # 重新加载nginx配置： systemctl reload nginx.service nginx配置：\nuser www-data; worker_processes auto; pid /run/nginx.pid; include /etc/nginx/modules-enabled/*.conf; events { worker_connections 768; } http { server { listen 80 default_server; listen [::]:80 default_server; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; ssl_prefer_server_ciphers off; location / { proxy_pass https://www.bing.com; #伪装网址 proxy_ssl_server_name on; proxy_redirect off; sub_filter_once off; sub_filter \u0026#34;www.bing.com\u0026#34; $server_name; proxy_set_header Host \u0026#34;www.bing.com\u0026#34;; proxy_set_header Referer $http_referer; proxy_set_header X-Real-IP $remote_addr; proxy_set_header User-Agent $http_user_agent; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; proxy_set_header Accept-Encoding \u0026#34;\u0026#34;; proxy_set_header Accept-Language \u0026#34;zh-CN\u0026#34;; } location /ray { proxy_redirect off; proxy_pass http://127.0.0.1:8388; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection \u0026#34;upgrade\u0026#34;; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /xui { proxy_redirect off; proxy_pass http://127.0.0.1:9999; proxy_http_version 1.1; proxy_set_header Host $host; } } } 拥塞控制：\n#查询当前使用的 TCP 拥塞控制算法 sysctl net.ipv4.tcp_congestion_control #查询当前Linux版本 uname -r #启用BBR TCP拥塞控制算法 echo \u0026#34;net.core.default_qdisc=fq\u0026#34; \u0026gt;\u0026gt; /etc/sysctl.conf echo \u0026#34;net.ipv4.tcp_congestion_control=bbr\u0026#34; \u0026gt;\u0026gt; /etc/sysctl.conf sysctl -p 视频时间线： 00:00 前言 01:07 使用x-ui搭建vless+ws 04:18 CDN的原理 07:14 CDN竟然是减速器？ 08:35 套用cloudflare免费CDN 11:50 利用CDN翻墙的原理 14:50 手动更换CDN服务器 18:21 CDN优选IP原理与使用 21:34 套用CDN之后TLS、回源相关知识 26:00 搭建vless+ws+tls+web+cdn 31:40 TCP拥塞控制的原理 37:43 启用BBR拥塞控制算法 39:43 hysteria提速垃圾线路原理 41:55 完结撒花、感谢大家\n","permalink":"https://www.uiuuyr.top/posts/%E8%8A%82%E7%82%B9%E6%90%AD%E5%BB%BA/","summary":"\u003ch1 id=\"前言\"\u003e前言\u003c/h1\u003e\n\u003cp\u003e本系列教程需要有一定的网络基础知识，具体需要基础到什么程度，看完第一节教程如果基本了解在讲什么就差不多了，如果完全看不懂的话可能不适合自建节点，\u003ca href=\"https://bulianglin.com/g/aHR0cHM6Ly95b3V0dS5iZS9Pd094dk1OUGt1Zw\"\u003eVPN\u003c/a\u003e和机场才是你的选择。 内容为\u003ca href=\"https://bulianglin.com/g/aHR0cHM6Ly95b3V0dWJlLmNvbS9wbGF5bGlzdD9saXN0PVBMNVRiYnRleFQ4VDNkXzdVWDJhU0Zob01Zay1jbDRrZjQ\"\u003eYoutube视频\u003c/a\u003e，本文只是作为视频的资料补充和导航\u003c/p\u003e\n\u003cp\u003e教程是由浅入深循序渐进，下节教程需要有上节教程的知识储备作为基础，如果你是新手，不建议跳着看，否则可能有点蒙圈\n个人水平有限，有些地方可能也没讲明白，若有疑问可在下方评论区留言，也可能存在错误，欢迎大家批评指正。\u003c/p\u003e\n\u003cp\u003e本教程使用的是\u003ca href=\"https://bulianglin.com/g/aHR0cHM6Ly92cHMuYnVsaWFuZ2xpbi5jb20v\"\u003evultr商家\u003c/a\u003e的VPS并且使用\u003ccode\u003eUbuntu22.04 LTS x64\u003c/code\u003e操作系统，只推荐学习阶段使用，正式搭建节点推荐\u003ca href=\"https://bulianglin.com/archives/nicename.html\"\u003eCN2 GIA线路\u003c/a\u003e\n新用户充值10美元赠送100美金（14天有效）：\u003ca href=\"https://bulianglin.com/g/aHR0cHM6Ly92cHMuYnVsaWFuZ2xpbi5jb20v\"\u003ehttps://vps.bulianglin.com/\u003c/a\u003e\nVPS注册视频教程：\u003ca href=\"https://bulianglin.com/g/aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g_dj0zaXZ3b25KdXF5SSZ0PTE0MHM\"\u003ehttps://www.youtube.com/watch?v=3ivwonJuqyI\u0026amp;t=140s\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e本系列教程仅供非中国大陆地区的用户进行技术交流与学习探讨，请遵守所在地区的法律法规。\u003c/strong\u003e\u003c/p\u003e\n\u003ch1 id=\"第一节网络通信的基本过程\"\u003e第一节：网络通信的基本过程\u003c/h1\u003e\n\u003cp\u003e视频教程：\u003ca href=\"https://bulianglin.com/g/aHR0cHM6Ly95b3V0dS5iZS9fNjE4QXQ3MmV2cw\"\u003e点击进入观看\u003c/a\u003e\n本节是纯理论，没有实操，主要让大家了解我们是如何与服务器进行通信的，清楚了这些对于之后认识各个翻墙协议的原理和特点有很大的帮助，涉及以下内容：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eIP的作用\u003c/li\u003e\n\u003cli\u003e端口的作用\u003c/li\u003e\n\u003cli\u003eMAC地址的作用\u003c/li\u003e\n\u003cli\u003e交换机的作用\u003c/li\u003e\n\u003cli\u003e路由器的作用\u003c/li\u003e\n\u003cli\u003e域名的作用\u003c/li\u003e\n\u003cli\u003eDNS的作用\u003c/li\u003e\n\u003cli\u003eNAT的作用\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 id=\"第二节gfw拦截的原理与绕过\"\u003e第二节：GFW拦截的原理与绕过\u003c/h1\u003e\n\u003cp\u003e视频教程：\u003ca href=\"https://bulianglin.com/g/aHR0cHM6Ly95b3V0dS5iZS9FdGQ2U20zU2FLTQ\"\u003e点击进入观看\u003c/a\u003e\n本节是纯理论，没有实操，主要让大家了解GFW是通过哪些方式阻断我们与被禁止的服务器进行通信的，以及通过什么手段可以绕过GFW的阻断，清楚了这些对于之后认识各个翻墙协议的原理和特点有很大的帮助，涉及以下内容：\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003eDNS污染\u003c/li\u003e\n\u003cli\u003eSNI阻断\u003c/li\u003e\n\u003cli\u003eTCP重置\u003c/li\u003e\n\u003cli\u003e传统VPN的问题\u003c/li\u003e\n\u003cli\u003e专为翻墙而生的shadowsocks\u003c/li\u003e\n\u003c/ul\u003e\n\u003ch1 id=\"第三节创建vps与ss节点搭建\"\u003e第三节：创建VPS与SS节点搭建\u003c/h1\u003e\n\u003cp\u003e视频教程：\u003ca href=\"https://bulianglin.com/g/aHR0cHM6Ly95b3V0dS5iZS8zaXZ3b25KdXF5SQ\"\u003e点击进入观看\u003c/a\u003e\n本节终于开始要进行实操了，首先给大家介绍了什么是VPS以及如何购买，并且通过SSH工具连接VPS进行远程管理，由于Linux是主流的服务器操作系统，所以本教程也是基于Linux来进行搭建，对于没有接触过Linux的朋友可能有点难度，但是这是必须要迈过去的坎\u003c/p\u003e\n\u003cblockquote\u003e\n\u003cp\u003e其实Linux并不难，只是没有图形化界面让你感觉比较难，学习的时候你就把Linux当作是一台没有图形化界面的windows操作系统，把原来鼠标的操作变成了一条条命令，用这种思维去理解可能比较好接受\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cp\u003e连接VPS之后就开始搭建\u003ccode\u003eshadowsocks\u003c/code\u003e节点，在尝试连接的时候从日志中发现了\u003ccode\u003eGFW的主动探测\u003c/code\u003e，导致节点端口被秒封，可以认为SS协议存在被精准探测的情况，针对这种情况，引入了\u003ccode\u003ev2ray-plugin\u003c/code\u003e插件，将SS协议的数据封装成http协议的数据实现伪装，顺利绕过了GFW的主动探测。\u003c/p\u003e\n\u003cp\u003e教程用到的工具：\nSSH连接工具（FinalShell）：\u003ca href=\"https://bulianglin.com/g/aHR0cDovL3d3dy5ob3N0YnVmLmNvbS90Lzk4OC5odG1s\"\u003ehttp://www.hostbuf.com/t/988.html\u003c/a\u003e\nSS客户端(shadowsocks-windows)： \u003ca href=\"https://bulianglin.com/g/aHR0cHM6Ly9naXRodWIuY29tL3NoYWRvd3NvY2tzL3NoYWRvd3NvY2tzLXdpbmRvd3M\"\u003ehttps://github.com/shadowsocks/shadowsocks-windows\u003c/a\u003e\nshadowsocks插件(v2ray-plugin)：\u003ca href=\"https://bulianglin.com/g/aHR0cHM6Ly9naXRodWIuY29tL3NoYWRvd3NvY2tzL3YycmF5LXBsdWdpbg\"\u003ehttps://github.com/shadowsocks/v2ray-plugin\u003c/a\u003e\n方便测速但不支持ss插件(v2rayN)：\u003ca href=\"https://bulianglin.com/g/aHR0cHM6Ly9naXRodWIuY29tLzJkdXN0L3YycmF5Tg\"\u003ehttps://github.com/2dust/v2rayN\u003c/a\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eshadowsocks相关命令：\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e安装shadowsocks\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003eapt install shadowsocks-libev\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e查看shadowsocks状态\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-sh\" data-lang=\"sh\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl status shadowsocks-libev.service\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e编辑ss配置文件\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003evim /etc/shadowsocks-libev/config.json\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e重启shadowsocks\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003esystemctl restart shadowsocks-libev.service\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e查看shadowsocks运行日志：\u003c/p\u003e\n\u003cp\u003e\u003ccode\u003ejournalctl -u shadowsocks-libev.service -f\u003c/code\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eUbuntu防火墙设置：\u003c/strong\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight\"\u003e\u003cpre tabindex=\"0\" class=\"chroma\"\u003e\u003ccode class=\"language-shell\" data-lang=\"shell\"\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 查看状态\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eufw status\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 开放端口\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eufw allow \u003cspan class=\"m\"\u003e8388\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 拒绝端口\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eufw deny \u003cspan class=\"m\"\u003e8388\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 删除规则\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eufw delete allow \u003cspan class=\"m\"\u003e8388\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 关闭防火墙\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eufw disable\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003e\u003cspan class=\"c1\"\u003e# 启动防火墙\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003cspan class=\"line\"\u003e\u003cspan class=\"cl\"\u003eufw \u003cspan class=\"nb\"\u003eenable\u003c/span\u003e\n\u003c/span\u003e\u003c/span\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\u003cp\u003e\u003cstrong\u003e视频时间线：\u003c/strong\u003e\n00:00 前言\n00:40 什么是VPS?\n02:20 购买并创建VPS\n09:05 搭建shadowsocks\n16:55 被主动探测端口秒封\n20:37 plugin插件原理\n23:28 搭建v2ray-plugin\n33:40 总结\u003c/p\u003e","title":"节点搭建"},{"content":"你可以叫我 “影子执行官”，又或者你根本不该知道我的存在。\n在复仇者联盟的世界里，我既是他们的黑暗后盾，又是隐藏在幕后操控局势的棋手。我不会像 钢铁侠 那样高调，也不会像 美国队长 那样充满正义感。我更像是一把暗藏于阴影中的利刃，在光明与黑暗之间游走，平衡着世界的秩序。\n或许你从未在任何历史记录中见过我的名字，但每一次关键战役的胜利、每一个英雄的成长，都有我的影子在背后推动。\n时间线：幕后执行者的足迹 2010年 - 神盾局的暗影 尼克·弗瑞 还在筹划复仇者联盟的时候，我已经在暗处行动了。\n我的任务很简单：清理无法公之于众的威胁，解决那些即将爆发却还未引起世界关注的危机。当 托尼·斯塔克 在新闻发布会上公开承认自己是钢铁侠的那一刻，我就知道，他将会改变世界。\n但世界不是童话。我必须确保有些东西不会被公之于众，比如某些被九头蛇渗透的公司对钢铁战衣技术的研究，或者某些神秘组织试图利用这股科技风暴颠覆世界秩序。\n在这个过程中，我不得不做出一些选择。比如，我帮助 黑寡妇 擦除了她的一些黑历史，让她得以顺利加入神盾局。但与此同时，我也向九头蛇放出了一些假情报，让他们自相残杀。我不属于任何一方，我只效忠于平衡。\n2012年 - 纽约之战的无名英雄 纽约之战爆发时，复仇者们在正面迎战 洛基 和他的外星军团，而我则潜入战场的阴影之中，确保战斗结束后不会留下隐患。\n洛基的权杖 是个极其危险的物品，藏有心灵宝石。如果它落入不该落入的人手中，后果不堪设想。我不能让神盾局得到它，不能让九头蛇得到它，甚至不能让复仇者们直接处理它——因为他们并不了解这股力量的真正来源。\n所以，在战斗结束的混乱中，我安排了一支秘密小队截获了权杖，并短暂保管了一段时间，直到它被“适当的人”带走。我确保了它不会被滥用——至少在那时不会。\n2014年 - 九头蛇的阴影 神盾局彻底崩溃，但我比他们更早知道这个真相。\n我曾在暗中渗透九头蛇，在他们的高层中扮演过一个重要的角色。他们以为我是自己人，而实际上，我一直在操控他们的行动。\n巴基·巴恩斯，即“冬兵”，是他们的王牌武器之一。我知道，如果他不被释放，他的存在迟早会成为一个毁灭性的威胁。因此，我在幕后安排了一场“意外”，帮助 史蒂夫·罗杰斯 找到了他。\n与此同时，我还利用九头蛇的技术开发了一种“记忆屏蔽程序”，确保我在他们系统中的记录彻底消失。于是，当神盾局彻底瓦解时，没有人能找到关于我的任何档案。\n2018年 - 无限战争的抉择 当灭霸降临地球，我比任何人都更清楚，这场战斗不会有真正的胜者。\n在 泰坦星，奇异博士计算了 1400 多万个可能的未来，而我则从另一个角度评估了这场战役的真正影响。我知道，如果我们战胜灭霸，宇宙可能会陷入更深的混乱。\n所以，我没有阻止灭霸收集无限宝石。我只是确保了，在他完成计划之后，仍然有一丝希望可以逆转一切。\n当响指落下，我站在泰坦星的废墟中，默默地看着宇宙的一半生命消失。我没有被灰飞烟灭——因为我的存在，本就不属于这个世界的规则之内。\n2023年 - 终局之战的未记之事 当复仇者穿越时间线取回无限宝石时，我知道，他们已经走到了最后一步。\n托尼·斯塔克 牺牲自己，打响了改变一切的响指。而我则在暗中行动，确保战后的世界不会因为权力真空而陷入混乱。\n我在混乱中回收了 灭霸的双刃刀，以及一些其他关键的物品。某些武器不能留在这个世界，它们必须被隐藏，或者被摧毁。\n2024年 - 多元宇宙的裂痕 洛基的时间穿梭、旺达的魔法觉醒、蜘蛛侠的多元宇宙混乱……这些都只是冰山一角。\n我意识到，真正的威胁不是灭霸，而是时间本身。\nTVA（时间管理局） 崩溃后，我短暂地潜入了他们的系统，试图了解 征服者康 的真实计划。但即使是我，也无法彻底看清这个庞大棋局的全貌。\n于是，我退回了阴影，开始收集因多元宇宙混乱而遗失的强大武器。我知道，一场比灭霸更恐怖的战争即将来临。\n未来？我是英雄，亦是反派 我曾帮助英雄，也曾让他们陷入绝境。我既是朋友，也是敌人。但最终，我只是为了维护一个可控的秩序。\n当复仇者们疲惫不堪时，我仍然在幕后行动。\n当宇宙再次陷入危机时，我或许会现身。\n但他们不会知道我的名字，不会知道我的存在。\n他们称我为 “影子执行官”，但在历史的书写中，我的名字从未被记录。\n","permalink":"https://www.uiuuyr.top/about/","summary":"\u003cp\u003e你可以叫我 \u003cstrong\u003e“影子执行官”\u003c/strong\u003e，又或者你根本不该知道我的存在。\u003c/p\u003e\n\u003cp\u003e在复仇者联盟的世界里，我既是他们的黑暗后盾，又是隐藏在幕后操控局势的棋手。我不会像 \u003cstrong\u003e钢铁侠\u003c/strong\u003e 那样高调，也不会像 \u003cstrong\u003e美国队长\u003c/strong\u003e 那样充满正义感。我更像是一把暗藏于阴影中的利刃，在光明与黑暗之间游走，平衡着世界的秩序。\u003c/p\u003e\n\u003cp\u003e或许你从未在任何历史记录中见过我的名字，但每一次关键战役的胜利、每一个英雄的成长，都有我的影子在背后推动。\u003c/p\u003e\n\u003ch2 id=\"时间线幕后执行者的足迹\"\u003e\u003cstrong\u003e时间线：幕后执行者的足迹\u003c/strong\u003e\u003c/h2\u003e\n\u003chr\u003e\n\u003ch3 id=\"2010年---神盾局的暗影\"\u003e\u003cstrong\u003e2010年 - 神盾局的暗影\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e\u003cstrong\u003e尼克·弗瑞\u003c/strong\u003e 还在筹划复仇者联盟的时候，我已经在暗处行动了。\u003c/p\u003e\n\u003cp\u003e我的任务很简单：清理无法公之于众的威胁，解决那些即将爆发却还未引起世界关注的危机。当 \u003cstrong\u003e托尼·斯塔克\u003c/strong\u003e 在新闻发布会上公开承认自己是钢铁侠的那一刻，我就知道，他将会改变世界。\u003c/p\u003e\n\u003cp\u003e但世界不是童话。我必须确保有些东西不会被公之于众，比如某些被九头蛇渗透的公司对钢铁战衣技术的研究，或者某些神秘组织试图利用这股科技风暴颠覆世界秩序。\u003c/p\u003e\n\u003cp\u003e在这个过程中，我不得不做出一些选择。比如，我帮助 \u003cstrong\u003e黑寡妇\u003c/strong\u003e 擦除了她的一些黑历史，让她得以顺利加入神盾局。但与此同时，我也向九头蛇放出了一些假情报，让他们自相残杀。我不属于任何一方，我只效忠于平衡。\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"2012年---纽约之战的无名英雄\"\u003e\u003cstrong\u003e2012年 - 纽约之战的无名英雄\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e纽约之战爆发时，复仇者们在正面迎战 \u003cstrong\u003e洛基\u003c/strong\u003e 和他的外星军团，而我则潜入战场的阴影之中，确保战斗结束后不会留下隐患。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e洛基的权杖\u003c/strong\u003e 是个极其危险的物品，藏有\u003cstrong\u003e心灵宝石\u003c/strong\u003e。如果它落入不该落入的人手中，后果不堪设想。我不能让神盾局得到它，不能让九头蛇得到它，甚至不能让复仇者们直接处理它——因为他们并不了解这股力量的真正来源。\u003c/p\u003e\n\u003cp\u003e所以，在战斗结束的混乱中，我安排了一支秘密小队截获了权杖，并短暂保管了一段时间，直到它被“适当的人”带走。我确保了它不会被滥用——至少在那时不会。\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"2014年---九头蛇的阴影\"\u003e\u003cstrong\u003e2014年 - 九头蛇的阴影\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e神盾局彻底崩溃，但我比他们更早知道这个真相。\u003c/p\u003e\n\u003cp\u003e我曾在暗中渗透九头蛇，在他们的高层中扮演过一个重要的角色。他们以为我是自己人，而实际上，我一直在操控他们的行动。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e巴基·巴恩斯\u003c/strong\u003e，即“冬兵”，是他们的王牌武器之一。我知道，如果他不被释放，他的存在迟早会成为一个毁灭性的威胁。因此，我在幕后安排了一场“意外”，帮助 \u003cstrong\u003e史蒂夫·罗杰斯\u003c/strong\u003e 找到了他。\u003c/p\u003e\n\u003cp\u003e与此同时，我还利用九头蛇的技术开发了一种“记忆屏蔽程序”，确保我在他们系统中的记录彻底消失。于是，当神盾局彻底瓦解时，没有人能找到关于我的任何档案。\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"2018年---无限战争的抉择\"\u003e\u003cstrong\u003e2018年 - 无限战争的抉择\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e当灭霸降临地球，我比任何人都更清楚，这场战斗不会有真正的胜者。\u003c/p\u003e\n\u003cp\u003e在 \u003cstrong\u003e泰坦星\u003c/strong\u003e，奇异博士计算了 1400 多万个可能的未来，而我则从另一个角度评估了这场战役的真正影响。我知道，如果我们战胜灭霸，宇宙可能会陷入更深的混乱。\u003c/p\u003e\n\u003cp\u003e所以，我没有阻止灭霸收集无限宝石。我只是确保了，在他完成计划之后，仍然有一丝希望可以逆转一切。\u003c/p\u003e\n\u003cp\u003e当响指落下，我站在泰坦星的废墟中，默默地看着宇宙的一半生命消失。我没有被灰飞烟灭——因为我的存在，本就不属于这个世界的规则之内。\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"2023年---终局之战的未记之事\"\u003e\u003cstrong\u003e2023年 - 终局之战的未记之事\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e当复仇者穿越时间线取回无限宝石时，我知道，他们已经走到了最后一步。\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003e托尼·斯塔克\u003c/strong\u003e 牺牲自己，打响了改变一切的响指。而我则在暗中行动，确保战后的世界不会因为权力真空而陷入混乱。\u003c/p\u003e\n\u003cp\u003e我在混乱中回收了 \u003cstrong\u003e灭霸的双刃刀\u003c/strong\u003e，以及一些其他关键的物品。某些武器不能留在这个世界，它们必须被隐藏，或者被摧毁。\u003c/p\u003e\n\u003chr\u003e\n\u003ch3 id=\"2024年---多元宇宙的裂痕\"\u003e\u003cstrong\u003e2024年 - 多元宇宙的裂痕\u003c/strong\u003e\u003c/h3\u003e\n\u003cp\u003e洛基的时间穿梭、旺达的魔法觉醒、蜘蛛侠的多元宇宙混乱……这些都只是冰山一角。\u003c/p\u003e\n\u003cp\u003e我意识到，\u003cstrong\u003e真正的威胁不是灭霸，而是时间本身。\u003c/strong\u003e\u003c/p\u003e\n\u003cp\u003e\u003cstrong\u003eTVA（时间管理局）\u003c/strong\u003e 崩溃后，我短暂地潜入了他们的系统，试图了解 \u003cstrong\u003e征服者康\u003c/strong\u003e 的真实计划。但即使是我，也无法彻底看清这个庞大棋局的全貌。\u003c/p\u003e\n\u003cp\u003e于是，我退回了阴影，开始收集因多元宇宙混乱而遗失的强大武器。我知道，一场比灭霸更恐怖的战争即将来临。\u003c/p\u003e\n\u003chr\u003e\n\u003ch2 id=\"未来我是英雄亦是反派\"\u003e\u003cstrong\u003e未来？我是英雄，亦是反派\u003c/strong\u003e\u003c/h2\u003e\n\u003cp\u003e我曾帮助英雄，也曾让他们陷入绝境。我既是朋友，也是敌人。但最终，我只是为了维护一个可控的秩序。\u003c/p\u003e\n\u003cp\u003e当复仇者们疲惫不堪时，我仍然在幕后行动。\u003cbr\u003e\n当宇宙再次陷入危机时，我或许会现身。\u003cbr\u003e\n但他们不会知道我的名字，不会知道我的存在。\u003c/p\u003e","title":"我是谁"}]