问题如下图如何断点重续打开\venv\Lib\site-packages\labelImg\labelImg.py 文件在labelimg文件1252行 self.default_save_dir = dir_path 下面加入以下代码 if dir_path is not None and len(dir_path) > 1: self.default_save_dir = dir_path # 加入以下代码 files = os.listdir(dir_path) # 判断是否存在名为 class.txt 的文件 if "classes.txt" in files: self.label_hist.clear() # 不清空继续打开其他标注文件不会删除原来的 with open(dir_path + "/classes.txt", 'r') as f: for line in f.readlines(): line = line.strip() if self.label_hist is None: self.label_hist = [line] else: self.label_hist.append(line) 加入后重新按照 Open dir->Change Save Dir顺序打开文件,即可重新读取Change Save Dir下的classes标注信息使用前建议备份一下 目前我用是没啥问题 不知道有啥隐藏bug。os:因为这个问题导致我标了一天的信息全被覆盖了。干!
Linux多功能测速脚本 | Multi-functional speedtest script
多功能测速脚本原文：https://github.com/i-abc/Speedtest兼容 speedtest-cli、bim-core、speedtest-go、librespeed-cli、iperf3。脚本自带丰富的测试项目任君挑选，使用者还能自定义想要的测试项目。目录：👉 效果展示、使用方法、基本功能、进阶功能效果展示大陆三网+教育网 IPv4 多线程测速 (点击展开或收起)✈️ 测试服务器：Azure 东京------------------------ 多功能 自更新 测速脚本 ------------------------ Version : v2023-09-07 Usage : bash <(curl -sL bash.icu/speedtest) GitHub : https://github.com/i-abc/speedtest ------------------------------------------------------------------------ 大陆三网+教育网 IPv4 多线程测速，v2023-09-07 ------------------------------------------------------------------------ 测速节点 下载/Mbps 上传/Mbps 延迟/ms 抖动/ms 最近的测速点 8201.26 Mbps 883.80 Mbps 1.97 ms 0.09 ms 电信 天津 3616.50 Mbps 961.05 Mbps 68.72 ms 0.22 ms 电信 甘肃兰州 13.85 Mbps 759.77 Mbps 63.59 ms 2.06 ms 电信 四川成都 11.87 Mbps 812.11 Mbps 163.53 ms 10.54 ms 电信 安徽合肥 5G 3807.94 Mbps 961.02 Mbps 38.43 ms 0.46 ms 电信 江苏镇江 5G 4863.40 Mbps 960.81 Mbps 36.36 ms 0.60 ms 电信 湖南长沙 5G 2807.66 Mbps 952.72 Mbps 67.41 ms 0.92 ms 电信 江苏连云港 5G 4310.71 Mbps 44.88 Mbps 34.83 ms 0.23 ms 移动 北京 2632.46 Mbps 955.66 Mbps 122.76 ms 0.17 ms 移动 甘肃兰州 6.41 Mbps 932.02 Mbps 136.94 ms 8.23 ms 移动 广东深圳 11.13 Mbps 653.17 Mbps 187.76 ms 154.31 ms 移动 浙江杭州 5G 2894.64 Mbps 705.73 Mbps 85.02 ms 0.12 ms 移动 陕西西安 5G 2685.48 Mbps 957.27 Mbps 133.28 ms 0.30 ms 联通 江苏无锡 3876.50 Mbps 960.85 Mbps 36.55 ms 0.19 ms 联通 四川成都 25.62 Mbps 355.90 Mbps 62.15 ms 0.30 ms 联通 福建福州 5501.38 Mbps 失败 53.53 ms 0.19 ms 联通 辽宁沈阳 2323.80 Mbps 581.46 Mbps 66.04 ms 0.80 ms 联通 海南三亚 4729.78 Mbps 923.30 Mbps 76.86 ms 0.05 ms 联通 湖南长沙 5G 141.74 Mbps 960.81 Mbps 76.18 ms 1.33 ms 联通 河南郑州 5G 39.73 Mbps 960.70 Mbps 51.34 ms 0.29 ms 广电 重庆 1.88 Mbps 23.92 Mbps 87.10 ms 0.45 ms 教育网 江苏苏州 1.07 Mbps 19.53 Mbps 147.53 ms 209.28 ms 教育网 北京 220.15 Mbps 366.71 Mbps 85.82 ms 0.02 ms 教育网 上海 241.95 Mbps 262.00 Mbps 197.73 ms 0.79 ms 教育网 江苏南京 619.21 Mbps 502.79 Mbps 110.64 ms 0.39 ms 教育网 安徽合肥 失败 635.71 Mbps 106.36 ms 1.16 ms ------------------------------------------------------------------------ 当前时间：2023-09-08 09:30:48 CST 北京时间: 2023-09-08 09:30:48+08:00 ------------------------------------------------------------------------大陆三网+教育网 IPv4 单线程测速✈️ 测试服务器：Azure 东京------------------------ 多功能 自更新 测速脚本 ------------------------ Version : v2023-09-07 Usage : bash <(curl -sL bash.icu/speedtest) GitHub : https://github.com/i-abc/speedtest ------------------------------------------------------------------------ 大陆三网+教育网 IPv4 单线程测速，v2023-09-07 ------------------------------------------------------------------------ 测速节点 下载/Mbps 上传/Mbps 延迟/ms 抖动/ms 电信 天津 386.20 Mbps 443.30 Mbps 51.80 ms 4.30 ms 电信 甘肃兰州 2.40 Mbps 239.10 Mbps 66.40 ms 41.00 ms 电信 四川成都 0.30 Mbps 6.90 Mbps 125.70 ms 252.40 ms 电信 湖南长沙 5G 304.00 Mbps 307.80 Mbps 58.00 ms 7.20 ms 电信 安徽合肥 5G 334.40 Mbps 628.40 Mbps 39.50 ms 0.50 ms 电信 浙江宁波 5G 235.60 Mbps 581.30 Mbps 37.70 ms 7.50 ms 电信 江苏镇江 5G 632.40 Mbps 662.10 Mbps 36.60 ms 7.50 ms 电信 江苏连云港 5G 520.50 Mbps 0.80 Mbps 35.00 ms 1.70 ms 移动 北京 609.30 Mbps 244.90 Mbps 120.00 ms 2.80 ms 移动 甘肃兰州 失败 443.50 Mbps 123.50 ms 31.20 ms 移动 广东深圳 0.50 Mbps 184.90 Mbps 93.20 ms 2.90 ms 移动 浙江杭州 5G 243.60 Mbps 183.40 Mbps 83.20 ms 2.00 ms 移动 陕西西安 5G 706.60 Mbps 99.40 Mbps 106.00 ms 8.10 ms 联通 江苏无锡 失败 失败 35.60 ms 23.20 ms 联通 四川成都 8.10 Mbps 5.70 Mbps 62.70 ms 1.90 ms 联通 福建福州 347.80 Mbps 284.70 Mbps 56.20 ms 12.50 ms 联通 辽宁沈阳 162.50 Mbps 211.50 Mbps 65.70 ms 10.30 ms 联通 海南三亚 15.00 Mbps 335.40 Mbps 74.40 ms 17.30 ms 联通 湖南长沙 5G 2.30 Mbps 461.10 Mbps 49.00 ms 3.90 ms 联通 河南郑州 5G 19.20 Mbps 940.60 Mbps 49.10 ms 8.10 ms 广电 重庆 0.60 Mbps 31.50 Mbps 86.10 ms 1.20 ms 教育网 江苏苏州 0.30 Mbps 1.00 Mbps 140.50 ms 37.10 ms 电信 宿迁 自建 跳过 443.00 Mbps 跳过 跳过 ------------------------------------------------------------------------ 当前时间：2023-09-08 09:15:11 CST 北京时间: 2023-09-08 09:15:11+08:00 ------------------------------------------------------------------------各大洲 IPV4 八线程测速✈️ 测试服务器：Hetzner 德国------------------------ 多功能 自更新 测速脚本 ------------------------ Version : v2023-09-08 Usage : bash <(curl -sL bash.icu/speedtest) GitHub : https://github.com/i-abc/speedtest ------------------------------------------------------------------------ 各大洲 IPv4 八线程测速，v2023-09-08 ------------------------------------------------------------------------ 测速节点 下载/Mbps 上传/Mbps 延迟/ms 抖动/ms 美国 纽约 1770.00 Mbps 1975.00 Mbps 跳过 跳过 美国 阿什本 934.00 Mbps 237.00 Mbps 跳过 跳过 美国 查尔斯顿 1682.00 Mbps 1665.00 Mbps 跳过 跳过 德国 柏林 13530.00 Mbps 14451.00 Mbps 跳过 跳过 瑞士 温特图尔 11221.00 Mbps 11167.00 Mbps 跳过 跳过 丹麦 哥本哈根 6578.00 Mbps 3671.00 Mbps 跳过 跳过 瑞士 沙夫豪森 9301.00 Mbps 8279.00 Mbps 跳过 跳过 荷兰 阿姆斯特丹 9271.00 Mbps 9257.00 Mbps 跳过 跳过 印度 苏里 9330.00 Mbps 9314.00 Mbps 跳过 跳过 亚洲 新加坡 976.00 Mbps 3.44 Mbps 跳过 跳过 亚洲 乌兹别克斯坦 1942.00 Mbps 2055.00 Mbps 跳过 跳过 大洋洲 澳大利亚 164.00 Mbps 398.00 Mbps 跳过 跳过 大洋洲 新喀里多尼亚 164.00 Mbps 132.00 Mbps 跳过 跳过 非洲 突尼斯 912.00 Mbps 827.00 Mbps 跳过 跳过 非洲 毛里求斯 751.00 Mbps 36.40 Mbps 跳过 跳过 ------------------------------------------------------------------------ 当前时间：2023-09-08 14:29:19 UTC 北京时间: 2023-09-08 22:29:19+08:00 ------------------------------------------------------------------------IPV4 UDP 可用性测试✈️ 测试服务器：Azure 东京------------------------ 多功能 自更新 测速脚本 ------------------------ Version : v2023-09-04 Usage : bash <(curl -sL bash.icu/speedtest) GitHub : https://github.com/i-abc/speedtest ------------------------------------------------------------------------ UDP IPv4 单线程测速，v2023-09-04 机房UDP限速，结果仅代表UDP是否可用 ------------------------------------------------------------------------ 测速节点 下载/Mbps 上传/Mbps 延迟/ms 抖动/ms 联通/电信 宿迁 自建 1.05 Mbps 1.05 Mbps 跳过 跳过 美国 阿什本 1.05 Mbps 1.05 Mbps 跳过 跳过 美国 亚特兰大 1.05 Mbps 1.05 Mbps 跳过 跳过 美国 查尔斯顿 1.04 Mbps 1.05 Mbps 跳过 跳过 ------------------------------------------------------------------------ 当前时间：2023-09-05 20:19:26 CST 北京时间: 2023-09-05 20:19:26+08:00 ------------------------------------------------------------------------大陆教育网 IPv4 多线程测速✈️ 测试服务器：Azure 东京------------------------ 多功能 自更新 测速脚本 ------------------------ Version : v2023-09-04 Usage : bash <(curl -sL bash.icu/speedtest) GitHub : https://github.com/i-abc/speedtest ------------------------------------------------------------------------ 大陆教育网 IPv4 测速，v2023-09-05 ------------------------------------------------------------------------ 测速节点 下载/Mbps 上传/Mbps 延迟/ms 抖动/ms 教育网 北京 254.49 Mbps 374.56 Mbps 81.18 ms 0.27 ms 教育网 上海 245.49 Mbps 273.71 Mbps 200.36 ms 4.05 ms 教育网 江苏南京 630.06 Mbps 515.28 Mbps 112.09 ms 0.12 ms 教育网 安徽合肥 0.00 Mbps 641.16 Mbps 105.18 ms 0.37 ms ------------------------------------------------------------------------ 当前时间：2023-09-06 11:21:18 CST 北京时间: 2023-09-06 11:21:18+08:00 ------------------------------------------------------------------------大陆教育网 IPv6 多线程测速✈️ 测试服务器：Hetzner 德国------------------------ 多功能 自更新 测速脚本 ------------------------ Version : v2023-09-08 Usage : bash <(curl -sL bash.icu/speedtest) GitHub : https://github.com/i-abc/speedtest ------------------------------------------------------------------------ 大陆教育网 IPv6 测速，v2023-09-08 ------------------------------------------------------------------------ 测速节点 下载/Mbps 上传/Mbps 延迟/ms 抖动/ms 教育网 上海 220.51 Mbps 217.85 Mbps 257.27 ms 0.29 ms 教育网 江苏南京 210.13 Mbps 156.00 Mbps 260.73 ms 0.46 ms 教育网 安徽合肥 失败 229.02 Mbps 255.55 ms 1.09 ms 教育网 辽宁沈阳 失败 8.89 Mbps 241.00 ms 失败 ------------------------------------------------------------------------ 当前时间：2023-09-08 14:36:12 UTC 北京时间: 2023-09-08 22:36:12+08:00 ------------------------------------------------------------------------使用方法bash <(curl -sL bash.icu/speedtest)或bash <(curl -sL https://raw.githubusercontent.com/i-abc/Speedtest/main/speedtest.sh)基本功能脚本自带丰富的测试项目：自定义测速节点大陆三网+教育网 IPv4 多线程测速大陆三网+教育网 IPv4 单线程测速大陆教育网 IPv6 多线程测速各大洲 IPV4 八线程测速各大洲 IPV6 八线程测速IPV4 UDP 可用测试测试大陆教育网 IPv4 多线程测速大陆电信 IPv4 多线程测速大陆电信 IPv4 单线程测速大陆移动 IPv4 多线程测速大陆移动 IPv4 单线程测速大陆联通 IPv4 多线程测速大陆联通 IPv4 单线程测速各大洲 IPV4 32线程测速各大洲 IPV4 单线程测速各大洲 IPV6 32线程测速各大洲 IPV6 单线程测速持续更新中……进阶功能自定义自己想要的测试项目，很简单的。我们会有两张表，节点表 (必需)、节点集合表 (非必需)。节点表 (必需)节点表分为四个区域，分别是提示语区、测试类型区、节点名区、测试参数区；后三区组成三列，彼此之间用英文逗号 , 分隔，如下图所示：示例节点表 模板示例，v2023-09-08 speedtest-cli ,联通 郑州 cli ,-o 5gtest.shangdu.com bim-core ,联通 郑州 bimc ,http://5gtest.shangdu.com:8080/download http://5gtest.shangdu.com:8080/upload speedtest-go ,联通 郑州 go ,--custom-url http://5gtest.shangdu.com:8080/speedtest/upload.php --ping-mode http speedtest-go ,联通 郑州 八线程 ,--custom-url http://5gtest.shangdu.com:8080/speedtest/upload.php --ping-mode http -t 8 speedtest-go ,联通 郑州 只测上传 ,--custom-url http://5gtest.shangdu.com:8080/speedtest/upload.php --ping-mode http --no-download librespeed-cli,教育 南京 ,--server-json https://jihulab.com/i-abc/speedtest/-/raw/node/china-education.json --server 1 --no-icmp librespeed-cli,教育 南京 只测上传 ,--server-json https://jihulab.com/i-abc/speedtest/-/raw/node/china-education.json --server 1 --no-icmp --no-download iperf3 ,联通 宿迁 只测上传 ,-c 103.239.244.210 -p 22222 iperf3 ,联通 宿迁 只测下载 ,-c 103.239.244.210 -p 22222 -R iperf3 ,联通 宿迁 八线程 ,-c 103.239.244.210 -p 22222 -P 8 iperf3 ,联通 宿迁 测UDP ,-c 103.239.244.210 -p 22222 -u iperf3 ,联通 宿迁 测双向 ,-c 103.239.244.210 -p 22222 --up-and-down1区：提示语区 (可选)提示语位于节点表开头，可以在这里写上任何话，比如使用说明、备注、自家广告等，当然也可以不写。3区：节点名区显而易见，这里就是写对应节点的名字。由于中英文字符编码很难处理，所以如果想要输出美观还得麻烦大家敲空格对齐，当然不对齐对测试无影响。提示语区、节点名区会直接反映到输出，它们在输出、节点表之间的关系如下图所示：2区：测试类型区我们有五种类型，分别是 speedtest-cli、bim-core、speedtest-go、librespeed-cli、iperf3，选一种即可，每种都有不同的特点，具体说明请往下看。这部分加空格对齐不是必须的，不加对输出无任何影响，当然像我一样的强迫症可以加空格对齐。4区：测试参数区我们脚本兼容 speedtest-cli、bim-core、speedtest-go、librespeed-cli、iperf3，我挑选了部分对测试有用的参数应用到了脚本里，大家可以按需使用。类型测速点提供商只单向测速指定IPv6测速单连接测速UDP测试不使用 ICMP Ping指定测试时长speedtest-clispeedtest.net❌❌❌❌❌❌bim-corespeedtest.net❌✔️✔️❌❌❌speedtest-gospeedtest.net✔️❌✔️❌✔️❌librespeed-cli公共、自建✔️✔️❌❌✔️✔️iperf3公共、自建✔️✔️✔️✔️❌✔️使用 speedtest.net 时，多连接测速推荐 speedtest-cli、单连接测速推荐 bim-core。1️⃣ speedtest-clispeedtest-cli：speedtest.net 官方 CLI，功能单一。参数作用示例-s value通过 id 指定节点-s 36646-o value通过域名指定节点-o 5gtest.shangdu.com-s 和 -o 二选一，-o 后面参数为纯域名，不含 http(s)、端口号；推荐 -o。节点 id、域名可在 https://www.speedtest.net/api/ios-config.php 查阅。例如：<server url="http://5gtest.shangdu.com:8080/speedtest/upload.php" lat="34.3287" lon="109.0337" name="Zhengzhou" sponsor="China Unicom HeNan 5G" id="36646" />，则 id 为 36646，域名为 5gtest.shangdu.com。2️⃣ bim-corebim-core：针对 speedtest.net 开发的第三方，功能较多，能实现单线程、指定 IPv6 测速。参数作用示例download_url节点的下载链接http://5gtest.shangdu.com:8080/downloadupload_url节点的上传链接http://5gtest.shangdu.com:8080/upload-m启用八线程测速-m-6仅使用 IPv6-6download_url 和 upload_url 两者都要，且 download_url 在前、upload_url 在后，含 http(s)、端口、分别以 /download、/upload 结尾。节点链接可在 https://www.speedtest.net/api/ios-config.php 查阅。例如：<server url="http://5gtest.shangdu.com:8080/speedtest/upload.php" lat="34.3287" lon="109.0337" name="Zhengzhou" sponsor="China Unicom HeNan 5G" id="36646" />，则 download_url 为 http://5gtest.shangdu.com:8080/download，则 upload_url 为 http://5gtest.shangdu.com:8080/upload。3️⃣ speedtest-gospeedtest-go：针对 speedtest.net 开发的第三方，功能较多，能实现指定线程、禁用某方向测速。参数作用示例-s value通过 id 指定节点-s 36646--custom-url value通过链接指定节点--custom-url http://5gtest.shangdu.com:8080/speedtest/upload.php-t value设置并发连接数-t 8-m启用多服务器模式-m--no-download禁用下载测试--no-download--no-upload禁用上传测试--no-upload--ping-mode value选择一种 Ping 的方法--ping-mode http-s 和 --custom-url 二选一，--custom-url 后面参数为完整链接，含 http(s)、端口、以 /upload.php 结尾；推荐 --custom-url。--ping-mode http 推荐加上。节点 id、链接可在 https://www.speedtest.net/api/ios-config.php 查阅。例如：<server url="http://5gtest.shangdu.com:8080/speedtest/upload.php" lat="34.3287" lon="109.0337" name="Zhengzhou" sponsor="China Unicom HeNan 5G" id="36646" />，则 id 为 36646，链接为 http://5gtest.shangdu.com:8080/speedtest/upload.php。4️⃣ librespeed-clilibrespeed-cli参数作用示例--server-json value远程 JSON 的服务端列表--server-json https://jihulab.com/i-abc/speedtest/-/raw/node/china-education.json--local-json value本地 JSON 的服务端列表--local-json /root/librespeed.json--server value通过 JSON 中的 ID 指定服务端--server 1-4仅使用 IPv4 (默认 false)-4-6仅使用 IPv6 (默认 false)-6--no-download禁用下载测试 (默认 false)--no-download--no-upload禁用上传测试 (默认 false)--no-upload--no-icmp不使用 ICMP Ping。ICMP 在 Linux 下工作不稳定 (默认 false)--no-icmp--duration测试的持续时间 (秒) (默认 15)--duration 20--no-icmp 推荐加上。现成的、优质的 librespeed 服务端较少，而且需要自己写服务端列表 JSON，JSON 写法参照 官方；如果是个人搭建测速、个人使用，推荐 iperf3。5️⃣ iperf3iperf3参数作用示例-c ip/host指定服务端-c 103.239.244.210-p value指定服务端端口-p 22222-P value设置并发连接数-P 8-t value测试的持续时间 (秒) (默认 10)-t 20-O value前 N 秒的数据不计入最终结果-O 3-R反向模式，服务器发送、客户端接收-R-4仅使用 IPv4-4-6仅使用 IPv6-6-uUDP测试-u--up-and-down双向测试 (自创选项)--up-and-down当服务端端口为默认的 5201 时，-p 可不加；-p 除了 -p 22222 指定一个端口，还能 -p 5200-5209 指定一个范围内的端口。iperf3 默认是客户端发送、服务端接收，也就是测上传；想测下载可加 -R 开启反向模式；但 iperf3 只支持单向，所以脚本里自创了 --up-and-down 选项，加上后可测双向；--up-and-down 与 -R 二选一，且 --up-and-down 在本脚本以外的地方不可用，非官方选项。现成的、优质的 iperf3 服务端很多，可在 iPerf3 Server List 查阅；自建 iperf3 服务端也简单，用包管理器就行了。节点集合表 (非必需)当你有很多节点表时可以组一个节点表合集，如下图所示，当然这不是必需的。示例1. 节点示例 /root/GitHub/speedtest/node-template-1.txt 2. 示例1 /root/GitHub/speedtest/node-template-01.txt 3. 示例2 /root/GitHub/speedtest/node-template-02.txt每两行为一组，每组中的第一行以序号加英文点 . 开头，第二行为节点表链接，链接可为远程 http 或本地绝对路径。节点集合表与输出之间的关系如下图所示：使用自定义的表我们现在有了节点表、节点集合表，那么该如何使用呢？只需选择时输入序号 0，然后填写链接或本地绝对路径即可；链接为节点表就立即开始测试，链接为节点集合表就还会出现选择节点的提示。
宝塔面板Cloudreve+Aria2配置离线下载原文链接：https://www.daniao.org/13249.htmlCloudreve安装好后，如果不配置一个离线下载，感觉没有灵魂，这篇文章就来说说宝塔面板安装好Cloudreve后，在安装一个Aria2，这样搭配用来实现离线下载。Aria2 是目前最强大的全能型下载工具，支持各种协议的下载，常用做离线下载的服务端。而Cloudreve网盘系统自带了离线下载功能，所以只需要在安装好Cloudreve的服务器上搭建好Aria2 ，Cloudreve就会启用Aria2离线下载。废话不多说了，围观吧~~~1. 简介项目：https://github.com/P3TERX/aria2.sh2. 准备要启动Aria2的离线下载，你需要在和安装了Cloudreve的同一台服务器上运行启动。宝塔面板安装好Cloudreve安装教程设置存储3. 部署这篇文章主要是配置Aria2的离线下载，具体安装设置Cloudreve不在本教程的讲述的范围内，具体如何安装Cloudreve请看上面贴出的教程链接。Aria2 一键安装，系统要求CentOS 6+ / Debian 6+ / Ubuntu 14.04+，以 Debian 为例子，安装命令如下：为了确保能正常使用，请先安装基础组件wget、curl、ca-certificates，以 Debian/centos为例子：apt install wget curl ca-certificates #debian yum install wget curl ca-certificates #centos下载脚本wget -N git.io/aria2.sh && chmod +x aria2.sh运行脚本./aria2.sh选择你要执行的选项，额，当然是选择安装了。Aria2 一键安装管理脚本 增强版 [v2.7.4] by P3TERX.COM 0. 升级脚本 ——————————————————————— 1. 安装 Aria2 2. 更新 Aria2 3. 卸载 Aria2 ——————————————————————— 4. 启动 Aria2 5. 停止 Aria2 6. 重启 Aria2 ——————————————————————— 7. 修改 配置 8. 查看 配置 9. 查看 日志 10. 清空 日志 ——————————————————————— 11. 手动更新 BT-Tracker 12. 自动更新 BT-Tracker ——————————————————————— Aria2 状态: 已安装| 已启动 自动更新 BT-Tracker: 已开启 请输入数字 [0-12]:安装完成后，Aria2 一键安装管理脚本会显示你的配置信息，把这些信息记下来。4. 简单使用Aria2 默认已经自带了Aria2NG了，打开：http://ariang.js.org/#xxxx那一串地址，就可以进入Aria2 离线下载界面了。注意，如果显示一直不能连接，在宝塔安全放行6800端口，就可以成功了连接~可以添加一个下载任务，就能看到Aria2 离线下载进度了。Aria2 离线下载最大的速度取决你的VPS主机的带宽，主机商不会让你长期占满带宽。所以buyvm，contabo这些大硬盘主机上的货源开始紧俏了。Aria2 基本操作命令启动：/etc/init.d/aria2 start|service aria2 start 停止：/etc/init.d/aria2 stop|service aria2 stop 重启：/etc/init.d/aria2 restart|service aria2 restart 查看状态：/etc/init.d/aria2 status|service aria2 status 配置文件路径：/root/.aria2c/aria2.conf（配置文件有中文注释，若语言设置有问题会导致中文乱码） 默认下载目录：/root/downloads RPC 密钥：随机生成，可使用选项7. 修改 配置文件自定义5. Cloudreve离线下载配置本文的重点来了，就是配置Cloudreve离线下载配置。还没有搭建的童鞋，参考上文搭建和配置。进入到Cloudreve网盘系统离线下载参数配置当中，直接开始配置吧。将Aria2 一键安装管理脚本生成的配置信息填写进去，填写好后，测试下链接，一般都是没有问题的。如下图：注意：RPC 服务器地址，Aria2 RPC 服务器的地址，一般可填写为http://127.0.0.1:6800/。其中6800为上文 Aria2 配置文件中指定的监听端口。您可以使用 WebSocket 通信，此处填写为ws://127.0.0.1:6800/ 。你需要在安全中放行这个端口~RPC Secret，安装好Aria2 后默认会给出 RPC Secret临时下载目录，Cloudreve 会指定 Aria2 将文件下载到此目录中，下载完成后 Cloudreve 会复制到指定的存储策略，并删除文件。此目录必须为绝对路径，否则 Cloudreve 在任务下载完成后会找不到文件。Windows 下指定的绝对路径应该携带盘符，比如D:\www\downloads。Aria2默认的下载目录可以修改。状态刷新间隔（秒）指定针对每一个任务，Cloudreve 向 Aria2 轮询更新任务状态的间隔。用户再前台看到的任务进度不会实时更新，而是根据这里设定的间隔自动刷新。
SCVTC_教务系统系统课程提醒自动化程序
本项目已上传至GitHub，详见：GitHub下文摘自README：SCVTC_教务系统课程提醒自动化程序项目简介本项目基于python自动化程序实现SCVTC_教务系统的课程提醒功能，帮助学生及时了解课程安排，避免错过重要的课程信息。该程序通过抓取教务系统的课程表数据并进行处理，在设置的规定时间自动发送课程提醒通知。此项目配合青龙面板一起使用更搭哦~功能特点自动从SCVTC学院的教务系统中抓取课程表数据。根据设定的提醒时间，自动从钉钉发送课程提醒通知。支持自定义提醒时间和上课时间。简单易用，已经将需要自己设置的参数内容提取了出来，傻瓜式配置即可。技术栈Python(100%)劝退警告本脚本使用Python获取课程表信息，并且在上课前30分钟通过钉钉发信提醒用户。故需要配置钉钉发信参数，如果不愿意配置，则此项目可能不适合你。如果你不想折腾，可能这个项目也不适合你，但你若有问题欢迎提出issue，我也会尽力帮助你，但请遵循《提问的智慧 - How To Ask Questions The Smart Way》。如果你也是川教的学生，那么你可以完全不用改任何的代码，直接部署之后填入相应的配置参数，即可使用。安装与使用创建钉钉机器人首先，需要在钉钉OA平台创建企业/组织，再到钉钉开发平台选择刚才创建的企业/组织，之后创建应用并创建机器人。在钉钉开放平台获取下述相应参数，并把相应参数填入/dingMsg.py中。ding_sdk_config_appKey = "" ding_sdk_config_appSecret = "" ding_sdk_config_openConversationId = "" ding_sdk_config_robotCode = ""配置教务系统参数配置教务系统的登录网址、登录名、密码，以获取课程表信息。Ps:教务系统默认封了国外IP，如果需要将自动化程序部署在国外服务器，需自行在国内服务器中部署反向代理，否则教务系统无法连接！把相应参数填入/config.py中。web_system_url = '' # 教务系统的 url 访问链接 web_system_login_username = '' # 教务系统欲登录的 用户名 web_system_login_password = '' # 教务系统欲登录中的 密码环境要求Python 3.1及以上版本相关Python库：requests, json, datetime部署步骤(二选一)克隆项目到本地：git clone https://github.com/chboy666/SCVTC_ClassReminder.git在Releases中下载成品代码：截止撰稿前，最近一次更新版本是250204，若发现有最新版请自行更改下述链接。https://github.com/chboy666/SCVTC_ClassReminder/releases/tag/250204程序构造程序提供了两个python文件，分别为/main.py、/cron.py。Main.py：主函数，负责当天课程表的数据爬取，并把爬取的数据写入到项目主路径下。cron.py：Cron（定时任务）函数，负责消息推送。读入主函数爬取的数据，并检测当前的运行时间是否在上课前30分钟的阈值内，如果在，则推送消息。一般主函数在每天的凌晨执行一次（具体时间可自定义，尽量在每天上课之前执行），以获取当天课程表的数据。Crontab我设置的是0 3 * * *一般Cron（定时任务）函数每分钟执行一次，Crontab请设置（务必设置）* * * * *若搭配青龙面板，请也遵循上述规则添加上述两个自动化任务。本项目会在系统中写入、修改文件，故请确保本项目在系统中权限为：755异常容错机制程序内已做好异常容错机制，程序会尝试在发信推送前的2分钟进行第一次发信，如果第一次发信成功，则直接跳过第二次发信。如果第一次发信失败，则会在发信推送前的1分钟进行第二次发信。在每次发信成功后，程序会自动锁定当前课程的消息提醒，确保不会造成重复发信。一般情况下，99.9%的几率第一次发信即直接成功，所以在消息推送时，总是在消息推送的前2分钟提前收到消息推送这是正常现象。
有时候想使用git将项目上传至github，但是由于国内环境无法访问github，所以我们就需要设置代理IP。下面是设置代理IP的方法，在git命令行中，设置：git config --global -l git config --global http.proxy 127.0.0.1:10808 git config --global https.proxy 127.0.0.1:10808
基于中国铁路12306公布的火车信息等数据进行数据分析与数据可视化
项目概要项目名称基于中国铁路12306公布的火车信息等数据进行数据分析与数据可视化项目背景随着中国经济的持续发展和城市化进程的加速，人口流动日益频繁，铁路运输作为中国最重要的公共交通方式之一，承载了巨大的客运量。本项目旨在利用中国铁路12306公布的火车票价格等公开数据，通过数据分析与可视化技术，探索票价趋势、出行模式，提供直观的数据洞察，辅助决策优化和服务提升。分析范围本项目主要分析中国铁路12306公布的较为繁忙的铁路线路的火车车次、火车类型、火车出发时刻/到站时刻、火车始发站/终点站、火车票价等进行数学分析和数据可视化。实现思路[!NOTE]为确保项目实现过程与课程教学内容紧密对应，本项目将依据课程中讲授的知识点逐步实现相应功能。尽管实现方法可能非最高效途径，但旨在强化理论与实践的结合，确保学习效果。编写开发文档一个好的项目避免不了需要一个好的开发文档，为了实现此项目，特编写了这篇开发文档，因为了保持和课程教学内容紧密对应，本篇文档将采用MarkDown编写。数据采集本次选取了piao.gaotie.cn网站进行火车数据的数据采集，并加入了代理IP进行高效爬取，谨防出现IP被封禁等情况。为了更好的实现数据采集的功能，我将数据采集(GetData)与代理(Proxy)制作成了两个软件包，供主函数调用。为了更高效的使用IP代理，减少数据采集带来的麻烦。我将代理IP的软件包制作成了一个Class(类)对象，进行代理调度让采集更高效，以更好的实现数据采集。通过上述步骤，将采集好的数据通过Python中的List(列表)特有的数据类型返回给主函数进行调用。[!WARNING]本项目侧重点为数据分析与可视化，故数据采集的具体实现方法与过程将不再过多讲述，详情可查看源代码。数据写入与保存将数据采集返回的数据保存到运行目录下的/data文件夹下（在保存前，应先判断此路径是否存在，如不存在应先创建），将为每一条火车线路单独创建一个csv文件，实现数据的分别保存。 # 获取火车数据并写入csv文件，准备数据处理 # 注意：如是火车，则动车组二等座的价格为硬座价格。 # TODO 数据获取与写入 # START------------------------------------------------ data, city = GetData_Package.get_data() # 获取数据的函数 for index, item in enumerate(data): #循环取值 city_from = city[index]["from"][0] #获取火车的出发地 city_to = city[index]["to"][0] #获取火车的目的地 with open(r"data/" + city_from + "-" + city_to + ".csv", "w", newline="", encoding="gbk") as files: #创建文件对象 writer = csv.writer(files) # 创建csv对象 writer.writerow( ['车次', '空白值1', '类型', '出发站', '空白值2', '到达站', '出发时间', '到达时间', '运行时长', '动车组票价', '火车组票价', '空白值3']) # 在数据爬取中，有空白列，在后续处理 writer.writerows(item) # 写入数据 # END------------------------------------------------[!CAUTION]至此，数据采集与文件写入已完成，下面将开始进行数据分析。数据分析前提条件：读入csv文件进行数据分析的前提需要读入csv文件，在csv文件中进行分析。因本项目中，将每一条火车线路都单独创建了一个csv文件，所以在读入时，我采用了循环读入文件。 data, city = GetData_Package.get_data() # 获取采集后的数据 for index, item in enumerate(data): city_from = city[index]["from"][0] #获取火车的出发地 city_to = city[index]["to"][0] #获取火车的目的地 file_path = f"data/{city_from}-{city_to}.csv" # 读取CSV文件到 DataFrame df = pd.read_csv(file_path, encoding='gbk', na_values=' - ') # 后续数据分析的代码都在此循环内依次进行数据分析_第一步：空白列删除（缺失值处理）因数据采集后的数据有多余无意义的数据，为了保证数据分析的可靠性，我们需要先将多余无意义的数据进行删除。在本项目中，数据采集之后生成了多余的空白列，所以在此处我们先进行空白列的删除。我们定义了一个List(columns_to_keep)，将需要保留的列赋值给了它。运用pandas库中的函数删除不存在上述列表中的列，达到空白列的删除。# 处理数据第一步：删除空白列 # 背景：在数据爬取中，有空白列，我们在这里删除 # TODO 数据处理：删除空白列 # START------------------------------------------------ columns_to_keep = ['车次', '类型', '出发站', '到达站', '出发时间', '到达时间', '运行时长', '动车组票价', '火车组票价'] # 定义需要保留的列 df = df[columns_to_keep] # 删除不在 columns_to_keep 列表中的所有列 # END------------------------------------------------数据分析_第二步：火车价格的数据处理（分割数据）在本项目中，数据采集后的数据将火车的火车价格都放在一个单元格中（例如在火车中，爬取后的数据将卧铺的价格放在了一个单元格内，但原本火车价格应有卧铺上铺、中铺、下铺三种席位，这三种席位，每种席位有单独的价格，故我们应该将这三个价格分别放置在三个不同单元格中），需要对价格进行分割，否则会造成后续进行票价分析中出现问题。# 处理数据第二步：火车价格的数据处理 # 背景：目前火车所有坐席的价格在同一个单元格内，我们需要把不同坐席的价格放在不同的单元格内进行展示 # TODO 数据处理：分割数据 # START------------------------------------------------ split_columns = df['动车组票价'].str.split('/', expand=True)# 分割'动车组票价'、"火车组票价"列，并创建新的列名 split_columns.columns = ['动车组票价_二等座', '动车组票价_一等座'] df = df.join(split_columns).drop('动车组票价', axis=1)# 将新列加入原始 DataFrame并删除旧的'动车组票价'、"火车组票价"列 split_columns = df['火车组票价'].str.split('/', expand=True) split_columns.columns = ['火车组票价_硬卧上', '火车组票价_硬卧中','火车组票价_硬卧下'] df = df.join(split_columns).drop('火车组票价', axis=1) # END------------------------------------------------数据分析_第三步：缺失值处理在数据采集中，有部分火车的价格没有获取到，造成了火车的价格为null，为了为了保证数据分析数据真实性，我们将没有获取到火车价格的车次信息进行整行删除。# 处理数据第三步：火车价格的缺失值处理 # 背景：有些火车数据非常扯淡！它没有获取到火车票价格，那我们就把没有获取到火车票价格的车次删除掉！ # TODO 数据处理：缺失值处理 # START------------------------------------------------ columns_of_interest = ['火车组票价_硬卧上', '火车组票价_硬卧中','火车组票价_硬卧下','动车组票价_二等座', '动车组票价_一等座'] #指定列名 for column in columns_of_interest:# 在csv中，缺失值是使用'-'代替，我们在指定列中将其替换为NaN以便更好处理缺失值 df[column] = df[column].apply(lambda x: np.nan if x == ' - ' else x) mask_all_na_in_columns = df[columns_of_interest].isna().all(axis=1)# 找出所有在指定列中全部是NaN的行 df = df[~mask_all_na_in_columns]# 删除那些在指定列中全部是NaN的行 # END------------------------------------------------数据分析_第四步：数据清洗在csv文件中读取的火车价格的数据类型为String(字符串)类型，为了实现后续的数学运算和数学分析，在此处我们需要将火车价格的数据类型从字符串转为float(浮点型)。否则会报错！# 处理数据第四步：火车价格的数据清洗 # 背景：有些火车价格数据为string，我们需要把它们统一转换为float，才能进行下一步的数据最大/小值的计算，否则会报错！ # TODO 数据处理：火车价格的数据清洗 # START------------------------------------------------ df['动车组票价_二等座'] = pd.to_numeric(df['动车组票价_二等座'], errors='coerce') df['动车组票价_一等座'] = pd.to_numeric(df['动车组票价_一等座'], errors='coerce') df['火车组票价_硬卧上'] = pd.to_numeric(df['火车组票价_硬卧上'], errors='coerce') df['火车组票价_硬卧中'] = pd.to_numeric(df['火车组票价_硬卧中'], errors='coerce') df['火车组票价_硬卧下'] = pd.to_numeric(df['火车组票价_硬卧下'], errors='coerce') # END------------------------------------------------数据分析_第五步：数据排序与Xlsx文件写入我们将根据火车的价格从高到低(AESC)进行排序，并将排序好的数据写入到/data/sort文件夹下（在写入前，应先判断此路径是否存在，如不存在应先创建）。通过上述操作可形成一个具有价格梯度的火车信息，帮助我们分析和查看。注意：本次排序将通过动车组票价_二等座的票价数据为Key进行排序，其他字段不涉及排序。# 处理数据第五步：根据火车价格进行AESC排序以及保存至XLSX文件中 # 背景：我们需要根据火车价格进行排序，形成一个具有价格梯度的火车信息，帮助我们分析和查看。 # 注意：在此处我们统一按照 动车组票价_二等座 进行排序，其他字段不涉及排序，将排序后的结果生成到 data/sort 文件夹下。 # TODO 数据处理：根据火车价格进行排序以及保存至XLSX文件中 # START------------------------------------------------ sorted_df = df.sort_values(by=['动车组票价_二等座'], ascending=False) sorted_df.to_excel('data/sort/' + city_from + '-' + city_to + '.xlsx', index=False, engine='openpyxl') # END------------------------------------------------数据分析_第六步：重复值处理在本项目中，数据本身没有重复的现象，但为确保项目实现过程与课程教学内容紧密对应，此处仍然进行重复值处理。如果发现有重复值情况，则删除重复值，谨防对后续数学运算带来影响。# 处理数据第六步：数据清洗，检测并删除重复值（重复数据） # 背景：如果火车数据是重复的，那我们就需要删除重复数据，防止数据有多个造成数据不准确。 # TODO 数据处理：数据清洗，检测并删除重复值 # START------------------------------------------------ df.drop_duplicates(inplace=True) # END------------------------------------------------数据分析_第七步：运用max、min、mean进行数学统计计算火车价格的最大值、最小值、平均值进行数据统计，方便我们查看数据。在计算好数据之后，我们将这些数据写入到csv文件中（在文件的最后一行中再新起三行分别写入最小值、最大值、平均值）。# 处理数据第七步：计算火车价格的最大值、最小值、平均值进行数据统计，将计算的结果新起一列写入csv文件中 # 背景：数据统计后，能发现乘坐哪个火车价格最实惠。 # TODO 数据处理：火车价格的数据统计 # START------------------------------------------------ new_row_data = {'车次': '车票价格总计_最大值', '动车组票价_二等座': df['动车组票价_二等座'].max(), '动车组票价_一等座': df['动车组票价_一等座'].max(), '火车组票价_硬卧上': df['火车组票价_硬卧上'].max(), '火车组票价_硬卧中': df['火车组票价_硬卧中'].max(), '火车组票价_硬卧下': df['火车组票价_硬卧下'].max(), } df.loc[len(df)] = new_row_data # 将最大值的数据添加到 df末尾 # ---分隔符--- new_row_data = {'车次': '车票价格总计_最小值', '动车组票价_二等座': df['动车组票价_二等座'].min(), '动车组票价_一等座': df['动车组票价_一等座'].min(), '火车组票价_硬卧上': df['火车组票价_硬卧上'].min(), '火车组票价_硬卧中': df['火车组票价_硬卧中'].min(), '火车组票价_硬卧下': df['火车组票价_硬卧下'].min(), } df.loc[len(df)] = new_row_data # 将最小值的数据添加到 df末尾 # ---分隔符--- new_row_data = {'车次': '车票价格总计_平均值', '动车组票价_二等座': df['动车组票价_二等座'].mean(), '动车组票价_一等座': df['动车组票价_一等座'].mean(), '火车组票价_硬卧上': df['火车组票价_硬卧上'].mean(), '火车组票价_硬卧中': df['火车组票价_硬卧中'].mean(), '火车组票价_硬卧下': df['火车组票价_硬卧下'].mean(), } df.loc[len(df)] = new_row_data # 将平均值的数据添加到 df末尾 # END------------------------------------------------数据分析：运用describe进行数据输出并进行数据写入我将前面七步执行完后，将通过print语句输出describe可更好查看具体概括数据。# 输出df和desc print(df) print(df.describe())输出后，我们需要将前面七步进行更改后的数据写到csv文件中。# 将清理后的数据写回CSV文件 df.to_csv(file_path, index=False, encoding='gbk')数据分析_第八步：合并csv文件在前面的讲述中，我将每一条火车线路都单独创建了一个csv文件。于是我们将这些csv文件合并到一个csv文件里面，方便我们查看所有的数据。# 处理数据：合并数据，将所有城市的火车数据合并到一个csv文件中 # 背景：我们需要将所有城市的火车数据合并到一个csv文件中，便于后续分析。 # TODO 数据处理：合并数据 # START------------------------------------------------ all_csv_files = glob.glob(os.path.join('data', "*.csv")) all_csv_files_list = [] for csv_files_item in all_csv_files: all_csv_df = pd.read_csv(csv_files_item, encoding='gbk') all_csv_df = all_csv_df[ ~(all_csv_df['车次'].isin(['车票价格总计_最大值','车票价格总计_最小值','车票价格总计_平均值'])) ] # 这些值不用合并 all_csv_files_list.append(all_csv_df) all_cities_df = pd.concat(all_csv_files_list, axis=0, ignore_index=True) all_cities_df.to_csv('所有城市的火车信息.csv', index=False, encoding='gbk') # 将所有城市的火车数据写回一个csv文件 # END------------------------------------------------[!CAUTION]至此，数据分析已完成，下面将开始进行数学分析。数学运算经过数据分析的八个步骤后，我们的数据样本已经得到了大致的了解，下面我们通过数学运算来更好的进行数据层面的分析：[!TIP]在数学运算中，我们统一通过所有城市的火车信息.csv此文件进行数学运算的分析。前提条件：读入csv文件# 这里读入的是'所有城市的火车信息.csv'，也就是合并后的数据进行检验 df = pd.read_csv('所有城市的火车信息.csv', encoding='gbk', na_values=' - ')数学运算_第一步：假设检验（T检验）假设检验可以用来比较不同类型的票价，看看各票价之间是否存在显著差异。# 数学运算第一步：假设检验（T检验） # 背景：假设检验可以用来比较不同类型的票价，看看是否存在显著差异。 # TODO 数学运算：假设检验 # START------------------------------------------------ t_stat, p_value = stats.ttest_ind( df['动车组票价_二等座'].dropna(), df['火车组票价_硬卧上'].dropna(), nan_policy='omit')# 比较动车组二等座和火车组硬卧上座的票价 print(f"假设检验检测_动车组票价_二等座 or 火车组票价_硬卧上 - T-statistic: {t_stat}, P-value: {p_value}") # END------------------------------------------------数学运算_第二步：分布拟合我们可以拟合票价数据到常见的统计分布（例如正态分布），看数据是否符合这些分布。# 数学运算第二步：分布拟合 # 背景：我们可以拟合票价数据到常见的统计分布（例如正态分布），看数据是否符合这些分布。 # TODO 数学运算：分布拟合 # START------------------------------------------------ params = stats.norm.fit(df['动车组票价_二等座'].dropna()) # 拟合正态分布 print(f"分布拟合检测_动车组票价_二等座 - 均值(Mean): {params[0]}, 标准差(Std): {params[1]}") params = stats.norm.fit(df['火车组票价_硬卧上'].dropna()) # 拟合正态分布 print(f"分布拟合检测_火车组票价_硬卧上 - 均值(Mean): {params[0]}, 标准差(Std): {params[1]}") params = stats.norm.fit(df['火车组票价_硬卧中'].dropna()) # 拟合正态分布 print(f"分布拟合检测_火车组票价_硬卧中 - 均值(Mean): {params[0]}, 标准差(Std): {params[1]}") params = stats.norm.fit(df['火车组票价_硬卧下'].dropna()) # 拟合正态分布 print(f"分布拟合检测_火车组票价_硬卧下 - 均值(Mean): {params[0]}, 标准差(Std): {params[1]}") # END------------------------------------------------数学运算_第三步：方差分析（ANOVA）利用数据中的方差数据，帮助我们更好地理解数据。# 数学运算第三步：方差分析（ANOVA） # 背景：利用方差，帮助我们更好地理解数据。 # TODO 数学运算：方差分析（ANOVA） # START------------------------------------------------ # 方差分析（ANOVA） f_stat, p_value = stats.f_oneway( df['动车组票价_二等座'].dropna(), df['动车组票价_一等座'].dropna() ) print(f"方差分析（ANOVA） - F-statistic: {f_stat}, P-value: {p_value}") # END------------------------------------------------数学运算_第四步：数据的相关性分析我们可以通过计算数据的相关系数，来判断数据之间的相关性。(此处火车和火车比较、动车和动车比较)# 数学运算第四步：数据的相关性分析 # 背景：我们可以通过计算数据的相关系数，来判断数据之间的相关性。 # TODO 数学运算：数据的相关性分析 # START------------------------------------------------ # 相关性分析 corr_1 = df['动车组票价_二等座'].corr(df['动车组票价_一等座']) corr_2 = df['火车组票价_硬卧上'].corr(df['火车组票价_硬卧中']) print(f"动车组二等座和一等座票价的相关性: {corr_1}") print(f"火车组硬卧上和硬卧中的票价相关性: {corr_2}") # END------------------------------------------------
在Windows系统与Linux系统中刷新本地DNS缓存的方法
在不同的操作系统平台上，刷新本地DNS缓存的命令有所不同。1. Windows 平台在 Windows 操作系统中，刷新 DNS 缓存通常使用 ipconfig 命令。步骤：打开命令提示符：点击 开始菜单，然后搜索并选择 命令提示符（Command Prompt），或者按下 Win + R 键，输入 cmd，然后按 Enter 键。输入刷新 DNS 缓存命令：在命令提示符中输入以下命令并按 Enter 键：ipconfig /flushdns说明：该命令会清除本地 DNS 缓存并强制系统重新解析 DNS 查询。执行后，系统会显示类似以下信息：Windows IP 配置 已成功刷新 DNS 解析缓存。注意事项：需要以管理员权限运行命令提示符才能正常刷新 DNS 缓存。在 开始菜单 中找到 命令提示符，右键选择 以管理员身份运行。2. Linux 平台在 Linux 系统中，刷新 DNS 缓存的命令依赖于你使用的 DNS 缓存服务。常见的 DNS 缓存服务包括 systemd-resolved、dnsmasq 和 nscd。不同的 Linux 发行版和配置可能会有所不同。以下是常见的几种方法：1. 使用 systemd-resolved 服务（适用于 Ubuntu 18.04 及更高版本）如果你的系统使用 systemd 管理 DNS，使用以下命令：sudo systemd-resolve --flush-caches说明：该命令会刷新 systemd-resolved 管理的 DNS 缓存。2. 使用 nscd 服务（适用于一些 Linux 发行版）如果你的系统使用 nscd（名称服务缓存守护进程）来缓存 DNS，可以使用以下命令：sudo /etc/init.d/nscd restart或者：sudo systemctl restart nscd说明：这些命令会重新启动 nscd 服务，清除 DNS 缓存。3. 使用 dnsmasq 服务（适用于某些发行版和配置）如果你的系统使用 dnsmasq 服务来缓存 DNS，可以使用以下命令：sudo systemctl restart dnsmasq说明：此命令会重启 dnsmasq 服务，清除 DNS 缓存。4. 其他方式如果你不确定系统使用的是哪种 DNS 缓存服务，你可以尝试以下命令，这些命令会清除一些常见的 DNS 缓存：sudo service nscd restart或者sudo service dnsmasq restart总结：Windows：使用 ipconfig /flushdns 命令刷新 DNS 缓存。Linux：根据使用的 DNS 缓存服务选择合适的命令：systemd-resolved：sudo systemd-resolve --flush-cachesnscd：sudo systemctl restart nscddnsmasq：sudo systemctl restart dnsmasq通过这些命令，可以解决一些由于 DNS 缓存错误导致的访问问题。
记一次使用宝塔多用户功能弱密码被SSH爆破导致服务器中招
概要宝塔在新版本中上线了多用户功能，满足在多用户的条件下操作宝塔面板，当做虚拟主机使用。在2024年12月10日晚上，我安装了这个功能，因为测试，我创建了一个测试用户，“test”，因为是测试用户密码都是弱密码，我本以为和大多数虚拟主机一样，只是一个登录的字段。万万没想到，宝塔这边直接创建了一个linux账户，因此我服务器被爆破了。排查今天发现这台服务器无法访问了，没有办法只能重启服务器，重启后发现CPU内存等指标全满，首先到SSH执行top查看具体情况，但未见明显异常。但这个情况是肯定不对的，于是避免资源占用，我们先关闭Mysql和Nginx，释放一部分资源，因为在服务器满载的情况下，我们是排查不了任何东西的。释放了部分内存后，我们登录宝塔查看任务管理器查看，发现有部分异常进程，但是结束进程后又会创建新的进程，无解。查看任务管理器详情我仔细查看了任务管理器中进程的创建者，发现有"test"用户创建的，我联想到了昨天晚上执行的多用户的时候。想到办法之后，我们强制删除这个"test"用户，之后查询这个用户创建的文件，一并强制删除，即恢复了。爆破日志回调了服务器日志，看到了这一幕：主机SSH被外部爆破且成功登陆，时间：2024-12-10 22:16:38，攻击IP：139.59.101.197，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-10 22:16:58，攻击IP：139.59.101.197，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-10 22:30:53，攻击IP：134.209.65.140，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-10 22:31:04，攻击IP：134.209.65.140，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 02:55:08，攻击IP：103.248.43.99，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 02:55:49，攻击IP：103.248.43.99，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 03:53:09，攻击IP：116.193.190.174，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 03:54:02，攻击IP：116.193.190.174，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:09:16，攻击IP：209.38.90.61，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:09:34，攻击IP：209.38.90.61，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:32:29，攻击IP：10.0.46.69，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:32:31，攻击IP：23.224.174.55，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:32:36，攻击IP：23.224.174.55，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:32:43，攻击IP：23.224.174.55，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:32:52，攻击IP：10.0.46.69，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:32:53，攻击IP：23.224.174.55，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:33:00，攻击IP：23.224.174.55，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:33:08，攻击IP：23.224.174.55，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:40:22，攻击IP：10.0.46.69，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:41:55，攻击IP：23.224.174.55，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:46:24，攻击IP：23.224.174.55，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:48:30，攻击IP：10.0.46.69，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:48:30，攻击IP：23.224.174.55，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:48:32，攻击IP：23.224.174.55，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:48:34，攻击IP：23.224.174.55，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:48:43，攻击IP：10.0.46.69，登录用户：test 主机SSH被外部爆破且成功登陆，时间：2024-12-11 06:48:50，攻击IP：23.224.174.55，登录用户：test
组装硬件将提供的设备进行组装，有相机组件、机械臂组件、传送带组件。其中，机械臂组件还需要与吸盘、夹爪组装。(如果是螺丝检测，则应该组装夹爪；如果是PCB检测，则应该组装吸盘)传送带组件中，还有红外线检测仪器。项目文件螺丝加工件处理数据采集与标注数据采集本项目中，数据采集使用"MAIN_DH.py"文件，直接在终端内执行(执行命令前需要cd至代码主路径下)python3 MAIN_DH.py执行命令后，会打开GUI窗口，如图所示：其中具体功能详情如下：打开相机关闭相机采集图像数据连接机械臂断开机械臂机械臂回零关闭真空发生器显示机械臂现在的笛卡的坐标XYZR的值控制机械臂XY方向运动控制机械臂Z方向与R旋转设置中转点将8现在的坐标值设置到中转点位运动到中转点设置抓取点将8现在的坐标值设置到抓取点位运动到抓取点设置机械臂抓取机械臂在XY方向的偏差显示日志信息选择放置物料的类别开始零件分类开始PCB分类调用执行开始保存设置的点位信息调试完成后勾选记录比赛根据17设置的类别设置对应类别的放置点运动到17选择的点位数据采集后，数据保存到主路径的上一级目录下的"save_image"文件夹下。数据标注此时，应该在项目主目录下新建一个文件夹，然后把"save_image"文件夹下的文件复制到新建的文件夹下。cd进入这个文件夹后，在终端执行：labelimg会打开数据标注工具"labelimg"，如下图所示：打开标注照片的文件夹设置标注完成保存位置（将采集的图片.jpg文件和打完标签的.txt文件保存在一个文件夹里）打完标签完成后可以打开该文件里的classes.txt文件，若里面的东西只有本次打标签的名字，则正确。格式选YOLO可以在 Edit 里面选择"auto save"（自动保存）注意事项：标注PCB缺陷数据集的时候必须标注一个名为PCB的类，为pcb抓取定位位置（没有这个类无法定位抓取）。需要将有问题的PCB板的问题处特别标定。模型训练在数据采集和训练完成后，我们需要训练数据，训练数据的python代码是项目主路径下的"train.py"文件。但是在训练之前，我们需要调整训练参数，具体要调整的内容如下：训练的模型配置文件和标签数据文件：在 train.py的大概430行左右，有下述代码： parser.add_argument('--cfg', type=str, default='models/yolo5s_part.yaml', help='model.yaml path') parser.add_argument('--data', type=str, default=ROOT /'data/part.yaml', help='dataset.yaml path')依次点击上述两个yaml文件，修改nc(标签个数)与name(标签名称)。训练的GPU与训练的轮数、一轮中每秒训练的图片张数：在 train.py的大概440行左右，有下述代码： parser.add_argument('--epochs', type=int, default=1000, help='total training epochs') parser.add_argument('--batch-size', type=int, default=100, help='total batch size for all GPUs, -1 for autobatch')修改第一行的轮数次数，修改第二行的一轮中每秒训练的图片张数（一般为6 or 8）。在 train.py的大概450行左右，有下述代码： parser.add_argument('--device', default='0', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')修改需要使用的GPU索引，一般填0，即默认使用第一张显卡训练。修改完训练参数后，我们开始训练模型。我们使用终端执行下述命令打开它。python3 train.py然后等待训练的模型完成。会生成best.pt与last.pt文件，路径是在"/runs/train/xxx"(这个路径在训练的python文件中可自定义)。我们把这两个pt文件复制到\my_weights\nut路径下。九点标注运行项目主路径线下的"arm_机械臂手眼标定\MAIN_GUI_daheng.py"文件，进行九点标注，实现九点标注是为了把机械臂与摄像头的点位匹配，已达到获取后续抓取的准确性。开始测试本项目中，数据测试使用"MAIN_DH.py"文件，直接在终端内执行(执行命令前需要cd至代码主路径下)python3 MAIN_DH.py打开GUI页面后，开始测试。PCB板加工件处理数据采集与标注同上文一致。模型训练同上文一致。九点标注上文标注后PCB板可不再标注，但是不能动 摄像头与机械臂的位置。开始测试同上文一致。