[{"content":"声明：原作者信息\n哔哩哔哩主页：https://space.bilibili.com/2017026819 Github主页：https://github.com/FireflyAyaka QQ号：2037566388 温馨提示：本教程仅适用于UEFI设备 (包括虚拟机模拟UEFI或真机UEFI)。使用传统BIOS(Legacy)设备的，出门左拐，找其他教程去\n🎒 准备开始 需要准备的东西 最新版的Arch Linux ISO镜像文件 一个U盘(如果你要在实体机安装的话) 重要注意事项 ✨ 安全小贴士 ✨\n备份好所有重要数据 操作有风险，三思而后行 如果是第一次尝试，强烈建议先在虚拟机里练习 🖥️ 启动Live环境 启动方式选择 使用虚拟机：直接加载下载好的ISO镜像启动 使用实体机：需要用工具把ISO写入U盘后从U盘启动 💾 一、磁盘分区与配置 1. 使用cfdisk分区工具 1 cfdisk /dev/sda 分区步骤详解 初始化磁盘格式：选择 gpt 选项 创建EFI系统分区： 大小设置为500M 类型选 EFI System 创建根分区： 使用剩下的所有空间 类型选择 Linux root (x86-64) 分区表示例 1 2 3 4 5 6 Disk: /dev/sda Size: 64GiB Label: gpt Device Start End Size Type /dev/sda1 2048 1026047 500M EFI System /dev/sda2 1026048 134215679 63.5G Linux root (x86-64) 选择Write写入分区表 输入yes确认写入 选择quit退出程序\n2. 格式化分区操作 1 2 3 4 5 # 格式化EFI分区为FAT32格式 mkfs.fat -F32 -n \u0026#34;arch-efi\u0026#34; /dev/sda1 # 格式化根分区为Btrfs格式 mkfs.btrfs -L \u0026#34;arch-root\u0026#34; /dev/sda2 3. Btrfs子卷设置 1 2 3 4 5 6 7 8 9 # 先挂载根分区 mount /dev/sda2 /mnt # 创建必要的子卷 btrfs subvolume create /mnt/@ # 根目录子卷 btrfs subvolume create /mnt/@home # 用户目录子卷 # 临时卸载 umount /mnt 4. 创建挂载点结构（请在挂载@子卷后执行） 1 2 3 4 5 # 创建必要的目录结构 mkdir -p /mnt/{boot/efi,home} # 挂载EFI分区 mount /dev/sda1 /mnt/boot/efi 5. 分情况挂载磁盘 根据你的硬件配置选择并执行合适的挂载命令：\n实体机（SSD，2017年及以后的CPU）： 1 2 mount -o subvol=@,compress=zstd:3,noatime,ssd /dev/sda2 /mnt # 挂载主卷 mount -o subvol=@home,compress=zstd:4,noatime,ssd /dev/sda2 /mnt/home # 挂载用户卷 实体机（SSD，2016年及以前的CPU）： 1 2 mount -o subvol=@,compress=zstd:2,noatime,ssd /dev/sda2 /mnt # 挂载主卷 mount -o subvol=@home,compress=zstd:3,noatime,ssd /dev/sda2 /mnt/home # 挂载用户卷 虚拟机（虚拟磁盘文件存放在SSD，注意不是虚拟磁盘模拟SSD！）： 1 2 mount -o subvol=@,compress=zstd:1,noatime,ssd /dev/sda2 /mnt # 挂载主卷 mount -o subvol=@home,compress=zstd:2,noatime,ssd /dev/sda2 /mnt/home # 挂载用户卷 HDD（实体机HDD/虚拟磁盘文件存放在HDD）： 1 2 mount -o subvol=@,compress=lzo,noatime /dev/sda2 /mnt # 挂载主卷 mount -o subvol=@home,compress=lzo,noatime /dev/sda2 /mnt/home # 挂载用户卷 不确定CPU发布年份，但只确定使用SSD（实体机SSD/虚拟磁盘文件存放在SSD）： 1 2 mount -o subvol=@,compress=auto,noatime,ssd /dev/sda2 /mnt # 挂载主卷 mount -o subvol=@home,compress=auto,noatime,ssd /dev/sda2 /mnt/home # 挂载用户卷 不确定CPU发布年份，但只确定使用HDD（实体机HDD/虚拟磁盘文件存放在HDD）或完全不确定： 1 2 mount -o subvol=@,compress=auto,noatime /dev/sda2 /mnt # 挂载主卷 mount -o subvol=@home,compress=auto,noatime /dev/sda2 /mnt/home # 挂载用户卷 📦 二、安装基础系统 1. 配置pacman 1 nano /etc/pacman.conf 找到并取消注释 Color\n在下面添加 ILoveCandy\n在文件末尾添加以下内容：\\\n1 2 [archlinuxcn] Server = https://mirrors.163.com/archlinux-cn/$arch 必做！ 不加这个到时候你pacstrap装不了paru！（paru相关详见Q\u0026amp;A）\n完事后保存，然后添加archlinuxcn密钥：\n1 2 pacman-key --lsign-key \u0026#39;farseerfc@archlinux.org\u0026#39; pacman -Sy archlinuxcn-keyring （拍桌）重要操作！ 这一步相当于给软件源上一把锁，不做的话后面装软件会报错到怀疑人生～\n2. 使用国内镜像加速 1 2 3 4 5 6 # 设置镜像源 echo \u0026#39;Server = https://mirrors.jxust.edu.cn/archlinux/$repo/os/$arch\u0026#39; \u0026gt; /etc/pacman.d/mirrorlist # 江西理工大学是一个很快的镜像源，比隔壁北外都快（北外最近开始限速了） echo \u0026#39;Server = https://mirrors.163.com/archlinux/$repo/os/$arch\u0026#39; \u0026gt;\u0026gt; /etc/pacman.d/mirrorlist # 可选，添加该备用源后可在江西理工大学镜像源不可用时让冈门替补 # 刷新软件包数据库 pacman -Syy 3. 安装基本系统 1 pacstrap /mnt base base-devel linux-zen linux-zen-headers linux-firmware htop cpupower nano dhcpcd net-tools networkmanager iw wpa_supplicant bluez bluez-utils grub efibootmgr sudo doas snapper fastfetch paru # 这里paru来自archlinuxcn源 ⚙️ 三、系统基础配置 1. 生成fstab 1 genfstab -U /mnt \u0026gt;\u0026gt; /mnt/etc/fstab 2. 进入新系统环境 1 arch-chroot /mnt 3. 本地化设置 1 2 3 4 5 6 7 8 9 10 11 12 # 设置中文locale nano /etc/locale.gen # 取消注释 zh_CN.UTF-8 UTF-8 locale-gen # 设置默认语言 echo LANG=zh_CN.UTF-8 \u0026gt; /etc/locale.conf # 设置时区 ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime # 这里没有北京，只有上海～ # 同步硬件时钟 hwclock --systohc --utc 4. 网络相关配置 1 2 3 4 5 6 7 # 设置主机名(示例主机名ayaka，因为原作者是个绫华厨！可以改成你喜欢的名字) echo ayaka \u0026gt; /etc/hostname # 启用网络服务 systemctl enable dhcpcd # DHCP systemctl enable NetworkManager # WiFi和有线 systemctl enable bluetooth # 蓝牙 5. 用户账户管理 1 2 3 4 5 6 7 8 # 设置root密码 passwd root # 创建普通用户(示例用户名为firefly，因为原作者也是个流萤厨！可以改成你喜欢的名字) useradd -m -g users -G wheel -s /bin/bash firefly # 设置用户密码(记得将“firefly”改为你的用户名) passwd firefly 6. 配置sudo和doas 配置sudo： 1 EDITOR=nano visudo 在文件末尾添加以下内容（记得将“firefly”改为你的用户名）：\n1 2 3 4 %wheel ALL=(ALL:ALL) ALL %sudo ALL=(ALL:ALL) ALL firefly ALL=(ALL:ALL) ALL Defaults pwfeedback 配置doas（双重保险！不加这个到时候sudo炸了你就老实了）： 1 nano /etc/doas.conf 添加以下内容（记得将“firefly”改为你的用户名）：\n1 2 3 4 permit persist keepenv setenv { -ENV LANG=zh_CN.UTF-8 } root as root permit persist keepenv setenv { -ENV LANG=zh_CN.UTF-8 } :wheel as root permit persist keepenv setenv { -ENV LANG=zh_CN.UTF-8 } :sudo as root permit persist keepenv setenv { -ENV LANG=zh_CN.UTF-8 } firefly as root 7. 安装引导程序 1 2 3 4 5 6 7 8 9 # 安装GRUB引导 grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=\u0026#39;Arch Linux\u0026#39; # 生成GRUB配置 grub-mkconfig -o /boot/grub/grub.cfg # 生成initramfs echo \u0026#39;HOOKS=(base udev autodetect microcode modconf kms keyboard keymap consolefont block filesystems btrfs fsck)\u0026#39; \u0026gt;\u0026gt; /etc/mkinitcpio.conf mkinitcpio -p linux-zen 8. 完成安装，准备重启 1 2 3 4 5 6 7 8 # 退出chroot环境 exit # 卸载所有分区 umount -R /mnt # 重启进入新系统 reboot 🖥️ 四、安装图形界面 1. 登录新系统 使用之前设置的用户名和密码登录tty终端，随后输入以下命令并回车：\n1 LANG=C 2. 配置pacman 1 sudo nano /etc/pacman.conf 找到并取消注释 Color\n在下面添加 ILoveCandy\n在文件末尾添加以下内容：\n1 2 [archlinuxcn] Server = https://mirrors.163.com/archlinux-cn/$arch 必做！ 不做这一步你到时候没法更新paru！ 完事后保存，然后添加archlinuxcn密钥：\n1 2 sudo pacman-key --lsign-key \u0026#39;farseerfc@archlinux.org\u0026#39; paru -Sy archlinuxcn-keyring （拍桌）重要操作！ 这一步相当于给软件源上一把锁，不做的话后面装软件会报错到怀疑人生～\n3. 使用国内镜像加速 1 2 3 4 5 6 # 设置镜像源 echo \u0026#39;Server = https://mirrors.jxust.edu.cn/archlinux/$repo/os/$arch\u0026#39; | sudo tee /etc/pacman.d/mirrorlist echo \u0026#39;Server = https://mirrors.163.com/archlinux/$repo/os/$arch\u0026#39; | sudo tee -a /etc/pacman.d/mirrorlist # 刷新软件包数据库 paru -Syy 4. 安装GNOME桌面环境、中文输入法和常用软件 1 2 3 paru -Sy --needed xorg gnome gnome-tweaks ptyxis gnome-nettool gnome-usage adwaita-icon-theme xdg-user-dirs-gtk fwupd gdm ibus ibus-libpinyin qt5ct qt6ct wps-office wps-office-fonts ttf-wps-win10 waterfox-bin vlc wqy-microhei adw-gtk-theme # 其中waterfox、wps-office、wps-office-fonts和ttf-wps-win10是AUR软件，这里我们用bin是为了加快安装速度；注意wps-office、wps-office-fonts和ttf-wps-win10没有bin paru -R epiphany # 顺便淦掉GNOME自带的难用的浏览器 echo \u0026#39;export QT_QPA_PLATFORMTHEME=qt5ct\u0026#39; | tee -a ~/.xprofile | tee -a ~/.profile | tee -a ~/.bashrc # 设置Qt优化工具 5. 字体缓存重建 1 sudo fc-cache -fv 6. 启用显示管理器并重启 1 2 sudo systemctl enable gdm sudo reboot 🎉 四、大功告成！ 恭喜你！现在可以享受你的Arch Linux系统啦！(ﾉ◕ヮ◕)ﾉ*:･ﾟ✧\n小提示： 第一次进入GNOME桌面时，别忘了点击\u0026quot;进行导览\u0026quot;看看新手教程哦～\n配置输入法： 打开GNOME设置 → 键盘 → 添加输入源 → 中文 → 汉语（智能拼音） → 将“汉语（智能拼音）”放在第一位\n🔙 五、Snapper使用教程 1. Snapper是什么？ Snapper是一款用于Linux系统的系统备份和恢复工具 ，它能创建系统快照，就像给系统拍了一张张“照片”。在系统出现问题时（比如软件冲突导致无法启动、错误配置影响使用等情况），能将系统恢复到之前正常的状态。因其出色的备份与恢复能力，在Arch Linux堪称“必装软件”！\n反而隔壁Timeshift，Rsync很慢，Btrfs有bug！不信请看VCR：\\\n真实案例1： 原作者曾在Ta的March7th Ace 41.2实体机备份系统后使用sudo dnf upgrade --refresh进行系统更新，结果Ta的AMD显卡驱动炸了！因为Ta在安装March7th Ace 41.2时使用了ext4文件系统，只能使用Timeshift Rsync。Ta尝试恢复备份，结果因为Ta的系统有一堆零碎文件，导致不管是备份还是恢复都很慢！\nMoieo的调侃： “你当时就应该用Snapper！现在怎么办？凉拌！ ”（拿起Fedora 42 Live USB疯狂暗示原作者）\n真实案例2： 原作者不信邪，使用Btrfs子卷模式重装March7th Vista 42.1后尝试立即使用Timeshift Btrfs备份，备份很快，但到了关键时候就掉链子了！Ta继续尝试更新系统，重启后还是一样：AMD显卡驱动炸了！于是，Ta尝试恢复之前的备份，结果！重启后，系统屡次Kernel Panic！于是，Ta就只好重装March7th Vista 42.3，并和Ta的数据说拜拜咯！\n群友3595258138的回复： timeshift不适用于Btrfs，强行使用可能会导致还原出错系统崩溃，Btrfs可考虑使用opensuse的snapper\n2. 如何使用Snapper？ 详见 Snapper - Arch Linux 中文维基。\n❓ 六、Q\u0026amp;A Q：不添加archlinuxcn密钥会怎么样？ A：会收到“签名无效”警告，无法安装paru、中文输入法、微信等archlinuxcn源软件，然后只能重装系统💥\nQ：sudo和doas我该用哪个？ A：优先使用sudo。如果你的sudo坏了（如“即使密码输入正确，也提示验证失败”），则使用doas。\nQ：为什么在tty下输入其他命令前还需要执行LANG=C？ A：这可不是什么“仪式感”！因为tty无法显示中文！执行后，该终端执行的命令会以英文输出。（当然这不会影响桌面环境下的终端，因此你每次进tty都得执行一遍这个）\nQ：为什么推荐使用paru进行所有软件包操作，而不是使用pacman和yay？ A：paru是一个新晋AUR助手。它有一个很NB的点，那就是：paru支持无缝对接pacman，这一点yay干不到！通过paru，你就能像使用pacman那样，一键搜索官方源和AUR软件！（前面甚至都不用加sudo/doas，少打5个字符！）\n当然，你也可以为了方便，在安装完成后，这么干！\n1 2 3 4 5 echo \u0026#39;alias yay=paru\u0026#39; \u0026gt;\u0026gt; ~/.bashrc echo \u0026#39;alias pacman=paru\u0026#39; \u0026gt;\u0026gt; ~/.bashrc sudo -i # 好人干到底！！！ echo \u0026#39;alias yay=paru\u0026#39; \u0026gt;\u0026gt; ~/.bashrc echo \u0026#39;alias pacman=paru\u0026#39; \u0026gt;\u0026gt; ~/.bashrc 如果你用的zsh，那你就这么干！\n1 2 echo \u0026#39;alias yay=paru\u0026#39; \u0026gt;\u0026gt; ~/.zshrc echo \u0026#39;alias pacman=paru\u0026#39; \u0026gt;\u0026gt; ~/.zshrc 温馨提示：别他妈手欠把paru扬了，到时候你只能暂时unalias把paru用pacman弄回来！\nQ：为啥我创建快照时提示「空间不足」？ A：检查一下/.snapshots目录！\nBtrfs 快照会共享文件数据，但子卷本身需要预留空间 如果你往系统里塞了 100 个 G 的原神缓存，快照空间当然会爆啊！（ du -sh /var/cache/paru自己查！） Q：Btrfs 快照真的比 Rsync 快 100 倍？ A：实测数据说话：\nRsync 备份 20GB 系统：23 分钟（零碎文件让它像蜗牛） Btrfs 快照：0.3 秒（写时复制直接“克隆”元数据）\n（这就是为什么我宁愿花 1 小时研究 Btrfs，也不愿再等 Rsync 龟速备份） Q：不小心把重要快照扬了，还能抢救吗？ A：节哀顺变…\nBtrfs快照删除后默认直接释放空间，不像Rsync有“保留版本”机制 下次记得定期检查快照列表（ btrfs subvolume list /.snapshots），别他妈手滑点“删除”！ Q：能不能用 Snapper 备份 Windows 分区？ A：你在想屁吃！\nTimeshift 只认 Btrfs Windows 的 NTFS 分区？建议用winsync或者直接买移动硬盘拷贝！ Q：教程里说「Snapper 是 Arch 必装」，真的不是广告吗？ A：当然不是！\n除非 openSUSE 给我打钱（但他们开源项目穷得连服务器都靠爱发电） 装不装随你，但等你误扬/usr又没快照时，别他妈来论坛哭唧唧！ Q：能不能在快照期间强制关机？ A：你想炸系统啊？！\nBtrfs 快照创建时正在记录元数据，强制关机可能导致文件系统损坏 正确做法：等快照完成，或者先喝杯咖啡再关机～ Q：系统卡顿/风扇狂转怎么办？ A：先查这！\n打开终端输入 htop → 找出占用资源的进程（可能是paru编译AUR包） 笔记本用户：安装并启用power-profiles-daemon优化电池管理： 1 2 3 paru -S power-profiles-daemon sudo systemctl enable power-profiles-daemon.service sudo systemctl start power-profiles-daemon.service 桌面环境：GNOME默认后台服务较多，可禁用不必要的扩展 Q：SSD寿命会被Btrfs淦爆吗？ A：想多了！\nBtrfs自带TRIM支持（默认启用） 日常使用下，512GB SSD撑10年没问题（除非你拿它当硬盘录像机） Q：Steam游戏卡顿/闪退？ A：兼容模式欢迎你！\n1 2 3 # 安装Steam Play paru -S steam-native-runtime proton-ge-custom # 右键游戏 → 属性 → Steam Play → 勾选“启用非Steam游戏兼容层” Q：如何优雅地截图？ A：按下Print Screen键，直接进入GNOME Screenshot！\nQ：能Arch上安装Windows软件吗？ A：当然能！ 简单程序：用wine！（paru -S wine-staging） 复杂软件：装虚拟机！（Virtualbox/VMware）\nQ：误删/usr了怎么办？ A：凉拌炒鸡蛋，好吃又好看！\n1 reboot \u0026amp;\u0026amp; sudo pacman -S arch-install-scripts # 重装吧，少年 开玩笑的。。。如果你之前有Snapper备份，还可以抢救一下（Snapper没备份过你就重装吧老弟）\nQ：Arch能用来办公吗？ A：不仅能！还能摸鱼！\n办公：LibreOffice 摸鱼： 原神，启动！ 崩铁，启动！ Q：为什么我们选择Arch而不是Ubuntu？ A：因为我们追求：\n滚动更新带来的新鲜感 自己配置系统的掌控感 向新手炫耀时的成就感😎\n（Ubuntu：那我走？）\n以及\u0026hellip;\u0026hellip; 不被Snap限制的自由感！\n（Ubuntu：Snap多好用啊） Q：Arch难吗？ A：那必须的！但学会后：\n装Windows系统像过家家 看其他Linux文档像读小学课本 从此告别“电脑小白”称号🏆 Q：其他问题？ A：Arch Linux 中文维基 里面请\nQ：中文Wiki没写？ A：出门右拐 Arch Linux Wiki\nQ：英文Wiki也没写？ A：（拍桌）大侠且慢！此处藏着30万Arch玩家，再难的坑也能给你盘出花来：Arch Linux 中文论坛\nQ：为什么这个教程天天在更新？ A：原作者要么就是为了语言表述更准确，要么就是因为你们的建议要更新教程，以及呼应Arch Linux滚动更新\nQ：当前教程版本号？ A：北京时间 2025年8月3日 20:00:00\n","date":"2025-05-26T22:37:35+08:00","permalink":"https://blog.moieo.net/2025/05/26/223735/","title":"Arch Linux UEFI 安装指南：Btrfs 子卷 + GNOME 桌面环境"},{"content":"在 Plasma 6 中的 Dolphin 使用文件共享\n安装相关的插件 1 pacman -Sy kdenetwork-filesharing 编辑 Samba 配置文件 文件路径 /etc/samba/smb.conf\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 [global] usershare path = /var/lib/samba/usershares usershare max shares = 100 # usershare allow guests = yes usershare owner only = no workgroup = WORKGROUP security = user passdb backend = smbpasswd name resolve order = lmhosts bcast host wins unix charset = UTF-8 load printers = no printing = bsd printcap name = /dev/null disable spoolss = yes show add printer wizard = no server string = Samba Server log file = /var/log/samba/log.%m # Put a capping on the size of the log files (in Kb). max log size = 50 dns proxy = no #============================ Share Definitions ============================== # #[homes] # 启用这个块会默认共享对应用户的home目录 # comment = Home Directories # browsable = no # writable = yes 配置用户组和文件夹 1 2 3 4 5 mkdir /var/lib/samba/usershares groupadd fileshare usermod -a -G fileshare $(whoami) chown root:fileshare /var/lib/samba/usershares chmod 1771 /var/lib/samba/usershares 启动 Samba 服务 1 2 systemctl restart smb nmb systemctl enable smb nmb 将Linux用户添加到Samba数据库 这一步可以为Samba用户设置独立的密码\n1 smbpasswd -a $(whoami) 重启 1 reboot ","date":"2025-04-24T22:05:48+08:00","permalink":"https://blog.moieo.net/2025/04/24/220548/","title":"ArchLinux Plasma 6 开启Samba服务（文件共享）"},{"content":"连接网络 插入有线连接再启动ISO就行了，不深究 使用ping t.cn 能通就行了\n更新系统时钟 1 2 3 4 timedatectl set-ntp true # 将系统时间与网络时间进行同步 timedatectl status # 检查服务状态 更换镜像 要换镜像网上搜去，这里不提供！\n分区 使用fdisk工具进行分区操作 我这里使用的是\n分区 大小 设备 备注 / 500GiB /dev/nvme0n1p7 根目录（系统装在这个分区里） /boot 1Gib /dev/nvme0n1p6 引导分区 /boot/efi /dev/nvme0n1p1 与Windows共用 格式化 将创建好的分区进行格式化，这里使用btrfs格式的根目录分区 btrfs 格式的分区可以使用 zstd 进行压缩，支持快照功能\n1 2 mkfs.btrfs -f /dev/nvme0n1p7 mkfs.ext4 /dev/nvme0n1p6 挂载分区\n1 2 3 4 5 6 # 挂载根目录分区 (我是不是应该创建子卷更好，毕竟我已经用btrfs了都) mount -t btrfs -o compress=zstd:5 /dev/nvme0n1p7 /mnt # 创建引导分区挂载需要的文件夹 mkdir /mnt/boot # 挂载引导分区 mount -t ext4 /dev/nvme0n1p6 /mnt/boot 安装系统基础软件 1 pacstrap /mnt base base-devel linux linux-firmware btrfs-progs networkmanager neovim sudo bash bash-completion grub efibootmgr os-prober 生成 fstab 文件 fstab 用来定义磁盘分区。它是 Linux 系统中重要的文件之一。使用 genfstab 自动根据当前挂载情况生成并写入 fstab 文件\n1 genfstab -U /mnt \u0026gt; /mnt/etc/fstab 复查一下 /mnt/etc/fstab 确保没有错误\n1 cat /mnt/etc/fstab 切换到系统中 1 arch_chroot /mnt 修改时区 1 ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 🍧 碎碎念 不要找北京啦！这里没有北京，只有上海啦！🚀\n硬件时间设置 将系统时间同步到硬件时间\n1 hwclock --systohc 修改语言 1 vim /etc/locale.gen 将en_US.UTF-8和zh_CN.UTF-8解除注释，然后用以下命令生成\n1 locale-gen 需要添加相关的字体\n1 sudo pacman -S noto-fonts-cjk noto-fonts-emoji noto-fonts-extra 创建用户 如果需要安装plasma6桌面或者 GNOME 桌面，必须创建一个普通用户\n1 useradd -G wheel [用户名] 安装 Grub 1 grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=\u0026#34;Arch Linux\u0026#34; 生成Grub配置文件 1 grub-mkconfig -o /boot/grub/grub.cfg 安装 Plasma 6 蓝牙相关的，如果没有蓝牙可以省略 kde-applications 包含了KDE全家桶，不需要可以不装\n1 pacman -S plasma kde-applications sddm networkmanager bluez bluez-utils 需要启动相关的服务\n1 systemctl enable sddm bluetooth NetworkManager 安装完成 1 2 3 exit # 退出 arch_chroot umount -R /mnt reboot 优化和问题解决 电源管理 1 2 3 sudo pacman -S power-profiles-daemon sudo systemctl start power-profiles-daemon.service sudo systemctl enable power-profiles-daemon.service 解决回退的蜂鸣声 编辑 /etc/modprobe.d/nobeep.conf\n1 blacklist pcspkr sddm中蓝牙自动连接 蓝牙被软锁了，但是暂时没发现其他解决方法，这样解决也可以 编辑 /etc/udev/rules.d/99-rfkill-unblock-bluetooth.rules\n1 ACTION==\u0026#34;add\u0026#34;, SUBSYSTEM==\u0026#34;bluetooth\u0026#34;, KERNEL==\u0026#34;hci0\u0026#34;, RUN+=\u0026#34;/usr/bin/rfkill unblock bluetooth\u0026#34; 配置 AMD GPU 我用的是 AMD Radeon 780M 的集承显卡 修改 /etc/mkinitcpio.conf\n1 MODULES=(amdgpu radeon) 再修改 /etc/default/grub 中的 GRUB_CMDLINE_LINUX_DEFAULT 加入 radeon.cik_support=0 amdgpu.cik_support=1\n","date":"2025-04-23T15:21:37+08:00","permalink":"https://blog.moieo.net/2025/04/23/152137/","title":"ArchLinux安装过程"},{"content":"问题说明：普通用户使用 OpenOCD 进行烧录时，无法访问USB设备，Arduino无法访问串口，每次使用 sudo 或者 pkexec 都需要输入密码，非常麻烦\n解决方案 把 OpenOCD 的 openocd/contrib/60-openocd.rules 复制到 /etc/udev/rules.d/ 文件夹中\n串口的权限问题 编辑文件 sudo vim /etc/udev/rules.d/70-ttyusb.rules 文件内容\n1 KERNEL==\u0026#34;ttyUSB[0-9]*\u0026#34;, MODE=\u0026#34;666\u0026#34; 以上方案执行sudo udevadm control --reload后生效\n","date":"2025-02-02T18:53:12+08:00","permalink":"https://blog.moieo.net/2025/02/02/185312/","title":"解决OpenOCD/串口在Linux中的权限问题"},{"content":"测试环境 Linux: Fedora 41 GNOME 47 HMCL 启动器：https://hmcl.huangyuhui.net/download/ 安装相关环境： 1 sudo dnf install java-21-openjdk openjfx 注意：Fedora 自带的 java-21-openjdk-handless 无法启动 HMCL\n需要在 Dash 栏显示软件名称的，需要编辑文件 ~/.local/share/applications/hmcl.desktop 内容：\n1 2 3 4 5 6 7 8 9 10 11 [Desktop Entry] Encoding=UTF-8 Name=HMCL GenericName=Hello Minecraft! Launcher Comment=A launcher to start Minecraft Exec=java -Dprism.forceGPU=true -jar /home/moieo/Minecraft/HMCL-3.6.11.jar Icon=/home/moieo/Minecraft/.icon@8x.png StartupWMClass=org.jackhuang.hmcl.Launcher Terminal=false Type=Application Categories=Application;Game; ICON 和 JAR 路径根据自己的情况修改 ICON 可以解压 JAR 包获取 如果使用了 Rounded Window Corners Reborn 圆角插件的，需要将插件排除包名org.jackhuang.hmcl.Launcher，否则会有一个透明边框在外围\n字体使用 文泉驿，界面正常显示\n1 2 3 sudo dnf install wqy-bitmap-fonts -y sudo dnf install wqy-unibit-fonts -y sudo dnf install wqy-zenhei-fonts -y ","date":"2025-01-30T20:00:00+08:00","image":"https://static.983577.xyz/images/2025/01/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_2025-01-30_195129_880.webp","permalink":"https://blog.moieo.net/2025/01/30/200000/","title":"Linux的GNOME中配置Minecraft游戏环境"},{"content":"通过 ADC 方式采样 NTC 热敏电阻 (10K) 得到 12 位采样数据（右对齐）\n通过 Steinhart-Hart 方程计算并得到温度计算公式 适用于 3.3v 基准电压，12 位宽 的情况\n转换公式如下\n1 2 3 4 #define to_temperature(adc_value) (1.0 / (0.001129148 + 0.000234185 * \\ log((10000 * adc_value * (3.3 / 4095.0)) / (3.3 - adc_value * \\ (3.3 / 4095.0))) + 0.0000000876741 * pow(log((10000 * adc_value * \\ (3.3 / 4095.0)) / (3.3 - adc_value * (3.3 / 4095.0))), 3))) - 273.15 ","date":"2024-07-31T22:15:20+08:00","permalink":"https://blog.moieo.net/2024/07/31/221520/","title":"ADC 采样 NTC 热敏电阻计算实际温度值"},{"content":"直接放一个实物图在这里 接线放在这里~\nSTM32F103C8T6 4x4 A0 C4 A1 C3 A2 C2 A3 C1 A4 R1 A5 R2 A6 R3 A7 R4 实现原理 遍历矩阵的每一行，开始时将当前遍历的行设置为 低电平，再扫描每一列并判断找出为低电平的列号，符合要求时记录行号和列号 结束当前行时再将当前行设置为 高电平\n源代码 MATRIX_KEY_Sx 的编号由行号和列号组成 matrix_key.h\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 #ifndef __MATRIX_KEY__ #define __MATRIX_KEY__ #include \u0026lt;stm32f10x.h\u0026gt; #define ROW_PINS (GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7) // 定义行引脚为GPIOA的4、5、6、7 #define COL_PINS (GPIO_Pin_0 | GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3) // 定义列引脚为GPIOA的0、1、2、3 // 第1行 #define MATRIX_KEY_S1 0x18 // 0001 1000 #define MATRIX_KEY_S2 0x14 // 0001 0100 #define MATRIX_KEY_S3 0x12 // 0001 0010 #define MATRIX_KEY_S4 0x11 // 0001 0001 // 第2行 #define MATRIX_KEY_S5 0x28 // 0010 1000 #define MATRIX_KEY_S6 0x24 // 0010 0100 #define MATRIX_KEY_S7 0x22 // 0010 0010 #define MATRIX_KEY_S8 0x21 // 0010 0001 // 第3行 #define MATRIX_KEY_S9 0x48 // 0100 0100 #define MATRIX_KEY_S10 0x44 // 0100 0100 #define MATRIX_KEY_S11 0x42 // 0100 0010 #define MATRIX_KEY_S12 0x41 // 0100 0001 // 第4行 #define MATRIX_KEY_S13 0x88 // 1000 1000 #define MATRIX_KEY_S14 0x84 // 1000 0100 #define MATRIX_KEY_S15 0x82 // 1000 0010 #define MATRIX_KEY_S16 0x81 // 1000 0001 void Init_Matrix_Key(void); void Scan_Matrix_Key(void (*Call_Back)(uint8_t)); #endif matrix_key.c\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 #include \u0026lt;stm32f10x.h\u0026gt; #include \u0026lt;Delay.h\u0026gt; #include \u0026lt;matrix_key.h\u0026gt; void Init_Matrix_Key(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // 使能GPIOA时钟 // 设置行引脚为推挽输出 GPIO_InitStructure.GPIO_Pin = ROW_PINS; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, \u0026amp;GPIO_InitStructure); // 设置列引脚为上拉输入 GPIO_InitStructure.GPIO_Pin = COL_PINS; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU; GPIO_Init(GPIOA, \u0026amp;GPIO_InitStructure); } void Scan_Matrix_Key(void (*Call_Back)(uint8_t)) { uint8_t row, col; uint8_t keyDetected = 0; for (row = 0; row \u0026lt; 4; row++) { // 遍历行 GPIO_ResetBits(GPIOA, 1 \u0026lt;\u0026lt; (row + 4)); // 将当前行置为低电平，注意这里使用1 \u0026lt;\u0026lt; (row + 4)来选中行 Delay_us(10); // 短暂延时以稳定电平 for (col = 0; col \u0026lt; 4; col++) { // 遍历列 if (GPIO_ReadInputDataBit(GPIOA, 1 \u0026lt;\u0026lt; col) == Bit_RESET) { // 判断该列是否为低电平 Delay_ms(100); // 延时去抖动 if (GPIO_ReadInputDataBit(GPIOA, 1 \u0026lt;\u0026lt; col) == Bit_RESET) { // 再次检查，确认按键被按下 keyDetected = (1 \u0026lt;\u0026lt; col) | (1 \u0026lt;\u0026lt; (row + 4)); // 记录按键位置 Call_Back(keyDetected); break; // 跳出列循环，因为同一时间只能有一个按键被按下 } while(GPIO_ReadInputDataBit(GPIOA, 1 \u0026lt;\u0026lt; col) == Bit_RESET);// 等待弹起 } } GPIO_SetBits(GPIOA, 1 \u0026lt;\u0026lt; (row + 4)); // 恢复该行至高电平 if (keyDetected) { break; // 如果检测到按键，跳出行循环 } } } 在 main 中调用\n1 2 3 4 5 6 7 8 9 10 11 12 13 14 void Matrix_Key_Callback(uint8_t key) { switch(key) { case MATRIX_KEY_S1: // TODO break; } } int main(void) { Init_Matrix_Key(); // 初始化\twhile (1) { Scan_Matrix_Key(Matrix_Key_Callback); } } 你可以在串口中输出按键的号码~ ","date":"2024-07-09T19:44:57+08:00","permalink":"https://blog.moieo.net/2024/07/09/194457/","title":"STM32F103 实现 4x4 矩阵键盘的扫描"},{"content":"为什么要使用文档生成工具？ 使用文档工具可以快速生成文档的静态网站，节省非常多的时间，提高效率，一致性以易于维护和分发\n文档生成工具可以帮助作者将内容按照逻辑结构组织起来，比如章节、子章节等，确保信息有序且易于查找 统一主题样式，保持整个文档一致的品牌风格和视觉效果 自动生成目录，方便读者快速导航 生成的静态页面对搜索引擎友好，加载速度也较快，可以提高网站的访问速度和用户体验 首先说说 VuePress 吧\nVuePress VuePress 是一个基于 Vue 的静态网站生成器。它使用 Markdown 来编写文档，并使用 Vue 来渲染文档内容\n优点 高度可定制：基于 Vue.js，可以非常灵活地定制文档界面和功能 性能优异：利用 Vue 的单页应用特性，提供良好的页面加载性能和用户体验 SEO 友好：默认集成了 SEO 优化功能 Markdown 支持：良好的 Markdown 支持，易于编写文档 缺点 学习曲线：对于不熟悉 Vue.js 的用户来说，可能需要一定的学习成本。 **复杂配置：**对于高级功能，配置可能相对复杂。 Docusaurus Docusaurus 是一个简洁且强大的静态站点生成器，适用于快速构建和维护项目文档、博客和技术宣传页面。由Meta（前身为Facebook）开源，它利用React技术栈，使得用户能够以Markdown格式轻松编写和组织内容。\n优点 易于配置：配置简单，易于上手。 Markdown 支持：支持 Markdown，编写文档方便。 主题丰富：提供多个美观的主题供选择。 社区支持：由 Facebook 支持，社区活跃。 缺点 功能相对有限：相比于 VuePress，高级功能可能不足。 性能：相比于 VuePress，页面加载速度可能较慢。 MkDocs MkDocs 是一个轻量级的静态网站生成器，专为编写和发布项目文档而设计。它允许用户使用简单的 Markdown 语言来撰写文档，并通过 MkDocs 的构建命令将这些 Markdown 文件转换成结构化的、美观的 HTML 静态网页。\n优点 简单易用：安装和配置简单，适合初学者。 ** Markdown 友好**：对 Markdown 的支持很好，编写文档轻松。 可定制性：可以通过自定义 CSS 和模板进行一定程度的定制。 插件系统：有一套可用的插件，可以扩展功能。 缺点 自定义能力有限：相对于 VuePress，复杂的自定义可能难以实现。 插件生态较小：相比于 VuePress，插件数量和功能有限。 mdBook mdBook 是一个用 Rust 语言编写的开源命令行工具，用于从 Markdown 文件创建和管理在线书籍、文档集或教程。它提供了一个结构化的环境来组织和构建包含章节、副标题以及可选的自定义导航和样式表等内容的电子书或文档项目。\n这个工具只适合做一本书或文档，不适合多个文档的集合。\n看起来比较不错，如果你用它来编写 Rust 相关的文档，可以生成一个直接调用官方的接口，直接在网页中执行 Rust 代码片段。\n优点 性能优异：使用 Rust 编写，加载速度快，性能稳定。 Markdown 原生支持：编写文档简单直观，格式化自然。 简洁专注：设计简单，专注于Markdown文档生成，没有多余的复杂功能 多平台支持：支持多种操作系统，方便使用。 缺点 功能相对有限：相比于其他工具，可能缺乏一些高级功能和交互性。 插件生态较小：插件数量和功能有限，可能无法满足所有需求。 社区支持：虽然社区活跃，但规模不如 VuePress 和 Docusaurus。 ","date":"2024-02-04T17:16:24+08:00","permalink":"https://blog.moieo.net/2024/02/04/171624/","title":"除了 VuePress，还有哪些文档工具值得推荐？"},{"content":"安装 Caddy Caddy 是一个 Go 语言编写的开源 HTTP 服务器\nCaddy 有下面这些开箱即用的特性:\n全自动支持 HTTP/2 协议，无需任何配置。 Caddy 使用 Let’s Encrypt 让你的站点全自动变成 HTTPS，无需任何配置。 合理使用多核多核 得益于 go 的特性 完全支持 IPv6 环境 Caddy 对 WebSockets 有很好的支持 自动把 Markdown 转成 HTML Caddy 对 log 格式的定义很容易 易于部署 得益于 go 的特性，caddy 只是一个小小的二进制文件，没有依赖，很好部署 得益于 Go 的跨平台特性，Caddy 很容易的支持了三大主流系统：Windows、 Linux、Mac 来自 知乎 @shooter Caddy 官网\n下载 Caddy\n本文配置 均使用 Caddyfile 文件\n基本配置 HTTP + HTTPS\n1 2 3 4 moieo.cn { root * /srv/http # 网站根目录 file_serve # 启用文件系统 } HTTP\n1 2 3 4 http://moieo.cn { root * /srv/http # 网站根目录 file_serve # 启用文件系统 } 反之只用 HTTPS\nVue 等单页面应用部署 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 moieo.cn { root * /srv/http # 网站的根目录 encode gzip zstd # 开启 gzip route { # 找不到文件时 使用 index.html # 解决 history 路由模式 404 的问题 try_files {path} /index.html file_server # 开启文件系统 } # 处理日志 log { output file /data/moieo.cn.log # 保存文件 format console # 日志格式 level INFO # 日志级别 } } 开启 Caddy 1 ./caddy start --config ./Caddyfile 文档 Caddy 官方文档\nCaddy 中文文档\n中文文档访问速度快\n","date":"2023-01-25T16:19:21+08:00","image":"https://static.983577.xyz/images/2023/01/OIP-C.jpeg","permalink":"https://blog.moieo.net/2023/01/25/161921/","title":"使用 Caddy 部署 Vue 等单页面Web应用"},{"content":"参考：vue3+vite2增加element-plus的CDN链接打包构建\n网上 Vite.js 的资料少，踩了不少坑 在掘金中找到一篇资料，但还是避免不了遇到了一些奇奇怪怪的问题\n我这边使用的 vite-plugin-cdn-import 插件\n编辑 vite.config.ts\n1 import { Plugin as importToCDN } from \u0026#34;vite-plugin-cdn-import\u0026#34;; 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 importToCDN({ modules: [ { name: \u0026#34;vue\u0026#34;, var: \u0026#34;Vue\u0026#34;, path: \u0026#34;//unpkg.com/vue@next\u0026#34;, }, { name: \u0026#34;vuex\u0026#34;, var: \u0026#34;Vuex\u0026#34;, path: \u0026#34;//unpkg.com/vuex@next\u0026#34;, }, { name: \u0026#34;vue-class-component\u0026#34;, var: \u0026#34;VueClassComponent\u0026#34;, path: \u0026#34;//unpkg.com/vue-class-component@next\u0026#34;, }, { name: \u0026#34;element-plus\u0026#34;, var: \u0026#34;ElementPlus\u0026#34;, path: \u0026#34;//unpkg.com/element-plus\u0026#34;, css: \u0026#34;//unpkg.com/element-plus/dist/index.css\u0026#34;, }, ], }), 用原文中的方法会出现错误 原因参考：使用了pinia或其他依赖于vue的库\n上面方式可解决\n","date":"2022-08-05T23:08:38+08:00","image":"https://preview.cloud.189.cn/image/imageAction?param=A9FC5FECFA532F69F5D582DAA5A9DDEC8F99A65F1E1FF358E524C2C868E78354EEA5CE96240C004B29CE9A4275BBCF8B755BF685B3BE3959DF7FFBD66048F578970C8B6A9C2597E322B9A3CD2886369BE58BBAD96A0FFE22D3372C9DF325E983BB7B922930F462B0A939E0AC39F11B07E549C09A","permalink":"https://blog.moieo.net/2022/08/05/230838/","title":"Vite+Vue使用外部CDN引用element-plus全家桶"},{"content":" 提示： 仅供学习使用，严禁用于违法用途\n介绍 简介 SQLMap 是一个开源的渗透测试工具，可以用来自动化检测，利用 SQL 注入漏洞，获取数据库的权限。 它的检测引擎非常强大，针对不同类型的数据库有不同的方案和选项，获取数据库中存储的数据。\n目前支持 MySQL、Oracle、PostgreSQL、Microsoft SQL Server、Microsoft Access 等数据库\n输出级别 0：只显示 python 错误以及严重的信息 1：同时显示基本信息和警告信息（默认） 2：同时显示 debug 信息 3：同时显示注入的 payload 4：同时显示 HTTP 请求 5：同时显示 HTTP 响应头 6：同时显示 HTTP 响应页面\n安装 注：安装 SQLMap 需要 Python 环境 {% link https://sqlmap.org SQLMap官网 %}\n克隆仓库\n1 2 3 git clone --depth 1 https://github.com/sqlmapproject/sqlmap.git sqlmap cd sqlmap python sqlmap.py 你也可以将它配置到环境变量中，具体方法请上搜索引擎找 我这边配置了环境变量，所以可直接执行\n使用 1. 检查是否存在注入 例如注入目标为：http://127.0.0.1:8080/?id=1 则命令如下\n1 python sqlmap.py -u \u0026#34;http://127.0.0.1:8080/?id=1\u0026#34; 执行过程如下 执行完毕后，可看到数据库类型，如果服务器后端使用的是 PHP 语言，会显示 PHP 的版本 如图所示，数据库类型为 MySQL PHP 版本为 8.1.8\n2. 查询当前用户下所有数据库 用途：该命令在确定网站存在 SQL 注入漏洞时，用于查询当前用户下的数据库\n1 python sqlmap.py -u \u0026#34;http://127.0.0.1:8080/?id=1\u0026#34; --dbs 运行结束后可看到一些 数据库 的名称，它们将以[*]开头 --dbs参数缩写成-D xxx，该参数为查询xxx数据库下的内容\n3. 获取数据库中的表名 用途：该命令在确定网站存在 SQL 注入漏洞时，可获取数据库下所有表的名称\n-D 参数用来指定数据库，例如 -D moieo\n1 python sqlmap.py -u http://127.0.0.1:8080/?id=1 -D moieo --tables 运行结束后可看到所有数据表的名称，继续注入可使用 -T 参数，该参数为 --tables的缩写，用于指定数据表继续注入获取数据\n4. 获取数据表的字段名 用途：在查询完表名后，指定数据库和数据表进行注入测试，获取该表下所有字段\n1 python sqlmap.py -u http://127.0.0.1:8080/?id=1 -D moieo -T moieo_comments --columns 运行结束后得到所有字段\n5. 获取数据表内存储的数据 用途：在获取并确定数据表内有字段时使用，可获得数据表内存储的数据\n1 python sqlmap.py -u http://127.0.0.1:8080/?id=1 -D moieo -T moieo_comments --dump 可以看到，执行结束后可获得数据表内每个字段的数据\n其他选项 1. 获取数据库所有用户 在有权管理所有用户的情况下 --users 选项可获得数据库所有用户名\n2. 获取数据库用户的密码 在有权管理所有用户的情况下 --passwords 选项可获得所有用户的密码，该选项获得到的数据是经过哈希算法加密的 可以尝试使用 https://www.cmd5.com/ 硬解\n3. 获取当前网站数据库的名称 --current-db 选项，可获得当前网站数据库的名称\n4. 获取当前网站数据库使用的用户名称 --current-user 选项，用于获取当前用户名称\n杂项 --is-dba 用于判断用户是否管理员权限\n--roles 列出数据库管理员角色\n--referer，当--level的参数为 3 或以上，用于指定来源网站，欺骗目标网站，参数为 URL\n--sql-shell 运行自定义 SQL 语句\n--os-cmd 或 --os-shell 执行任意操作系统命令\n--file-write xxx.php --file-dest xxx.php 上传文件到数据库服务器，前者为源文件路径，后者为目标数据库服务器的文件路径\n--file-read 从数据库服务器中读取文件，参数为数据库服务器中的文件路径\n","date":"2022-07-31T22:59:35+08:00","image":"https://static.983577.xyz/images/2022/08/Screenshot_2022-07-31-23-03-10-552_com.termux.webp","permalink":"https://blog.moieo.net/2022/07/31/225935/","title":"SQLMap进行SQL注入测试"},{"content":"阿里云 阿里云ipip.net提供的 IP 查询接口\n接口地址：https://api.myip.la/cn?json 请求示例\n1 curl https://api.myip.la/cn?json 响应结果\n1 2 3 4 5 6 7 8 9 10 11 { \u0026#34;ip\u0026#34;: \u0026#34;172.104.94.100\u0026#34;, \u0026#34;location\u0026#34;: { \u0026#34;country_code\u0026#34;: \u0026#34;JP\u0026#34;, \u0026#34;country_name\u0026#34;: \u0026#34;日本\u0026#34;, \u0026#34;province\u0026#34;: \u0026#34;东京都\u0026#34;, \u0026#34;city\u0026#34;: \u0026#34;品川区\u0026#34;, \u0026#34;latitude\u0026#34;: \u0026#34;35.6130514\u0026#34;, \u0026#34;longitude\u0026#34;: \u0026#34;139.7344198\u0026#34; } } 详细文档\nMoieo Api IP 查询接口 接口地址：POST https://api.moieo.cn/ip/114.114.114.114 请求头\n名称 注释 timestamp 时间戳(ms) 请求示例 例如 IP 为：114.114.114.114\n1 curl -XPOST -H \u0026#34;timestamp: $(date +%s%3N)\u0026#34; https://api.moieo.cn/ip/114.114.114.114 响应结果\n1 2 3 4 5 6 7 8 9 10 { \u0026#34;code\u0026#34;: 200, \u0026#34;msg\u0026#34;: \u0026#34;success\u0026#34;, \u0026#34;data\u0026#34;: { \u0026#34;ip\u0026#34;: \u0026#34;114.114.114.114\u0026#34;, \u0026#34;ip_number\u0026#34;: 1920103026, \u0026#34;location\u0026#34;: \u0026#34;江苏省南京市\u0026#34;, \u0026#34;net_service\u0026#34;: \u0026#34;南京信风网络科技有限公司GreatbitDNS服务器\u0026#34; } } 数据来源于纯真网络开源数据库\n","date":"2022-07-23T11:52:58+08:00","permalink":"https://blog.moieo.net/2022/07/23/115258/","title":"IP查询接口分享"}]