[{"content":"今天想安装一个WSL下的Debian12，无奈打开安装程序报错： Error code: Wsl/Service/CreateInstance/MountVhd/ERROR_FILE_NOT_FOUND 无法将磁盘“D:\\WSL\\Debian12\\ext4.vhdx”附加到 WSL2： 系统找不到指定的文件。\n想起来似乎以前安装过Debian12，后面用不到卸载掉了，想着应该是和这个有关，遂试了wsl的取消注册命令 wsl --unregister Debian12\n之后再重新安装Debian12，果然成功\u0026hellip;\n推荐使用秋水逸冰大佬的方法制作WSL Linux镜像： https://teddysun.com/646.html\n或者可以直接使用他制作好的镜像： https://dl.lamp.sh/wsl/ 下载，解压，双击安装，非常方便。\n","date":"2023-10-20T15:17:03+08:00","permalink":"/p/31/","title":"Error code: Wsl/Service/CreateInstance/MountVhd/ERROR_FILE_NOT_FOUND"},{"content":"通常云服务器、VPS小鸡都是不提供OpenWRT镜像的，上传自定义镜像安装，还不如直接根据现有环境编译好镜像，直接dd一把梭\u0026hellip; 有人问为什么要在VPS上安装OpenWRT？这不是闲得嘛\u0026hellip; 我只能说，人各有骚！有些骚操作的玩法，DDDD\n本文操作环境：\n系统：Debian11 5.10.0-21-amd64 EFI 云平台：Ucloud 固件：ImmortalWrt，使用官方的在线固件选择进行编译 一、收集信息 确定当前系统的启动方式为legacy还是uefi，因为不同启动方式需要的固件不一样。可以使用lsblk查看，如果是uefi启动，会有/boot/efi目录或者一个分区号比较大的类似于/dev/vda128的分区，如果没有此目录，那就是legacy启动（不一定，通常是这样） 1 2 3 4 5 6 root@temp-sh:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 254:0 0 40G 0 disk ├─vda1 254:1 0 1M 0 part ├─vda2 254:2 0 191M 0 part /boot/efi └─vda3 254:3 0 39.8G 0 part / 记录当前系统的网络配置，网络类型分两种：\nVPS在内网中，IP地址为内网IP，获取IP方式为DHCP或者static VPS直接分配公网IP 1 2 3 4 5 6 auto eth0 iface eth0 inet static address 123.123.60.154/24 gateway 123.123.60.1 dns-nameservers 8.8.8.8 1.1.1.1 #如果IP是DHCP获取的，可以使用netstat -rn 查看网关 二、编写配置脚本 这一步非常重要！ 这一步非常重要！ 这一步非常重要！\n有的VPS是不能够用VNC操作的，所以这里的脚本要根据网络配置写好，不然dd后不能联通网络 这里的脚本会放到uci-defaults中作为系统第一次启动时执行，一次性交(脚)本，执行后自动删除\n脚本需求：\n配置网络 配置防火墙 修改其他信息，例如ssh端口等 以下是我根据自己的需求编写，请根据自己的实际情况修改\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 #!/bin/sh # 清空原网络配置 echo \u0026#34;\u0026#34; \u0026gt; /etc/config/network # 写入新内容，其中 gateway、ipaddr、dns，这三项自己按需修改。如果你的VPS使用DHCP获取IP，建议也配置使用static方式获取，以免发生意外 # 此配置禁用了ipv6 echo \u0026#34;config interface \u0026#39;loopback\u0026#39; option device \u0026#39;lo\u0026#39; option proto \u0026#39;static\u0026#39; option ipaddr \u0026#39;127.0.0.1\u0026#39; option netmask \u0026#39;255.0.0.0\u0026#39; config interface \u0026#39;wan\u0026#39; option device \u0026#39;eth0\u0026#39; option proto \u0026#39;static\u0026#39; option netmask \u0026#39;255.255.255.0\u0026#39; option gateway \u0026#39;10.1.1.1\u0026#39; option ipaddr \u0026#39;10.1.1.10\u0026#39; option delegate \u0026#39;0\u0026#39; list dns \u0026#39;1.1.1.1\u0026#39; list dns \u0026#39;8.8.8.8\u0026#39; config device option name \u0026#39;eth0\u0026#39; option ipv6 \u0026#39;0\u0026#39;\u0026#34; \u0026gt; /etc/config/network # 清空原防火墙配置 echo \u0026#34;\u0026#34; \u0026gt; /etc/config/firewall # 写入新内容 echo \u0026#34;config defaults option input \u0026#39;ACCEPT\u0026#39; option output \u0026#39;ACCEPT\u0026#39; option fullcone \u0026#39;1\u0026#39; option forward \u0026#39;ACCEPT\u0026#39; config zone option name \u0026#39;wan\u0026#39; list network \u0026#39;wan\u0026#39; option input \u0026#39;ACCEPT\u0026#39; option output \u0026#39;ACCEPT\u0026#39; option forward \u0026#39;ACCEPT\u0026#39; config include option path \u0026#39;/etc/firewall.user\u0026#39; config include \u0026#39;openclash\u0026#39; option type \u0026#39;script\u0026#39; option path \u0026#39;/var/etc/openclash.include\u0026#39; option reload \u0026#39;1\u0026#39;\u0026#34; \u0026gt; /etc/config/firewall # 清空源ssh配置 echo \u0026#34;\u0026#34; \u0026gt; /etc/config/dropbear # 写入新配置，Port请修改为自己需要的端口。 # SSH服务默认绑定了lan口，本文中使用了wan口，此配置为绑定所有接口 echo \u0026#34;config dropbear option PasswordAuth \u0026#39;on\u0026#39; option Port \u0026#39;61100\u0026#39;\u0026#34; \u0026gt; /etc/config/dropbear #有可能VPS提供商默认不开放80和443，需要改为其他端口 sed -i \u0026#34;s/list listen_http \u0026#39;0.0.0.0:80\u0026#39;/list listen_http \u0026#39;0.0.0.0:8001\u0026#39;/g\u0026#34; /etc/config/uhttpd sed -i \u0026#34;s/list listen_http \u0026#39;\\[::\\]:80\u0026#39;/list listen_http \u0026#39;\\[::\\]:8001\u0026#39;/g\u0026#34; /etc/config/uhttpd sed -i \u0026#34;s/list listen_https \u0026#39;0.0.0.0:443\u0026#39;/list listen_https \u0026#39;0.0.0.0:8002\u0026#39;/g\u0026#34; /etc/config/uhttpd sed -i \u0026#34;s/list listen_https \u0026#39;\\[::\\]:443\u0026#39;/list listen_https \u0026#39;\\[::\\]:8002\u0026#39;/g\u0026#34; /etc/config/uhttpd #把ssh端口也改了，注意这里\u0026#39;22\u0026#39;前面的空格要和配置文件里面的保持一致，不然sed不到 #如果你修改了/etc/config/dropbear，这一步则无需执行 #sed -i \u0026#34;s/option Port \u0026#39;22\u0026#39;/option Port \u0026#39;61100\u0026#39;/\u0026#34; /etc/config/dropbear exit 0 三、编译固件 自己编译太麻烦了，我直接使用ImmortalWrt的在线编译\n编译完成后，根据自己的启动方式下载对应的镜像\n四、梭哈！开始dd 下载固件到现有系统上 curl -o imm.img.gz \u0026quot;download link\u0026quot;\n解压固件 gzip -d imm.img.gz\n将固件dd到当前vps上的/dev/vda磁盘上，使用lsblk可得知（如上文1所示）\n1 2 3 4 5 6 7 8 #执行dd dd if=imm.img of=/dev/vda bs=4M status=progress oflag=sync #如果你的dd版本较低，使用： dd if=imm.img of=/dev/vda bs=4M conv=fsync #有的VPSdd完毕后会报一个提示，但经过多次测试，暂时还没有发现什么影响。 Inconsistency detected by ld.so: ../elf/dl-runtime.c: 80: _dl_fixup: Assertion `ELFW(R_TYPE)(reloc-\u0026gt;r_info) == ELF_MACHINE_JMP_SLOT\u0026#39; failed! 强制系统重启 echo b \u0026gt; /proc/sysrq-trigger 五、扩容/分区 dd完成后，/分区大小为镜像初始大小，需要手动扩容\nopkg update \u0026amp;\u0026amp; opkg install cfdisk fdisk e2fsprogs lsblk 使用cfdisk，选择Free space，回车，然后Write，出现提示之后输入yes，最后Quit退出 使用lsblk查看新建后的分区 进入web，系统-挂载点-生成配置，就能看见新键的分区，然后点击编辑 这里保存之后，回到主界面，点击 保存并应用\n将这些命令复制到ssh中执行，注意需要将命令中的/dev/sda1改为新建后的实际分区 1 2 3 4 5 6 7 mkdir -p /tmp/introot mkdir -p /tmp/extroot mount --bind / /tmp/introot mount /dev/vda3 /tmp/extroot tar -C /tmp/introot -cvf - . | tar -C /tmp/extroot -xf - umount /tmp/introot umount /tmp/extroot reboot，再次进入系统，/分区已经完成扩容 接着就可以进行后续的各种骚操作了~\n两个第三方软件源\nhttps://op.dllkids.xyz/packages/x86_64\nhttps://op.supes.top/packages/x86_64\n本文参考了：\nVPS安装Lean OpenWrt-荒岛\nOpenWrt 存储空间扩容的两种方案 - 喵斯基部落\n","date":"2023-06-09T21:20:00+08:00","image":"/images/picbed/picbed/openwrt.jpg","permalink":"/p/30/","title":"vps小鸡使用dd安装OpenWRT，无需手动配置网络一把梭"},{"content":"一、准备工作 本文中所有示例步骤皆为CentOS7\n登录到阿里云ECS实例，将cloud-init关闭，否则NetCup在启动此镜像时会卡住10分钟才能进入系统 执行此命令关闭cloud-init：touch /etc/cloud/cloud-init.disabled\n220131更新，如果关闭cloud-init，镜像安装完成后不会自动扩容硬盘，打开cloud-init重启后便会自动扩容，可以之后再关闭。\n创建自定义镜像 导出自定义镜像到阿里云oss（需要创建与ECS同地域的OSS桶） 将自定义镜像导入到NetCup提供的FTP服务器，最好是使用欧洲地区的VPS（或者临时开一台阿里云法兰克福的ECS）来操作（需要先把oss里面的镜像下载出来），否则上传到NetCup的FTP服务器时速度会很慢。建议全程使用screen来操作，避免ssh会话中断造成时间浪费。\n因为这台机器上配置了阿里云ossutil，所以我直接使用ossutil将oss同步到本地了。oss文件可以生成外链，所以也可以使用wget或者curl进行下载。 ossutil64 -c ../oss/config sync oss://temp-files ./\n登录NetCup提供的FTP服务器，将镜像传入。\n1 2 3 4 5 6 7 8 9 10 11 root@NetCup-RS4000:/opt/temp/os# sftp -oPort=2222 123123@46.38.225.190 123123@46.38.225.190\u0026#39;s password: Connected to 46.38.225.190. sftp\u0026gt; lls nohup.out web01_bak.qcow2 web01_min.qcow2 web01.qcow2 sftp\u0026gt; ls cdrom image sftp\u0026gt; cd image sftp\u0026gt; put web01.qcow2 web01.qcow2 sftp\u0026gt; put web01.qcow2 如果镜像太大，建议先将镜像压缩再上传，否则在安装阶段时NetCup将花费很长时间去拉取镜像。 qemu-img convert -c -O qcow2 web01.qcow2 web01_new.qcow2\n二、NetCup控制台重新安装自定义镜像 登录到SCP。 Media → Images → Own Uploaded Images 这里有一个非常奇葩的点。就是 Own Uploaded Images 右边的下拉箭头，有可能会受到浏览器的某个插件影响而无法点击，我就是因为这个问题一直以为镜像上传了而不显示，还发邮件和NetCup沟通了半天。。 最后突然想到使用无痕模式试试，才发现了这个坑爹的问题。 我这边排查到的是一个叫 浮图秀 的插件。 倒杯水，泡个茶，等待镜像安装完成后就可以登录了。 三、卸载阿里云安骑士、阿里云监控、阿里云助手 由于我们的镜像已经不在阿里云运行，所以没有必要保留这些东西，通通卸载。 此步骤可以在ECS生成自定义镜像前进行（建议先做好快照）。\n卸载阿里云安骑士\n1 2 3 wget http://update.aegis.aliyun.com/download/uninstall.sh \u0026amp;\u0026amp; chmod +x uninstall.sh \u0026amp;\u0026amp;./uninstall.sh wget http://update.aegis.aliyun.com/download/quartz_uninstall.sh \u0026amp;\u0026amp; chmod +x quartz_uninstall.sh \u0026amp;\u0026amp; ./quartz_uninstall.sh 卸载阿里云监控，需要判断自己系统上安装的是什么版本的插件，C++ Go Java，官网文档在本文文末。\n1 2 3 bash /usr/local/cloudmonitor/cloudmonitorCtl.sh stop bash /usr/local/cloudmonitor/cloudmonitorCtl.sh uninstall rm -rf /usr/local/cloudmonitor 卸载阿里云助手，官方文档在本文文末\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 #停止云助手客户端 systemctl stop aliyun.service #停止云助手守护进程 /usr/local/share/assist-daemon/assist_daemon --stop #卸载云助手守护进程 /usr/local/share/assist-daemon/assist_daemon --delete #删除云助手守护进程目录 rm -rf /usr/local/share/assist-daemon #卸载云助手客户端（Linux实例） rpm -qa | grep aliyun_assist | xargs rpm -e 删除残余文件\n1 2 3 4 5 6 7 8 9 10 11 #删除残余文件 rm -rf /usr/local/aegis rm -rf /usr/local/share/aliyun-assist rm -rf /usr/local/cloudmonitor rm -f /usr/sbin/aliyun-service.backup rm -f /usr/sbin/aliyun-service rm -f /usr/sbin/aliyun_installer rm -f /etc/systemd/system/aliyun.service rm -f /lib/systemd/system/aliyun.service rm -f /var/tmp/aliyun-service.pid rm -f uninstall.sh quartz_uninstall.sh 重启系统，检查是否还有阿里云的服务存在\n1 2 3 systemctl | grep aliyun systemctl | grep aegis systemctl | grep cloudmonitor 参考文档：\n导出自定义镜像 https://help.aliyun.com/document_detail/58181.html\n安装和卸载C++版本插件 https://help.aliyun.com/document_detail/183482.htm?spm=a2c4g.11186623.0.0.2cbd2cfeJC58eh#task-1950491\n云监控Java版本插件安装 https://help.aliyun.com/document_detail/38859.html\n云监控Go语言版本插件安装 https://help.aliyun.com/document_detail/97929.htm\n启动、停止或者卸载云助手客户端 https://help.aliyun.com/document_detail/134379.html\n","date":"2023-01-31T11:20:00+08:00","image":"/images/picbed/picbed/image-20230131112621396.png","permalink":"/p/29/","title":"阿里云ECS导出自定义镜像并迁移到NetCup"},{"content":"今天遇到一个AWS诡异的坑：\nCloudFront 添加的分配一直报 \u0026ldquo;Failed to contact the origin\u0026rdquo; （也就是CloudFront 回源502）； 排查了证书 证书链 源站nginx配置等等一堆东西； 并且使用aws-cli清除了整个分配的缓存；\n故障依然，最后突然想到之前配Route53的时候有过类似的问题：添加记录死活提示重复。 遂将此域名的CloudFront分配删之，重新添加分配，问题解决。。。\n参考： https://aws.amazon.com/cn/premiumsupport/knowledge-center/resolve-cloudfront-connection-error/\n","date":"2023-01-03T15:37:08+08:00","permalink":"/p/28/","title":"CloudFront添加分配\u0026quot;Failed to contact the origin\u0026quot;"},{"content":"2022最新CPU性能排行榜_CPU天梯_CPU天梯图 http://www.cpuxn.com/tianti/CPUtianti.html\n2022年处理器的排行榜 - Technical City https://technical.city/zh/cpu/rating\n服务器CPU天梯图-服务器CPU (intel，带价格显示) http://www.servercpu.cn/cputiantitu/\n似乎更新得比较及时（未考证） https://www.strerr.com/cn/gpu_rank.html\n","date":"2022-10-28T11:07:00+08:00","permalink":"/p/27/","title":"几个常用的CPU排行榜"},{"content":"AD域中尝试绕过UAC 什么是UAC？ 用户帐户控制（User Account Control，简写作UAC)是微软公司在其Windows Vista及更高版本操作系统中采用的一种控制机制。其原理是通知用户是否对应用程序使用硬盘驱动器和系统文件授权，以达到帮助阻止恶意程序（有时也称为“恶意软件”）损坏系统的效果。 \u0026ndash;百度百科\n高: 任何程序启动都需要申请\n默认： UAC在不手动更改的情况下，程序需要administrator权限的时候。会弹出框框申请\n中: 申请administrator权限不弹出申请框框，默认允许\n从不提醒： 所有程序启动皆为administrator权限\n最近需要在AD域中推送一个exe，如果只用管理员权限（administrator，或者具备管理权限的AD账号）运行，会因为权限不够而中断执行，需要UAC权限（也就是右键以管理员身份运行）才能够运行安装。就算登录用户已经在本地administrator组或者域的admin组中也不行。\n尝试了不少方法，做一个总结。\n绕过UAC失败的方法： 失败方法一：使用AD用户管理中的登录脚本 此方式也是该软件官方推荐的方式，将exe放在域控的登录脚本目录下，再为目标账户设置登录脚本。\n\\\\域控机计算机名\\SYSVOL\\sysvol\\域控domain\\SCRIPTS\\\n或者也可以放入能够让域内成员访问的共享目录，但是登录脚本要使用绝对路径。\n此方法可以成功让域成员登录时执行该exe，但是会因为权限不足而中断进程\n失败方法二：使用系统自带的runas命令 系统自带的runas命令需要手动输入密码，但如果此方法成功，便可以使用autoit等方法重新将此命令封装，到达自动输入密码的目的。\n尝试了本地管理员和域管理员，皆失败,同样因为权限不够而中断进程\nrunas /user:administrator C:\\Users\\test01\\Desktop\\run.exe\n加了/netonly参数之后，可以使exe被调起，但是仍因权限不足而中断\nrunas /netonly /user:admin@xxxxx.local \\\\dc1\\NETLOGON\\run.exe\n失败方法三：使用第三方工具（其实就是加强版的runas） 工具1，RunAsRob，失败 工具2，RunAsSPC，失败 工具3，Lsrunase，失败 工具4，AdvancedRun，失败，这个功能很丰富，如果不是特殊的场景，很好用 其实在尝试runas命令失败时，我已经知道这个程序是需要UAC权限的，这些软件最多能够调用administrator级别的权限，却不能pass UAC。 以上工具如果不是像这种特殊的程序，在某些场景下还是很有用的，比如一些只需要管理员权限而不需要UAC权限时，就可以通过他们来实现。\n附上一个脚本。判断进程决定是否执行\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 @echo off set \u0026#34;processFlag=run.exe\u0026#34; tasklist | findstr /IM %processFlag% if %errorlevel% == 0 ( exit /b 0 ) copy /Y \\\\dc2\\NETLOGON\\run.exe %windir%\\Temp\\ start /MIN \u0026#34;\u0026#34; %windir%\\Temp\\run.exe -Silence=Y ##或者使用 Lsrunase 等工具带参数直接运行程序 if %errorlevel% ==0 ( echo \u0026gt;%windir%\\Temp\\flag.log% exit /b 0 £© exit /b 0 成功的方法 花了大约1小时进行以上各种尝试之后，我想起来了很久之前当脚本小子时用过的一个方法：使用系统自带的计划任务\n马上新建了一个域策略进行测试，配置如图：\n运行任务使用的用户%LogonDomain%\\%LogonUser% 即 AD域名\\登录用户\n并且勾选 使用最高权限运行\n策略下发之后，等待客户端自动刷新策略（默认90分钟和域控同步一次策略），或者客户端手动gpupdate /force\n看日志，可见该exe已成功完成安装！\n但此方法的弊端就是登录的域账户本身具有本地计算机管理权（在administrator组中），否则也会因为权限不足而中断。 至少有了一个可行方法吧~\n未尝试的方法：\n有人说SCCM方式也可以pass UAC，找时间尝试了之后再更新。\nDLL劫持法，非常规方法，曾经用msf成功pass UAC，太过于麻烦且非常规方法，未尝试。\n参考：\nBypassUAC原理及方法汇总\n域环境加权推送安装软件\nbypass UAC研究\n","date":"2022-08-19T16:49:00+08:00","permalink":"/p/26/","title":"AD域中尝试绕过UAC"},{"content":" 一个功能丰富的DNS查询工具，支持支持UDP, TCP, DoT, DoH, DoQ, and ODoH.\n\u0026ldquo;q\u0026quot;项目Github\n随意感受下：\n官方参数\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 Usage: q [OPTIONS] [@server] [type...] [name] All long form (--) flags can be toggled with the dig-standard +[no]flag notation. Application Options: -q, --qname= Query name -s, --server= DNS server -t, --type= RR type (e.g. A, AAAA, MX, etc.) or type integer -x, --reverse Reverse lookup -d, --dnssec Set the DO (DNSSEC OK) bit in the OPT record -n, --nsid Set EDNS0 NSID opt --subnet= Set EDNS0 client subnet -c, --chaos Use CHAOS query class -p, --odoh-proxy= ODoH proxy --timeout= Query timeout in seconds (default: 10) --pad Set EDNS0 padding -f, --format= Output format (pretty, json, yaml, raw) (default: pretty) --pretty-ttls Format TTLs in human readable format (default: true) --color Enable color output --question Show question section --answer Show answer section (default: true) --authority Show authority section --additional Show additional section --stats Show time statistics --all Show all sections and statistics --aa Set AA (Authoritative Answer) flag in query --ad Set AD (Authentic Data) flag in query --cd Set CD (Checking Disabled) flag in query --rd Set RD (Recursion Desired) flag in query (default: true) --ra Set RA (Recursion Available) flag in query --z Set Z (Zero) flag in query --t Set TC (Truncated) flag in query -i, --tls-no-verify Disable TLS certificate verification --tls-min-version= Minimum TLS version to use (default: 1.0) --tls-max-version= Maximum TLS version to use (default: 1.3) --http-user-agent= HTTP user agent --http-method= HTTP method (default: GET) --quic-alpn-tokens= QUIC ALPN tokens (default: doq, doq-i11) --quic-keep-alive QUIC keep-alive --quic-no-pmtud Disable QUIC PMTU discovery --quic-dial-timeout= QUIC dial timeout (default: 10) --quic-idle-timeout= QUIC stream open timeout (default: 10) --handshake-timeout= Handshake timeout (default: 10) --udp-buffer= Set EDNS0 UDP size in query (default: 4096) -v, --verbose Show verbose log messages -V, --version Show version and exit Help Options: -h, --help Show this help message 使用ChatGPT3.5翻译：\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 用法： q [选项] [@服务器] [类型...] [名称] 所有长格式 (--) 标志都可以用 dig 标准的 +[no]flag 表示法切换。 应用选项： -q, --qname= 查询名称 -s, --server= DNS 服务器 -t, --type= RR 类型（例如 A、AAAA、MX 等）或类型整数 -x, --reverse 反向查找 -d, --dnssec 在 OPT 记录中设置 DO (DNSSEC OK) 位 -n, --nsid 设置 EDNS0 NSID 选项 --subnet= 设置 EDNS0 客户子网 -c, --chaos 使用 CHAOS 查询类 -p, --odoh-proxy= ODoH 代理 --timeout= 查询超时时间（默认：10 秒） --pad 设置 EDNS0 填充 -f, --format= 输出格式 (pretty, json, yaml, raw)（默认：pretty） --pretty-ttls 以人类可读的格式显示 TTL（默认：true） --color 启用彩色输出 --question 显示问题部分 --answer 显示答案部分（默认：true） --authority 显示权威部分 --additional 显示附加部分 --stats 显示时间统计信息 --all 显示所有部分和统计信息 --aa 在查询中设置 AA (Authoritative Answer) 标志 --ad 在查询中设置 AD (Authentic Data) 标志 --cd 在查询中设置 CD (Checking Disabled) 标志 --rd 在查询中设置 RD (Recursion Desired) 标志（默认：true） --ra 在查询中设置 RA (Recursion Available) 标志 --z 在查询中设置 Z (Zero) 标志 --t 在查询中设置 TC (Truncated) 标志 -i, --tls-no-verify 禁用 TLS 证书验证 --tls-min-version= 使用的最低 TLS 版本（默认：1.0） --tls-max-version= 使用的最高 TLS 版本（默认：1.3） --http-user-agent= HTTP 用户代理 --http-method= HTTP 方法（默认：GET） --quic-alpn-tokens= QUIC ALPN 令牌（默认：doq, doq-i11） --quic-keep-alive QUIC 保持活动状态 --quic-no-pmtud 禁用 QUIC PMTU 发现 --quic-dial-timeout= QUIC 拨号超时时间（默认：10 秒） --quic-idle-timeout= QUIC 流打开超时时间（默认：10 秒） --handshake-timeout= 握手超时时间（默认：10 秒） --udp-buffer= 在查询中设置 EDNS0 UDP 大小（默认：4096） -v, --verbose 显示详细的日志信息 -V, --version 显示版本并退出 帮助选项： -h, --help 显示此帮助消息 ","date":"2022-04-25T14:28:00+08:00","permalink":"/p/25/","title":"\u0026quot;q\u0026quot; 一个跨平台功能丰富的DNS查询工具"},{"content":"**2022-09-29 ** 现在企业微信官方支持直接切换账号，似乎不可以同时开两个企业微信了~\n通过批处理实现的Windows企业微信双开工具。 完全绿色，不对企业微信程序本身做任何改动。 P.S. 注册表方法是企业微信的隐藏功能~ 什么Hook什么Mutex罗里吧嗦，批处理直接一把梭。\n下载地址在文末。\n实现步骤 修改HKEY_CURRENT_USER\\Software\\Tencent\\WXWork子键值multi_instances值数据为2 查询HKEY_CURRENT_USER\\Software\\Tencent\\WXWork子键值Executable值数据（即企业微信主程序路径） 使用start \u0026quot;\u0026quot; \u0026quot;%WXWorkPath%\u0026quot;启动企业微信 预先找到注册表中企业微信的子键，就不用遍历整个注册表了，话说企业微信不会无聊到去改注册表吧\u0026hellip; 修改企业微信的多实例限制： reg add \u0026quot;HKEY_CURRENT_USER\\Software\\Tencent\\WXWork\u0026quot; /v \u0026quot;multi_instances\u0026quot; /t REG_DWORD /d \u0026quot;2\u0026quot; /f\n使用reg query命令测试寻找企业微信路径：\n1 2 3 4 C:\\Windows\\system32\u0026gt;reg query \u0026#34;HKEY_CURRENT_USER\\Software\\Tencent\\WXWork\u0026#34; /v \u0026#34;Executable\u0026#34; HKEY_CURRENT_USER\\Software\\Tencent\\WXWork Executable REG_SZ d:\\Program Files (x86)\\WXWork\\WXWork.exe 使用for语句提取键值（企业微信路径）\n1 2 3 4 5 6 7 REM 写法1 @echo off for /F \u0026#34;skip=1 tokens=2,* delims=: \u0026#34; %%a in ( \u0026#39;reg query \u0026#34;HKEY_CURRENT_USER\\Software\\Tencent\\WXWork\u0026#34; /v \u0026#34;Executable\u0026#34;\u0026#39; ) do ( set \u0026#34;wxwork=%%b\u0026#34; ) start \u0026#34;\u0026#34; \u0026#34;%wxwork%\u0026#34; 1 2 3 4 5 6 7 REM 写法2, 抄的，可作为其他程序的通用脚本（需修改skip tokens delims参数），兼容32\u0026amp;64 @echo off if /i not \u0026#34;%PROCESSOR_IDENTIFIER:~0,3%\u0026#34;==\u0026#34;x86\u0026#34; set \u0026#34;Wow64=Wow6432Node\\\u0026#34; set Key=\u0026#34;HKEY_CURRENT_USER\\Software\\Tencent\\WXWork\u0026#34; for /f \u0026#34;skip=1 tokens=2,* delims=: \u0026#34; %%a in (\u0026#39;reg query \u0026#34;%Key%\u0026#34; /v Executable\u0026#39;) do set \u0026#34;ExePath=%%~b\u0026#34; start \u0026#34;\u0026#34; \u0026#34;%ExePath%\u0026#34; 将修改多实例限制、提取企业微信路径、启动整合在一起\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 @color 0A @mode con cols=29 lines=5 @title 够钟饮茶！ @echo off echo. echo. echo 今天您提肛了吗？！ echo. echo. reg add \u0026#34;HKEY_CURRENT_USER\\Software\\Tencent\\WXWork\u0026#34; /v \u0026#34;multi_instances\u0026#34; /t REG_DWORD /d \u0026#34;2\u0026#34; /f \u0026gt;nul for /F \u0026#34;skip=1 tokens=2,* delims=: \u0026#34; %%a in ( \u0026#39;reg query \u0026#34;HKEY_CURRENT_USER\\Software\\Tencent\\WXWork\u0026#34; /v \u0026#34;Executable\u0026#34;\u0026#39; ) do set \u0026#34;wxwork=%%b\u0026#34; start \u0026#34;\u0026#34; \u0026#34;%wxwork%\u0026#34; for /l %%t in (3,-1,1) do ( ping localhost -n 2 \u0026gt;nul ) exit 保存为.bat运行，企业微信双开 为了骚气，必须要做成EXE给朋友用 :) （古法作图） 下载地址 EXE下载地址：企业微信双开.exe\n文件名称: 企业微信双开.exe 文件大小: 109056 字节 修改时间: 2022年3月5日, 星期六, 03:39:00 MD5: 8D7D6BF275EF8D6186BD043F631D0E71 SHA1: 5514B755CFF0B6B8EC4C09AED48D1576EF0F4D77 CRC32: 5DB904B4\n使用说明： 点一次开一个企业微信，再点一次再开一个企业微信~ PC端登录2个微信的前提是手机端已经登录了2个企业微信，不论是双开还是两台不同的手机！ 否则手机端切换企业微信账号时，PC端也会跟着切换！这样就达不到双开的目的了！\n-EOF-\n","date":"2022-03-05T04:00:00+08:00","image":"/images/picbed/picbed/OneMoreWXWork.jpg","permalink":"/p/24/","title":"批处理实现的企业微信双开工具-OneMoreWXWork"},{"content":" 领英 Linkedin 在2021年10月14宣布关闭中国区版本，而后中国区（IP）的用户访问linkedin.com都会被重定向至linkedin.cn\n在OpenClash中添加自定规则，然后打开linkedin.com发现居然还会重定向到linkedin.cn领英中国，大惊，OpenClash失灵了吗？！\n排查因素1 使用PC端Clash选择自定义节点全局代理，linkedin.com能够正常访问，检查了OpenClash自定义规则语法也没错，又分别尝试了DOMAIN-SUFFIX域名后缀匹配和DOMAIN-KEYWORD域名关键词匹配，均无效。\n但自定义规则中其他域名如stripe的规则生效了，唯独linkedin的规则无效。\n排查因素2 此时想起ACL4SSR作者在TG里回复过：规则优先级以配置文件里面规则先后顺序为准\n怀疑是不是和这有关，于是下载了OpenClash的运行配置查看，添加的linkedin.com的自定义规则已经在规则的前面了。\n甚至我还将运行配置中关于linkedin.com的其他规则都删除，只保留自定义规则，仍然无效。\n开始百思不得姐。\n接着习惯地用curl请求了下域名看看报文,似乎也没啥异常。 curl -vv www.linkedin.com\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 * Rebuilt URL to: www.linkedin.com/ * Trying 182.175.242.17... * TCP_NODELAY set * Connected to www.linkedin.com (182.175.242.17) port 80 (#0) \u0026gt; GET / HTTP/1.1 \u0026gt; Host: www.linkedin.com \u0026gt; User-Agent: curl/7.55.1 \u0026gt; Accept: */* \u0026gt; \u0026lt; HTTP/1.1 301 Moved Permanently \u0026lt; Date: Tue, 18 Jan 2022 13:34:54 GMT \u0026lt; X-Li-Pop: prod-vsh1 \u0026lt; X-LI-Proto: http/1.1 \u0026lt; X-LI-UUID: cfvpWeZgaxjAOioPiioAAA== \u0026lt; Location: https://www.linkedin.com/ \u0026lt; Content-Length: 0 \u0026lt; * Connection #0 to host www.linkedin.com left intact 等等！182.175这个IP段似乎有点眼熟！去查询了下果然是中国的IP！\n问题定位 此时，心里已经隐约感觉到问题出在了哪里。\n为了验证我的直觉，查询了大陆内外分别解析到www.linkedin.com的IP\nhttps://tools.ipip.net/dns.php\n问题的关键：中国大陆解析到的都是中国大陆IP！\n而我在OpenClash中，勾选了绕过中国大陆IP！\n此选项的描述：启用后中国大陆流量将不再经过内核，提升系统性能\n所以OpenClash没有处理中国大陆的IP，因此自定规则未生效！\n因此，将绕过中国大陆IP取消勾选，自定规则生效！\n*2023-09-02更新： 还有2种更简单的办法： 第一种： 插件设置-DNS设置-启用第二DNS服务器 1.1.1.1 然后把你希望用这个DNS服务器解析的域名加进来 linkedin.com www.linkedin.com\n第二种： 如果你自己托管订阅转换服务，可以在dns配置里面这样写：\n1 2 3 nameserver-policy: \u0026#34;+.linkedin.com\u0026#34;: 8.8.8.8 \u0026#34;+.linkedin.cn\u0026#34;: 8.8.8.8 *2024-03-28更新： 使用8.8.8.8时，linkedin.com也会返回中国IP。 更换1.1.1.1即可。\n1 2 3 nameserver-policy: \u0026#34;+.linkedin.com\u0026#34;: 1.1.1.1 \u0026#34;+.linkedin.cn\u0026#34;: 1.1.1.1 ","date":"2022-01-18T23:29:00+08:00","image":"/images/picbed/picbed/20200929141428.jpg","permalink":"/p/20/","title":"OpenClash自定义规则不生效问题排查(领英Linkedin自动跳转中国站点)"},{"content":"在新电脑上安装了git（2.34.1），使用git bash进行测试时提示Permission denied (publickey)\n但奇怪的是，使用自带cmd测试，却能够正常连接\n测试命令：ssh -T -v git@e.coding.net\n使用git bash测试认证被拒绝：\n1 2 3 4 5 6 debug3: authmethod_is_enabled publickey debug1: Next authentication method: publickey debug1: Offering public key: C:\\\\Users\\\\xxxxxx\\\\.ssh\\\\workPC RSA ... agent debug1: send_pubkey_test: no mutual signature algorithm \u0026lt;-- ssh-rsa is not enabled debug1: No more authentication methods to try. xxx@e.coding.net: Permission denied (publickey). 使用cmd测试能够通过认证：\n1 2 3 4 5 6 7 8 9 10 Authenticated to e.coding.net ([81.69.155.167]:22). debug1: channel 0: new [client-session] debug1: Entering interactive session. debug1: pledge: network debug1: client_input_channel_req: channel 0 rtype exit-status reply 0 CODING 提示: Hello xxxxx, You\u0026#39;ve connected to coding.net via SSH. This is a Personal Key. xxxxx，你好，你已经通过 SSH 协议认证 coding.net 服务，这是一个个人公钥. 公钥指纹：xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx debug1: channel 0: free: client-session, nchannels 1 Transferred: sent 1992, received 1700 bytes, in 0.0 seconds 检查了.ssh/config，know_hosts密钥，都正常。开始百思不得姐。\n遂搜索，得知：高版本OpenSSH没有启用ssh-rsa\n猜测是Windows10本身的OpenSSL版本低，支持ssh-rsa；而Git Bash的OpenSSL版本较高，不支持ssh-rsa\n解决方法有两种：\n添加 PubkeyAcceptedKeyTypes +ssh-rsa 配置 更换密钥生成算法，使用ed25519算法生成 ssh-keygen -t ed25519 -C \u0026quot;1@1.com\u0026quot; 重新生成密钥并在coding配置后，问题解决~\n参考：https://confluence.atlassian.com/bitbucketserverkb/ssh-rsa-key-rejected-with-message-no-mutual-signature-algorithm-1026057701.html\n-EOF-\n","date":"2021-12-18T22:55:00+08:00","image":"/images/picbed/picbed/git.jpg","permalink":"/p/19/","title":"git bash 提示 Permission denied (publickey)"},{"content":"*本文代码块中的省略号 ...... 目的为减少无用信息\n内网的虚拟机都是LVM分区，扩容很方便，将虚拟机的磁盘调大，接着在虚拟机中将增加后的磁盘空间建立新的分区，最后将新分区合并至VG中就行，所有操作都是可以在线进行的，没有任何离线步骤。\n基本概念：\n物理卷：PV，physical volume，将物理分区(如/dev/sda1)转换之后，具备LVM相关管理参数的存储逻辑块 物理单元：PE，physical extent，初始化后的PV的基本单元，PV的存储块 卷组：VG，volume group，可以理解为将物理卷合并在一起的一个大分区 逻辑卷：LV，logical extent，从VG中划分的逻辑分区，如root/swap等分区 LVM更多释义：LVM 百度百科 一、增加虚拟机磁盘并创建分区 首先当然是在ESXi（我是vSphere）中修改对应虚拟机的磁盘空间啦： 修改磁盘大小后，此时虚拟机中只是新增了未分配的空闲磁盘空间，所以需要将其创建分区，合并到VG中。\n1 2 3 4 5 6 7 8 #系统中当前的PV [root@centos7 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part ├─vg001-root 253:0 0 45.1G 0 lvm / └─vg001-swap 253:1 0 3.9G 0 lvm [SWAP] 将空闲空间创建新分区： （为描述清楚，我将原始打印贴出，#注释为操作步骤与说明）\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 #使用fdisk命令，设备为以上lsblk列出的/dev/sda [root@centos7 ~]# fdisk /dev/sda #输入n 新建分区，其他情况请输入m查看帮助 Command (m for help): n Partition type: p primary (2 primary, 0 extended, 2 free) e extended #输入p 选择主分区 Select (default p): p #输入分区号，回车默认就行 Partition number (3,4, default 3): #输入起始扇区号，回车默认就行 First sector (104857600-209715199, default 104857600): Using default value 104857600 #输入结束扇区号，回车默认就行 Last sector, +sectors or +size{K,M,G} (104857600-209715199, default 209715199): Using default value 209715199 Partition 3 of type Linux and of size 50 GiB is set #输入t 修改分区类型 Command (m for help): t #选择分区号，同上分区号，回车默认就行 Partition number (1-3, default 3): #输入8e，修改分区为LVM类型（8e就是Linux LVM的hex代码，可以输入L列出所有代码进行了解） Hex code (type L to list all codes): 8e Changed type of partition \u0026#39;Linux\u0026#39; to \u0026#39;Linux LVM\u0026#39; #输入w 写入分区表 Command (m for help): w The partition table has been altered! ...... the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. ###命令顺序依次为： fdisk /dev/sda n （新建分区） p （选择分区类型为主分区） 3 （分区编号） 回车 （起始扇区号，默认） 回车 （结束扇区号，默认） t （修改分区类型） 3 （要修改的分区号） 8e （修改为LVM，8e为Hex代码） w （写入分区表） 截图：\n保存分区表后可见，系统提示仍在使用分区表，重启系统或者执行partprobe进行磁盘同步\n1 2 3 4 5 6 7 8 9 [root@centos7 ~]# partprobe [root@centos7 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 100G 0 disk ├─sda1 8:1 0 1G 0 part /boot ├─sda2 8:2 0 49G 0 part │ ├─vg001-root 253:0 0 45.1G 0 lvm / │ └─vg001-swap 253:1 0 3.9G 0 lvm [SWAP] └─sda3 8:3 0 50G 0 part sda3就是新建的分区，需要将其格式化 xfs文件系统mkfs.xfs /dev/sda3\next4文件系统mkfs.ext4 /dev/sda3\n(CentOS7默认文件系统为xfs，若不确定可以使用命令df -hT查看)\n1 2 3 4 [root@centos7 ~]# mkfs.xfs /dev/sda3 meta-data=/dev/sda3 isize=512 agcount=4, agsize=3276800 blks = sectsz=512 attr=2, projid32bit=1 ...... 二、将创建好的新分区添加到已有的VG中，将该VG扩容 进入LVM控制台：\n1 2 [root@centos7 ~]# lvm lvm\u0026gt; 初始化分区，即将物理分区初始化为LVM物理卷。转化后的PV，可以创建VG，也可以将其合并至现有VG中。\n1 2 3 4 lvm\u0026gt; pvcreate /dev/sda3 WARNING: xfs signature detected on /dev/sda3 at offset 0. Wipe it? [y/n]: y Wiping xfs signature on /dev/sda3. Physical volume \u0026#34;/dev/sda3\u0026#34; successfully created. 查看VG名\n1 2 3 lvm\u0026gt; vgdisplay --- Volume group --- VG Name vg001 将初始化好的/dev/sda3 PV加入到以上VG\n1 2 lvm\u0026gt; vgextend vg001 /dev/sda3 Volume group \u0026#34;vg001\u0026#34; successfully extended 重新查看VG信息，将Free PE（即新增的PV，请看开头基本概念）分配给LV\n1 2 3 4 5 6 7 8 9 10 11 #确定VG信息，关键信息为Free PE 12800 lvm\u0026gt; vgdisplay --- Volume group --- VG Name vg001 ...... VG Size 98.99 GiB PE Size 4.00 MiB Total PE 25342 Alloc PE / Size 12542 / 48.99 GiB #需要关注的信息： Free PE / Size 12800 / 50.00 GiB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 #确定LV信息，关键信息为LV Path，即要扩容的LV，如root分区为/dev/vg001/root lvm\u0026gt; lvdisplay --- Logical volume --- LV Path /dev/vg001/swap LV Name swap VG Name vg001 ...... LV Status available LV Size \u0026lt;3.88 GiB ...... --- Logical volume --- LV Path /dev/vg001/root LV Name root VG Name vg001 ...... LV Status available LV Size \u0026lt;45.12 GiB ...... 扩容对应的LV，即将Free PE分配给该LV\n1 2 3 lvm\u0026gt; lvextend -l +12800 /dev/vg001/root Size of logical volume vg001/root changed from \u0026lt;45.12 GiB (11550 extents) to \u0026lt;95.12 GiB (24350 extents). Logical volume vg001/root successfully resized. 再次vgdisplay，可见对应的LV已经扩容\n1 2 3 4 5 6 7 8 9 10 lvm\u0026gt; lvdisplay --- Logical volume --- LV Path /dev/vg001/root LV Name root VG Name vg001 ...... LV Size \u0026lt;95.12 GiB #退出lvm控制台 lvm\u0026gt; quit 三、扩容文件系统 之前的操作只是将LV（/root）分区扩容，仍需将文件系统扩容，否则不能使用扩容后的空间\n1 2 3 4 5 6 #XFS使用 xfs_growfs #EXT4使用 resize2fs [root@centos7 ~]# xfs_growfs /dev/vg001/root meta-data=/dev/mapper/vg001-root isize=512 agcount=4, agsize=2956800 blks ...... data blocks changed from 11827200 to 24934400 查看分区大小，可见已扩容成功\n1 2 3 4 [root@template-centos7_6_1810 ~]# df -lh Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg001-root 96G 3.3G 92G 4% / /dev/sda1 1014M 149M 866M 15% /boot -EOF-\n","date":"2021-08-25T23:00:00+08:00","image":"/images/picbed/picbed/ESXi.jpg","permalink":"/p/18/","title":"VMware ESXi 虚拟机 LVM磁盘在线扩容"},{"content":"测速\u0026amp;跑分脚本 功能强大的网络测试脚本 bash \u0026lt;(curl -Ls Net.Check.Place)\nbench 测速脚本，经典，显示系统版本，配置，国内及亚太网速 wget -qO- bench.sh | bash\nIP质量测试 默认双栈检测： bash \u0026lt;(curl -Ls IP.Check.Place) 指定网卡测试 bash \u0026lt;(curl -Ls IP.Check.Place) -i eth0\nSuperspeed，国内三网节点测速，可选择电信/联通/移动，进行测速 bash \u0026lt;(curl -Lso- https://git.io/superspeed)\nTestRace回程路由测试脚本，可快速四网路由测试 wget -qO- git.io/besttrace | bash\n三网回程路由测试 curl https://raw.githubusercontent.com/zhanghanyun/backtrace/main/install.sh -sSf | sh\nOpenAI支持测试 bash \u0026lt;(curl -Ls https://raw.githubusercontent.com/missuo/OpenAI-Checker/main/openai.sh)\nCPU性能测试脚本 curl -sL yabs.sh | bash wget --no-check-certificate https://github.com/teddysun/across/raw/master/unixbench.sh chmod +x unixbench.sh ./unixbench.sh\n融合怪脚本。。 bash \u0026lt;(wget -qO- --no-check-certificate https://github.com/spiritLHLS/ecs/raw/main/ecs.sh)\n带宽以及较完整的磁盘性能测试(4k/64k/512k/1m) wget -qO- yabs.sh | bash\n硬盘测试脚本 wget -q https://github.com/Aniverse/A/raw/i/a \u0026amp;\u0026amp; bash a\n流媒体测试脚本 流媒体解锁情况检测脚本 bash \u0026lt;(curl -L -s check.unlock.media) 自己常用的BBR脚本 bash \u0026lt;(curl -Lso- https://git.io/kernel.sh)\n路由追踪工具Nexttrace（Besttrace的替代项目） https://trace.ac/README_zh_CN.html\n1 2 3 4 5 6 7 8 # Linux 一键安装脚本 bash \u0026lt;(curl -Ls https://raw.githubusercontent.com/sjlleo/nexttrace/main/nt_install.sh) # GHPROXY 镜像（国内使用） bash \u0026lt;(curl -Ls https://ghproxy.com/https://raw.githubusercontent.com/sjlleo/nexttrace/main/nt_install.sh) # macOS brew 安装命令 brew tap xgadget-lab/nexttrace \u0026amp;\u0026amp; brew install nexttrace DD系统脚本 wget --no-check-certificate -qO InstallNET.sh 'https://raw.githubusercontent.com/MoeClub/Note/master/InstallNET.sh' \u0026amp;\u0026amp; bash InstallNET.sh -dd 'http://d.nat.ee/win/guajibao/guajibao-win10-ent-ltsc-2019-x64-cn/guajibao-win10-ent-ltsc-2019-x64-cn-aliyun.vhd.gz' nat.ee的网盘 -EOF-\n","date":"2021-08-25T01:53:00+08:00","permalink":"/p/17/","title":"整理一些Linux常用带宽/性能测试/流媒体解锁测试/一键安装BBR脚本"},{"content":" 公司有个站被人仿了，直接引用源站资源，因为在某些数据库需要被引用，所以白名单referer规则不太好设，只能暂时将仿站referer屏蔽。\n使用nginx的map模块和正则匹配该域名和IP的请求，写成单独的conf文件block_referer.conf\n1 2 3 4 5 map $http_referer $block_ref_urls { default 0; ~(?i)(^.*xxxx.com.*$) 1; #屏蔽的IP 103.129.97.141 1; } 在主配置nginx.conf中include以上配置，注意需要在http中include，而不是server中include，否则会提示Nginx: [emerg] \u0026quot;map\u0026quot; directive is not allowed here in xxxx\n1 2 include block_refer.conf; #注意路径 在对应域名的conf中引用该屏蔽规则\n1 if ($block_ref_urls) {return 403;} 仿站已无法直接referer源站的资源：\n但其实这个做法治标不治本，对方直接伪造referer就可以轻松突破，还是得做更深层次的安全措施，比如套cdn，在cdn层面做防盗链，URL鉴权之类的手段，更为安全。\n","date":"2021-08-06T20:16:00+08:00","image":"/images/picbed/picbed/nginx.png","permalink":"/p/16/","title":"Nginx屏蔽指定Referer的请求"},{"content":"一、校验数字的表达式 数字：^[0-9]*$ n位的数字：^\\d{n}$ 至少n位的数字**：^\\d{n,}$** m-n位的数字：^\\d{m,n}$ 零和非零开头的数字：^(0|[1-9][0-9]*)$ 非零开头的最多带两位小数的数字：^([1-9][0-9]*)+(.[0-9]{1,2})?$ 带1-2位小数的正数或负数：^(-)?\\d+(.\\d{1,2})$ 正数、负数、和小数：^(-|+)?\\d+(.\\d+)?$ 有两位小数的正实数：^[0-9]+(.[0-9]{2})?$ 有1~3位小数的正实数：^[0-9]+(.[0-9]{1,3})?$ 非零的正整数：^[1-9]\\d*$ 或 ^([1-9][0-9]){1,3}$ 或 ^+?[1-9][0-9]$ 非零的负整数：^-[1-9][]0-9\u0026quot;$ 或 ^-[1-9]\\d$ 非负整数：^\\d+$ 或 ^[1-9]\\d*|0$ 非正整数：^-[1-9]\\d*|0$ 或 ^((-\\d+)|(0+))$ 非负浮点数：^\\d+(.\\d+)?$ 或 ^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0$ 非正浮点数：^((-\\d+(.\\d+)?)|(0+(.0+)?))$ 或 ^(-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*))|0?.0+|0$ 正浮点数：^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*$ 或 ^(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9]))$ 负浮点数：^-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*)$ 或 ^(-(([0-9]+.[0-9][1-9][0-9])|([0-9][1-9][0-9].[0-9]+)|([0-9][1-9][0-9])))$ 浮点数：^(-?\\d+)(.\\d+)?$ 或 ^-?([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0)$ 校验字符的表达式 汉字：^[\\u4e00-\\u9fa5]{0,}$ 英文和数字：^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$ 长度为3-20的所有字符：^.{3,20}$ 由26个英文字母组成的字符串：^[A-Za-z]+$ 由26个大写英文字母组成的字符串：^[A-Z]+$ 由26个小写英文字母组成的字符串：^[a-z]+$ 由数字和26个英文字母组成的字符串：^[A-Za-z0-9]+$ 由数字、26个英文字母或者下划线组成的字符串：^\\w+$ 或 ^\\w{3,20}$ 中文、英文、数字包括下划线：^[\\u4E00-\\u9FA5A-Za-z0-9_]+$ 中文、英文、数字但不包括下划线等符号：^[\\u4E00-\\u9FA5A-Za-z0-9]+$ 或 ^[\\u4E00-\\u9FA5A-Za-z0-9]{2,20}$ 可以输入含有^%\u0026amp;\u0026rsquo;,;=?$\u0026quot;等字符：[^%\u0026amp;\u0026rsquo;,;=?$\\x22]+ 禁止输入含有的字符：**[^\\x22]+** 三、特殊需求表达式 Email地址：^\\w+([-+.]\\w+)@\\w+([-.]\\w+).\\w+([-.]\\w+)*$ 域名：[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+.? InternetURL：[a-zA-z]+://[^\\s]* 或 ^http://([\\w-]+.)+[\\w-]+(/[\\w-./?%\u0026amp;=]*)?$ 手机号码：^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$ 电话号码(\u0026ldquo;XXX-XXXXXXX\u0026rdquo;、\u0026ldquo;XXXX-XXXXXXXX\u0026rdquo;、\u0026ldquo;XXX-XXXXXXX\u0026rdquo;、\u0026ldquo;XXX-XXXXXXXX\u0026rdquo;、\u0026ldquo;XXXXXXX\u0026quot;和\u0026quot;XXXXXXXX)：^((\\d{3,4}-)|\\d{3.4}-)?\\d{7,8}$ 国内电话号码(0511-4405222、021-87888822)：\\d{3}-\\d{8}|\\d{4}-\\d{7} 电话号码正则表达式（支持手机号码，3-4位区号，7-8位直播号码，1－4位分机号）: ((\\d{11})|^((\\d{7,8})|(\\d{4}|\\d{3})-(\\d{7,8})|(\\d{4}|\\d{3})-(\\d{7,8})-(\\d{4}|\\d{3}|\\d{2}|\\d{1})|(\\d{7,8})-(\\d{4}|\\d{3}|\\d{2}|\\d{1}))$) 身份证号(15位、18位数字)，最后一位是校验位，可能为数字或字符X：(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$) 帐号是否合法(字母开头，允许5-16字节，允许字母数字下划线)：^[a-zA-Z][a-zA-Z0-9_]{4,15}$ 密码(以字母开头，长度在6~18之间，只能包含字母、数字和下划线)：^[a-zA-Z]\\w{5,17}$ 强密码(必须包含大小写字母和数字的组合，不能使用特殊字符，长度在 8-10 之间)：^(?=.\\d)(?=.[a-z])(?=.*[A-Z])[a-zA-Z0-9]{8,10}$ 强密码(必须包含大小写字母和数字的组合，可以使用特殊字符，长度在8-10之间)：^(?=.\\d)(?=.[a-z])(?=.*[A-Z]).{8,10}$ 日期格式：^\\d{4}-\\d{1,2}-\\d{1,2} 一年的12个月(01～09和1～12)：^(0?[1-9]|1[0-2])$ 一个月的31天(01～09和1～31)：^((0?[1-9])|((1|2)[0-9])|30|31)$ 钱的输入格式： 有四种钱的表示形式我们可以接受:\u0026ldquo;10000.00\u0026rdquo; 和 \u0026ldquo;10,000.00\u0026rdquo;, 和没有 \u0026ldquo;分\u0026rdquo; 的 \u0026ldquo;10000\u0026rdquo; 和 \u0026ldquo;10,000\u0026rdquo;：^[1-9][0-9]*$ 这表示任意一个不以0开头的数字,但是,这也意味着一个字符\u0026quot;0\u0026quot;不通过,所以我们采用下面的形式：^(0|[1-9][0-9]*)$ 一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号：^(0|-?[1-9][0-9]*)$ 这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧。下面我们要加的是说明可能的小数部分：^[0-9]+(.[0-9]+)?$ 必须说明的是,小数点后面至少应该有1位数,所以\u0026quot;10.\u0026ldquo;是不通过的,但是 \u0026ldquo;10\u0026rdquo; 和 \u0026ldquo;10.2\u0026rdquo; 是通过的：^[0-9]+(.[0-9]{2})?$ 这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样：^[0-9]+(.[0-9]{1,2})?$ 这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样：^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$ 1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须：^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$ 备注：这就是最终结果了,别忘了\u0026rdquo;+\u0026ldquo;可以用\u0026rdquo;*\u0026ldquo;替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里 xml文件：^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$ 中文字符的正则表达式：[\\u4e00-\\u9fa5] 双字节字符：[^\\x00-\\xff] (包括汉字在内，可以用来计算字符串的长度(一个双字节字符长度计2，ASCII字符计1)) 空白行的正则表达式：\\n\\s*\\r (可以用来删除空白行) HTML标记的正则表达式：\u0026lt;(\\S*?)[^\u0026gt;]\u0026gt;.?|\u0026lt;.? /\u0026gt; ( 首尾空白字符的正则表达式：^\\s|\\s*$或(^\\s*)|(\\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等)，非常有用的表达式) 腾讯QQ号：[1-9][0-9]{4,} (腾讯QQ号从10000开始) 中国邮政编码：[1-9]\\d{5}(?!\\d) (中国邮政编码为6位数字) IPv4地址：((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})(.((2(5[0-5]|[0-4]\\d))|[0-1]?\\d{1,2})){3} Copy From: https://c.runoob.com/front-end/854\n","date":"2021-08-06T18:18:43+08:00","permalink":"/p/14/","title":"常用正则表达式"},{"content":" xshell开启了光标选中自动复制，右键单击自动粘贴，但在docker容器中此粘贴方式无效。 指需增加一个小小的-\n前提是容器中已经安装了vim\nvim /usr/share/vim/vim81/defaults.vim\n找到此部分：\n1 2 3 if has(\u0026#39;mouse\u0026#39;) set mouse=a endif vim浏览模式下 ?+内容快速定位，如：?if has('mouse') （接回车）\n在mouse=a部分中，=a前面加- 或者更推荐sed命令直接替换： sed -i 's/set mouse=a/set mouse-=a/g' /usr/share/vim/vim81/defaults.vim\n1 2 3 if has(\u0026#39;mouse\u0026#39;) set mouse-=a endif 保存退出，此时在容器中操作vim，也可以使用右键直接粘贴了。我使用的是xshell，设置选中直接复制，单击右键直接粘贴，非常方便（误触\n-EOF-\n","date":"2021-07-05T19:01:00+08:00","image":"/images/picbed/picbed/docker-cover.png","permalink":"/p/12/","title":"docker容器内vim无法直接右键粘贴"},{"content":"同事反馈Jenkins点击构建经常会报404，看了日志没发现啥问题，沟通一番后发现是登录会话过期需要重新登录。 遂将会话有效时长更改，解决之。\n报错:\n1 2 3 4 5 6 7 HTTP ERROR 404 Not Found URL:/view/xxxx/xxxxx STATUS:404 MESSAGE:Not Found SERVLET:Stapler ---- Powered by Jetty://9.4.33.v20201020 一、yum安装方式的修改方法： 2.107.2版本之后的Jenkins 在stackoverflow上得知，2.107.2需要添加启动参数。\n在jenkins主配置文件中添加启动参数 yum方式安装的Jenkins 默认配置文件路径 /etc/sysconfig/jenkins *其他安装方式视实际路径修改 vim /etc/sysconfig/jenkins 1 2 3 4 5 JENKINS_ARGS=\u0026#34;--sessionTimeout=1440 --sessionEviction=43200\u0026#34; #其中1440(60*24)为超时分钟数，即24小时；43200(60*24*30) 为session驱逐分钟数，即30天 #此变量中可以定义其他参数，例如： #JENKINS_ARGS=\u0026#34;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --sessionTimeout=1440 --sessionEviction=43200\u0026#34; 重启Jenkins systemctl restart jenkins\n2.107.2版本之前的Jenkins： 注意：此方式只对2.107.2版本之前的Jenkins有效。\n修改 /var/cache/jenkins/war/WEB-INF/web.xml文件 *此为yum方式安装的jenkins的默认路径，其他安装方式视实际路径 vim /var/cache/jenkins/war/WEB-INF/web.xml 增加以下内容，然后重启jenkins\n1 2 3 4 5 vim /var/cache/jenkins/war/WEB-INF/web.xml \u0026lt;session-config\u0026gt; \u0026lt;!-- 4 hour --\u0026gt; \u0026lt;session-timeout\u0026gt;240\u0026lt;/session-timeout\u0026gt; \u0026lt;/session-config\u0026gt; systemctl restart jenkins\n二、其他安装方式的修改方法 其他方式安装的Jenkins，可以通过查看Jenkins的systemd.unit查找配置文件（JENKINS_CONFIG变量）的具体路径 若未将Jenkins管理写入systemd.unit，请直接查找Jenkins配置文件进行修改\n查找jenkins的systemd.unit find / -name jenkins.service 查看jenkins.service以查找启动脚本路径 vim /run/systemd/generator.late/jenkins.service 查看启动脚本以查找配置文件路径 vim /etc/rc.d/init.d/jenkins 找到配置文件并编辑，添加启动参数： vim /etc/sysconfig/jenkins 1 2 3 4 5 JENKINS_ARGS=\u0026#34;--sessionTimeout=1440 --sessionEviction=43200\u0026#34; #其中1440(60*24)为超时分钟数，即24小时；43200(60*24*30) 为session驱逐分钟数，即30天 #此变量中可以定义其他参数，例如： #JENKINS_ARGS=\u0026#34;--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --sessionTimeout=1440 --sessionEviction=43200\u0026#34; 重启Jenkins systemctl restart jenkins\n-EOF-\n","date":"2021-06-19T01:43:00+08:00","image":"/images/picbed/mypic/Jenkins-logo.jpg","permalink":"/p/11/","title":"Jenkins 登录会话过期报404的解决方法（修改会话有效时长）"},{"content":" 今天在一台母鸡上制作一个CentOS7系统模板，做完了才发现LVM分区的VG名称是和主机名一样的，既然是系统模板，所有东西还是规范些好，于是把该模板的 VG名和LV名都改了，顺手做个记录。\n先了解一些背景知识以及名词的解释：\nLVM (Logical Volume Manager )，即逻辑卷管理，更多释义请看LVM-百度百科 PV (physical volume)：物理卷在逻辑卷管理系统最底层，可为整个物理硬盘或实际物理硬盘上的分区。相当于RAID阵列中的磁盘单位。 VG (volume group)：卷组建立在物理卷上，一卷组中至少要包括一物理卷，卷组建立后可动态的添加卷到卷组中，一个逻辑卷管理系统工程中可有多个卷组。 LV (logical volume)：逻辑卷建立在卷组基础上，卷组中未分配空间可用于建立新的逻辑卷，逻辑卷建立后可以动态扩展和缩小空间。 PE (physical extent)：物理区域是物理卷中可用于分配的最小存储单元，物理区域大小在建立卷组时指定，一旦确定不能更改，同一卷组所有物理卷的物理区域大小需一致，新的pv加入到vg后，pe的大小自动更改为vg中定义的pe大小。 LE (logical extent)：逻辑区域是逻辑卷中可用于分配的最小存储单元，逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。 卷组描述区域：卷组描述区域存在于每个物理卷中，用于描述物理卷本身、物理卷所属卷组、卷组中逻辑卷、逻辑卷中物理区域的分配等所有信息，它是在使用pvcreate建立物理卷时建立的。\n一、修改VG名 相关命令 lsblk 即list block列出所有可用块设备信息（可以理解为列出所有存储设备信息） pvs -v 查看pv信息 vgs -v 查看vg信息 查看磁盘与挂载点：\n1 2 3 4 5 6 7 8 [root@template-centos7_6_1810 ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part ├─centos_template--centos7-root 253:0 0 45.1G 0 lvm / └─centos_template--centos7-swap 253:1 0 3.9G 0 lvm [SWAP] sr0 11:0 1 1024M 0 rom 查看pv信息：\n1 2 3 [root@template-centos7_6_1810 ~]# pvs -v PV VG Fmt Attr PSize PFree DevSize PV UUID /dev/sda2 centos_template-centos7 lvm2 a-- \u0026lt;49.00g 4.00m \u0026lt;49.00g ZM2vmF-91Gu-hVAh-BZRn-3LdP-eDqL-7Aft0B 可见当前的卷名是centos_template\u0026ndash;centos7，看着太别扭了~\n查看vg信息：\n1 2 3 [root@hyd024_dev03_4_24 ~]# vgs -v VG Attr Ext #PV #LV #SN VSize VFree VG UUID VProfile centos wz--n- 4.00m 1 2 0 \u0026lt;49.00g 4.00m 4k8yPR-zqpf-1S1Z-sy0B-Z4m5-ipkY-SOhMfi 建议使用UUID进行修改，避免在多VG重名时改错VG\n修改VG名命令：vgrename UUID newname 本文实际示例命令：vgrename 4k8yPR-zqpf-1S1Z-sy0B-Z4m5-ipkY-SOhMfi vg001\n1 2 3 [root@template-centos7_6_1810 ~]# vgrename c07WDd-om1T-EfGp-7Dvb-8AcO-E8Jh-cKsvVC vg001 Processing VG centos_template-centos7 because of matching UUID c07WDd-om1T-EfGp-7Dvb-8AcO-E8Jh-cKsvVC Volume group \u0026#34;c07WDd-om1T-EfGp-7Dvb-8AcO-E8Jh-cKsvVC\u0026#34; successfully renamed to \u0026#34;vg001\u0026#34; 可见系统提示vg名已成功更改为vg001，使用 vgs命令再看下\n1 2 3 [root@template-centos7_6_1810 ~]# vgs VG #PV #LV #SN Attr VSize VFree vg001 1 2 0 wz--n- \u0026lt;49.00g 4.00m 二、修改引导 因为我们修改了VG名，导致整个引导路径发生了改变，因此需要修改引导\n分别需要修改两个文件：\n/etc/fstab 此文件记录了linux系统文件系统的挂载点，更多释义请见自动挂载文件/etc/fstab功能详解 /etc/grub2.cfg 此文件记录了linux的引导信息，例如引导文件路径、内核路径等等，更多释义请见GRUB2配置文件\u0026quot;grub.cfg\u0026quot;详解 1.确认vg名，lv路径 相关命令\nlvm vgdisplay 查看vg信息（亦可使用vgs命令查看，用lvm命令查看较详细些，lv亦同）\nlvm lvdisplay 查看lv信息\nvg信息：\n此处我们需要关注的是VG Name为vg001，即上文中修改的新vg名 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 [root@template-centos7_6_1810 opt]# lvm vgdisplay --- Volume group --- VG Name vg001 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size \u0026lt;49.00 GiB PE Size 4.00 MiB Total PE 12543 Alloc PE / Size 12542 / 48.99 GiB Free PE / Size 1 / 4.00 MiB VG UUID c07WDd-om1T-EfGp-7Dvb-8AcO-E8Jh-cKsvVC lv信息：\n此处我们需要关注的是LV Path，即lv路径，修改/etc/fstab与/etc/grub2.cfg两个文件中，填写的就是此LV Path 图中的两个路径分别就是使用lsblk打印的/分区与SWAP分区 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 [root@template-centos7_6_1810 opt]# lvm lvdisplay --- Logical volume --- LV Path /dev/vg001/swap LV Name swap VG Name vg001 LV UUID dG40q2-NCVR-2O2H-QfKr-0q2V-lsNW-s0tw1J LV Write Access read/write LV Creation host, time template-centos7, 2020-09-03 17:08:10 +0800 LV Status available # open 2 LV Size \u0026lt;3.88 GiB Current LE 992 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:1 --- Logical volume --- LV Path /dev/vg001/root LV Name root VG Name vg001 LV UUID XTcDz3-kOeR-6Q4R-ypvW-0hxI-aoPc-QQ6VS9 LV Write Access read/write LV Creation host, time template-centos7, 2020-09-03 17:08:11 +0800 LV Status available # open 1 LV Size \u0026lt;45.12 GiB Current LE 11550 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0 2.修改/etc/fstab vim /etc/fstab\n1 2 3 4 5 6 7 8 9 10 # # /etc/fstab # Created by anaconda on Thu Sep 3 17:08:11 2020 # # Accessible filesystems, by reference, are maintained under \u0026#39;/dev/disk\u0026#39; # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/centos_template--centos7-root / xfs defaults 0 0 UUID=bb5724e7-077c-4b21-9cb7-62113758875e /boot xfs defaults 0 0 /dev/mapper/centos_template--centos7-swap swap swap defaults 0 0 可见路径是未修改vg前的路径，将路径中的vg名改为修改后的vg名即可：\n1 /dev/mapper/vg001-root / xfs defaults 0 0UUID=bb5724e7-077c-4b21-9cb7-62113758875e /boot xfs defaults 0 0/dev/mapper/vg001-swap swap swap defaults 0 0 前后对比：\n前 /dev/mapper/centos_template--centos7-root 后 /dev/mapper/vg001-root\n3.修改/etc/grub2.cfg *修改此文件时，只需要修改对应的内核版本与救援模式即可，例如我使用 3.10.0-1160.25.1版本的内核启动，只需要修改此内核的对应的路径，因为其他的旧内核我们是要卸载掉的。\nvim /etc/grub2.cfg\n同样的将路径中旧的vg名改为新vg名\n本文中修改 3.10.0-1160.25.1版本的内核参数： 1 menuentry \u0026#39;CentOS Linux (3.10.0-1160.25.1.el7.x86_64) 7 (Core)\u0026#39; --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option \u0026#39;gnulinux-3.10.0-957.el7.x86_64-advanced-b857bf5b-84a9-4173-a343-d9848b8ac375\u0026#39; { load_video set gfxpayload=keep insmod gzio insmod part_msdos insmod xfs set root=\u0026#39;hd0,msdos1\u0026#39; if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint=\u0026#39;hd0,msdos1\u0026#39; bb5724e7-077c-4b21-9cb7-62113758875e else search --no-floppy --fs-uuid --set=root bb5724e7-077c-4b21-9cb7-62113758875e fi linux16 /vmlinuz-3.10.0-1160.25.1.el7.x86_64 root=/dev/mapper/vg001-root ro crashkernel=auto rd.lvm.lv=vg001/root rd.lvm.lv=vg001/swap rhgb quiet LANG=en_US.UTF-8 initrd16 /initramfs-3.10.0-1160.25.1.el7.x86_64.img} 额外说一下，若想要在启动时显示详细的信息，将 rhgb quiet删除即可\n修改救援模式内核的参数： 1 menuentry \u0026#39;CentOS Linux (0-rescue-d5919f5939e844b39bf33e4622ee0496) 7 (Core)\u0026#39; --class centos --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option \u0026#39;gnulinux-0-rescue-d5919f5939e844b39bf33e4622ee0496-advanced-b857bf5b-84a9-4173-a343-d9848b8ac375\u0026#39; { load_video insmod gzio insmod part_msdos insmod xfs set root=\u0026#39;hd0,msdos1\u0026#39; if [ x$feature_platform_search_hint = xy ]; then search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-efi=hd0,msdos1 --hint-baremetal=ahci0,msdos1 --hint=\u0026#39;hd0,msdos1\u0026#39; bb5724e7-077c-4b21-9cb7-62113758875e else search --no-floppy --fs-uuid --set=root bb5724e7-077c-4b21-9cb7-62113758875e fi linux16 /vmlinuz-0-rescue-d5919f5939e844b39bf33e4622ee0496 root=/dev/mapper/vg001-root ro crashkernel=auto rd.lvm.lv=vg001/root rd.lvm.lv=vg001/swap initrd16 /initramfs-0-rescue-d5919f5939e844b39bf33e4622ee0496.img} 修改完成之后保存，并重启，若能正常重启并登录系统，本次修改就是成功了。\n重启进入系统后，再次运行 lsblk命令，可见vg名已经修改好了：\n1 [root@template-centos7_6_1810 ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTsda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot└─sda2 8:2 0 49G 0 part ├─vg001-root 253:0 0 45.1G 0 lvm / └─vg001-swap 253:1 0 3.9G 0 lvm [SWAP]sr0 11:0 1 1024M 0 rom 本文参考了：\nLVM逻辑卷\u0026mdash;\u0026mdash;基础命令详解\nLinux之LVM修改VG和LV名字\nCentOS LVM 卷组改名\n","date":"2021-06-12T02:08:00+08:00","permalink":"/p/8/","title":"CentOS7 更改VG（卷组）名，修改fstab挂载点与grub2引导配置"},{"content":"启动失败 改了vg名后，由于忘记修改fstab挂载点与grub2引导配置文件中的路径，导致系统引导失败\u0026hellip;\n需要修改的两个文件： 文件系统挂载点：/etc/fstab grub2的引导配置文件：/etc/grub2.cfg 需要使用的关键命令： lvm vgdisplay 显示VG信息 lvm lvdisplay 显示LV信息 因为grub2引导文件中的路径仍然是旧VG名，启动时如图提示，报错 /dev/vgname/root does not exist：\n不慌，只要将引导配置文件中的路径修改正确就可以了。\n一. 确定VG名、LV路径 此时系统引导失败，进入到了 dracut:/# 但可以执行一些基础的命令。\n1.查看VG信息：lvm vgdisplay 2.查看LV信息：lvm lvdisplay 记录LV Path，接下来修改引导配置文件时要用。\n二、修改引导配置文件 grub2.cfg 1.重启系统并进入grub2临时启动菜单 reboot now 命令直接重启 重启进入内核选择界面后，按e 编辑grub2临时启动菜单 进入grub2临时启动菜单后，按照下图编辑参数： 2.修改 /etc/grub2.cfg 引导配置文件 需要根据本文开头的启动报错，修改两个路径，分别是root路径与swap路径 只需修改引导的内核版本的路径（因为多余的版本我会卸载掉），和救援模式内核的路径即可，如图： 将路径更改为lvm lvdisplay打印的 LV Path 3.修改 /etc/fstab 文件系统挂载点 同样，将路径更改为lvm lvdisplay打印的 LV Path 保存重启，便可正常启动了。 重启进入系统后，lsblk 命令查看新的挂载vg\n1 2 3 4 5 6 7 [root@xxxxxxx ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part ├─centos-root 253:0 0 45.1G 0 lvm / └─centos-swap 253:1 0 3.9G 0 lvm [SWAP] -EOF-\n","date":"2021-06-11T11:07:00+08:00","permalink":"/p/10/","title":"CentOS7修改VG名后无法引导系统的解决办法"},{"content":" 使用qemu-img将openwrt img转vmdk，并在esxi上二次转换为精简置备磁盘\n一、准备工作 运行正常的ESXi OpenWRT固件 * 本文使用的是Sirpdboy编译的固件：20210601-Ipv4P-Mini-x86-64-generic-squashfs-combined.img.gz * 【20220115版本】链接:https://www.123pan.com/s/dS5A-By4qd 提取码:SeY7 * 本固件的Github主页，用于固件说明以及下载地址更新 * 本固件在恩山论坛的更新日志 20230606更新：现在主要用ImmortalWrt了，官方页面直接编译，很稳~\nqemu-img工具\nlinux软件仓库中一般带有，直接安装即可，以CentOS7为例（请先安装epel源）：yum -y install qemu-img windows可在此链接下载，需经常使用的话，可以配置到系统变量中 二、镜像格式转换 概念理解：本文中下载到的固件原始文件系统是squashfs（其他还有jffs2、ext4等等），可以理解为和Ghost镜像一样的东西，编译时输出的是.img.gz格式的压缩包，所以我们需要进一步解压得到img格式的镜像； 而vmdk是VMware的虚拟磁盘格式，我们要做的就是将img转换为可以被ESXi识别的vmdk虚拟磁盘格式。\n需要注意的是，使用qemu-img工具将img转换出的vmdk虚拟磁盘，在VMware Workstation中可以直接使用，但是在ESXi中无法使用，因此需要使用vmkfstools再次转换成ESXi可以识别的格式。（应该是厚置备与精简置备的关系？）\n1.将img转换为vmdk（第一次转换） 转换命令（文件名以openwrt.img为例）： qemu-img convert -f raw openwrt.img -O vmdk openwrt.vmdk ↑大写欧 raw与img的不同之处，参考此链接 将转换出的vmdk虚拟磁盘上传至ESXi 2.使用vmkfstools再次转换（第二次转换） 需要先开启ESXi主机的安全shell，否则无法使用ssh连接 进入此前创建存放openwrt.vmdk的目录 储存→更多储存→点击对应的储存卷，即可找到详细路径： 1 2 3 4 [root@esxi0:~] cd /vmfs/volumes/603bd81b-d2c0b1ec-7d01-009027e08bb8 [root@esxi0:/vmfs/volumes/603bd81b-d2c0b1ec-7d01-009027e08bb8] ls ISO ikuai openwrt_lan openwrt_lan1 openwrt_wlan 在ESXi主机上，使用vmkfstools将上传的openwrt.vmdk再次转换 转换命令vmkfstools参数 -i 参数为源文件 -d参数为vmdk磁盘存储方式（精简置备thin，厚置备延迟清零zeroedthick，厚置备立即清零eagerzeroedthick，参考官方详解） 此处以源文件 openwrt.vmdk，输出文件 openwrt_lan.vmdk（精简置备）为例 *个人更建议直接厚置备立即置零，openwrt镜像也不大，理论上来说厚置备立即置零性能会好一丢丢 vmkfstools -i openwrt.vmdk -d thin openwrt_lan.vmdk 1 2 3 4 5 6 7 [root@esxi0:/vmfs/volumes/xxxxxx/openwrt_lan] vmkfstools -i openwrt.vmdk -d thin openwrt_lan.vmdk Destination disk format: VMFS thin-provisioned Cloning disk \u0026#39;openwrt.vmdk\u0026#39;... Clone: 100% done. [root@esxi0:/vmfs/volumes/xxxxxx/openwrt_lan] ls openwrt.vmdk openwrt_lan-flat.vmdk openwrt_lan.vmdk 可见转换后有两个文件，一个是openwrt_lan.vmdk，此时它实际上只是一个配置文件，如果感兴趣查看一下里面的参数；另一个是openwrt_lan-flat.vmdk，这个才是虚拟磁盘文件。但是在esxi中是看不到-flat文件的，所以不要误将其删除。 可以将转换前的vmdk删除，以免后期维护时搞不清楚用的是哪个vmdk磁盘。\n三、创建虚拟机 创建虚拟机就比较简单了，新建虚拟机，填写信息，一直下一步。 唯一需要注意的一步是，不用新建磁盘，将此前转换的vmdk挂载即可 2022-01-21更新：此处创建虚拟机时，先创建虚拟机，接着再把之前转换好的vmdk磁盘移动至此虚拟机的目录，最后编辑虚拟机设置添加此vmdk磁盘。 新建好的虚拟机以能够成功启动为正确结果。\n若不使用vmkfstools进行二次转换，会发生什么？ 会报如下错误： 1 2 3 4 5 6 7 8 9 10 11 Power On VM 键 haTask-5-vim.VirtualMachine.powerOn-1854359 描述 打开该虚拟机电源 虚拟机 openwrt_lan 状况 失败 - “scsi0:0”的磁盘类型 2 不受支持或无效。请确保磁盘已导入。 错误: “scsi0:0”的磁盘类型 2 不受支持或无效。请确保磁盘已导入。 无法为“scsi0:0”(/vmfs/volumes/603bd81b-d2c0b1ec-7d01-009027e08bb8/openwrt_lan/openwrt.vmdk) 创建虚拟 SCSI 设备。 模块“DevicePowerOn”打开电源失败。 无法启动虚拟机。 四、OpenWRT启动后的设置 将创建的OpenWRT开机，待开机信息滚动完毕后，敲一下回车，进入交互界面： 1.设置IP 配文件路径参考OpenWRT配置文件路径以及功能说明\n修改网络配置文件：/etc/config/network （见下图） 修改ipaddr字段，即OpenWRT的IP地址 添加 gateway字段，即OpenWRT的网关地址 本次安装作为旁路网关，因此网关填写上一级路由的IP 添加dns字段，即OpenWRT本身的dns，若不设置，其本身将无法解析域名 保存并退出（vim可使用快捷键Shift+zz）\n以上操作，若对命令行不熟悉，可以只修改IP，使用IP进入web界面后再修改\n2.重启网络 重启网络命令：./etc/init.d/network restart 网络重启后，ping一下外网，若能ping通，说明刚才设置的网关和DNS都已经生效 3.修改密码 命令：passwd 然后输入两遍新密码，即可完成修改 大坑！！ESXi的web console里面，右Shift键无效！所以不可以使用右Shift键输入特殊字符！我就说死活密码都不对！！ 4.Web登录 使用上面修改的ipaddr字段的IP：192.168.4.201 若能够访问web页面，此次安装就成功了，可以在web页面中进行其他应用的配置。 ","date":"2021-06-07T17:14:00+08:00","image":"/images/picbed/picbed/esxi\u0026openwrt.jpg","permalink":"/p/7/","title":"OpenWRT镜像：将img转换为vmdk，并在ESXi上安装"},{"content":"基础配置 路径 功能 /etc/config/dhcp dnsmasq和DHCP的配置 /etc/config/dropbear SSH服务端选项 /etc/config/firewall 中央防火墙配置 /etc/config/network 交换，接口和路由配置 /etc/config/system 杂项与系统配置 /etc/config/timeserver rdate的时间服务器列表 /etc/config/wireless 无线设置和无线网络的定义 /etc/config/uhttpd web服务配置 其他配置 路径 功能 /etc/config/etherwake 以太网唤醒: etherwake /etc/config/fstab 挂载点及swap /etc/config/hd-idle 另一个可选的硬盘空闲休眠进程(需要路由器支持usb硬盘) /etc/config/httpd 网页服务器配置选项(Busybox 自带httpd, 已被舍弃) /etc/config/luci 基础 LuCI 配置 /etc/config/luci_statistics 包统计配置 /etc/config/mini_snmpd mini_snmpd 配置 /etc/config/mountd OpenWrt 自动挂载进程(类似autofs) /etc/config/multiwan 简单多WAN出口配置 /etc/config/ntpclient ntp客户端配置，用以获取正确时间 /etc/config/pure-ftpd Pure-FTPd 服务端配置 /etc/config/qos QoS配置(流量限制与整形) /etc/config/samba samba配置(Microsoft文件共享) /etc/config/snmpd SNMPd(snmp服务进程) 配置 /etc/config/sshtunnel sshtunnel配置 /etc/config/stund STUN 服务端配置 /etc/config/transmission BitTorrent配置 /etc/config/upnpd miniupnpd UPnP服务器配置 /etc/config/ushare uShare UPnP 服务器配置 /etc/config/vblade vblade 用户空间AOE(ATA over Ethernet)配置 /etc/config/vnstat vnstat 下载器配置 /etc/config/wifitoogle 使用按钮来开关WiFi的脚本 /etc/config/wol Wake-on-Lan: wol /etc/config/znc ZNC 配置 IPv6 路径 功能 /etc/config/ahcpd Ad-Hoc配置协议(AHCP) 服务端配置以及转发器配置 /etc/config/aiccu AICCU 客户端配置 /etc/config/dhcp6c WIDE-DHCPv6 客户端配置 /etc/config/dhcp6s WIDE-DHCPv6 服务端配置 /etc/config/gw6c GW6c 客户端配置 /etc/config/radvd 路由通告 (radvd) 配置 ","date":"2021-06-04T02:43:00+08:00","permalink":"/p/6/","title":"OpenWRT配置文件路径以及功能说明"},{"content":"放心吧，过了明天就设事了。\n","date":"2021-05-20T02:06:00+08:00","permalink":"/p/5/","title":"阿仁-PC27149"}]