我的电脑是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的安装源,在此就不赘述了
请参考:
mirrors.tuna.tsinghua.edu.cn/help/homebr…
主题配色美化
不管怎么美化,都应该是以不影响使用为前提的,不要过滤美化,毕竟只是一个工具。
zsh主题
on-my-zsh提供了许多主题,可以在~/.zshrc中修改配置
比如你想用robbyrussell主题,只需修改ZSH_THEME="robbyrussell"。
如果不知道怎么选,可以将主题改为random,每次打开就会随机使用一个主题,如果遇到喜欢的,可以运行echo $RANDOM_THEME查看主题名称
Powerlevel10k
基本的主题可能不满足你了,这是更加高级的主题,可以定制,推荐使用
注意,需要安装并且iterm2配置指定的字体,一些特殊字符能才显示
请参考:
iterm2配色
默认的配色比较少,也不太好看。可以下载一些其它配色方案
我使用的是Dracula
字体
可以通过下面网站测试自己喜欢什么字体,毕竟每个人的喜好是不相同的
然后在设置中修改即可
其它设置
Status Bar可以在终端下部显示一些系统信息,比如CPU,网络,电池电量等
iterm2本身也有主题概念,可以修改试试效果,个人觉得Minimal主题比较好看
除了配色和字体以外,窗口打开时默认的大小也需要调整为合理的值,在缩放窗口大小时,窗口最上方会显示当前窗口的长宽数值,调整为合适的大小后,反值填写到配置中
使用技巧
快捷键
熟练使用快捷键可以提升我们的效率
我在这里整理了一些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命令的,需要配置一下
连接远程服务器管理
用过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等开发工具自带的终端。