工欲善其事,必先利其器。 最近,我的许多朋友换了电脑,其中有不少换了Mac。他们也常常来问我macOS下如何编译程序,VS Code与VS区别等等。其中他们多数是准备在macOS上学习C++、Python等语言。 考虑到身边许多朋友需要这个,而我自己的电脑也需要整理一下,所以今天把电脑数据备份了下然后重装了系统,希望能把我自己配置macOS的历程分享给大家,为大家提供一些帮助。 在做如下操作前,请先到App Store安装好Xcode。 由于Xcode下载需要等待较长时间,在此之前,你可以先了解一下基本的Unix命令。如cd、ls、echo、cat等。 顺带了解一下nano编辑器的使用。 首先,一个好用的软件包管理器有助于环境的配置。 经常使用Linux发行版的朋友肯定对包管理器不陌生。可以用它来管理安装的软件包,并实现软件批量升级。同时还可以一行命令搞定软件安装。比如Debian、Ubuntu使用的apt,CentOS、Fedora使用的yum。 这里推荐一个Mac上的包管理器,Homebrew。 我们只要打开浏览器,将中间的命令一整行复制下来,到终端中粘贴,然后回车。 在安装过程中,你可能遇到需要输入密码的时候。需要提醒大家的是,这里输入密码是看不到输入密码的提示的,许多初学者的感觉是密码没有输进去。不过不要紧,只要在键盘打完当前用户的密码,然后按回车即可。 第二,一个好用的Shell有助于效率的提升 在此安利一下zsh,一个比自带的bash好用得多的Shell,还有各种插件可以添加。 待homebrew安装完后,我们可以来安装一下zsh。 在终端中输入…
QQ坦白说解密教程 for iOS
最近QQ坦白说功能在我的好友之间十分火热,也因此催生了许多人想要查看坦白说发送者的欲望,考虑到网上没有太多的坦白说解密教程,这里打算自己写一个。 首先,你需要准备以下工具 一台iPhone 一台运行着Windows的电脑 在电脑上安装并运行fiddler抓包工具 iPhone和电脑在同一个Wi-Fi下,且可以内网互通(几乎所有的家庭网络都可以,但大部分学校等场所的Wi-Fi会进行客户端隔离,遇到这种情况可以请别人使用手机开热点) 在电脑上运行Fiddler,点击Tools菜单中的Options 进入HTTPS选项卡,左边按照如图设置,点击右边的Actions,然后点击Export Root Certificate to Desktop 再进入Connections选项卡,按照如图设置,特别是要去掉Act as system proxy on startup和勾上Allow…
用PuTTYgen在Windows下生成SSH密钥
如今,玩云计算的人越来越多,很多人都喜欢去租个云服务器做个博客或是挂一些需要长时间一直运行的程序。这些服务器也多数是Linux系统,但是服务器的问题是一个不可忽视的问题。常常能在日志中看到每天有大量IP尝试连接22端口,希望使用弱密码能够登录服务器。这些服务器被黑客攻下后往往会被用作DDOS肉鸡,造成重大的安全威胁。而实际上,用ssh密钥登录可以有效解决这一问题,至少在当下很难在有限的时间内根据rsa公钥破解出rsa私钥。 现在介绍Windows下用PuTTY gen工具生成SSH密钥的方法。 首先,打开PuTTY gen 点击Generate,然后在界面中晃动鼠标,PuTTY gen会根据鼠标移动的轨迹来生成一对rsa密钥 生成后结果如下图所示 之后,把这个Public Key复制下来,然后先登录到我们原来的服务器上。 由于OpenSSH Server默认读取用户主目录的.ssh/authorized_keys文件,所以我们把ssh的公钥放到该位置。 具体操作为,在用户主目录下建立.ssh文件夹,然后放置authorized_keys文件,在里面放上公钥 将刚刚复制的SSH公钥粘贴进去(PuTTY导出的密钥有时候会分行,请注意删除多余的换行符,authorized_keys里面可以放多个密钥,一行一个分开即可) 然后按Ctrl+X,按Y再按回车退出 之后,我们就可以使用刚刚生成的sshkey连接服务器了。 注意:SSH Pubkey是可以对外宣告的,但是Private Key一定要自己保存好。RSA采用非对称加密,具体原理参见我之前写的博文https://cyyself.name/2017/07/rsa-algorithm/,RSA身份认证原理一样,就是用客户端的Private…
使用ngrok架设你在NAT背后的服务器
如今,越来越多的家庭宽带取消了公网IPv4地址的分配,给许多人在外面连接自家网络服务带来了诸多不便,比如连接自己家电脑的RDP远程桌面或者获取自家NAS上的文件,为此,一个简单的解决方法就是使用ngrok作为外网端口映射。 本教程使用Debian 9为例。 首先,我们先去https://ngrok.com/注册一个账号。 之后便进入了ngrok的Dashboard页面,我们先点击Download把ngrok下载到自己的服务器(路由器/树莓派/….)上。 在这个下载页面上,我们用本机的浏览器访问,然后在相应的链接上获取链接地址。 对于树莓派/路由器等设备,选择Linux ARM,对于自己用PC组建的NAS等设备选择Linux 64-Bit。 然后我们ssh到自己的设备上,用wget命令下载相应版本的ngrok,并解压,安装到相应的目录,推荐/usr/bin (解压的时候需要unzip软件包,如果没有请使用apt install unzip来安装) 这里使用的shell命令包括: wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip unzip ngrok-stable-linux-amd64.zip…
在移动硬盘上安装Windows To Go+Linux双系统(EFI)
自己多出了一块128G的SSD,本着闲着也浪费的想法就用了一个老的硬盘盒装起来当移动硬盘使用,没想到新固件还支持Trim,便有了在上面安装Windows To Go,然后给Mac提供Windows的想法。可是,安装完Windows的我似乎还不满足,还希望在上面安装一个Ubuntu系统,几经辗转,终于找到了办法。 话不多说,直接入题。 首先,备份移动硬盘上的数据,使用WTG辅助工具写入Windows系统文件,记得勾选UEFI+GPT。 用压缩卷空出一部分空间留给Linux使用 至此,我们已经完成了Windows的安装,并且这时直接启动移动硬盘已经可以使用Windows了。 将移动硬盘挂在到虚拟机中,记得使用EFI模式,比如VirtualBox勾上“启用EFI”,Hyper-V选择第二代虚拟机即可,在虚拟机中安装好所选的Linux发行版 待Linux安装完成后,此时的系统并不能直接启动的,若直接启动出现的是一个蓝屏的Windows,因为之前安装的grub没有使用removable模式,因此,我们手动安装grub 将/boot分区挂载到任意目录,这里我选择/target/boot,若没有单独分出/boot就直接挂载/到任意目录即可。同时,将ESP分区挂载到/target/boot/efi,然后删除EFI/Boot/bootx64.efi文件 安装grub-efi软件包 使用grub-install安装grub,之后便得到了一个可启动的Linux 来看看成果吧! 可以看出,grub已经接管了Windows Boot Manager,我们可以在这选择操作系统启动。 同样,在Mac上也没有问题 效果如图…
Linode Xen上的Debian/Ubuntu升级Linux 4.9内核开启BBR算法
随着Linux 4.9内核的更新带来了一个新的TCP拥塞控制算法——BBR,该算法解决了几十年来基于丢包来估算带宽的一切算法所导致的在有错误导致丢包的网络环境中带宽降低问题,成为TCP拥塞控制算法的一个重要里程碑。就实际使用而言,在服务器上使用BBR拥塞控制算法可以提高TCP连接在有丢包的情况下所导致的速率严重降低的问题。对于蜂窝数据、不稳定的Wi-Fi、洲际网络连接都有诸多的好处。 BBR: Congestion-Based Congestion Control 然而Linode自己编译的内核却是一个十分精简的版本,并没有包含BBR算法。Linode早几年的机子使用的Xen虚拟化环境是直接从内核启动,在更换内核上有些许小小的麻烦,许多Linux初学者在网上搜索相关资料无果便放弃了。而我认为,作为开发者就应该有阅读官方英文文档的能力,恰好,Linode也提供了一个使用pv-grub更换内核的方式。https://www.linode.com/docs/tools-reference/custom-kernels-distros/run-a-distributionsupplied-kernel-with-pvgrub/ 相信这个链接已经能解决大多数人遇到的问题了。 接下来介绍Debian/Ubuntu更换发行版内核的方式: 使用wget或curl下载内核的deb包(包括headers和image,纵然不安装headers也能正常使用,但将导致在编译软件包时出现异常),当然你也可以自己编译,这里以Linux 4.9.6 amd64为例:wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.6/linux-headers-4.9.6-040906_4.9.6-040906.201701260330_all.deb wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.9.6/linux-image-4.9.6-040906-generic_4.9.6-040906.201701260330_amd64.deb dpkg -i linux-headers-4.9.6-040906_4.9.6-040906.201701260330_all.deb dpkg…
解决U盘启动Linux后重启Mac黑屏
今天早上把Mac启动到了我的U盘里的一个Ubuntu系统,做完各项事情后我打算重启返回macOS,我便在重启时等待电脑黑屏后拔下U盘,我之前也是这么做一直没有出过问题,直到今天。 这时听到了Mac开机的“灯”一声,之后屏幕就黑屏了,于是我按住电源键强行关机,之后再开机,可以看到触摸板可以按下并且USB通电了,但是电脑始终没有开机音,屏幕也没有亮,紧张之中,我拨打了苹果中国的400客服电话。 向客服表明情况后,客服让我尝试清除NVRAM,失败,之后让我按住Shift和电源键开机重置SMC,可是忘了让我按Control和Option,显然,还是失败,开机后依旧是USB通电、触摸板可以按下,但没有开机音,屏幕也没有亮。 之后客服就帮我预约了Genius Bar了,好在厦门有Apple Store,但是最近的预约需要8月1日中午。虽然我的数据都有在自己家的服务器上用afp开Time Machine备份,但是并没有什么取出文件的方法,于是我便开始尝试自己解决问题。 几经辗转,我在网上看到了一篇解决Mac开机黑屏问题的文章http://osxdaily.com/2014/11/22/fix-macbook-pro-booting-black-screen/ 按住Shift+Control+Option+Power,只听“灯”一声,成功进入了macOS的登录界面。 祝愿每个看到这篇文章的朋友们都能顺利解决自己遇到的问题。 最后给大家看个笑话
如何理解Linux的文件系统挂载点
对于大多数Linux初学者而言,最痛苦的事情莫过于理解Linux文件系统的挂载点。 我们都知道,在一个硬盘上,我们通过分区把硬盘空间分成几块来使用,在这些分区上可以创建文件系统,而文件系统最终能被访问就需要挂载(mount)。 在传统Windows中,所有分区都被挂载为盘符,比如C:、D:、E:、F:,相当于每一个文件系统都是一个根节点。 而在Linux中,是以一个系统盘为根节点,而其他的文件系统都挂载在根节点下的目录中 仅仅这样说可能对于大多数没接触过Linux的人而言难以理解,现在我们就在Windows中模拟一下Linux的文件系统挂载方式。 不知大家何曾想过,若Windows的26个盘符用完了怎么办?不仅仅是这些带着好奇心的用户想到了,当然,微软也想到了。 在Windows NT中,一种新的分区挂载方式出现,就是把分区作为文件夹挂载在NTFS文件系统中。 这样,原本在Windows应为根节点的分区就成了文件系统根节点中的一个子节点。 我们来到Windows的磁盘管理,查看当前的磁盘分区信息。 可以看到我这里有个256G的物理硬盘,还有一个1TB的虚拟硬盘。 这1TB的虚拟硬盘中,有个99M的ESP分区(当时用DiskGenius随便分的就忘了取消勾选了)。还有三个NTFS文件系统的数据分区。分别被挂载为D、E、F。 现在我们来使用Windows NT提供的另一种挂载方式,将这三个分区的文件系统挂载到C盘的文件夹中。 现在,我们所看到的只有一个C盘(网络驱动器请忽略),并且空间并没有扩大。 但在C盘中出现了3个文件夹,分别对应之前的D、E、F盘的文件系统。当然这里也可以用其它的名称来命名这三个文件夹。 看到这里,相信大家对Linux的目录挂载点有个基本的认识了吧。
StrongSwan IKEv2 IPv6配置
我有了个想法,能不能通过我的Linode,给我的其他服务器和终端设备也接入Linode的IPv6,取而代之当下速度极慢的电信IPv6,毕竟当前电信IPv6用户少之又少,相信广大电信v6用户也都体验过Linux里面把包管理器的源设置成中国各大学的源,然后更新源、下载软件包的速度。 于是,我就给Linode发了个ticket,告诉他我需要更多IPv6地址,不久便收到了回复。 可以看出Linode客服还是非常有礼貌的。这里小小地震撼一下。 现在问题来了,既然/116地址够用,为什么我最后还是选择了/64呢? 我们来看看Linode官方IPv6文档 看到这里,我想到/116地址可能并非路由到自己的Linode上,而是可以通过以太网与该数据中心的所有Linode共享。 既然我们需要搭建一个IPv6隧道,如果通过以太网桥接接入将会有各种各样的问题,既然Linode也说给我们/64的地址段很容易了,我就选择了/64地址段。 之后,我就得到了一个IPv6地址段 好了,现在/64的地址段拿到了,IPv4地址总数量的平方倍的地址段都拿到了,想想也有点小激动,Linode真大方啊。 之后,就开始配置这台IPv6路由器了。 首先在/etc/sysctl.conf里把IPv6转发打开,实现路由器功能 net.ipv6.conf.all.forwarding=1 之后运行sysctl -p使配置生效 这时,我发现服务器的IPv6地址都没有了,只有一个fe80::的Link Local地址。 原来,Linux在开启IPv6路由功能后会关闭IPv6…