Mac系统使用

homebrew

官网: https://brew.sh/

# 安装脚本,访问官网获得最新命令
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Homebrew 的两个术语:

  • Formulae:软件包,包括了这个软件的依赖、源码位置及编译方法等
  • Casks:已经编译好的应用包,如图形界面程序等

常见命令: https://zhuanlan.zhihu.com/p/30704752

禁止更新 Homebrew

注意:Homebrew 只支持当前 Mac 系统的三个大版本。一旦 brew 不支持当前系统(可以使用 brew doctor 命令进行检查),安装软件包就不会直接下载二进制包,而是下载源码编译安装,比较慢和麻烦,并且不保证兼容性和稳定性。所以锁定当前的 brew 版本禁止更新,安装兼容当前系统的软件包即可。

.zshrc 文件写入以下内容:

# 1. 禁用 Homebrew 自动更新 (防止隐式更新)。Homebrew 在 install 软件时会自动更新至最新版本
export HOMEBREW_NO_AUTO_UPDATE=1
# 2. 清除 Bottle 镜像设置,使用官方源
unset HOMEBREW_BOTTLE_DOMAIN
# 3. 强制锁定 Formulae 仓库的远程地址 (防止显式更新)
export HOMEBREW_CORE_GIT_REMOTE="https://example.com/not-a-brew-repo/homebrew-core.git"
# === 强制冻结:重定义 brew update 命令 ===
function brew() {
    # 如果用户输入了 "brew update",则阻止执行
    if [[ "$1" == "update" ]]; then
        echo "----------------------------------------------------------------------"
        echo "🚫 ERROR: Homebrew 更新已被系统管理员(您自己)永久禁用!"
        echo "   您的 macOS 13 版本已不受支持,运行 'brew update' 将破坏您的兼容环境。"
        echo "   请运行 'brew install <package>' 或 'brew upgrade <package>' 进行维护。"
        echo "----------------------------------------------------------------------"
        return 1
    fi
    # 如果不是 "brew update",则执行原始的 brew 命令,不影响其他命令
    command brew "$@"
}

更新

brew update              # 更新 Homebrew 自己,同时更新软件包索引信息
brew outdated            # 列出可更新的软件
brew upgrade             # 更新所有已安装的包。慎用
brew upgrade <package>   # 更新指定包

# 锁定软件包的版本,防止其被自动更新。锁定后,即使执行 brew upgrade 也不会更新该软件包
brew pin <package>       # 锁定指定包
brew unpin <package>     # 取消锁定指定包

安装和卸载软件

brew search <keyword>      # 搜索软件包
brew install <package>     # 安装某个软件
brew install node          # 安装 node
brew install node@18       # 安装指定版本 node
brew uninstall <package>   # 卸载某个软件包

其他命令

brew --repo      # 显示 _Homebrew_ 本地的 Git 仓库
brew --prefix    # 显示 Homebrew_ 安装路径
brew --cellar    # 显示 Homebrew Cellar 路径
brew --caskroom  # 显示 Homebrew Caskroom 路径
brew --cache     # 缓存路径
brew doctor   # 检查安装是否存在常见问题,并提供修复建议

# 列出已安装的软件
brew list             # 所有的软件,包括 Formulae  和 Cask
brew list --formulae  # 所有已安装的 Formulae
brew list --cask      # 所有已安装的 Casks
brew list <package>   # 列举某个 Formulate 或 Cask 的详细路径
brew info            # 显示安装的软件数量、文件数量以及占用空间
brew info <package>  # 查看某个软件包的信息

# 清理
brew cleanup            # 清理所有旧版本的包
brew cleanup <package>  # 清理指定的旧版本包
brew cleanup -n         # 查看可清理的旧版本包

# 查看软件包的依赖关系
brew deps git           # 查看 git 的依赖关系
brew deps --tree git    # 以树形结构显示
brew deps --installed --tree  # 查看已安装包的依赖

# 软件服务管理
brew services list                  # 查看使用brew安装的服务列表
brew services run formula|--all     # 启动服务(仅启动不注册)
brew services start formula|--all   # 启动服务,并注册
brew services stop formula|--all    # 停止服务,并取消注册
brew services restart formula|--all # 重启服务,并注册

第三方仓库管理

brew tap  # 列出已添加的仓库
brew tap <user/repo>    # 添加某个仓库
brew untap <user/repo>  # 移除仓库
brew update  # 更新所有仓库

## 举例
## Liberica JDK的GitHub仓库地址:https://github.com/bell-sw/homebrew-liberica
brew tap bell-sw/liberica     # 添加 Liberica JDK 的仓库。
brew search jdk               # 可以看到bell-sw/liberica/liberica-jdk11等多个版本
brew info bell-sw/liberica/liberica-jdk11-full             # 查看软件包信息
brew install --cask bell-sw/liberica/liberica-jdk24-full   # 安装对应的软件包
brew uninstall --cask bell-sw/liberica/liberica-jdk24-full # 卸载对应的软件包

java 多版本安装

直接下载安装包进行安装即可

java 多版本查看命令:/usr/libexec/java_home -V

