{"pages":[{"title":"friends","text":"","link":"/friends/index.html"},{"title":"about","text":"","link":"/about/index.html"},{"title":"分类","text":"","link":"/categories/index.html"},{"title":"schedule","text":"","link":"/schedule/index.html"},{"title":"标签","text":"","link":"/tags/index.html"}],"posts":[{"title":"博主魔改版Whatevergreen解析,还你正常核显频率(1.2g)","text":"前言这篇文章是给台式机用户看的,高度依赖Whatevergreen缓冲帧补丁的小伙伴请绕行。 事件起因前几天细心的群友发现了一个bug,在加入Whatevergreen的情况下,核显频率会稳定在0.5g左右,远低于正常值1.2g,经排查,发现是Whatevergreen导致的问题。 为什么不选择删除Whatevergreen博主已经测试过删掉Whatevergreen的情况,并不完美,体现如下。 AGDP patch时灵时不灵博主测试了加入AGDP patch解决dp花屏的方案,时灵时不灵,在系统更新,安装器,recovery等环境下100%失效,OpenCore以及Clover都已经实测,时灵时不灵。 核显型号名称要手动注入Whatevergreen内置型号识别功能,id和型号对应,比如3E980003->Intel UHD Graphics 630。所以删掉Whatevergreen会导致核显型号显示错误,要手动注入Device->model属性。 重命名补丁要手动添加Whatevergreen内置change GFX0 to IGPU,change PEGP to GFX0,change HECI to IMEI,change MEI to IMEI等补丁,去掉后这些要手动添加。 博主修改的Whatevergreen改了哪些内容 删除igfx(核显)相关补丁。 删除Nvidia相关补丁。 删除Shiki相关功能。 保留AGDP补丁。 保留基础重命名补丁。 保留型号对应识别功能。 保留紫线移除补丁。 如何使用博主修改的Whatevergreen Bios主显卡设置成独显,DVMT 128M。 移除change GFX0 to IGPU,change PEGP to GFX0,change HECI to IMEI,change MEI to IMEI等补丁。 移除显卡相关的SSDT。 加入Whatevergreen(Lilu要求1.2.8)。 修改版Whatevergreen Github地址如下https://github.com/bugprogrammer/WhateverGreen 性能测试如图,核显性能测试如下","link":"/2019/10/03/fix-igpu-with-weg.html"},{"title":"本站全新改版完成","text":"本站全新改版变化如下主题更换并且魔改主题更换成icarus并加以魔改,原作者GitHub如下:https://github.com/ppoffice 更换评论系统为Gitalk基于GitHub issue,避免匿名评论,方便博主管理,速度也比基于leancloud(国际版)的valine快。 过时文章提醒增加过时文章提醒,避免被早期过时文章误导。","link":"/2019/09/23/aboutupdateend.html"},{"title":"关于本站维护改版的公告","text":"近期博主发现本站存在严重的用户体验缺陷,阐述如下主题加载缓慢博主测试了一部分hexo主题,发现采用next主题的blog普遍存在动画过度,导致加载缓慢。此次维护解决。 valine加载缓慢由于leancloud要求绑定已备案域名,所以博主将项目转移到了leancloud国际版节点,但速度博主不满意。因此,此次维护有可能更换评论系统,可能清空评论数据,抱歉。 服务器迁移此次会迁移到更快的服务器,敬请期待。","link":"/2019/09/19/aboutupdate.html"},{"title":"一加7 Pro Android Q root教程","text":"博主近日把自己的一加7 Pro升级到了Android Q beta,发现暂时无法刷入twrp-recovery,也就意味着root有一点点的麻烦,今天博主发布个人测试可行的root方案。博主是在Mac下操作,Windows以及Linux同理。 环境搭建Xcode Mac App Store安装Xcode。 终端下输入如下命令并按提示安装。1xcode-select --install HomeBrew终端下执行如下命令即可。 1/usr/bin/ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\" adb终端下执行如下命令即可(也许需要科学上网,请自行解决) 12345cd ~/Downloadwget https://dl.google.com/android/repository/platform-tools-latest-darwin.zipunzip platform-tools-latest-darwin.zipecho 'export PATH=/Users/wbx/Downloads/platform-tools:$PATH' >> ~/.zshrcsource ~/.zshrc Python3以及pip3终端执行如下命令安装Python3 1brew install python3 终端输入如下命令安装pip3 1curl https://bootstrap.pypa.io/get-pip.py | python3 protobuf模块终端执行如下命令安装protobuf模块 12brew install protobufpip3 install protobuf 至此,环境搭建已经全部完成。 检测环境搭建正确性终端输入以下命令,结果如图则正确 1234python3 -Vpip3 -Vadb versionprotoc --version root权限获取教程 下载并解压手机当前使用的系统镜像,比如博主的是Android Q Developer Preview 4 for OnePlus 7 Pro。链接如下。https://oxygenos.oneplus.net/OnePlus7ProOxygen_13.X.04_OTA_004_all_1908020003_726196c3b79b4f85.zip 下载并解压镜像解包工具。https://gist.github.com/ius/42bd02a5df2226633a342ab7a9c60f15/archive/48ffe1eee59af9a7da883d9ec7902d1507428dc4.zip 将解包工具中的两个.py文件放到我们解压的镜像目录。 执行如下命令解包,当看到boot.img解包完成后按Ctrl+C终止命令。 12cd /Users/wbx/Downloads/OnePlus7ProOxygen_13.X.04_OTA_004_all_1908020003_726196c3b79b4f85python3 payload_dumper.py payload.bin 数据线连接手机,手机开启USB调试模式,将解包生成的boot.img文件拷贝到手机根目录(由于macOS下无法直接将文件拷贝到Android,所以采用adb命令方案) 1adb push boot.img /sdcard 手机端安装Magisk Manager App,可以在酷安下载。 按照图示,给boot.img打补丁 将打好补丁的magisk_patched.img传回电脑桌面 1adb pull /sdcard/Download/magisk_patched.img ~/Desktop 将桌面上的magisk_patched.img文件刷入到手机的boot分区,Root完成。 12adb reboot-bootloaderfastboot flash boot ~/Desktop/magisk_patched.img 至此您已经Root成功 OTA更新后如何保留Root权限OTA更新安装完成后,不要重启。按照图示操作后再重启即可保留Root权限","link":"/2019/08/18/root-for-oneplus7pro-androidQ.html"},{"title":"教你制作macOS+Ubuntu+WindowsPE超级启动盘(仅支持UEFI)","text":"对于多系统用户,有没有觉得每一个系统一个U盘很麻烦而且浪费U盘,本文会教你如何制作macOS+Ubuntu+WindowsPE多系统启动盘。注意:建议使用博主分享的PE,其他PE文件结构或许不同,不确定能否成功。 准备工作 USB 3.0U盘(不可小于16g,博主的是闪迪64gU盘) macOS 10.15 beta4原版镜像,进入如下网址,内有下载分享http://bbs.pcbeta.com/viewthread-1823322-1-1.html Ubuntu 19.04镜像,下载地址如下,可直接粘贴到迅雷http://mirror.cogentco.com/pub/linux/ubuntu-releases/19.04/ubuntu-19.04-desktop-amd64.iso Windows 10 1809 PE,百毒盘地址如下(注意,此PE为博主自制PE,兼容PC以及mbp2017,无任何流氓行为,可放心使用)https://pan.baidu.com/s/1MUTn9LunpMAHeY7noflI9w 一个配置好的可引导Hackintosh的Clover 写入macOS镜像并放入Clover分区将U盘格式化成为Hfs格式,卷标为mac,如图。 将Install macOS Catalina Beta.app拷贝到Application下终端输入如下命令写入镜像1sudo /Applications/Install\\ macOS\\ Catalina\\ Beta.app/Contents/Resources/createinstallmedia --volume /Volumes/mac --applicationpath /Applications/Install\\ macOS\\ Catalina\\ Beta.app 挂载U盘EFI分区,将Clover拷贝进去为Ubuntu以及Windows PE准备分区 打开磁盘工具,添加分区,格式为HFs,名称为other。将分区Install macOS Catalina Beta的大小修改为8G,如图。 进入Windows打开diskgenius,删掉那个最大的HFs分区。 在空闲区域添加三个Fat32格式的分区,名称分别为Ubuntu,WinPE,Data。其中Ubuntu大小为4G,WinPE大小为3G,Data为剩余空间。 拷贝Ubuntu以及WinPE的文件将Ubuntu以及WinPE的镜像解压,直接把镜像根目录所有文件拷贝到对应分区。 引导设置Ubuntu 在U盘EFI分区新建grub文件夹,和CLOVER文件夹同级。 打开Ubuntu分区,将boot/grub文件夹下的grub.cfg文件以及EFI/BOOT文件夹下的Bootx64.efi和grubx64.efi两个文件拷贝到刚刚新建的grub文件夹下。 WinPE打开WinPE分区,将efi/microsoft/boot文件夹下的cdboot.efi文件重命名为cdboot-bak.efi,并将efi/boot文件夹下的bootx64.efi文件拷贝到efi/microsoft/boot文件夹下。并重命名为cdboot.efi。 至此,你的macOS+Ubuntu+WinPE超级启动盘制作完成。成品 2019-7-30更新重要注意事项如果要把这个启动盘用于白苹果,记得挂载U盘EFI分区,将Boot->Bootx64.efi文件以及Clover->Cloverx64.efi文件的后缀(.efi)去掉,这样做的目的是干掉U盘的Clover启动项。以防止白苹果误进入Clover,这很重要,白苹果使用Clover会彻底黑屏变砖。白苹果可以按option键选择进入macOS安装盘、Ubuntu安装盘或WinPE启动盘,如果以后安装黑苹果,完全可以再把文件名改回来或者使用本地硬盘中的Clover引导启动盘。","link":"/2019/07/26/make-super-usb.html"},{"title":"解锁macOS10.15的系统分区","text":"macOS 10.15的一个显著变化就是Apple锁定了系统分区,导致L/E以及S/L/E无法拷贝文件。Kext Utility无法重建缓存。也间接影响了HomeBrew的使用,下面教大家如何解锁系统分区。 准备应用程序 打开系统自带的自动操作程序,依次点击应用程序->选取->运行shell脚本。 将以下脚本粘贴进去 123#! /bin/bashecho '你的电脑密码'|sudo -S mount -uw / && killall Finder 保存成app 添加开机自启打开偏好设置->用户与群组->登录项,将unlockSystem.app添加到启动项,并点击隐藏。 至此,您已经成功解锁系统分区,可以尝试SLE/LE写入以及重建缓存操作了,博主亲测成功哦!","link":"/2019/07/13/unlockSystem.html"},{"title":"什么?这辣鸡BIOS竟然不能关闭Secure Boot?教你在开启Secure Boot的情况下安装macOS","text":"相关理论BIOSBIOS是英文”Basic Input Output System”的缩略语,直译过来后中文名称就是”基本输入输出系统”。其实,它是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序。 其主要功能是为计算机提供最底层的、最直接的硬件设置和控制。 UEFIUEFI,全称“统一的可扩展固件接口”(Unified Extensible Firmware Interface), 是一种详细描述全新类型接口的标准。这种接口用于操作系统自动从预启动的操作环境,加载到一种操作系统上,从而使开机程序化繁为简,节省时间。 Secure BootSecure Boot只是UEFI的一个部分。两者的关系是局部与整体的关系。Secure Boot的目的,是防止恶意软件侵入。它的做法就是采用密钥。UEFI规定,主板出厂的时候,可以内置一些可靠的公钥。然后,任何想要在这块主板上加载的操作系统或者硬件驱动程序,都必须通过这些公钥的认证。也就是说,这些软件必须用对应的私钥签署过,否则主板拒绝加载。由于恶意软件不可能通过认证,因此就没有办法感染Boot。 在开启Secure Boot的情况下使用Clover启动macOS以及其他操作系统(如Linux)准备工作(Windows下操作) 下载并解压Super-UEFIinSecureBoot-Disk(感谢ValdikSS开发工具)。https://github.com/ValdikSS/Super-UEFIinSecureBoot-Disk/releases/download/3/Super-UEFIinSecureBoot-Disk_minimal_v3.zip 下载etcherhttps://github.com/balena-io/etcher/releases/download/v1.5.51/balenaEtcher-Portable-1.5.51.exe 准备一个U盘并备份文件,用etcher将Super-UEFIinSecureBoot-Disk写入U盘。 实现教程 现在请在BIOS中开启Secure Boot选项并且重启进入Windows操作。 注册证书使用做好的U盘启动电脑,按照图示完成证书注册。(出现黑色的grub2界面表示注册成功) 集成Clover 将CLOVER文件夹拷贝到U盘的EFI文件夹下,与BOOT以及grub文件夹同级。 打开Clover文件夹将Cloverx64.efi文件重命名为grubx64_real.efi。 打开BOOT文件夹备份grubx64_real.efi文件,并将Clover文件夹下的grubx64_real.efi文件拷贝到BOOT文件夹下。 重启电脑,并用U盘引导。 是时候看看成果了! 最后别忘了将USB的引导移到硬盘中。关于后续更新Clover的问题下载新版本的Clover,将cloverx64.efi重命名为grubx64_real.efi并覆盖EFI中Clover文件夹与BOOT文件夹中的同名文件。","link":"/2019/07/06/clover-with-secure-boot.html"},{"title":"关于leancloud域名停止解析导致本站评论系统报废的公告","text":"从昨天开始,leancloud域名在多地停止解析,导致其部分服务不可用。本站目前评论系统暂时报废。博主会第一时间寻找替代方案。不排除评论数据丢失的可能。抱歉!抱歉!抱歉!","link":"/2019/06/21/about-leancloud.html"},{"title":"macOS Catalina 10.15关于sidecar功能的说明","text":"macOS 10.15的一个重磅功能是sidecar。就是用iPad作为mac的扩展屏,博主测试了一下,挺好用的。但是在Hackintosh下,并不是随意就能启用sidecar。以下附上博主的启用sidecar教程。 注意事项目前无核显PC尚未遇到成功案例,可能是黑苹果的bug,也可能是macOS 10.15 beta1的bug。 博主PC配置Z390+9900K+Vega56 启用sidecar教程 BIOS中设置主显卡为独显(PCIE)并且设置DVMT为128M,以便独显、核显并存。 修改SMBIOS为iMac 19,1。 勾选Inject intel。 设置FakeID->IntelGFX为0x3e988086,ig-platform-id为0x3e980003(核显作为加速卡)。也可以设置FakeID->IntelGFX为0x3e928086,ig-platform-id为0x3e920003,博主测试均通过。 重启电脑测试sidecar。 至此sidecar已完美开启,H264以及H265硬解正常,博主测试FCP导出正常。注意:更换SMBIOS后要记得修改usbports中的机型信息。","link":"/2019/06/13/about-sidecar.html"},{"title":"macOS Catalina 10.15目前情况(持续更新)","text":"Apple的WWDC2019已经结束,为我们带来了macOS 10.15、MacPro等出色产品。博主连夜测试了10.15在PC机上的运行情况,现在梳理如下(持续更新)。 BootLoaderOpenCore 完美程度以下功能完美 独显、声卡、核显、有线网络、Siri 睡眠唤醒 原生电源 AGPM 硬解 USB 以下功能暂不可用 Wifi 蓝牙 系统截图 第一次更新跟进Clover测试,测试结果同OpenCore。 第二次更新Wifi终于正常(BCM94352z) 关于wifi的说明经过测试,目前在10.15下,AirportBrcmFixup.kext不可用,放入会内核崩溃,所以换用FakePCIID+FakePCIID_Broadcom_WiFi.kext方案。 第三次更新蓝牙终于正常了。。。至此,10.15已基本完美。注意,蓝牙要使用BrcmBluetoothInjector.kext驱动。 总结 升级Clover版本到最新或使用OpenCore引导(可以自己编译),编译教程见https://www.bugprogrammer.me/2018/06/29/Build_Clover.html 自编译最新版Lilu以及Lilu插件(如:AppleALC等) Wifi使用FakePCIID+FakePCIID_Broadcom_WiFi.kext驱动。 蓝牙使用BrcmBluetoothInjector.kext驱动(博主已将其数据集成到FakeSMC)。 更新Z390-itx+vega56+bcm94352z支持10.15的Clover文件已经上传到博主github的Hackintosh仓库,获取Clover方法见https://www.bugprogrammer.me/2019/05/23/github-hackintosh.html 2019-06-07更新截至目前,基于最新源码编译的AirportBrcmFixup 2.0.2版本已经可用。原作者Changelog如图。 2019-09-24更新10.15下想要让蓝牙更稳定推荐使用 headkaze修改编译的OS-X-BrcmPatchRAM,GitHub地址如下:https://github.com/headkaze/OS-X-BrcmPatchRAM/releases","link":"/2019/06/04/hackintosh-10.15.html"},{"title":"OpenCore黑苹果方案以及ASRock Z390 Phantom Gaming-ITX/ac+i9-9900K OpenCore配置文件分享","text":"OpenCore简介OpenCore是由vit9696等8位大佬开发的全新黑苹果引导工具。用于在PC上启动macOS操作系统。博主用了一天时间已经成功启动博主电脑上的macOS,现在做简单分享。 OpenCore编译 APP Store安装Xcode。 终端执行如下命令,并点击最右侧的同意按钮安装命令行工具。 1xcode-select --install 在如下链接里下载编译脚本buildopencore,感谢pcbeta网友云朵有点甜编写脚本。http://bbs.pcbeta.com/viewthread-1814957-1-1.html 解压并执行脚本,如图。编译后桌面生成OpenCore文件夹。 12chmod u+x ./buildopencore./buildopencore 注意:Docs文件夹里有官方文档以及plist文件示例。 OpenCore使用简要教程文件夹结构(虚线框内的不是必须项目,视需求而定) config.plist文件解析(只介绍博主用到的)ACPIAdd添加aml文件,比如DSDT.aml。 Block相当于Clover中的Drop Tables。用于屏蔽一些OEM Tables。如Drop DMAR。 Patch相当于Clover中的DSDT部件更名,例如:change HDAS to HDEF。 ACPI部分整体图解 DevicePropertiesAdd用于注入设备属性,比如声卡layout-id,核显帧补丁等。相当于Clover的Devices->Properties。 kernelAdd用于注入kext路径。 Patch相当于Clover的KextsToPatch Kernel部分整体图解 NVRAM(由于博主表达能力欠佳,这一部分请参考官方文档) PlatformInfo相当于Clover中的SMBIOS,使用OpenCore Configurator注入即可。 UEFIDrivers用于注入用于启动的驱动信息,例如ApfsDriverLoader.efi等。 使用OpenCore引导博主电脑简要说明博主电脑配置信息ASRock Z390 Phantom Gaming-ITX/ac+i9-9900K+Vega56 目前完美程度以太网卡+声卡+独显+核显+wifi+蓝牙+USB正常。睡眠唤醒正常。关机正常。原生电源以及AGPM正常,硬解正常。雷电只能当typec使用。 OC文件夹结构 SMBIOSiMac Pro 2017 以太网卡、wifi、蓝牙、独显、USB同Clover。 声卡 Lilu、AppleALC拷到L/E下。 DeviceProperties下注入声卡layout-id。 重建缓存。 核显DeviceProperties下注入核显信息。 原生电源加入SSDT-XCPM-SBpr00.aml即可加载两个X86(博主会分享OC配置文件)。 AGPM同Clover。 关机变重启以及睡眠变重启解决方案使用OsxAptioFix2Drv-free2000.efi替换其他启动文件即可。 博主电脑OpenCore配置文件分享博主已将OC文件推送至博主的Hackintosh仓库,详情以及用法见如下链接。https://www.bugprogrammer.me/2019/05/23/github-hackintosh.html 2019-05-31更新一个小发现OpenCore可以直接正确识别9代CPU型号,比如我的9900K显示为3.6 GHz Intel Core i9(Clover默认显示为i7)。","link":"/2019/05/29/opencore-hackintosh.html"},{"title":"博主github Hackintosh仓库公开以及使用方法","text":"为了方便大家安装macOS,博主将测试过的机型的Clover文件整理并发布至github,地址为https://github.com/bugprogrammer/hackintosh 注意:仓库中所有机型都是博主亲自安装并测试过的机型。 由于部分用户认为git操作较为麻烦,需要学习。所以博主提供了自动化脚本方案,几乎自动获取Clover。脚本支持Windows、macOS、Ubuntu。 脚本使用方法Windows安装git 点击如下链接下载git。https://github.com/git-for-windows/git/releases/download/v2.22.0.windows.1/Git-2.22.0-64-bit.exe 按默认设置安装即可。 执行脚本打开git-bash (注意一定要用git-bash),执行如下命令即可 1bash -c \"$(curl -fsSL https://raw.githubusercontent.com/bugprogrammer/hackintosh/master/get-clover.sh)\" macOS终端输入如下命令即可 (注意脚本中绿字提示) 1bash -c \"$(curl -fsSL https://raw.githubusercontent.com/bugprogrammer/hackintosh/master/get-clover.sh)\" Ubuntu终端输入如下命令即可 1bash -c \"$(curl -fsSL https://raw.githubusercontent.com/bugprogrammer/hackintosh/master/get-clover.sh)\" 脚本使用截图(以macOS为例)","link":"/2019/05/23/github-hackintosh.html"},{"title":"关于博客评论数据丢失的公告","text":"本博客https://www.bugprogrammer.me 由于博主误操作,导致评论数据丢失,博主表示抱歉,博主会尽量恢复评论数据,感谢各位访客支持。","link":"/2019/05/22/about-blog-lost.html"},{"title":"macOS 10.14.6 beta下填充PCI列表的简要教程","text":"不知各位爱好者是否发现了一些朋友的黑苹果系统中,关于本机里的pci列表下有详细的设备信息。以前实现这个比较麻烦,需要ssdt。现在已经有简便方案。 注意目前白苹果上并没有显示PCI列表,所以,各位是否实现全靠自愿。 所需软件 Hackintool Clover Configurator 教程 打开Clover Configurator,依次点击Boot.log->Generate log->Save boot.log to desktop,如图。生成在桌面的文件名称为bootlog.txt。 下面以NVME SSD SM961为例进行讲解 打开Hackintool,记住SM961的设备id,如图即为0xA804。 打开之前保存的bootlog.txt文件,搜索A804,我们会发现这一行数据中有一个形如xx:xx.xx的字符串,这个就是pciaddr,记下它,稍后会用到。如图:pciaddr为04:00.00 使用Clover Configurator打开config.plist,依次点击Devices->Arbitrary,按图示填写数据即可显示PCI列表。注意:PciAddr一栏填写刚才查询出来的pciaddr,即04:00.00,Comment一栏随便填。右侧属性栏中的Key值至少有两个参数AAPL,slot-name以及model,Value随便填,Value Type选STRING。 一个特殊情况(声卡)由于我们在注入声卡属性时会覆盖layout-id,导致声卡无声。所以如果要注入声卡属性,要在clover下做如下设置。 Devices->Audio->inject->No Boot->alcid=layout-id 至此,您已经成功显示PCI列表","link":"/2019/05/21/pci-list-for-hackintosh.html"},{"title":"关于博客迁移以及改版完成的公告","text":"本博客https://www.bugprogrammer.me 已经正式迁移并改版完成,现在访问速度已经显著提升,并且国内和国外实现分流。即日起博客恢复更新(注意:云南访客可能需要特殊技术访问)。 站长之家ping检测以及网站测速如图。","link":"/2019/05/17/about-blog-end.html"},{"title":"关于博客迁移的公告","text":"由于博主将图片恢复后,对访问速度不满意,所以近期打算迁移服务器,可能有短暂时间无法访问,请谅解,谢谢!","link":"/2019/04/29/about-blog.html"},{"title":"关于博客图片恢复的公告","text":"本博客图片已经恢复,由于时间仓促,或有遗漏,如果各位访客发现图片缺失,请联系博主,谢谢!","link":"/2019/04/28/about-picture-restart.html"},{"title":"关于新浪图床开始限制外链的公告","text":"由于博主最近比较忙,所以对博客的维护不太及时,抱歉。今天博主发现新浪图床开始限制外链访问,导致本博客图片暂时无法显示。博主会以最快速度恢复。感谢各位访客对本博客的支持!","link":"/2019/04/27/about-picture.html"},{"title":"使用macserial获取iMac 2019机型信息","text":"Apple在近期发布了iMac 2019版本,最高可配i9+vega48,无T2芯片(美滋滋),目前Clover Configurator尚未更新关于iMac 2019的smbios信息,本教程教大家如何使用macserial获取iMac 2019机型信息。 获取macserial软件 macserial是github上的acidanthera大佬开发,其release版本尚未添加iMac 2019信息,故需要编译安装。经过博主测试,需要修改build.tool脚本才能成功编译,故博主已将原项目fork,并修改build.tool脚本,使其能正常编译。 原项目地址:https://github.com/acidanthera/macserial 博主fork地址:https://github.com/bugprogrammer/macserial 环境准备Xcode App Store下载Xcode 终端输入如下命令并按提示安装1xcode-select --install 获取macserial源码终端下输入如下命令即可 123cd ~/Desktopgit clone https://github.com/bugprogrammer/macserial.gitcd macserial 编译终端下输入如下命令即可,成功后会打开生成文件目录。 1./build.tool 简单使用获取帮助1bin/macserial64 -h 查看支持的所有机型1bin/macserial64 --list 获取iMac 2019机型信息(以iMac 19,1为例)获取Serial Number以及Board Serial Number1bin/macserial64 --model iMac19,1 通过源码获取其他信息1sed -n '424,429p' src/modelinfo.h 最终成品","link":"/2019/04/03/smbios-for-imac2019.html"},{"title":"关于macOS 10.14.4 18E2034镜像的说明","text":"macOS 10.14.4 18E2034是一个特供镜像,博主猜测是iMac 2019的预装镜像(参测而已,因为经测试发现9900K型号仍然不识别,所以。。。) 下载新建一个空壳镜像1mkdir -p /Applications/Install\\ macOS\\ Mojave.app/Contents/SharedSupport/ 获取镜像下载脚本12curl https://www.tonymacx86.com/attachments/createinstaller-10-14-4-sb-sh-zip.395290/ -o createInstaller-10.14.4-SB.sh.zipunzip createInstaller-10.14.4-SB.sh.zip 修改脚本 由于下载可能失败,为了避免每次失败后都要重建空壳镜像,我们把脚本中的cp命令加上强制属性-f 下载镜像1./createInstaller-10.14.4-SB.sh 博主的测试以及特供镜像的变化 仍然不显示9900K型号。 z390仍然要EmuVariableUefi-64.efi,否则睡眠、关机都变成重启。 AppleGraphicsPowerManagement.kext新增了两个机型,如图。 AMDRadeonX5000GLDriver.bundle新增Vega48和Vega64X信息","link":"/2019/03/27/about-macos-10.14.4-18E2034.html"},{"title":"Ubuntu下利用deepin-wine安装软件简要方案","text":"一直以来,Linux作为开发机比较给力,但是常用软件(如QQ、微信等)的缺乏使Linux在桌面端一直不火,用户量低于Windows以及macOS,今天分享一个Ubuntu下安装常用软件的方法。 博主电脑环境 Ubuntu 18.10 x64 教程安装deepin-wine输入以下命令即可 123git clone https://github.com/wszqkzqk/deepin-wine-ubuntu.gitcd deepin-wine-ubuntu./install 安装软件 下载软件(GUI下载或wget等均可)http://mirrors.aliyun.com/deepin/pool/non-free/ 使用如下命令安装软件1sudo dpkg -i xxx.deb 目前博主已经成功安装Tim、微信、百度网盘、迅雷精简版、foobar2000等。","link":"/2019/03/17/install_soft_for_linux.html"},{"title":"Macbook Pro 2017安装macOS+Windows+Ubuntu简要教程","text":"各位访客想必已经发现本站https://www.bugprogrammer.me 已经一个月没有更新了,为了本站长期稳定运行下去,博主最近在做博客改版以及cdn、图床方案的测试,本站不会断更,也感谢大半年来各位访客的支持。言归正传,博主近期购入了MacBook Pro 2017,原因很简单,博主需要retina屏幕。黑苹果笔记本无法使用独显,目前的macOS版本下,核显+4K的配合会出现动画掉帧现象,即使是核显版本的mbp也难以幸免,所以想要retina+独显+macOS,只能购入mbp了。 博主发现mbp有一个神奇的地方,安装mac+win+linux超级麻烦,按普通pc方案,最后安装linux会出现问题,表现为安装完linux后,Windows会被破坏,无法进入(不是引导的问题,就是系统挂了!!!),而macOS正常。博主Google了一下,发现很多教程都是老版本的mbp,区别很大。所以博主放出我自己的解决方案。 注意事项 mbp不同于普通PC,请严格按照博主的方案进行,否则会出现意想不到的问题。 mbp2018是否适用博主不敢保证,因为2018款的mac新增了一个T2芯片,有报道说T2会阻止Linux启动。 安装顺序(重中之重)macOS Mojave–>Ubuntu 18.04–>Windows 10 准备工作macOS Mojave镜像、Windows 10镜像、Ubuntu18.04镜像、Windows PE、外接键鼠。 教程安装macOS Mojave正常安装即可,另外新买的mbp自带macOS系统,版本过老的话直接升级就可以。 分区 打开BootCamp(启动转换助理),点击菜单栏上的操作,下载Windows支持软件,下载完毕后保存到U盘,如图。 按照BootCamp的流程选择Windows 10镜像,确定Windows分区大小。 分区完成后会自动重启开始安装Windows 10,请注意此处要按Option建进入macOS,不要进入Windows分区。 打开macOS自带分区工具,此时我们会看到两个分区,一个macOS分区,一个BootCamp分区。点击macOS所在分区,点击+,新增分区,格式选择MS-DOS(FAT),做为Ubuntu 18.04安装分区。至此,我们拥有3个分区,分别安装macOS,Windows、Ubuntu。 安装Ubuntu 18.04准备工作 下载Ubuntu 18.04修改版本(来自网络大神,已经集成mbp2017内置键盘,触摸板,touch bar驱动,安装方便)https://goo.gl/4ddQMu 使用usbwriter将Ubuntu 18.04镜像写入U盘。 开始安装 插入U盘,重启按住Option,选择Ubuntu 18.04安装盘,选择安装(注意:不可以选择试用,安装会出错)。 分区:找到之前分配的fat32格式分区,点击-,删除分区,这样会得到一部分空闲分区。按照自己习惯将空闲分区进行分配。博主的分配方案是:efi、boot、home、/、swap。 分区完成后,继续安装。 至此,我们在开机时按住Option键即可自由切换macOS和Ubuntu。 安装Windows 因为我们已经自行创建了Ubuntu分区,所以已经不能使用BootCamp安装Windows 10。 在macOS下将之前分配好的BootCamp分区格式化为hfs格式。(重中之重) 进入winpe,连接外接键鼠。 winpe下打开分区工具,将刚才格式化为hfs格式的分区格式化为ntfs格式,供Windows 10使用。 打开winntsetup工具,将Windows安装到ntfs格式分区。 安装完成后重启发现无法进入Windows 10,请进行如下操作。 进入Ubuntu 18.04,打开终端,输入如下命令 1sudo update-grub 重启进入Ubuntu启动项,会在grub菜单中看到Windows Boot Manager选项,回车选择,完成Windows 10安装。 进入Windows 10后,安装之前下载的Windows支持软件。 至此,三个系统已经安装完成,并且都可以启动成功。开机按住Option键,看到两个启动项。选择mac启动项进入macOS,选择Windows启动项进入grub界面,grub下有Ubuntu 18.04以及Windows Boot Manager两个选项。什么,切换系统不方便??往下看!!! 安装refind,实现自动引导 下载refind并解压https://sourceforge.net/projects/refind/ 打开文件夹,执行refind-install脚本即可成功安装refind,如图。 进入Windows 10,安装bootice软件。 使用bootice将refind设置为第一启动项。 重启即可看到refind引导界面。 按delete键隐藏不需要的启动项,保留macOS、Windows、Ubuntu即可。 什么?refind默认界面不好看?emmmm,那就换个主题吧!!Google大把教程!!! 至此,MacBook Pro 2017安装macOS+Windows+Ubuntu成功!!!","link":"/2019/03/06/mbp2017_win_mac_ubuntu.html"},{"title":"ASUS N550JV Hackintosh记录+教程+完整EFI分享","text":"朋友的asus-n550jv笔记本,配置为i7-4700HQ+hd4600+gt750M(已屏蔽)+8g ram+256g ssd(sata)+1T hdd+1080P屏幕。安装黑苹果大体顺利,现将大概过程分享,供同机型的朋友借鉴。 前言 asus-n550jv原机自带ar9485无线网卡,驱动不完美,所以更换无线网卡为bcm94352hmb。 完美程度:显卡+声卡+双网卡+蓝牙完美驱动,USB正常,睡眠唤醒正常,显示器内建正常,HDMI外接屏幕无条件测试,变频12档,小太阳正常,电池正常(感谢黑果小兵和宪武以及其他大牛的帮助)。键盘背光调节正常,触摸板空白。 因为电脑是朋友的,所以截图不方便,因此本教程尽量多使用命令行方式,各位可以直接复制粘贴。一部分图片是在博主电脑截图的。 本教程需要你有一个macOS环境,可以是虚拟机。虚拟机安装macOS百度教程很多,请自学。 安装前要在Windows下准备好安装macOS所需分区。 教程制作安装盘 下载macOS Mojave 10.14.3镜像,博主建议在App Store下载,下载成功后会保存在Application下。 格式化U盘为Mac OS扩展日志式,U盘名称设置为mac,格式化后会生成两个分区,第一个是EFI分区,用来存放Clover引导,第二个用于写入镜像,格式化U盘如图。 写入镜像:终端输入如下命令并输入密码即可。1sudo /Applications/Install\\ macOS\\ Mojave.app/Contents/Resources/createinstallmedia --volume /Volumes/mac --applicationpath /Applications/Install\\ macOS\\ Mojave.app 获取博主分享的Clover文件,保存在桌面 输入如下命令即可在桌面保存hackintosh文件夹,内含Clover文件夹 1cd ~/Desktop && git clone https://github.com/bugprogrammer/hackintosh.git && cd hackintosh && git checkout asus-n550jv-bcm94352hmb 挂载U盘EFI分区,放入Clover引导使用Clover Configurator挂载EFI分区,将博主分享的EFI拷贝进去。 安装系统 U盘启动,进入安装盘 选择语言为简体中文,磁盘工具下抹盘为APFS 点击安装macOS,选择刚才准备好的分区,安装系统 安装系统有两个阶段,中途会重启,属于正常现象 系统完善 因为有些操作是在系统内完成的,所以只有一个efi不可能安装完成就完美,所以进入系统后要完善系统。 蓝牙挂载EFI分区,终端下输入如下命令重启即可 1234567891011sudo cp -Rf /Volumes/EFI/EFI/CLOVER/kexts/Other/BrcmFirmwareData.kext /Library/Extensionssudo cp -Rf /Volumes/EFI/EFI/CLOVER/kexts/Other/BrcmPatchRAM2.kext /Library/Extensionssudo chmod -Rf 755 /System/Library/Extensionssudo chown -Rf 0:0 /System/Library/Extensionssudo chmod -Rf 755 /Library/Extensionssudo chown -Rf 0:0 /Library/Extensionssudo rm -Rf /System/Library/PrelinkedKernels/*sudo rm -Rf /System/Library/Caches/com.apple.kext.caches/*sudo touch -f /System/Library/Extensionssudo touch -f /Library/Extensionssudo kextcache -Boot -U / 电池挂载EFI分区,终端下输入如下命令重启即可 12345678910sudo cp -Rf /Volumes/EFI/EFI/CLOVER/kexts/Other/ACPIBatteryManager.kext /Library/Extensionssudo chmod -Rf 755 /System/Library/Extensionssudo chown -Rf 0:0 /System/Library/Extensionssudo chmod -Rf 755 /Library/Extensionssudo chown -Rf 0:0 /Library/Extensionssudo rm -Rf /System/Library/PrelinkedKernels/*sudo rm -Rf /System/Library/Caches/com.apple.kext.caches/*sudo touch -f /System/Library/Extensionssudo touch -f /Library/Extensionssudo kextcache -Boot -U / 小太阳 挂载EFI分区,终端下输入如下命令重启 12345678910sudo cp -Rf /Volumes/EFI/EFI/CLOVER/kexts/Other/AppleBacklightInjector.kext /Library/Extensionssudo chmod -Rf 755 /System/Library/Extensionssudo chown -Rf 0:0 /System/Library/Extensionssudo chmod -Rf 755 /Library/Extensionssudo chown -Rf 0:0 /Library/Extensionssudo rm -Rf /System/Library/PrelinkedKernels/*sudo rm -Rf /System/Library/Caches/com.apple.kext.caches/*sudo touch -f /System/Library/Extensionssudo touch -f /Library/Extensionssudo kextcache -Boot -U / 设置快捷键,将亮度调节快捷键修改成笔记本键盘相应键位,ASUS-N550JV为F5亮度减,F6亮度增。(需要外接键盘才能设置,设置完成后可以拔掉外接键盘) 至此,ASUS-N550JV 黑苹果95完美","link":"/2019/01/29/hackintosh-for-asus-n550jv.html"},{"title":"为个人网站升级TLS 1.3以及HSTS","text":"理论相关TLSTLS简介SSL(Secure Sockets Layer) 安全套接层,是一种安全协议,经历了 SSL 1.0、2.0、3.0 版本后发展成了标准安全协议——TLS (Transport Layer Security) 传输层安全性协议。TLS 有 1.0 (RFC 2246)、1.1(RFC 4346)、1.2(RFC 5246)、1.3(RFC 8446) 版本。 TLS 在实现上分为 记录层 和 握手层 两层,其中握手层又含四个子协议: 握手协议 (handshake protocol)、更改加密规范协议 (change cipher spec protocol)、应用数据协议 (application data protocol) 和警告协议 (alert protocol)。TLS模型图如下。 TLS 1.3与TLS 1.2对比互联网工程任务组(IETF)是负责定义TLS协议的组,该协议经历了多次迭代。先前版本的TLS,TLS 1.2,在RFC 5246中定义, 并且在过去八年中已被大多数Web浏览器使用。在2018年3月21日,经过28次草案后,TLS 1.3已经完成。截至2018年8月,TLS 1.3的最终版本现已发布(RFC 8446)。 Cloudflare等公司已经向其客户提供TLS 1.3。Filippo Valsorda就TLS 1.2和TLS 1.3之间的差异进行了很好的讨论。简而言之,TLS 1.3与TLS 1.2的主要优点是速度更快,安全性更高。 TLS 1.3速度优势在Web性能方面,TLS和加密连接总是增加了一些开销。HTTP / 2肯定有助于解决这个问题,但TLS 1.3通过TLS错误启动和零往返时间(0-RTT)等功能帮助加速加密连接。 简单地说,使用TLS 1.2,需要两次往返才能完成TLS handshake。使用1.3时,它只需要一次往返, 从而将加密延迟减少一半。这会使这些加密连接感觉比以前更快一点。TLS1.3与TLS1.2握手示意图如下。 TLS 1.3浏览器支持最新版本的Chrome以及FireFox都已经默认支持TLS 1.3,Safari在macOS High Sierra中已经默认支持TLS 1.3。 HSTS什么是HSTSHSTS的全称是HTTP Strict-Transport-Security,它是一个Web安全策略机制(web security policy mechanism)。HSTS最早于2015年被纳入到ThoughtWorks技术雷达,并且在2016年的最新一期技术雷达里,它直接从“评估(Trial)”阶段进入到了“采用(Adopt)”阶段,这意味着ThoughtWorks强烈主张业界积极采用这项安全防御措施,并且ThoughtWorks已经将其应用于自己的项目。 HSTS核心思想HSTS最为核心的是一个HTTP响应头(HTTP Response Header)。正是它可以让浏览器得知,在接下来的一段时间内,当前域名只能通过HTTPS进行访问,并且在浏览器发现当前连接不安全的情况下,强制拒绝用户的后续访问要求。HSTS Header的语法如下:Strict-Transport-Security: [; includeSubDomains][; preload] max-age是必选参数,是一个以秒为单位的数值,它代表着HSTS Header的过期时间,通常设置为1年,即31536000秒。 includeSubDomains是可选参数,如果包含它,则意味着当前域名及其子域名均开启HSTS保护。 preload是可选参数,只有当你申请将自己的域名加入到浏览器内置列表的时候才需要使用到它。 升级TLS 1.3以及HSTS教程(服务器操作系统为Debian 4.9.51-1)TLS 1.3关闭以及备份现有Nginx输入如下命令即可(提前将nginx加入path路径): 1nginx -s stop && cd /usr/local && mv nginx nginx-bak 下载相关源码以及安装依赖环境下载以及解压Nginx1wget http://nginx.org/download/nginx-1.15.8.tar.gz && tar -zxvf nginx-1.15.8.tar.gz 下载以及解压OpenSSL1wget https://www.openssl.org/source/openssl-1.1.1a.tar.gz && tar -zxvf openssl-1.1.1a.tar.gz 安装相关依赖1apt install -y build-essential libpcre3 libpcre3-dev zlib1g-dev liblua5.1-dev libluajit-5.1-dev libgeoip-dev google-perftools libgoogle-perftools-dev 为Nginx以及OpenSSL打补丁OpenSSL1234pushd openssl-1.1.1acurl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/openssl-equal-1.1.1a_ciphers.patch | patch -p1curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/openssl-1.1.1a-chacha_draft.patch | patch -p1popd Nginx123pushd nginx-1.15.8curl https://raw.githubusercontent.com/kn007/patch/d6bd9f7e345a0afc88e050a4dd991a57b7fb39be/nginx.patch | patch -p1curl https://raw.githubusercontent.com/hakasenyang/openssl-patch/master/nginx_strict-sni.patch | patch -p1 编译安装Nginx使用以下命令生成MakeFile,注意–with-openssl=openssl路径1./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream --with-stream_ssl_module --with-http_v2_module --with-threads --with-http_v2_hpack_enc --with-http_spdy_module --with-openssl=~/openssl-1.1.1a 编译以及安装Nginx输入如下命令即可,如下图即安装成功。 1make && make install 配置Nginx以启用TLS 1.3输入以下命令,拷贝之前备份的nginx.conf。1cp -f /usr/local/nginx-bak/conf/nginx.conf /usr/local/nginx/conf 输入以下命令打开nginx.conf并按照图示修改即可启用TLS 1.3(注意:去掉所有的ssl on字段,否则会报警告)1nano conf/nginx.conf HSTS打开nginx.conf并按照图示修改即可启用HSTS 测试输入以下命令,输出如图即可确定nginx.conf文件没有错误1nginx -t 启动Nginx,无输出即正常1nginx 登录https://www.ssllabs.com, 输入域名,如下图即支持,说明TLS 1.3以及HSTS升级成功!!!","link":"/2019/01/14/update-website-tls1.3-and-HSTS.html"},{"title":"本站维护公告","text":"本站https://www.bugprogrammer.me 预计今日升级TLS 1.3以及HSTS,也可能同时改版,会有一段时间无法访问,如遇到无法访问请访问以下备用网址,内容与本站完全相同。https://bugprogrammer.github.iohttps://bugprogrammer.coding.me","link":"/2019/01/06/Website_maintenance.html"},{"title":"本站维护完毕公告","text":"本站https://www.bugprogrammer.me 已经维护完毕,现已正式支持TLS 1.3、HSTS、HTTP/2等特性,本站将继续更新原创技术类分享文章,谢谢各位访客的支持!","link":"/2019/01/06/Website_maintenance_end.html"},{"title":"macOS下编译VoodooI2C教程(2019最新更新)","text":"自从macOS Mojave 10.14发布以来,VoodooI2C在博主的笔记本上就一直闹毛病。最新的release版本2.1.4在10.14下已经可用,睡眠唤醒后也正常,但是有一个bug很让博主头痛,那就是长时间使用笔记本可能会突然出现内核恐慌而死机或重启。查了下github上的issum,不止博主一人遇到。尝试编译新提交的VoodooI2C源码,测试了一天,成功解决博主笔记本的问题。由于VoodooI2C和其他kext(比如Lilu及其插件)相比,编译难度稍大,故而现在发布VoodooI2C编译教程,供朋友们参考。 安装相关环境Xcode Mac App Store商店安装Xcode。 终端下输入如下命令并按提示安装。1xcode-select --install gitmacOS自带。 同步VoodooI2C源码 由于VoodooI2C不同模块分属于不同仓库,所以我们用以下命令一次性克隆VoodooI2C及其所有子模块。 12cd ~/Desktopgit clone --recursive https://github.com/alexandred/VoodooI2C 编译源码(这一节讲编译流程,相关错误解决方案在下一节) 用xcode打开桌面上的源码文件夹根目录的VoodooI2C.xcworkspace文件. 点击xcode左侧所有的Update to recommended settings警告,弹出框按提示操作,如图。 点击Product->Archive,正常情况下会编译成功,弹框提示输出路径,选择并输出即可,如图。 (什么?出错了?往下看!!!) 常见错误解决方案(语言叙述有难度,请看视频)视频教程(function(){var player = new DPlayer({\"container\":document.getElementById(\"dplayer0\"),\"theme\":\"#FADFA3\",\"loop\":true,\"video\":{\"url\":\"https://downloads.bugprogrammer.me/VoodooI2C.mkv\"}});window.dplayers||(window.dplayers=[]);window.dplayers.push(player);})()","link":"/2018/12/01/Build_VoodooI2C.html"},{"title":"Hackintosh for ASRock Z390 Phantom Gaming-ITX/ac+i9-9900K相关问题解决方案","text":"前言 你没看错,的确是Z390+9900K黑苹果,博主第一时间海淘测试(价钱不说了),大概率国内首发Z390+9900K黑苹果常见问题解决方案。 常见问题关机变重启以及睡眠变重启(还没进入睡眠状态就重启)问题成因 由于Apple并没有推出搭载Z390芯片组的产品,所以macOS现有版本不能原生支持Z390的nvram。 解决思路 软件模拟nvram 解决方案 按照教程https://www.bugprogrammer.me/2018/06/29/Build_Clover.html 编译最新版本Clover并安装到系统根目录,安装时务必勾选EmuVariableUefi-64.efi以及RC scripts补丁,如下图。 将cloverx64.efi拷贝到EFI分区下的EFI/CLOVER路径下并覆盖,将EmuVariableUefi-64.efi拷贝到EFI分区下的EFI/CLOVER/drivers64UEFI路径下。 使用Clover Configurator挂载EFI分区并打开config.plist文件,找到Boot->Arguments并勾选slide=0选项,如图。 重启电脑并观察EFI分区下有没有生成nvram.plist文件,如果有,恭喜你成功了,愉快的睡眠,关机吧!!! 睡眠正常,唤醒时重启问题成因 主板xmp选项影响,内存频率影响。 解决思路 主板BIOS调节 解决方案一 关闭BIOS中的xmp选项 解决方案二 开启BIOS中的xmp选项,手动调节频率,从高往低调节。比如博主的3600内存条,开启xmp选项,然后从3600调节到3400再调节到3200终于正常。 声卡无法驱动原因排查(通过AppleALC的debug版本进行排查) 将EFI/CLOVER/kexts/Other下的Lilu.kext以及AppleALC.kext替换成debug版本。 使用Clover Configurator打开EFI/CLOVER下的config.plist,在boot标签里加入-alcdbg参数,如图。 重启电脑。 终端输入如下命令,并观察输出日志。 1log show --predicate 'process == \"kernel\" AND (eventMessage CONTAINS \"AppleALC\" OR eventMessage CONTAINS \"Lilu\")' --style syslog --source 博主电脑报出如下错误,说明声卡的codec revision不被AppleALC支持,至此声卡无法驱动原因排查完毕。 解决方案一(Voodoohda方案)下载Voodoohda.kext放入EFI/CLOVER/Other下即可(会有爆音,不建议采用此方法)。https://sourceforge.net/projects/voodoohda/files/VoodooHDA-2.8.8.pkg.zip/download 解决方案二(cloveralc方案) 下载cloveralc脚本备用。 1git clone https://github.com/toleda/audio_CloverALC.git 下载FakePCIID备用。https://bitbucket.org/RehabMan/os-x-fake-pci-id/downloads/ 在macOS High Sierra 10.13.6的镜像里找到原版的AppleHDA.kext备用。 将FakePCIID.kext以及FakePCIID_Intel_HDMI_Audio.kext放入EFI/CLOVER/kexts/Other下。 将10.13.6的AppleHDA替换到10.14的System/Library/Extensions下并用kext Utility工具重建缓存(10.14专属步骤,10.13.6用户跳过)。 打开下载的cloveralc脚本,文件名为audio_cloverALC-130.sh,在下图位置加入如下代码(10.14专属步骤,10.13.6用户跳过)。 使用Clover Congifurator注入音频id,博主声卡id为1。 确定以上操作无误后,重启电脑。 挂载EFI分区,执行audio_cloverALC-130.sh脚本,按脚本要求执行,脚本运行完成后使用kext Utility工具重建缓存后重启电脑。 愉快的使用声卡吧!!! 解决方案三(AppleALC方案,博主认为最佳方案,推荐) macOS商店下载安装Xcode。 下载AppleALC源码。 1git clone https://github.com/acidanthera/AppleALC.git 下载Lilu.kext的debug版本,并拷贝到AppleALC源码文件夹。https://github.com/acidanthera/Lilu/releases 打开IORegistryExplorer工具,搜索HDA,找到IOHDACodecRevisionID值,如图即为0x100101,转成10进制为1048833。 打开AppleALC源码文件夹下的Resources文件夹,删掉其他声卡型号的文件夹,只保留当前主板的声卡型号文件夹,即保留alc1220文件夹。 打开PinConfigs.kext的info.plist,删除其他声卡信息,只保留当前主板的声卡信息,即alc1220。 进入ALC1220文件夹,打开info.plist,修改Revisions值为之前IORegistryExplorer查到的IOHDACodecRevision值的10进制数,即1048833。 Xcode打开AppleALC.xcodeproj,编译生成AppleALC.kext,编译教程请Google。本教程主要教授修改思路。 将修改的AppleALC.kext放到EFI/CLOVER/kexts/Other下,Kext Utility重建缓存,重启电脑。 愉快的使用声卡吧!!! 2018-11-27更新睡眠正常,唤醒变重启新版解决方案更新最新版本BIOS即可,新版本BIOS解决了这个问题,已经无需调整XMP。目前最新版版本号为1.29,什么?更新完进不去了?卡引导?往下看!!! 更新BIOS后无法进入系统(目前华擎主板中招,解决方案仅限华擎)解决方案 降级回老版本BIOS,目的是可以进入系统。 使用Clover Configurator挂载EFI分区并打开config.plist文件。在ACPI->Patches下添加以下补丁即可。如图。 123Comment: Fix AsRock Z390 BIOS DSDT Device(RTC) bugFind: A00A9353 54415301Replace: A00A910A FF0BFFFF 放心升级新版本BIOS吧,畅通无阻!!! 10.14.1和10.14.2 USB 3.0降速为480Mbps原因排查将usb3.0设备插入usb3.0接口,下载并打开FBPatcher,我们发现所有接口都是HSxx,并没有SSxx,所以usb3.0降速为480Mbps。 解决方案 划出一个小分区安装10.14.0并搞定usb驱动(10.14.0 usb也不正常的不在本文讨论范围内,本文仅讨论10.14.0 usb正常但是升级到10.14.1 usb降速的情况) 按照@黑果小兵的教程 https://blog.daliansky.net/Intel-FB-Patcher-tutorial-and-insertion-pose.html 定制usbports.kext(感谢黑果小兵提供教程,另外注意要在10.14.0下定制,至关重要)。 进入10.14.1或10.14.2,你会发现usb满血复活。 2018-12-24更新声卡驱动AppleALC官方已经更新了1.3.4版本,直接使用即可,已经无需修改revisionid再自行编译了。下载地址如下:https://github.com/acidanthera/AppleALC/releases","link":"/2018/11/05/Z390+9900K_Hackintosh.html"},{"title":"Linux内核简介及编译教程","text":"博主去年双11购入AMD Vega显卡(为了黑苹果免驱以及硬解),发现Linux下无法驱动Vega显卡,4K显示器分辨率被锁定为1920x2160的奇葩分辨率,无法接受。于是Google了一下发现当时的内核(Linux 4.12)并不支持AMD Vega显卡,于是打算编译内核升级到最新版本,毕竟Linux的舒适使用对博主十分重要。现在分享一下Linux Kernel的编译教程。注意:由于时间久远,博主的Linux已经升级Ubuntu 18.04,自带内核版本为Linux 4.15,所以演示平台为Ubuntu 18.04,编译的内核版本为Linux 4.18.5。另外,本文中部分图片来源网络。因为经典体系架构图现画比较麻烦。 Linux内核简介Linux Kernel Map Linux 系统体系结构如下图所示,Linux体系结构,从大的方面可以分为用户空间(User Space)和内核空间(Kernel Space)两部分。 用户空间中包含了C库,用户的应用程序。在某些体系结构图中还包含了shell,当然shell脚本也是Linux体系中不可缺少的一部分。 内核空间包括硬件平台、平台依赖代码、内核、系统调用接口。 在任何一个现代操作系统中,都是分层的。为什么需要分层呢? 从程序员的角度分析,将linux底层和应用分开,做应用的做应用,做底层的做底层,各干各的。经济学的基本原理是,分工产生效率。从安全性的角度分析,是为了保护内核。现代CPU通常都实现了不同的工作模式。以ARM为例:ARM实现了7种工作模式,不同模式下CPU可以执行的指令或者访问的寄存器不同:(1)用户模式 usr (2)系统模式 sys(3)管理模式 svc(4)快速中断 fiq(5)外部中断 irq(6)数据访问终止 abt(7)未定义指令异常。如果任何一个上层应用都可以调用寄存器,那样肯定是无法稳定执行的。而且因为出现了这个问题,出现了一个新的学科“现代操作系统”,如果大家感兴趣可以看一下“现代操作系统”相关文章或者书籍。以X86为例:X86实现了4个不同级别的权限,Ring0—Ring3 ;Ring0下可以执行特权指令,可以访问IO设备;Ring3则有很多的限制。如果分析一下Android的,这方面做的更加“丧心病狂”,Android所有的APK应用程序,都是在Java虚拟机上面运行,应用程序更加远离底层。另外,用户空间和内核空间是程序执行的两种不同状态,我们可以通过“系统调用”和“硬件中断”来完成用户空间到内核空间的转移。 Linux Kernel体系结构如下图所示,是Linux内核结构图。 SCI层(System Call Interface)这一层是给应用用户空间提供一套标准的系统调用函数来访问Linux。前面分析Linux体系结构的时候,介绍过任何一类现代操作系统都不会允许上层应用直接访问底层,在Linux中,内核提供了一套标准接口,上层应用就可以通过这一套标准接口来访问底层。 PM(Procees Management)这一部分包括具体创建进程(fork、exec),停止进程(kill、exit),并控制他们之间的通信(signal等)。还包括进程调度,控制活动进程如何共享CPU。这一部分是Linux已经做好的,在写驱动的时候,只需要调用对应的函数即可实现这些功能,例如创建进程、进程通信等等。 MM(Memory Management)内存管理的主要作用是控制多个进程安全的共享内存区域。 VFS(Virtual File Systems)虚拟文件系统,隐藏各种文件系统的具体细节,为文件操作提供统一的接口。在Linux中“一切皆文件”,这些文件就是通过VFS来实现的。Linux提供了一个大的通用模型,使这个模型包含了所有文件系统功能的集合。如下图所示,是一个虚拟文件系统的结构图。 DD(Device Drivers)设备驱动,Linux驱动一般分为网络设备、块设备、字符设备、杂项设备,需要我们编写的只有字符设备,杂项设备是不容易归类的一种驱动,杂项设备和字符设备有很多重合的地方。 PD(Physical Devices)这一部分提供丰富的网络协议支持。 Linux Kernel源码官网www.kernel.org 目录结构 arch:根据cpu体系结构不同而分的代码 block:部分块设备驱动程序 crypto:加密,压缩,CRC校验算法 documentation:内核文档 drivers:设备驱动程序 fs(虚拟文件系统vfs):文件系统 include:内核所需的头文件,(与平台无关的头文件在include/linux中) lib:库文件代码(与平台相关的) mm:实现内存管理,与硬件体系结构无关的(与硬件体系结构相关的在arch中) net:网络协议的代码 samples:一些内核编程的范例 scripts:配置内核的脚本 security:SElinux的模块 sound:音频设备的驱动程序 usr:cpio命令实现,用于制作根文件系统的命令(文件系统与内核放到一块的命令) virt:内核虚拟机 Linux Kernel编译下载Linux Kernel源码并拷贝到/usr/src目录输入如下命令即可 1wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.18.5.tar.xz && cp -f linux-4.18.5.tar.xz /usr/src 解压Linux Kernel输入如下命令即可 1cd /usr/src && tar -xvf linux-4.18.5.tar.xz && cd linux-4.18.5 Ubuntu 18.04下,要执行以下命令安装软件包1sudo apt install fortune 配置编译参数执行以下命令,会弹出一个带有GUI的配置界面,一般情况下默认参数就好,光标移动到Save保存即可,如图: 1make menuconfig 编译内核1make -j12 注意:-j参数后面加本机CPU线程数可以加快编译速度,博主的8700K是6核心12线程,所以-j12。 安装内核12make modules_installmake install 更新grub引导1update-grub2 至此升级内核成功,重启电脑。 确认升级是否成功重启后,执行如下命令查看内核版本,和编译版本相同即为成功 1uname -r","link":"/2018/09/01/Linux_Kernel_Build.html"},{"title":"ThinkPad S1 2018 Hackintosh记录+教程+完整EFI分享","text":"朋友购买了ThinkPad S1 2018版本,配置为i5-8250U+uhd620+8g ram+256g 联想定制ssd(NVME)+1080P屏幕。安装黑苹果大体顺利,现将大概过程分享,供同机型的朋友借鉴。 前言 因ThinkPad S1 2018使用的是intel无线网卡,大家都知道intel无线网卡在黑苹果下目前无解,所以替换了Bcm94352z。虽然Bcm94360是免驱的,但是博主不建议笔记本用户选用,因为Bcm94360和普通的ngff无线网卡相比宽了一块,所以笔记本有概率无法安装。 完美程度:显卡+声卡+双网卡+蓝牙完美驱动,USB正常,睡眠唤醒正常,显示器内建正常,HDMI外接屏幕正常,变频7档,小太阳正常,电池正常(感谢黑果小兵和宪武以及其他大牛的帮助)。触摸屏以及电容笔可用,但只能单点触摸。触摸板和小红点可用,但是不支持手势。 因为电脑是朋友的,所以截图不方便,因此本教程尽量多使用命令行方式,各位可以直接复制粘贴。 本教程需要你有一个macOS环境,可以是虚拟机。虚拟机安装macOS百度教程很多,请自学。 安装前要在Windows下准备好安装macOS所需分区。 教程制作安装盘 下载macOS High Sierra 10.13.6镜像,博主建议在App Store下载,下载成功后会保存在Application下。 格式化U盘为Mac OS扩展日志式,U盘名称设置为mac,格式化后会生成两个分区,第一个是EFI分区,用来存放Clover引导,第二个用于写入镜像,格式化U盘如图。 写入镜像:终端输入如下命令并输入密码即可。1sudo /Applications/Install\\ macOS\\ High\\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/mac --applicationpath /Applications/Install\\ macOS\\ High\\ Sierra.app 获取博主分享的Clover文件,保存在桌面 输入如下命令即可在桌面保存hackintosh文件夹,内含Clover文件夹 1cd ~/Desktop && git clone https://github.com/bugprogrammer/hackintosh.git && cd hackintosh && git checkout ThinkPad-S1-2018 挂载U盘EFI分区,放入Clover引导使用Clover Configurator挂载EFI分区,将博主分享的EFI拷贝进去。 安装系统 U盘启动,进入安装盘 选择语言为简体中文,磁盘工具下抹盘为APFS 点击安装macOS,选择刚才准备好的分区,安装系统 安装系统有两个阶段,中途会重启,属于正常现象 系统完善 因为有些操作是在系统内完成的,所以只有一个efi不可能安装完成就完美,所以进入系统后要完善系统。 蓝牙挂载EFI分区,终端下输入如下命令重启即可 1234567891011sudo cp -Rf /Volumes/EFI/EFI/CLOVER/kexts/Other/BrcmFirmwareData.kext /Library/Extensionssudo cp -Rf /Volumes/EFI/EFI/CLOVER/kexts/Other/BrcmPatchRAM2.kext /Library/Extensionssudo chmod -Rf 755 /System/Library/Extensionssudo chown -Rf 0:0 /System/Library/Extensionssudo chmod -Rf 755 /Library/Extensionssudo chown -Rf 0:0 /Library/Extensionssudo rm -Rf /System/Library/PrelinkedKernels/*sudo rm -Rf /System/Library/Caches/com.apple.kext.caches/*sudo touch -f /System/Library/Extensionssudo touch -f /Library/Extensionssudo kextcache -Boot -U / 电池挂载EFI分区,终端下输入如下命令重启即可 12345678910sudo cp -Rf /Volumes/EFI/EFI/CLOVER/kexts/Other/ACPIBatteryManager.kext /Library/Extensionssudo chmod -Rf 755 /System/Library/Extensionssudo chown -Rf 0:0 /System/Library/Extensionssudo chmod -Rf 755 /Library/Extensionssudo chown -Rf 0:0 /Library/Extensionssudo rm -Rf /System/Library/PrelinkedKernels/*sudo rm -Rf /System/Library/Caches/com.apple.kext.caches/*sudo touch -f /System/Library/Extensionssudo touch -f /Library/Extensionssudo kextcache -Boot -U / 小太阳 挂载EFI分区,终端下输入如下命令重启 12345678910sudo cp -Rf /Volumes/EFI/EFI/CLOVER/kexts/Other/AppleBacklightInjector.kext /Library/Extensionssudo chmod -Rf 755 /System/Library/Extensionssudo chown -Rf 0:0 /System/Library/Extensionssudo chmod -Rf 755 /Library/Extensionssudo chown -Rf 0:0 /Library/Extensionssudo rm -Rf /System/Library/PrelinkedKernels/*sudo rm -Rf /System/Library/Caches/com.apple.kext.caches/*sudo touch -f /System/Library/Extensionssudo touch -f /Library/Extensionssudo kextcache -Boot -U / 设置快捷键,将亮度调节快捷键修改成笔记本键盘相应键位,ThinkPad S1 2017为F5亮度增,F6亮度减。(需要外接键盘才能设置,设置完成后可以拔掉外接键盘) 显示器内建以及开启hidpi终端输入如下命令执行一建Hidpi脚本并按下图选择即可(感谢xzhih大牛提供脚本),重启之后,你会发现Hidpi和内建显示器成功完成。 1sh -c \"$(curl -fsSL https://raw.githubusercontent.com/xzhih/one-key-hidpi/master/hidpi.sh)\" 至此,ThinkPad S1 2018 黑苹果95完美","link":"/2018/09/01/ThinkPad_Hackintosh_2018.html"},{"title":"ThinkPad S1 2017 Hackintosh记录+教程+完整EFI分享","text":"朋友购买了ThinkPad S1 2017版本,配置为i5-7200U+hd620+8g ram+256g intel ssd(NVME)+1080P屏幕。安装黑苹果大体顺利,现将大概过程分享,供同机型的朋友借鉴。 前言 因ThinkPad S1 2017使用的是intel无线网卡,大家都知道intel无线网卡在黑苹果下目前无解,所以替换了Bcm94352z。虽然Bcm94360是免驱的,但是博主不建议笔记本用户选用,因为Bcm94360和普通的ngff无线网卡相比宽了一块,所以笔记本有概率无法安装。 完美程度:显卡+声卡+双网卡+蓝牙完美驱动,USB正常,睡眠唤醒正常,显示器内建正常,HDMI外接屏幕正常,变频7档,小太阳正常,电池正常(感谢黑果小兵和宪武以及其他大牛的帮助)。触摸屏以及电容笔可用,但只能单点触摸。触摸板和小红点可用,但是不支持手势。 因为电脑是朋友的,所以截图不方便,因此本教程尽量多使用命令行方式,各位可以直接复制粘贴。 本教程需要你有一个macOS环境,可以是虚拟机。虚拟机安装macOS百度教程很多,请自学。 安装前要在Windows下准备好安装macOS所需分区。 教程制作安装盘 下载macOS High Sierra 10.13.6镜像,博主建议在App Store下载,下载成功后会保存在Application下。 格式化U盘为Mac OS扩展日志式,U盘名称设置为mac,格式化后会生成两个分区,第一个是EFI分区,用来存放Clover引导,第二个用于写入镜像,格式化U盘如图。 写入镜像:终端输入如下命令并输入密码即可。1sudo /Applications/Install\\ macOS\\ High\\ Sierra.app/Contents/Resources/createinstallmedia --volume /Volumes/mac --applicationpath /Applications/Install\\ macOS\\ High\\ Sierra.app 获取博主分享的Clover文件,保存在桌面 输入如下命令即可在桌面保存hackintosh文件夹,内含Clover文件夹 1cd ~/Desktop && git clone https://github.com/bugprogrammer/hackintosh.git && cd hackintosh && git checkout ThinkPad-S1-2017 挂载U盘EFI分区,放入Clover引导使用Clover Configurator挂载EFI分区,将博主分享的EFI拷贝进去。 安装系统 U盘启动,进入安装盘 选择语言为简体中文,磁盘工具下抹盘为APFS 点击安装macOS,选择刚才准备好的分区,安装系统 安装系统有两个阶段,中途会重启,属于正常现象 系统完善 因为有些操作是在系统内完成的,所以只有一个efi不可能安装完成就完美,所以进入系统后要完善系统。 蓝牙挂载EFI分区,终端下输入如下命令重启即可 1234567891011sudo cp -Rf /Volumes/EFI/EFI/CLOVER/kexts/Other/BrcmFirmwareData.kext /Library/Extensionssudo cp -Rf /Volumes/EFI/EFI/CLOVER/kexts/Other/BrcmPatchRAM2.kext /Library/Extensionssudo chmod -Rf 755 /System/Library/Extensionssudo chown -Rf 0:0 /System/Library/Extensionssudo chmod -Rf 755 /Library/Extensionssudo chown -Rf 0:0 /Library/Extensionssudo rm -Rf /System/Library/PrelinkedKernels/*sudo rm -Rf /System/Library/Caches/com.apple.kext.caches/*sudo touch -f /System/Library/Extensionssudo touch -f /Library/Extensionssudo kextcache -Boot -U / 电池挂载EFI分区,终端下输入如下命令重启即可 12345678910sudo cp -Rf /Volumes/EFI/EFI/CLOVER/kexts/Other/ACPIBatteryManager.kext /Library/Extensionssudo chmod -Rf 755 /System/Library/Extensionssudo chown -Rf 0:0 /System/Library/Extensionssudo chmod -Rf 755 /Library/Extensionssudo chown -Rf 0:0 /Library/Extensionssudo rm -Rf /System/Library/PrelinkedKernels/*sudo rm -Rf /System/Library/Caches/com.apple.kext.caches/*sudo touch -f /System/Library/Extensionssudo touch -f /Library/Extensionssudo kextcache -Boot -U / 小太阳 挂载EFI分区,终端下输入如下命令重启 12345678910sudo cp -Rf /Volumes/EFI/EFI/CLOVER/kexts/Other/AppleBacklightInjector.kext /Library/Extensionssudo chmod -Rf 755 /System/Library/Extensionssudo chown -Rf 0:0 /System/Library/Extensionssudo chmod -Rf 755 /Library/Extensionssudo chown -Rf 0:0 /Library/Extensionssudo rm -Rf /System/Library/PrelinkedKernels/*sudo rm -Rf /System/Library/Caches/com.apple.kext.caches/*sudo touch -f /System/Library/Extensionssudo touch -f /Library/Extensionssudo kextcache -Boot -U / 设置快捷键,将亮度调节快捷键修改成笔记本键盘相应键位,ThinkPad S1 2017为F5亮度增,F6亮度减。(需要外接键盘才能设置,设置完成后可以拔掉外接键盘) 显示器内建以及开启hidpi终端输入如下命令执行一建Hidpi脚本并按下图选择即可(感谢xzhih大牛提供脚本),重启之后,你会发现Hidpi和内建显示器成功完成。 1sh -c \"$(curl -fsSL https://raw.githubusercontent.com/xzhih/one-key-hidpi/master/hidpi.sh)\" 至此,ThinkPad S1 2017 黑苹果95完美","link":"/2018/07/28/ThinkPad_Hackintosh.html"},{"title":"macOS下编译Clover教程","text":"随着macOS 10.14公测版本的发布,黑苹果用户对Clover新版本的需求提高,想要最新版本的Clover最直接的方法就是源码编译,方便快捷,教程如下。 安装相关环境Xcode Mac App Store商店安装Xcode 终端下输入如下命令并按提示安装1xcode-select --install python 官网下载安装即可 准备编译脚本Build_Clover.command 输入如下命令下载编译脚本并进入相应目录 1git clone https://github.com/Micky1979/Build_Clover.git && cd Build_Clover 给予执行权限 1chmod u+x Build_Clover.command 执行脚本,中途会自动下载Clover最新源码,请等待,下载源码过程以及成功进入菜单如图所示 1./Build_Clover.command Build_Clover.command菜单解释 update Clover only (no building) 更新Clover源码不编译 update Clover + force edk2 update (no building) 更新Clover源码和Build_Clover脚本文件,不编译 run my script on the source 执行自定义脚本 build existing revision (no update, for testing only) 编译已存在版本,仅供测试使用 build existing revision for release (no update, standard build) 编译已存在版本,不更新,常规编译 build existing revision with custom macros enabled 启用宏的模式下编译 enter Developers mode (only for devs) 进入开发模式 Try Clover Configurator Pro.app 尝试启动Clover Configurator edit the configuration file 编辑配置文件 Exit 退出菜单 编译Clover脚本菜单中选择build existing revision for release (no update, standard build)->Standard x64 only->Standard开始编译,过程请等待。编译结束后会自动打开clover的pkg安装包所在目录。安装此pkg包即可升级到最新版本的Clover。","link":"/2018/06/29/Build_Clover.html"},{"title":"mi5开启全面屏手势教程(非原创,转自一个已经被miui论坛删除又幸运的被Chrome缓存下来的帖子)","text":"MI5用户,升级miui10,发现没有全面屏手势的同学可以来看看 我把我开启全面屏的过程写了一下,由于在过程中看到其他帖子写的太随便,不够详细,所以来写一个详细一些的,方便mi5用户体验全面屏手势,话说真的很好用啊,那些说不用root用第三方软件实现的手势不管是从美观程度和可用性都没原厂的好啊,刷完自己体会吧。 适用对象 已经获取root权限的mi5 已是开发版系统,并且在授权管理开启了root授权 稳定版用户,自行升级到开发版开启root权限,或者用其他办法获取root授权 简要流程 获取完整root权限 安装rec,挂载system分区 使用re文件管理器找到/system/build.prop文件,在文件尾部加入qemu.hw.mainkeys=0 重启手机,即可在设置中找到全面屏选项 详细流程 默认使用win10系统,已安装mi5的驱动。 获取完整root权限 手机开启usb调试模式 下载一键破译分区工具 解压下载的文件,运行.bat文件,如图 安装rec,挂载system分区 下载twrp.apk 手机安装下载的app(此app需要root权限,如果是开发版小米的root权限管理,去设置给他权限,其他root管理软件到对应的管理权限的地方,给它权限) 打开安装的app 选择TWRP FLASH 选择Select Device 找到 Xiaomi Mi 5 – gemini 并选择它 选最新的.img文件(例如xian在是:twrp-3.2.1-1-gemini.img) 他会提示是否要下载,点击okay 下载好了之后点击FLASH TO RECOVERY按钮 成功的话会提示:Flash completed Successfully! 失败的话,多半是root权限问题,检查一下是否给了这个软件root权限 按住音量上键并重启手机,直到手机出现twrp的logo时放开音量上键 进入rec 点击挂载,选择system分区,返回,重启手机 使用re管理器修改文件(此软件需要root权限) 下载一个re管理器,找到/system/build.prop这个文件(是文件不是文件夹) 以文本方式编辑,在文件最后加上 qemu.hw.mainkeys=0,保存 以文本方式查看一下它,看是否保存成功 如果失败多半是root权限或者挂载分区有问题,回到前面的步骤重试 如果保存成功,只需重启手机即可在设置中找到全面屏选项 如果想关掉全面屏,只需将/system/build.prop 文件中的 qemu.hw.mainkeys=0 删去,重启即可 写的尽量详细了,如在过程中有问题,可以回复","link":"/2018/06/22/mi5-enable-gesture.html"},{"title":"Windows 10下忘记密码的解决方案(本地账户,微软账户通杀)","text":"原理 我们知道Windows下连按5次shift会弹出粘滞键,他的程序名称是sethc.exe。经测试在Windows登录界面处输入密码之前按5次shift键也可以启动sethc.exe。所以只要把cmd.exe重命名为sethc.exe就可以在登录之前打开cmd以便我们为所欲为。 PE破解密码的缺陷如果电脑安装了双Windows系统,如win7+win10,pe破解可能失效。 教程 准备好windows 10安装U盘。 U盘启动,点击下一步->修复计算机->疑难解答->命令提示符(一定要在安装盘下进入,系统下直接进入高级模式会要求输入密码),如图如出现下图则说明你不是通过安装盘进入的高级模式。 导航进入系统盘符,注意不一定是C盘,用dir命令查看盘符下的文件已确定是不是系统盘。如 12C:cd Windows/System32 输入以下命令将cmd重命名,3、4步骤如图 12ren sethc.exe AAA.exeren cmd.exe sethc.exe 重启到登录界面按5次shift进入命令提示符(此时窗口名称为sethc.exe) 输入如下命令启用Windows内置的Administrator用户,并重置Administrator的密码。如果之前用的是微软账户就可以不重置密码,默认无密码。12net user Administrator /active:yes net user Administrator 新密码 用Administrator登录系统,将之前忘记密码的用户修改密码,如果是微软账户就上官网重置密码。 进入原用户测试。 进入文件资源管理器,将Windows/System32下的sethc.exe重命名为cmd.exe,AAA.exe重命名为sethc.exe。 如果想禁用Administrator请执行以下命令。1net user Administrator /active:no","link":"/2018/05/27/reset-password-for-windows-10.html"},{"title":"PHP+Nginx+MySQL搭建网站简易教程(以Centos7为例)","text":"准备工作 一台vps 一个域名并做好域名解析(本人在godaddy 购买的),解析之后ping域名,如果返回的是vps的ip,则域名解析成功。如图: 一个SSL证书,个人网站免费的Let’s Encrypt即可(申请过程后面讲)。 安装PHP7.0及其扩展 更新yum源 1rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm 安装PHP7.0(php70w-common,php70w-fpm,php70w-mysqlnd必须必须安装) 1yum install php70w-common php70w-fpm php70w-opcache php70w-gd php70w-mysqlnd php70w-mbstring php70w-pecl-redis php70w-pecl-memcached php70w-devel 版本验证 1php -v 查看显示,如图则成功。 安装MySQL 安装wget(顺便吐槽CentOS) 1yum install wget 下载MySQL源包 1wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm 安装MySQL源包 1yum localinstall mysql57-community-release-el7-8.noarch.rpm yum安装MySQL 1yum install mysql-community-server 启动MySQL服务(如不报错则为成功) 1systemctl start mysqld 修改Mysql root密码 mysql安装完成之后,在/var/log/mysqld.log文件中给root生成了一个默认密码。通过下面的方式找到root默认密码,然后登录mysql进行修改。 输入如下命令 1grep 'temporary password' /var/log/mysqld.log 返回的字符串就是默认生成的密码。如图: 输入以下命令并输入默认密码进入MySQL 1mysql -uroot -p 输入以下命令修改密码 1set password for root@localhost = password('新密码'); 刷新权限 1flush privileges; 编译安装Nginx选择编译安装Nginx的理由 因为nginx功能强大,模块众多,所以自己需要了解究竟需要什么模块,实现那些功能,这就需要我们自己定制Nginx,编译安装满足高自定义性,故采用编译安装。 编译教程 下载Nginx源码 1wget http://nginx.org/download/nginx-1.14.0.tar.gz 解压并进入nginx目录,如图则正确 1tar -zxvf nginx-1.14.0.tar.gz && cd nginx-1.14.0 && ls 安装所需环境 1yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel 生成MakeFile,如图则成功(–with-http_v2_module为http 2.0模块,–with-http_ssl_module为SSL模块,尤为重要) 1./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-stream --with-stream_ssl_module --with-http_v2_module --with-threads 编译及安装 1make && make install 启动nginx 输入如下命令并在浏览器输入ip或域名,如看到nginx主页,恭喜安装成功啦! 1/usr/local/nginx/sbin/nginx Nginx基础使用Nginx相关文件路径 主文件:/usr/local/nginx/sbin/nginx 配置文件:/usr/local/nginx/conf/nginx.conf 日志文件:/usr/local/nginx/logs/error.log (错误日志) /usr/local/nginx/logs/access.log (成功文件) Nginx相关操作 启动 1/usr/local/nginx/sbin/nginx 重启 1/usr/local/nginx/sbin/nginx -s restart 关闭 1/usr/local/nginx/sbin/nginx -s stop 查看配置文件 1nano /usr/local/nginx/conf/nginx.conf 查看出错日志 1nano /usr/local/nginx/logs/error.log nginx.conf简单解读(写法很多)1234567891011121314151617server { listen 80; #监听80端口,接收http请求 server_name bugprogrammer.tk; #就是网站地址 root /var/www/phpmyadmin; # 准备存放代码工程的路径 #路由到网站根目录bugprogrammer.me时候的处理 location / { index index.php; #跳转到bugprogrammer.tk/index.php autoindex on; } #当请求网站下php文件的时候,反向代理到php-fpm location ~ \\.php$ { include /usr/local/etc/nginx/fastcgi.conf; #加载nginx的fastcgi模块 fastcgi_intercept_errors on; fastcgi_pass 127.0.0.1:9000; #nginx fastcgi进程监听的IP地址和端口 }} php-fpm+Nginx整合配置修改nginx.conf 取消首行user以及php-fpm模块前的注释,并修改网站目录(注意主服务和php-fpm都要修改),如图: 在网站目录(上图为phpmyadmin目录)新建一个index.php文件,并粘贴如下代码(伟大的Hello World!!!)12345678 PHP 测试title> head> body>html> 启动php-fpm1service php-fpm start 启动Nginx(见Nginx相关操作)并在浏览器输入域名或ip测试,如下及成功。 建立网站(以phpmyadmin为例) 下载phpmyadmin最新版并解压到网站目录下,如图: 重启nginx并测试网站 相关错误以及解决方案常见错误1,如图 这个错误的原因是phpmyadmin找不到sesson的存放路径,所以在浏览器允许session的情况下需要调整php的配置文件php.ini 解决方案 打开php.ini(路径为),并添加如下参数 1session.save_path = \"/var/lib/php/session\" 创建sesson存储目录,给予读写权限,并调整所属用户即可解决 1mkdir /var/lib/php/session && chmod -R 777 /var/lib/php/session && chown -R nobody:nobody /var/lib/php/session 常见错误2,如图 解决方案进入phpmyadmin目录下将config.sample.inc.php文件改名为config.inc.php并打开,将$cfg[‘Servers’][$i][‘host’] = ‘localhost’改为$cfg[‘Servers’][$i][‘host’] = ‘127.0.0.1’并保存,命令及图解如下: 1cd /var/www/phpmyadmin && mv config.sample.inc.php config.inc.php && nano config.inc.php 常见错误3,如图 解决方案同(2)打开config.inc.php,找到$cfg[‘blowfish_secret’] = ‘’,在引号中填写短语密码,推荐填写UUID,如图: 常见错误4,如图 解决方案创建tmp文件夹并给予读写权限即可 1mkdir tmp && chmod 777 tmp 阶段成果 后续优化(前提是按照我的教程编译安装的Nginx,注意SSL和HTTP 2.0模块)升级https 关闭Nginx 1/usr/local/nginx/sbin/nginx -s stop 获得Let’s Encrypt官方客户端并进入相应目录(如果没有安装git请先yum install git) 1git clone https://github.com/letsencrypt/letsencrypt && cd letsencrypt 申请SSL证书,请按要求填写域名,邮箱,最后一张图代表成功,申请后路径在/etc/letsencrypt/live/域名/,一共4个文件 1./certbot-auto certonly 修改Nginx.conf,添加SSL支持。 12345678910111213server { listen 443 ssl; server_name 域名; … ssl on; ssl_certificate /etc/letsencrypt/live/域名/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/域名/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers ‘EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH’; …} 启动Nginx,分别用http://域名和https://域名测试网站,如果https可以进入,http不能进入,你就成功一半了。 实现http自动跳转到https 新建如下server即可 12345server { listen 80; server_name 域名; return 301 https://$host$request_uri;} 用http://域名测试网站,如果能自动跳转https则成功。 (更新)SSL通配符版本申请 一个天大的好消息,Let’s Encrypt已经发布了通配符版本SSL证书。顾名思义,通配符SSL证书不再需要为每一个二级域名重复申请SSL证书,以域名bugprogrammer.tk为例,只需要申请*.bugprogrammer.tk以及bugprogrammer.tk即可用于根域名以及所有二级域名,非常方便。申请教程如下。 获取最新版Let’s Encrypt客户端 1wget https://get.acme.sh 申请通配符SSL证书,按要求输入邮箱,同意条款等操作,如图。 1./certbot-auto certonly -d *.bugprogrammer.tk -d bugprogrammer.tk --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory 至关重要的步骤,按如下图操作,在域名DNS设置处添加TXT类型解析,如下图即为:name:_acmechallengevalue:UYgQnnncMwZ9Z_Ja1mtkbTmayZP_5IDQcXgWIWlyY8w。添加解析后回车继续。因为我们同时申请了*.bugprogrammer.tk以及bugprogrammer.tk,所以会出现两个解析要求。 如下图即为成功 升级http2 打开nginx.conf,在listen 443 ssl后面加上http2并重启nginx 打开https://myssl.com/http2_check.html, 输入域名检测是否成功,成功如图:","link":"/2018/05/19/phpnginxmysql.html"},{"title":"美化你的shell,macOS下安装zsh和neofetch教程(Unix/Linux也适用)","text":"最近在使用Hackintosh,发现macOS自带的shell并不好用,所以安装了被誉为终极shell的zsh,方法整理如下: 确认包管理器 unix以及类unix(如Linux及其发行版)下都有对应的包管理器,常见的包管理器如下:macOS下为HomeBrew,Debian/Ubuntu为apt,Fedora为yum或dnf,Centos为yum,Archlinux为pacman等。 macOS安装HomeBrew以及wget(其他系统用户跳过此步骤)HomeBrew由于macOS下没有自带HomeBrew,故需要手动安装。首先安装xcode,然后终端运行如下命令即可安装HomeBrew。 1ruby -e \"$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)\" 使用方法 更新:brew update 安装软件包:brew install “PackegeName” 搜索软件包:brew search “PackegeName” 卸载软件包:brew remove “PackegeName” wget:1brew install wget 安装zshmacOS:1brew install zsh Debian/Ubuntu:1apt install zsh Fedora:1dnf install zsh Centos:1yum update && yum install zsh Archlinux:1pacman -S zsh 将系统默认shell更换为zsh1chsh -s /bin/zsh 安装neofetch同安装zsh,只需要更换软件包名名称为neofetch。配置zsh使用oh-my-zsh可以很方便的配置zsh,并生成.zshrc配置文件方便修改 输入以下命令安装oh-my-zsh 1sh -c \"$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)\" 安装成功后输入nano .zshrc打开.zshrc文件添加neofetch,修改ZSH_THEME=”random”,意为每次打开终端即启动neofetch,zsh主题随机,也就是每次打开终端都会改变一个主题,修改如图: 重启电脑就会看到效果。 用描述文件美化终端(不同系统,不同桌面环境会有所不同,需要自己摸索了,下面以macOS为例)打开终端,点击右键打开显示检查器,选择一个样式双击打开描述文件,按自己的喜好设置文字风格,样式,透明度,模糊程度,窗口大小等,成品图如下:","link":"/2018/05/11/install-zsh.html"},{"title":"macOS High Sierra 10.13.4下Z370主板USB相关解决方案","text":"有些使用z370主板安装macOS的朋友可能遇到USB方面的问题,一些朋友的表现为部分USB失灵,还有一部分可能遇到usb3.0设备插在 3.0接口处不识别,今天放上本人的解决方案。 在clover加入以下补丁并重启测试USB情况查看USB是否完整识别,3.0设备插在usb3.0上是否可用。 添加补丁后遇到USB3.0移动硬盘插在usb3.0接口上识别为内置硬盘(桌面不显示黄盘)的解决方案:下载最新版usbinjectall.kext,并解压拷贝到efi/clover/kexts/other下。 usb引起睡眠之后瞬间唤醒的解决方案(按照步骤2添加usbinjectall.kext后有概率遇到,此解决方案包括但不限于以上情况):方案1(DSDT打补丁):特点:无需排查导致bug的具体usb口是哪个。同时会使usb唤醒失效,无法用键鼠唤醒,故不推荐!!! 下载iasl用来反编译dsdt,把iasl编译器拷贝到/usr/bin目录,方便调用。 下载MaciASL,我提供的版本自带RehabMan dsdt补丁库。 提取DSDT:开机clover引导界面处按F4自动提取,路径EFI/Clover/ACPI/origin下。把DSDT.aml拷贝到桌面。 反编译DSDT:终端输入cd ~/Desktop进入桌面目录,再输入iasl -da -dl *.aml反编译DSDT,成功后会在桌面生成DSDT.dsl 文件。 给DSDT打补丁:用MaciASL打开DSDT.dsl,点击patch,在左侧补丁栏选择USB3 _PRW 0x6D Skylake(instant wake),再点击 Apply完成,如图: 编译、排错、保存:打完补丁后点击Complie编译,如果有错请暂时依照网络资源排错。关于DSDT排错,本人后续会详细更新, 敬请期待!排错完成后点击File->Save As保存DSDT,格式为ACPI Machine Language Binary(aml)。 将dsdt拷贝到efi/clover/acpi/patched下并重启生效。 方案2(修改usbinjectall.kext)特点:需要排查导致bug的具体usb接口,但不会导致usb唤醒失效,可以用键鼠唤醒,故强烈推荐。 排查引起bug的USB:一般为蓝牙或摄像头等特殊接口。可以拔掉相应排线重启测试,若拔掉后不再瞬间唤醒,则接口确定,比如 本人的是连接蓝牙排线的usb所导致。 Windows下进入设备管理器,确定usb设备id,如图则为8086_a2af。 确定导致bug的usb编号:下载并打开IORegistryExplorer,找到XHC分支,在XHC分支中找到导致bug的usb所连接的设备(比如我 的是蓝牙),此设备对应的HS号即为所需编号,如图则为HS10(注意HS10下面的BCM20702A0就是我的蓝牙,也就是说HS10导致的睡眠 瞬间唤醒): 将usbinjectall.kext拷贝到桌面,并下载PlistEdit Pro。 修改usbinjectall.kext:右击usbinjectall.kext,用PlistEdit Pro打开info.plist。找到IOKitPersonalities-> ConfigurationData->Configuration分支,在下面选择自己usb的id(Windows下找的那个,我的是8086_a2af)分支,进入后打开 ports可以看到一堆HS编号,打开自己的HS编号(步骤3找到的那个,我的是HS10),将UsbConnector属性值改成255(255为特殊端口) 并保存,如图: 将修改好的usbinjectall.kext拷贝到efi/clover/kexts/other下重建缓存并重启。","link":"/2018/05/09/macos-high-sierra-10-13-4-z370-motherboard-usb-related-solutions.html"},{"title":"小米6第三方Project Treble实现","text":"关于Project Treble 为了解决Android碎片化问题,减少技术支持层面的拖累,Google终于开窍了,在推广最新Android 8.x(又称Android O)时提出了“Project Treble”计划。 在Project Treble计划出现以前,Android手机的更新都是这种节奏:Android新版本发布,处理器厂商会拿到第一手资源,进行底层的适配和修改后发送给采购该处理器的手机厂商,而后者会根据自己的需要继续修改系统。 而Project Treble计划则改变了这个流程,谷歌将原本由芯片厂商负责的代码修改工作纳入到Android项目中,绕过芯片厂而直接将打包好处理器适配性的系统发送给手机厂商,从而大大节省时间和研发难度,让手机厂商升级系统的门槛变得更低。同时也使第三方Rom(如Lineage)的适配变得容易。 对谷歌来说,让所有的Android手机都能像其亲儿子“Pixel”系列一样,可以直接接收自己的推送更新才是终极目标(为Google打Call)。 国内Project Treble支持现状 由于众所周知的原因,国内的山寨”安卓”和国际上正版的”Android”根本不是一个世界,广大国产手机还有好多机型尚未吃上Android 8.x,无从谈起Project Treble,少数预装8.x的机型并没有跟进Project Treble这个Android史上最大的底层变化,所以非官方Project Treble应运而生。 相关名词 Recovery Android设备的还原模式,类似于Windows上臭名远扬的Ghost。。。可以执行刷写,清除等操作。建议使用twrp。recovery实际是一个精简的Linux系统加上Google开发的GUI,和Android OS同级。 Bootloader BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的BootLoader程序。为了安全起见,Android的BootLoader通常是锁定的,因此想要刷写rom必须解锁,不同手机解锁方式不同,也有的手机无法解锁。 Adb 全称Android Debug Bridge,起到连接桥的作用。 GSI Project Treble的通用镜像。 教程 下载并安装Android必备驱动(可以用小米线刷工具) 下载adb工具包并且把路径粘贴到path中方便调用。 下载支持Project Treble的Recovery 下载Project Treble卡刷包 下载GSI镜像 刷入Recovery:将Recovery文件拷贝到磁盘根目录,假设在D盘,并改一个简单的名字,假设改成recovery.img。手机进入Fastboot模式(电源+音量-),打开cmd或powershell,输入如下命令即可: 1fastboot flash recovery d:\\recovery.img 刷入Project Treble卡刷包:卡刷包拷入手机根目录,手机进入Recovery模式(电源+音量+)清除Dalvik/Cache/System/Data/Vendor 等分区,点击安装,找到卡刷包刷入。 刷入GSI镜像:手机进入Fastboot模式(电源+音量-),将GSI拷贝到D盘并重命名为system.img,打开cmd或powershell,输入如下命令即可,完成后重启手机即可。 1fastboot flash system d:\\system.img 检测是否成功:查看手机型号为Phh-Treble with GApps则为成功。酷安下载Treble Check,第一项打钩表示成功。如图即为成功:","link":"/2018/05/08/project-treble-for-xiaomi-mi6-unofficial.html"},{"title":"Linux常用命令总结","text":"由于最近一直在使用Linux操作系统,经常要使用一些Linux命令,所以总结一下Linux中的常用命令: 系统信息12345678910111213141516171819arch 显示机器的处理器架构(1)uname -m 显示机器的处理器架构(2)uname -r 显示正在使用的内核版本dmidecode -q 显示硬件系统部件 - (SMBIOS / DMI)hdparm -i /dev/hda 罗列一个磁盘的架构特性hdparm -tT /dev/sda 在磁盘上执行测试性读取操作cat /proc/cpuinfo 显示CPU info的信息cat /proc/interrupts 显示中断cat /proc/meminfo 校验内存使用cat /proc/swaps 显示哪些swap被使用cat /proc/version 显示内核的版本cat /proc/net/dev 显示网络适配器及统计cat /proc/mounts 显示已加载的文件系统lspci -tv 罗列 PCI 设备lsusb -tv 显示 USB 设备date 显示系统日期cal 2007 显示2007年的日历表date 041217002007.00 设置日期和时间 - 月日时分年.秒clock -w 将时间修改保存到 BIOS 关机 (系统的关机、重启以及登出 )12345678shutdown -h now 关闭系统(1)init 0 关闭系统(2)telinit 0 关闭系统(3)shutdown -h hours:minutes & 按预定时间关闭系统shutdown -c 取消按预定时间关闭系统shutdown -r now 重启(1)reboot 重启(2)logout 注销 文件和目录123456789101112131415161718192021222324252627282930313233cd /home 进入 '/ home' 目录'cd .. 返回上一级目录cd ../.. 返回上两级目录cd 进入个人的主目录cd ~user1 进入个人的主目录cd - 返回上次所在的目录pwd 显示工作路径ls 查看目录中的文件ls -F 查看目录中的文件ls -l 显示文件和目录的详细资料ls -a 显示隐藏文件ls *[0-9]* 显示包含数字的文件名和目录名tree 显示文件和目录由根目录开始的树形结构(1)lstree 显示文件和目录由根目录开始的树形结构(2)mkdir dir1 创建一个叫做 'dir1' 的目录'mkdir dir1 dir2 同时创建两个目录mkdir -p /tmp/dir1/dir2 创建一个目录树rm -f file1 删除一个叫做 'file1' 的文件'rmdir dir1 删除一个叫做 'dir1' 的目录'rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容rm -rf dir1 dir2 同时删除两个目录及它们的内容mv dir1 new_dir 重命名/移动 一个目录cp file1 file2 复制一个文件cp dir/* . 复制一个目录下的所有文件到当前工作目录cp -a /tmp/dir1 . 复制一个目录到当前工作目录cp -a dir1 dir2 复制一个目录ln -s file1 lnk1 创建一个指向文件或目录的软链接ln file1 lnk1 创建一个指向文件或目录的物理链接touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm)file file1 outputs the mime type of the file as texticonv -l 列出已知的编码iconv -f fromEncoding -t toEncoding inputFile > outputFile creates a new from the given input file by assuming it is encoded in fromEncoding and converting it to toEncoding.find . -maxdepth 1 -name *.jpg -print -exec convert \"{}\" -resize 80x60 \"thumbs/{}\" \\; batch resize files in the current directory and send them to a thumbnails directory (requires convert from Imagemagick) 文件搜索12345678910find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录find / -user user1 搜索属于用户 'user1' 的文件和目录find /home/user1 -name \\*.bin 在目录 '/ home/user1' 中搜索带有'.bin' 结尾的文件find /usr/bin -type f -atime +100 搜索在过去100天内未被使用过的执行文件find /usr/bin -type f -mtime -10 搜索在10天内被创建或者修改过的文件find / -name \\*.rpm -exec chmod 755 '{}' \\; 搜索以 '.rpm' 结尾的文件并定义其权限find / -xdev -name \\*.rpm 搜索以 '.rpm' 结尾的文件,忽略光驱、捷盘等可移动设备locate \\*.ps 寻找以 '.ps' 结尾的文件 - 先运行 'updatedb' 命令whereis halt 显示一个二进制文件、源码或man的位置which halt 显示一个二进制文件或可执行文件的完整路径 挂载一个文件系统123456789101112mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 - 确定目录 '/ mnt/hda2' 已经存在umount /dev/hda2 卸载一个叫做hda2的盘 - 先从挂载点 '/ mnt/hda2' 退出fuser -km /mnt/hda2 当设备繁忙时强制卸载umount -n /mnt/hda2 运行卸载操作而不写入 /etc/mtab 文件- 当文件为只读或当磁盘写满时非常有用mount /dev/fd0 /mnt/floppy 挂载一个软盘mount /dev/cdrom /mnt/cdrom 挂载一个cdrom或dvdrommount /dev/hdc /mnt/cdr利奴性ecorder 挂载一个cdrw或dvdrommount /dev/hdb /mnt/cdrecorder 挂载一个cdrw或dvdrommount -o loop file.iso /mnt/cdrom 挂载一个文件或ISO镜像文件mount -t vfat /dev/hda5 /mnt/hda5 挂载一个Windows FAT32文件系统mount /dev/sda1 /mnt/usbdisk 挂载一个usb 捷盘或闪存设备mount -t smbfs -o username=user,password=pass //WinClient/share /mnt/share 挂载一个windows网络共享 磁盘空间123456df -h 显示已经挂载的分区列表ls -lSr |more 以尺寸大小排列文件和目录du -sh dir1 估算目录 'dir1' 已经使用的磁盘空间'du -sk * | sort -rn 以容量大小为依据依次显示文件和目录的大小rpm -q -a --qf '%10{SIZE}t%{NAME}n' | sort -k1,1n 以大小为依据依次显示已安装的rpm包所使用的空间 (fedora, redhat类系统)dpkg-query -W -f='${Installed-Size;10}t${Package}n' | sort -k1,1n 以大小为依据显示已安装的deb包所使用的空间 (ubuntu, debian类系统) 用户和群组12345678910111213groupadd group_name 创建一个新用户组groupdel group_name 删除一个用户组groupmod -n new_group_name old_group_name 重命名一个用户组useradd -c \"Name Surname \" -g admin -d /home/user1 -s /bin/bash user1 创建一个属于 \"admin\" 用户组的用户useradd user1 创建一个新用户userdel -r user1 删除一个用户 ( '-r' 排除主目录)usermod -c \"User FTP\" -g system -d /ftp/user1 -s /bin/nologin user1 修改用户属性passwd 修改口令passwd user1 修改一个用户的口令 (只允许root执行)chage -E 2005-12-31 user1 设置用户口令的失效期限pwck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的用户grpck 检查 '/etc/passwd' 的文件格式和语法修正以及存在的群组newgrp group_name 登陆进一个新的群组以改变新创建文件的预设群组 文件的权限 - 使用 “+” 设置权限,使用 “-“ 用于取消123456789101112131415ls -lh 显示权限ls /tmp | pr -T5 -W$COLUMNS 将终端划分成5栏显示chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限chown user1 file1 改变一个文件的所有人属性chown -R user1 directory1 改变一个目录的所有人属性并同时改变改目录下所有文件的属性chgrp group1 file1 改变文件的群组chown user1:group1 file1 改变一个文件的所有人和群组属性find / -perm -u+s 罗列一个系统中所有使用了SUID控制的文件chmod u+s /bin/file1 设置一个二进制文件的 SUID 位 - 运行该文件的用户也被赋予和所有者同样的权限chmod u-s /bin/file1 禁用一个二进制文件的 SUID位chmod g+s /home/public 设置一个目录的SGID 位 - 类似SUID ,不过这是针对目录的chmod g-s /home/public 禁用一个目录的 SGID 位chmod o+t /home/public 设置一个文件的 STIKY 位 - 只允许合法所有人删除文件chmod o-t /home/public 禁用一个目录的 STIKY 位 文件的特殊属性 - 使用 “+” 设置权限,使用 “-“ 用于取消12345678chattr +a file1 只允许以追加方式读写文件chattr +c file1 允许这个文件能被内核自动压缩/解压chattr +d file1 在进行文件系统备份时,dump程序将忽略这个文件chattr +i file1 设置成不可变的文件,不能被删除、修改、重命名或者链接chattr +s file1 允许一个文件被安全地删除chattr +S file1 一旦应用程序对这个文件执行了写操作,使系统立刻把修改的结果写到磁盘chattr +u file1 若文件被删除,系统会允许你在以后恢复这个被删除的文件lsattr 显示特殊的属性 打包和压缩文件123456789101112131415161718192021bunzip2 file1.bz2 解压一个叫做 'file1.bz2'的文件bzip2 file1 压缩一个叫做 'file1' 的文件gunzip file1.gz 解压一个叫做 'file1.gz'的文件gzip file1 压缩一个叫做 'file1'的文件gzip -9 file1 最大程度压缩rar a file1.rar test_file 创建一个叫做 'file1.rar' 的包rar a file1.rar file1 file2 dir1 同时压缩 'file1', 'file2' 以及目录 'dir1'rar x file1.rar 解压rar包unrar x file1.rar 解压rar包tar -cvf archive.tar file1 创建一个非压缩的 tarballtar -cvf archive.tar file1 file2 dir1 创建一个包含了 'file1', 'file2' 以及 'dir1'的档案文件tar -tf archive.tar 显示一个包中的内容tar -xvf archive.tar 释放一个包tar -xvf archive.tar -C /tmp 将压缩包释放到 /tmp目录下tar -cvfj archive.tar.bz2 dir1 创建一个bzip2格式的压缩包tar -xvfj archive.tar.bz2 解压一个bzip2格式的压缩包tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包tar -xvfz archive.tar.gz 解压一个gzip格式的压缩包zip file1.zip file1 创建一个zip格式的压缩包zip -r file1.zip file1 file2 dir1 将几个文件和目录同时压缩成一个zip格式的压缩包unzip file1.zip 解压一个zip格式压缩包 RPM 包 - (Fedora, Redhat及类似系统)1234567891011121314151617181920212223242526rpm -ivh package.rpm 安装一个rpm包rpm -ivh --nodeeps package.rpm 安装一个rpm包而忽略依赖关系警告rpm -U package.rpm 更新一个rpm包但不改变其配置文件rpm -F package.rpm 更新一个确定已经安装的rpm包rpm -e package_name.rpm 删除一个rpm包rpm -qa 显示系统中所有已经安装的rpm包rpm -qa | grep httpd 显示所有名称中包含 \"httpd\" 字样的rpm包rpm -qi package_name 获取一个已安装包的特殊信息rpm -qg \"System Environment/Daemons\" 显示一个组件的rpm包rpm -ql package_name 显示一个已经安装的rpm包提供的文件列表rpm -qc package_name 显示一个已经安装的rpm包提供的配置文件列表rpm -q package_name --whatrequires 显示与一个rpm包存在依赖关系的列表rpm -q package_name --whatprovides 显示一个rpm包所占的体积rpm -q package_name --scripts 显示在安装/删除期间所执行的脚本lrpm -q package_name --changelog 显示一个rpm包的修改历史rpm -qf /etc/httpd/conf/httpd.conf 确认所给的文件由哪个rpm包所提供rpm -qp package.rpm -l 显示由一个尚未安装的rpm包提供的文件列表rpm --import /media/cdrom/RPM-GPG-KEY 导入公钥数字证书rpm --checksig package.rpm 确认一个rpm包的完整性rpm -qa gpg-pubkey 确认已安装的所有rpm包的完整性rpm -V package_name 检查文件尺寸、 许可、类型、所有者、群组、MD5检查以及最后修改时间rpm -Va 检查系统中所有已安装的rpm包- 小心使用rpm -Vp package.rpm 确认一个rpm包还未安装rpm2cpio package.rpm | cpio --extract --make-directories *bin* 从一个rpm包运行可执行文件rpm -ivh /usr/src/redhat/RPMS/`arch`/package.rpm 从一个rpm源码安装一个构建好的包rpmbuild --rebuild package_name.src.rpm 从一个rpm源码构建一个 rpm 包 YUM 软件包升级器 - (Fedora, RedHat及类似系统)12345678910yum install package_name 下载并安装一个rpm包yum localinstall package_name.rpm 将安装一个rpm包,使用你自己的软件仓库为你解决所有依赖关系yum update package_name.rpm 更新当前系统中所有安装的rpm包yum update package_name 更新一个rpm包yum remove package_name 删除一个rpm包yum list 列出当前系统中安装的所有包yum search package_name 在rpm仓库中搜寻软件包yum clean packages 清理rpm缓存删除下载的包yum clean headers 删除所有头文件yum clean all 删除所有缓存的包和头文件 DEB 包 (Debian, Ubuntu 以及类似系统)12345678dpkg -i package.deb 安装/更新一个 deb 包dpkg -r package_name 从系统删除一个 deb 包dpkg -l 显示系统中所有已经安装的 deb 包dpkg -l | grep httpd 显示所有名称中包含 \"httpd\" 字样的deb包dpkg -s package_name 获得已经安装在系统中一个特殊包的信息dpkg -L package_name 显示系统中已经安装的一个deb包所提供的文件列表dpkg --contents package.deb 显示尚未安装的一个包所提供的文件列表dpkg -S /bin/ping 确认所给的文件由哪个deb包提供 APT 软件工具 (Debian, Ubuntu 以及类似系统)12345678apt-get install package_name 安装/更新一个 deb 包apt-cdrom install package_name 从光盘安装/更新一个 deb 包apt-get update 升级列表中的软件包apt-get upgrade 升级所有已安装的软件apt-get remove package_name 从系统删除一个deb包apt-get check 确认依赖的软件仓库正确apt-get clean 从下载的软件包中清理缓存apt-cache search searched-package 返回包含所要搜索字符串的软件包名称 查看文件内容1234567cat file1 从第一个字节开始正向查看文件的内容tac file1 从最后一行开始反向查看一个文件的内容more file1 查看一个长文件的内容less file1 类似于 'more' 命令,但是它允许在文件中和正向操作一样的反向操作head -2 file1 查看一个文件的前两行tail -2 file1 查看一个文件的最后两行tail -f /var/log/messages 实时查看被添加到一个文件中的内容 文本处理12345678910111213141516171819202122232425262728293031cat file1 file2 ... | command <> file1_in.txt_or_file1_out.txt general syntax for text manipulation using PIPE, STDIN and STDOUTcat file1 | command( sed, grep, awk, grep, etc...) > result.txt 合并一个文件的详细说明文本,并将简介写入一个新文件中cat file1 | command( sed, grep, awk, grep, etc...) >> result.txt 合并一个文件的详细说明文本,并将简介写入一个已有的文件中grep Aug /var/log/messages 在文件 '/var/log/messages'中查找关键词\"Aug\"grep ^Aug /var/log/messages 在文件 '/var/log/messages'中查找以\"Aug\"开始的词汇grep [0-9] /var/log/messages 选择 '/var/log/messages' 文件中所有包含数字的行grep Aug -R /var/log/* 在目录 '/var/log' 及随后的目录中搜索字符串\"Aug\"sed 's/stringa1/stringa2/g' example.txt 将example.txt文件中的 \"string1\" 替换成 \"string2\"sed '/^$/d' example.txt 从example.txt文件中删除所有空白行sed '/ *#/d; /^$/d' example.txt 从example.txt文件中删除所有注释和空白行echo 'esempio' | tr '[:lower:]' '[:upper:]' 合并上下单元格内容sed -e '1d' result.txt 从文件example.txt 中排除第一行sed -n '/stringa1/p' 查看只包含词汇 \"string1\"的行sed -e 's/ *$//' example.txt 删除每一行最后的空白字符sed -e 's/stringa1//g' example.txt 从文档中只删除词汇 \"string1\" 并保留剩余全部sed -n '1,5p;5q' example.txt 查看从第一行到第5行内容sed -n '5p;5q' example.txt 查看第5行sed -e 's/00*/0/g' example.txt 用单个零替换多个零cat -n file1 标示文件的行数cat example.txt | awk 'NR%2==1' 删除example.txt文件中的所有偶数行echo a b c | awk '{print $1}' 查看一行第一栏echo a b c | awk '{print $1,$3}' 查看一行的第一和第三栏paste file1 file2 合并两个文件或两栏的内容paste -d '+' file1 file2 合并两个文件或两栏的内容,中间用\"+\"区分sort file1 file2 排序两个文件的内容sort file1 file2 | uniq 取出两个文件的并集(重复的行只保留一份)sort file1 file2 | uniq -u 删除交集,留下其他的行sort file1 file2 | uniq -d 取出两个文件的交集(只留下同时存在于两个文件中的文件)comm -1 file1 file2 比较两个文件的内容只删除 'file1' 所包含的内容comm -2 file1 file2 比较两个文件的内容只删除 'file2' 所包含的内容comm -3 file1 file2 比较两个文件的内容只删除两个文件共有的部分 字符设置和文件格式转换1234dos2unix filedos.txt fileunix.txt 将一个文本文件的格式从MSDOS转换成UNIXunix2dos fileunix.txt filedos.txt 将一个文本文件的格式从UNIX转换成MSDOSrecode ..HTML < page.txt > page.html 将一个文本文件转换成htmlrecode -l | more 显示所有允许的转换格式 文件系统分析123456789badblocks -v /dev/hda1 检查磁盘hda1上的坏磁块fsck /dev/hda1 修复/检查hda1磁盘上linux文件系统的完整性fsck.ext2 /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性e2fsck /dev/hda1 修复/检查hda1磁盘上ext2文件系统的完整性e2fsck -j /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性fsck.ext3 /dev/hda1 修复/检查hda1磁盘上ext3文件系统的完整性fsck.vfat /dev/hda1 修复/检查hda1磁盘上fat文件系统的完整性fsck.msdos /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性dosfsck /dev/hda1 修复/检查hda1磁盘上dos文件系统的完整性 初始化一个文件系统123456mkfs /dev/hda1 在hda1分区创建一个文件系统mke2fs /dev/hda1 在hda1分区创建一个linux ext2的文件系统mke2fs -j /dev/hda1 在hda1分区创建一个linux ext3(日志型)的文件系统mkfs -t vfat 32 -F /dev/hda1 创建一个 FAT32 文件系统fdformat -n /dev/fd0 格式化一个软盘mkswap /dev/hda3 创建一个swap文件系统 SWAP文件系统123mkswap /dev/hda3 创建一个swap文件系统swapon /dev/hda3 启用一个新的swap文件系统swapon /dev/hda2 /dev/hdb3 启用两个swap分区 备份1234567891011121314151617dump -0aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的完整备份dump -1aj -f /tmp/home0.bak /home 制作一个 '/home' 目录的交互式备份restore -if /tmp/home0.bak 还原一个交互式备份rsync -rogpav --delete /home /tmp 同步两边的目录rsync -rogpav -e ssh --delete /home ip_address:/tmp 通过SSH通道rsyncrsync -az -e ssh --delete ip_addr:/home/public /home/local 通过ssh和压缩将一个远程目录同步到本地目录rsync -az -e ssh --delete /home/local ip_addr:/home/public 通过ssh和压缩将本地目录同步到远程目录dd bs=1M if=/dev/hda | gzip | ssh user@ip_addr 'dd of=hda.gz' 通过ssh在远程主机上执行一次备份本地磁盘的操作dd if=/dev/sda of=/tmp/file1 备份磁盘内容到一个文件tar -Puf backup.tar /home/user 执行一次对 '/home/user' 目录的交互式备份操作( cd /tmp/local/ && tar c . ) | ssh -C user@ip_addr 'cd /home/share/ && tar x -p' 通过ssh在远程目录中复制一个目录内容( tar c /home ) | ssh -C user@ip_addr 'cd /home/backup-home && tar x -p' 通过ssh在远程目录中复制一个本地目录tar cf - . | (cd /tmp/backup ; tar xf - ) 本地将一个目录复制到另一个地方,保留原有权限及链接find /home/user1 -name '*.txt' | xargs cp -av --target-directory=/home/backup/ --parents 从一个目录查找并复制所有以 '.txt' 结尾的文件到另一个目录find /var/log -name '*.log' | tar cv --files-from=- | bzip2 > log.tar.bz2 查找所有以 '.log' 结尾的文件并做成一个bzip包dd if=/dev/hda of=/dev/fd0 bs=512 count=1 做一个将 MBR (Master Boot Record)内容复制到软盘的动作dd if=/dev/fd0 of=/dev/hda bs=512 count=1 从已经保存到软盘的备份中恢复MBR内容 光盘1234567891011cdrecord -v gracetime=2 dev=/dev/cdrom -eject blank=fast -force 清空一个可复写的光盘内容mkisofs /dev/cdrom > cd.iso 在磁盘上创建一个光盘的iso镜像文件mkisofs /dev/cdrom | gzip > cd_iso.gz 在磁盘上创建一个压缩了的光盘iso镜像文件mkisofs -J -allow-leading-dots -R -V \"Label CD\" -iso-level 4 -o ./cd.iso data_cd 创建一个目录的iso镜像文件cdrecord -v dev=/dev/cdrom cd.iso 刻录一个ISO镜像文件gzip -dc cd_iso.gz | cdrecord dev=/dev/cdrom - 刻录一个压缩了的ISO镜像文件mount -o loop cd.iso /mnt/iso 挂载一个ISO镜像文件cd-paranoia -B 从一个CD光盘转录音轨到 wav 文件中cd-paranoia -- \"-3\" 从一个CD光盘转录音轨到 wav 文件中(参数-3)cdrecord --scanbus 扫描总线以识别scsi通道dd if=/dev/hdc | md5sum 校验一个设备的md5sum编码,例如一张 CD 网络 - (以太网和WIFI无线)1234567891011121314151617181920212223242526ifconfig eth0 显示一个以太网卡的配置ifup eth0 启用一个 'eth0' 网络设备ifdown eth0 禁用一个 'eth0' 网络设备ifconfig eth0 192.168.1.1 netmask 255.255.255.0 控制IP地址ifconfig eth0 promisc 设置 'eth0' 成混杂模式以嗅探数据包 (sniffing)dhclient eth0 以dhcp模式启用 'eth0'route -n show routing tableroute add -net 0/0 gw IP_Gateway configura default gatewayroute add -net 192.168.0.0 netmask 255.255.0.0 gw 192.168.1.1 configure static route to reach network '192.168.0.0/16'route del 0/0 gw IP_gateway remove static routeecho \"1\" > /proc/sys/net/ipv4/ip_forward activate ip routinghostname show hostname of systemhost www.example.com lookup hostname to resolve name to ip address and viceversa(1)nslookup www.example.com lookup hostname to resolve name to ip address and viceversa(2)ip link show show link status of all interfacesmii-tool eth0 show link status of 'eth0'ethtool eth0 show statistics of network card 'eth0'netstat -tup show all active network connections and their PIDnetstat -tupl show all network services listening on the system and their PIDtcpdump tcp port 80 show all HTTP trafficiwlist scan show wireless networksiwconfig eth1 show configuration of a wireless network cardhostname show hostnamehost www.example.com lookup hostname to resolve name to ip address and viceversanslookup www.example.com lookup hostname to resolve name to ip address and viceversawhois www.example.com lookup on Whois database","link":"/2018/05/06/linux-common-command-summary.html"}],"tags":[{"name":"macOS","slug":"macOS","link":"/tags/macOS/"},{"name":"Clover","slug":"Clover","link":"/tags/Clover/"},{"name":"VoodooI2C","slug":"VoodooI2C","link":"/tags/VoodooI2C/"},{"name":"Linux_Kernel","slug":"Linux-Kernel","link":"/tags/Linux-Kernel/"},{"name":"Ubuntu","slug":"Ubuntu","link":"/tags/Ubuntu/"},{"name":"ThinkPad S1 2017","slug":"ThinkPad-S1-2017","link":"/tags/ThinkPad-S1-2017/"},{"name":"Other","slug":"Other","link":"/tags/Other/"},{"name":"ThinkPad S1 2018","slug":"ThinkPad-S1-2018","link":"/tags/ThinkPad-S1-2018/"},{"name":"acrock z390","slug":"acrock-z390","link":"/tags/acrock-z390/"},{"name":"i9-9900K","slug":"i9-9900K","link":"/tags/i9-9900K/"},{"name":"other","slug":"other","link":"/tags/other/"},{"name":"Hackintosh","slug":"Hackintosh","link":"/tags/Hackintosh/"},{"name":"macOS Catalina 10.15","slug":"macOS-Catalina-10-15","link":"/tags/macOS-Catalina-10-15/"},{"name":"sidecar","slug":"sidecar","link":"/tags/sidecar/"},{"name":"Secure Boot","slug":"Secure-Boot","link":"/tags/Secure-Boot/"},{"name":"OpenCore","slug":"OpenCore","link":"/tags/OpenCore/"},{"name":"weg","slug":"weg","link":"/tags/weg/"},{"name":"ASUS N550JV","slug":"ASUS-N550JV","link":"/tags/ASUS-N550JV/"},{"name":"shell","slug":"shell","link":"/tags/shell/"},{"name":"zsh","slug":"zsh","link":"/tags/zsh/"},{"name":"Linux","slug":"Linux","link":"/tags/Linux/"},{"name":"linux","slug":"linux","link":"/tags/linux/"},{"name":"Macintosh","slug":"Macintosh","link":"/tags/Macintosh/"},{"name":"MacBook Pro","slug":"MacBook-Pro","link":"/tags/MacBook-Pro/"},{"name":"mi5","slug":"mi5","link":"/tags/mi5/"},{"name":"miui","slug":"miui","link":"/tags/miui/"},{"name":"Android","slug":"Android","link":"/tags/Android/"},{"name":"usb","slug":"usb","link":"/tags/usb/"},{"name":"z370","slug":"z370","link":"/tags/z370/"},{"name":"Centos","slug":"Centos","link":"/tags/Centos/"},{"name":"MySQL","slug":"MySQL","link":"/tags/MySQL/"},{"name":"Nginx","slug":"Nginx","link":"/tags/Nginx/"},{"name":"PHP","slug":"PHP","link":"/tags/PHP/"},{"name":"SSL","slug":"SSL","link":"/tags/SSL/"},{"name":"Project Treble","slug":"Project-Treble","link":"/tags/Project-Treble/"},{"name":"cmd","slug":"cmd","link":"/tags/cmd/"},{"name":"sethc","slug":"sethc","link":"/tags/sethc/"},{"name":"Windows10","slug":"Windows10","link":"/tags/Windows10/"},{"name":"Debian","slug":"Debian","link":"/tags/Debian/"},{"name":"OpenSSL","slug":"OpenSSL","link":"/tags/OpenSSL/"},{"name":"TLS 1.3","slug":"TLS-1-3","link":"/tags/TLS-1-3/"},{"name":"HSTS","slug":"HSTS","link":"/tags/HSTS/"},{"name":"Android Q","slug":"Android-Q","link":"/tags/Android-Q/"},{"name":"OnePlus 7 Pro","slug":"OnePlus-7-Pro","link":"/tags/OnePlus-7-Pro/"}],"categories":[{"name":"杂谈分享","slug":"杂谈分享","link":"/categories/杂谈分享/"},{"name":"Hackintosh","slug":"Hackintosh","link":"/categories/Hackintosh/"},{"name":"Linux","slug":"Linux","link":"/categories/Linux/"},{"name":"Other","slug":"Other","link":"/categories/Other/"},{"name":"other","slug":"other","link":"/categories/other/"},{"name":"Macintosh","slug":"Macintosh","link":"/categories/Macintosh/"},{"name":"Android","slug":"Android","link":"/categories/Android/"},{"name":"Android Rom","slug":"Android-Rom","link":"/categories/Android-Rom/"},{"name":"Windows Desktop","slug":"Windows-Desktop","link":"/categories/Windows-Desktop/"},{"name":"WEB","slug":"WEB","link":"/categories/WEB/"}]}