Mac终端初探

5,396 阅读8分钟

我的电脑是Macbook,工作中经常使用到终端执行一些命令,远程连接管理服务器。在此记录我的一些终端上的使用心得。

工具选型

我选择软件的原则是,优先选择开源软件,其次是大公司出品优秀的免费软件。

所以一些付费的APP就直接不考虑了。

1. 系统自动带终端

Mac操作系统自带的终端程序,具有基本的终端功能,但是也比较简单

2. hyper

开源,设置采用配置文件,但是功能和教程比较少,启动较慢

3. Alacritty或Kitty

开源,快,小巧,但是功能少

4. iterm2

mac上最主流的终端工具,开源,功能强大,网上资料也是最多的,我选择的就是iterm2

iterm2下载安装

官网地址iterm2.com/

zsh和oh-my-zsh

zsh相对于bash拥有更高级的自动完成功能和命令语法,可扩展的插件支持

# 查看当前终端使用的shell
echo $SHELL
# 安装on-my-zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 配置文件
vim ~/.zshrc

我安装了几个插件git,zsh-syntax-highlighting和zsh-autosuggestions

git插件无需配置,默认已开启。可以直接在终端中反映git的一些状态,效果如下,注意终端输入前的状态

➜  source_code cd RuoYi-Vue
➜  RuoYi-Vue git:(master) pwd
/Users/laixiangdong/source_code/RuoYi-Vue
➜  RuoYi-Vue git:(master) touch test.txt
➜  RuoYi-Vue git:(master) ✗ git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	test.txt

nothing added to commit but untracked files present (use "git add" to track)
➜  RuoYi-Vue git:(master) ✗ rm -f test.txt
➜  RuoYi-Vue git:(master) git status
On branch master
Your branch is up to date with 'origin/master'.

nothing to commit, working tree clean

zsh-syntax-highlighting为zsh提供了语法高亮功能。它可以在zsh提示符下向交互式终端输入命令时高亮显示这些命令。这有助于在运行命令之前审查它们,特别是捕捉语法错误。 zsh-autosuggestions它在你打字时根据历史记录和完成情况建议命令。

# 从仓库下载
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions

编辑~/.zshrc文件plugins部分

plugins=( [plugins...] zsh-syntax-highlighting zsh-autosuggestions)

brew

# 安装
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

在Linux上都有包管理工具,比如CentOS上的yum和dnfd,debian系的apt等,方便我们安装和卸载命令行软件 mac上常用的包管理工具就是brew,除了可以安装命令行软件外,还可以安装一些常用的图形化APP。

➜  ~ brew --help
Example usage:
  brew search TEXT|/REGEX/
  brew info [FORMULA|CASK...]
  brew install FORMULA|CASK...
  brew update
  brew upgrade [FORMULA|CASK...]
  brew uninstall FORMULA|CASK...
  brew list [FORMULA|CASK...]

在国内使用时,因为网络原因下载会比较慢,甚至直接下载不了软件。这就需要替换一下brew的安装源,在此就不赘述了

请参考:

ohmyz.sh/

mirrors.tuna.tsinghua.edu.cn/help/homebr…

github.com/zsh-users/z…

github.com/zsh-users/z…

主题配色美化

不管怎么美化,都应该是以不影响使用为前提的,不要过滤美化,毕竟只是一个工具。

zsh主题

on-my-zsh提供了许多主题,可以在~/.zshrc中修改配置

比如你想用robbyrussell主题,只需修改ZSH_THEME="robbyrussell"。

image.png

如果不知道怎么选,可以将主题改为random,每次打开就会随机使用一个主题,如果遇到喜欢的,可以运行echo $RANDOM_THEME查看主题名称

Powerlevel10k

基本的主题可能不满足你了,这是更加高级的主题,可以定制,推荐使用

注意,需要安装并且iterm2配置指定的字体,一些特殊字符能才显示

image.png

请参考:

github.com/romkatv/pow…

iterm2配色

默认的配色比较少,也不太好看。可以下载一些其它配色方案

github.com/mbadolato/i…

我使用的是Dracula

image.png

字体

可以通过下面网站测试自己喜欢什么字体,毕竟每个人的喜好是不相同的

www.codingfont.com/

然后在设置中修改即可

image.png

其它设置

Status Bar可以在终端下部显示一些系统信息,比如CPU,网络,电池电量等

image.png

image.png

iterm2本身也有主题概念,可以修改试试效果,个人觉得Minimal主题比较好看

image.png

除了配色和字体以外,窗口打开时默认的大小也需要调整为合理的值,在缩放窗口大小时,窗口最上方会显示当前窗口的长宽数值,调整为合适的大小后,反值填写到配置中

image.png

image.png

使用技巧

快捷键

熟练使用快捷键可以提升我们的效率

我在这里整理了一些iterm2常用的快捷键,其中分屏操作是iterm2的王牌功能,非常好用

切换标签:command + 左右方向键/1-9
放大/缩小: command + -/=/0
切换全屏:command + enter
垂直分屏:command + d
水平分屏:command + shift + d
切换屏幕:command + option + 方向键 command + [ 或 command + ]
查看历史命令:command + ;
查看剪贴板历史:command + shift + h
清屏:command + r
清屏(包括屏幕外的): command + k