# java的默认安装位置
/Library/Java/JavaVirtualMachines/liberica-jdk-8-full.jdk/Contents/Home/bin/java
/Library/Java/JavaVirtualMachines/liberica-jdk-11-full.jdk/Contents/Home/bin/java
/Library/Java/JavaVirtualMachines/liberica-jdk-17-full.jdk/Contents/Home/bin/java
/Library/Java/JavaVirtualMachines/liberica-jdk-21-full.jdk/Contents/Home/bin/java

使用 command 脚本启动 jar 包,避免 Java 版本导致错误

# 启动冰蝎为例。将这个两行保存到start.command脚本中,赋予执行权限,然后双击即可启动冰蝎,但是会有shell窗口存在,不影响使用。
cd /Users/bluefox/safetools/Behinder
/Library/Java/JavaVirtualMachines/liberica-jdk-11-full.jdk/Contents/Home/bin/java -jar Behinder.jar

python 虚拟环境

有些 python 项目会需要安装依赖,为了避免依赖冲突,使用虚拟环境来隔绝项目依赖。

以 dirsearch 为例。在下载的项目文件夹里(dirsearch 目录)使用命令 python3 -m venv-dirsearch 创建 venv-dirsearch 目录,这个目录就是我们创建的一个虚拟环境。

激活这个虚拟环境:./venv-dirsearch/bin/activate,然后在进行依赖的安装。但是每次都要进入目录里面,先激活这个虚拟环境才可以运行这个项目,可以在 .zshrc 文件里面定义一个别名,简化一下,如下面两条命令。

alias dirsearch='python3 /Users/bluefox/safetools/dirsearch/dirsearch.py'
alias venv-dirsearch='source /Users/bluefox/safetools/dirsearch/venv-dirsearch/bin/activate'

流程:先运行 venv-dirsearch 命令激活对应的虚拟环境,然后就可以正常运行自定义的 dirsearch 命令。

退出虚拟环境,只需要在终端运行 deactivate 命令即可退出。

sublime text 4 记住上次打开的文件:将配置文件里的 hot_exit 选项改为 true

iterm 使用

快捷键

清除当前行:ctrl + u  
到行首:ctrl + a
到行尾:ctrl + e

ssh 时自动登录

1)使用 sshpass:/usr/local/bin/sshpass -f .passTX ssh -p 22 root@101.43.245.6

sshpass 安装: https://zhuanlan.zhihu.com/p/458095391

sshpass 实现 iterm 自动登录:/usr/local/bin/sshpass -p 密码 ssh -p 22 root@ip

2)使用触发器:

参考: https://cloud.tencent.com/developer/article/1593867

参考: https://zhuanlan.zhihu.com/p/69379306

SSH 保持连接

修改客户端配置
通过修改客户端设置,以保证连接所有服务器都使用此设置。
sudo vi /etc/ssh/ssh_config  # 或 ~/.ssh/config


# Client每隔 60 秒发送一次请求给 Server,然后 Server响应,从而保持连接。添加这一个就行
ServerAliveInterval 60
# Client发出请求后,服务器端没有响应得次数达到3,就自动断开连接,正常情况下,Server 不会不响应
ServerAliveCountMax 3

触发器的使用

1)触发器自动登录

也可以不用 Send Text,选择打开密码管理器手动选择密码,安全性更高。

2)关键词添加高亮显示

同上,只不过将触发动作改为 Highlight Text,然后配置颜色,例如高亮 ip 地址。

3)批量应用 profile 配置

将某个 profile 配置应用到其它 profile 上面。免得一个一个配置。选择一个 profile,点击下方的这个选项

选择要复制的具体配置,例如 Advance,然后选择要复制到哪里,点击 copy 即可。

配置 lrzsz

mac 安装:brew install lrzsz

服务器安装:apt install lrzsz

下载 iterm2 脚本(适配 M1

# 此脚本fork于 https://github.com/snow-sprite/rzsz
git clone https://github.com/bluefoxqaq/lrzsz-m1-mac.git

iterm2-send-zmodem.shiterm2-recv-zmodem.sh 保存到 /usr/local/bin 目录下,并赋予执行权限

设置 Iterm2 的 Tirgger 特性,profiles->default->editProfiles->Advanced 中的 Tirgger

添加两条 trigger,分别设置 Regular expression,Action,Parameters,Instant 如下:

Regular expression: rz waiting to receive.\*\*B0100
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-send-zmodem.sh
Instant: checked

Regular expression: \*\*B00000000000000
Action: Run Silent Coprocess
Parameters: /usr/local/bin/iterm2-recv-zmodem.sh
Instant: checked

配置好后,可以在服务器使用

  • 上传文件:rz
  • 下载文件:sz file1 file2 file(n)...

报错问题:这个脚本适配了 m1 mac,其它脚本可能有路径错误。脚本要记得给执行权限。

查看网关

1)使用 ip route

2)使用 netstat -nr

使用 route 注意:route 命令在 mac 下不是这么用的,但是在 linux 下是可以的

安装 ftp

brew install inetutils

修改 hostname

mac 没有 hostname 文件,不能像 Linux 那样直接修改配置文件。可以通过命令修改

sudo scutil --set HostName yourName  # yourName,新的hostname值