Mac-Linux命令行配置指南

Mac 命令行配置

每次要重裝系统或者换上新的电脑上的时候,我们会发现我们需要重新配置我们用习惯的环境。
(其实是最近这几天学校的课程又要求装一个 win7 虚拟机进行病毒测试,而前几天那个课程又下了个 kali 虚拟机,我的硬盘空间满了,故不得不重装系统。
鉴于这一年以来我也重装了 5、6 次系统(把 macOS 当做 Linux 折腾的缘故),我觉得是有必要写一篇如何配置一个计算机专业专用的环境的文章。

于是,就有了以下:

包管理器

简介

*nix 里也有各式各样的包管理器,像 Ubuntu/kali 的 apt,arch 的 pacman,类似的还有 redhat 的 yum。这些包管理器都各有各的特点。

包管理器突出特点
apt所下载的命令行工具一年一更,比软件的最新版本大概落后一年,较为稳定
brew所下载的命令行工具是软件的最新版本,更新频率较高
pacman所下载的命令行工具是软件的最新版本,滚动更新,频率超高,适合想体验新版本的搞机者使用(一般会出现某度的教程不适用的情况,版本过新
yum所下载的命令行工具版本大概落后 3-5 年,注重软件的兼容和稳定性(毕竟是用作服务器的包管理器)

想体验的自行折腾(狗头

brew

​ 我最喜欢的两个包管理器是 pacman 和 brew,懂得都懂。因为我主要用的是 Mac 电脑,所以我接下来会注重 brew 包管理器的安装和配置。

​ brew 软件是 MacOS 的包管理器,同时它也可以用作其他 Linux 的包管理器,比如我个人认为 Ubuntu 的包管理器 apt 不好用就可以下载 brew 来进行替代。

​ 其特点是更新速度适中,这让我们既可以体验到新版,也能拥有一定的软件稳定性。总的来说,是 Mac 以及 Linux 等搞机人员的必备,可谓是码农的农器中的精英。如果你还是嫌软件不够新,arch/manjaro 欢迎你

在 macOS/Linux 安装 brew,只需在终端输入

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

​ 可参考官网brew

​ 这时候也许你会发现下载速度很慢很慢的情况,这是由于防火长城对 github 的限流。解决方法有两个:

  • 使用翻墙软件,可达 1mb 以上的网速(依地区而定,也许在深圳等离香港近的城市网速会出奇的快
  • 换源,使用清华大学镜像地址进行下载 1.使用迅雷下载https://raw.githubusercontent.com/Homebrew/install/master/install.sh这个 install.sh 文件 2.编辑 install.sh 里面的
1
2
3
BREW_REPO="https://github.com/Homebrew/brew"
# 变成:
BREW_REPO="https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git"

这种方法网速可达到 10mb 以上

  • 使用脚本(站长推荐)
    我写了一个简单的脚本,使用的是国内的 cdn 和中科大镜像进行安装。一条命令即可搞定
    https://github.com/tandy1229/brew-install-China

    安装完毕后即可使用 brew 安装命令行工具。由于 MacOS 内置的是伯努利大学的 Unix,其软件与 GNU 不同,有可能会出现兼容性的问题,所以有必要将 macOS 的 BSD 软件全部换成 GNU 的开源软件,避免出现不兼容的现象。

在终端输入

1
brew install coreutils diffutils binutils gnu-sed gnu-tar gnu-which grep gnu-time make gawk

进行安装

接着在你的 shell 配置文件.bashrc 或者.zshrc 加入以下

1
2
3
4
5
6
7
8

export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/make/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/gnu-tar/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/grep/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/gnu-sed/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/gnu-time/libexec/gnubin:$PATH"
export PATH="/usr/local/opt/gnu-which/libexec/gnubin:$PATH"

便于系统直接调用。

如果不加的话若想使用 GNU 命令的话只需在命令前加上个 g 即可,例如 gls 使用的是 gnu 套件的 ls,而 ls 使用的还是 BSD 自带的 ls。

科普一下:coreutils: The GNU Core Utilities are the basic file, shell and text manipulation utilities of the GNU operating system. These are the core utilities which are expected to exist on every operating system.简单的来说就是 Coreutils 软件包包括一整套基本的 shell 工具,是 GNU 提供了一整套比较基本的工具软件包,是这些工具的集合。

你也可以更新一下 macOS 内置的 python、bash、zsh、make 等

PS: 如果安装过慢,请参考清华大学镜像站或者中科大镜像站进行换源。

shell 环境配置

一般的人都会选用 bash 作为自己的 shell,一方面是 bash 的兼容性最强,几乎所有的开源脚本的运行都是以 bash 的脚本格式为标准的。另一方面是 bash 作为一个 shell 来说的确很强大。要不然也不会自从 1980 年诞生以来一直沿用至今。

如果你是极简主义者的话 bash 可算是最好的选择了,不花里胡哨,没有高亮,功能性强。但对我来说,我更喜欢有高亮。而且我并不是极简主义者,所以我选择 zsh 这个 shell。

zsh

我喜欢 zsh,主要是他有以下强大的功能:

  • 几乎支持 bash 的所有语法,即与 bash 兼容
  • 支持很多 bash 不支持的新功能,比如高亮
  • 可定制性很高
  • 支持大量插件

这些功能是我使用 zsh 这个 shell 的原因。插句题外话,zsh 的功能的增多和可定制性在我看来既是 zsh 的优点也是 zsh 的缺点。优点既然不必说,缺点就是让 zsh 的学习成本很高,这也导致 zsh 在很长一段时间内不受待见。但开源社区里面有很多大佬写了很多配置 zsh 的插件,这样普通的用户只要使用这些插件即可体验强大的 zsh。这使得 zsh 成为了最流行的 shell。

比如大名鼎鼎的 oh_my_zsh 就是彻底的傻瓜式配置,让 zsh 拥有好看的界面和出色的补全。可以说没有 oh_my_zsh 我也不会入坑 zsh。可是随着自己对 zsh 的理解逐渐加深,我发现 oh_my_zsh 极大地降低我的 shell 的启动时间。这也是一个项目发展到后面的会暴露的缺点。为了兼容性必然会增加很多用户可能不会使用的插件,比如对 npm 补全的支持,有些用户需要但有的用户不需要,但为了总体的补全体验项目也是必须要包含的。这样做就让启动时间变慢。同时,这样的傻瓜式配置也让用户不了解 zsh。所以我最近转而使用了一个轻量级的插件管理器zim,这个插件启动速度极快。这里有它与其他 zsh 插件的速度对比。

有的人可能会问为什么要那么麻烦,使用 oh_my_zsh 这种框架不好吗。的确,你去百度上一搜索 zsh,跳出来的搜索结果不是如何安装 oh_my_zsh 就是如何配置 oh_my_zsh 的主题,从这里既可以看出来了,oh_my_zsh 太过囊肿,使用什么主题用户自己去下不就好了嘛,而 oh_my_zsh 内置了上百种主题。而且作为一个计算机专业的学生应该去了解自己使用的工具的原理,一条命令可以安装的东西看似懒人,但并不透明,自己一步一步去配置的话就知道这样是绝对安全的。另外,自己配置的话就是最适合自己的,看到肉眼可见的速度提升也会提升成就感。现在我的终端几乎是秒进,以前会感到有明显的停顿,这也是可以省下时间。每次你打开终端的时候要一秒才加载完毕和一点开终端就能打字的区别可不是一点两点的。假设你一天要打开 10 次终端,秒开的话每天就能节约 10s,一年就能节约 60min。

所以进入正题,zim 的配置在我看来和 oh_my_zsh 一样简单,甚至优于 oh_my_zsh。看官方文档即可明白一切。

这里我也想插一下题外话,为什么我这次没有直接给出如何配置的结果。诚然,直接说会很直接了当。但官方的文档中已经讲得很明白了,很多人都不喜欢阅读官方文档,觉得自己英文不好。我之前也是这样的,但你不看官方文档你根本不会懂如何配置,也许我在这里摆出如何配置你就能配置成功了。但别忘了,我们的初心是配置适合自己的 zsh,而不是像 oh_my_zsh 一样告诉你这样做你就这样做了,这样用不用 zim 都没有什么区别

-------------    本文结束  感谢阅读    -------------

欢迎关注我的其它发布渠道