还有bash中常用的快捷键,zsh也能用。这个不局限于iterm2,其它终端也可以使用

插一句,作为程序员,个人建议把电脑上常用的ctrl键替换掉不常用的大写锁定键,如果有大写就按左右shift。

ctrl + a 行首
ctrl + e 行尾
ctrl + xx 光标处和行首切换

ctrl + b 左
ctrl + f 右
ctrl + p 上
ctrl + n 下

ctrl + c 程序终止
ctrl + d 退出操作

ctrl + l 清屏

ctrl + r 搜索历史记录
ctrl + g 退出搜索历史

ctrl + h 退格删除
ctrl + u 删除到行首/整行
ctrl + w 清空光标前至词首

ctrl + y 粘贴ctrl + u, ctrl + w, ctrl + k等删除的内容

ctrl + i tab

# 一般情况下,以下三个快捷键的操作结果是一样的
ctrl + j 换行
ctrl + m 回车
ctrl + o 新行

ctrl + s 冻结
ctrl + q 解冻

ctrl + z 暂停 jobs命令查看,使用fg和bg恢复

option + b 光标左移一个词
option + f 光标右移一个词
option + d 删除光标到词尾
option + del 删除光标到词首
option + . 使用上一次命令最后一次参数

!String 上一条以String开头的命令
!?String 上一条包含String的命令
!* 上一条命令全部参数
!! 上一条命令

上传下载文件

有时候需要向服务器上传或下载文件,如果单独开一个sftp图形工具未免有一些麻烦,用scp命令会比较长,sftp命令行工具也可以,但是遇到有跳板机的情况就有点麻烦。在终端上操作有我更喜欢用rz/sz命令

默认iterm2是不支持rz/sz命令的,需要配置一下

参考:github.com/snow-sprite…

连接远程服务器管理

用过xshell或者secureCRT等工具的都知道,连接远程服务器的配置可以存下来,包括登录的信息,下次使用就可以快速访问。

iterm2可以建多个profile来实现,不过很不方便,不能直接保存密码,配置比较复杂,多个profile不能直接批量修改里面某一个配置,比如要改个字体就很不方便,需要一个一个去调整。

我的方案是使用ssh config文件实现。

首先要解决登录时输入密码的问题。在Mac上生成ssh登录证书,一般会生成两个文件,一个公钥,一个私钥,两个文件是对应的。服务器上需要配置证书登录,把自己电脑上的ssh公钥信息复制到服务器上,只要服务器上有这台Mac的公钥信息,就可以通过公钥登录,私钥和公钥就像钥匙和锁,只不过锁(公钥)可以安装在不同服务器上,钥匙(私钥)只有一把(私钥自己要保管好,一般随意分享,有安全问题),只要有钥匙(私钥)就可以访问带上锁(公钥)服务器,并且使不使用密码就和服务器本身的密码没关系了。生成ssh登录证书可以不用配置密码,这样登录就实现了免密码登录了

# 生成证书对
ssh-keygen
# 然后会生成两个文件在~/.ssh/下,分别是id_rsa和id_rsa.pub

# 可以使用ssh-copy-id 用户名@服务器IP -p ssh端口把id_rsa.pub的信息放在服务器上
# 也可以直接登录到服务器,在~/.ssh/authorized_keys文件中添加id_rsa.pub中的内容,复制进去就可以了,没有这个文件就新加一个

ssh config配置快速访问 配置文件为~/.ssh/config,格式如下

Host 别名
    参数1 值
    参数2 值
    ......

其中别名可以直接使用ssh 别名访问,而参数就是平时ssh命令后面跟的东西,比如IP地址,端口,用户名,证书路径,是否需要代理,心跳时长,加密方式等,如果别名是*表示这个是所有连接的公共参数,一般放最后

比如下面的例子就是登录的时候如果不指定用名,就默认用root登录,这样访问服务器的root就不用写用户名了, 直接像这样ssh 192.168.100.254

Host *
    User root

还可以添加更多的参数,比如下面的参数可以让iterm2支持登录后打开同一台服务器,打开第二个窗口不需要重复登录的功能

Host * 
    ControlMaster auto
    ControlPath ~/.ssh/master-%r@%h:%p

给服务器取一个简称,可以快速打开服务器,这里指定了用户名,证书,IP地址,和端口

Host vpn
    User myuser
    IdentityFile ~/.ssh/myuser_iqiyi
    HostName 192.168.100.254
    Port 22

访问的时候,只需要使用命令ssh vpn就可以了

如果需要跳板机,比如访问公司内网的服务器,但是现在人不在公司,不能直接连上目标服务器。但是公司有一台可以公网连接的服务器,并且那台服务器的网络和目标服务器是通的,这样就可以使用公网的那台服务器做中转。不过需要你有这两台服务器地登录权限。

配置也很简单,如下

Host 111
    HostName 111.111.111.111
    Port 2222
Host 80
    HostName 192.168.1.80
    ProxyJump 111

要访问内网的80服务器,就直接使用命令ssh 80

是不是很方便,比iterm2自带的多profile管理连接,command + shift + o搜索调用打开,不知道方便简捷哪里去了,而且可以在其它终端上使用,比如vscode或者IDEA等开发工具自带的终端。