# macOS 应用

brew (opens new window) - macOS 最好用的软件包管理器

# 非开源

Typora (opens new window) - 体验很棒的 markdown 笔记 App,现已收费

Sublime Text - 打开速度最快的文本编辑器

Magnet - 快捷调整窗口大小

SourceTree (opens new window) - Git 图形界面客户端,该有的基本都有

DaisyDisk (opens new window) - 可视化查看硬盘空间大小的 App

Clearview - 查看 epub、亚马逊电子书

Pixelmator Pro (opens new window) - 去水印、抠图、加滤镜...

MacZip (opens new window) - 超好用的解压工具,可预览,原名 eZip

SuspiciousPackage (opens new window) - 查看 macOS 上 pkg 格式安装包里面的文件,可以知道往电脑哪里目录写入文件

Microsoft Remote Desktop Beta (opens new window) - 微软远程桌面,局域网连接 Windows 电脑 家庭普通版开启远程 (opens new window)

# 开源

顶部菜单栏 CPU、网速等状态显示 https://github.com/exelban/stats

在终端打开(在终端 cd 到当前路径) https://github.com/Ji4n1ng/OpenInTerminal/releases

图片压缩:https://github.com/meowtec/Imagine/releases

截图就能翻译,只需按下快捷键、框选文字,简单到令人发指 https://github.com/ripperhe/Bob/releases

截图就可以上传图片到图床(配合笔记类 App 使用): https://github.com/gee1k/uPic/releases

下载 ipa https://github.com/majd/ipatool

文本差异对比 https://yousseb.github.io/meld/

免费开源防火墙软件 https://objective-see.org/products/lulu.html

JSON 导出为各种编程语言的类 https://github.com/Ahmed-Ali/JSONExport

剪贴板管理器(Windows、Linux 也支持,体验一般) https://github.com/hluk/CopyQ/releases

下载及嗅探工具 https://github.com/persepolisdm/persepolis/releases

提取 ipa 图片 Assets 素材的工具 https://github.com/insidegui/AssetCatalogTinkerer/releases

sqlite studio -- SQLite 客户端,支持 macOS、Windows、Linux https://github.com/pawelsalawa/sqlitestudio/releases

Macast - 模拟电视盒子,可以把手机 App 的视频投屏到电脑屏幕,符合 DLNA 协议的投屏软件都可,支持 macOS、Windows、Linux https://github.com/xfangfang/Macast/releases

PiP - AirPlay 接收器,可模拟电视盒子,可以把手机 App 的视频投屏到电脑屏幕,还可以悬浮任何软件窗口 https://github.com/amitv87/PiP

录屏时显示快捷键操作 https://github.com/keycastr/keycastr

限制最大充电百分比的 macOS 工具 https://github.com/davidwernhart/AlDente

Wechat Chat History Exporter 微信聊天记录导出程序 https://github.com/BlueMatthew/WechatExporter

视频极速分割 https://github.com/mifi/lossless-cut/releases

文本对比 https://github.com/Wilfred/difftastic

macOS 系统固件下载 https://github.com/ninxsoft/Mist/releases

n - Node.js 多版本安装切换工具 https://github.com/tj/n

brew install n
#创建n所需文件夹 取得/usr/local/n目录权限
sudo mkdir -p /usr/local/n
sudo chown -R $(whoami) /usr/local/n

限制最大电池充电量的命令行工具(M1 等芯片不适用) https://github.com/zackelia/bclm https://github.com/actuallymentor/battery

将完整的网页保存为单个 HTML 文件 https://github.com/Y2Z/monolith

Mac 空格键预览 https://github.com/haokaiyang/Mac-QuickLook

# Web 应用

字符画流程图: https://textik.com/ http://asciiflow.com/ http://stable.ascii-flow.appspot.com/

Google 的图片在线压缩:https://squoosh.app/index.html

获取 IP 地址:https://www.v2ex.com/t/695489

# 浏览器插件

# 油猴脚本

在 Google 搜索结果中轻松隐藏不需要的域名:https://greasyfork.org/zh-CN/scripts/1682-google-hit-hider-by-domain-search-filter-block-sites

网盘直链下载助手 https://greasyfork.org/zh-CN/scripts/436446

【就是加速】百度网盘无限速批量下载 - 支持文件夹下载 https://greasyfork.org/zh-CN/scripts/463707

Github 旧 feed https://greasyfork.org/zh-CN/scripts/474728-github-old-feed

# 命令行工具

# 安装ohmyzsh终端增强工具 https://github.com/ohmyzsh/ohmyzsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

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

$ brew install autojump



# Oh My Zsh自动提示:https://github.com/zsh-users/zsh-autosuggestions/blob/master/INSTALL.md
git clone https://github.com/zsh-users/zsh-autosuggestions ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
vim ~/.zshrc
# 修改`.zshrc`文件的 plugins=(git) ==> plugins=(git zsh-autosuggestions)

# rvm https://github.com/rvm/rvm
brew install gpg
gpg --keyserver hkp://pool.sks-keyservers.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3 7D2BAF1CF37B13E2069D6956105BD0E739499BDB
\curl -sSL https://get.rvm.io | bash -s stable

# 有时,我们有一段加密文本,但是不知道它使用什么加密方法。这个命令行工具,会根据人工智能算法,自动判断加密方法,能不能解密。
https://github.com/Ciphey/Ciphey

# 各种预览插件 https://github.com/sindresorhus/quick-look-plugins
brew cask install qlcolorcode qlstephen qlmarkdown quicklook-json qlimagesize suspicious-package quicklookase qlvideo

新 Mac 必备:

# nodejs多版本管理
brew install n
brew install wget
# Intel CPU x86
brew install --cask adoptopenjdk8
# rm替代品,删除文件到废纸篓
brew install trash
brew install nginx
brew install autojump
brew install zsh-autosuggestions

# 其他

# 磁盘信息查看 无权限在前面加sudo
brew install smartmontools
smartctl -a /dev/disk0
smartctl -a /dev/disk0 | egrep "Data|Hours"
#下面是我的输出 2021.11.29
Maximum Data Transfer Size:         256 Pages
Data Units Read:                    433,393,865 [221 TB]
Data Units Written:                 411,616,331 [210 TB]
Power On Hours:                     1,399
Media and Data Integrity Errors:    0

在任意输入框中按 option+shift+K 组合键可输入 

文本编辑时按 Fn + Delete 键可向后删除内容

精准调节音量. 如果你想要 Mac 音量比正常的一格还低一些,不妨试试调节音量的同时按住 Option + Shift 键,音量将以正常的 1/4 格调整

禁用 Creative Cloud 自启

launchctl unload -w /Library/LaunchAgents/com.adobe.AdobeCreativeCloud.plist

恢复

launchctl load -w /Library/LaunchAgents/com.adobe.AdobeCreativeCloud.plist

Mac 查看电池健康情况、电池损耗的方法

ioreg -rn AppleSmartBattery | grep -i capacity

# 屏幕保护程序

简洁漂亮的「时钟屏保」,在你的屏幕上显示翻页时钟https://fliqlo.com/screensaver/

# 开发环境

# NodeJS

我抛弃了 nvm,改用 n,因为安装 nvm 后,每开一个终端 tab 都要卡顿 1 秒,实在难受

n - Node.js 多版本安装及切换工具 github.com/tj/n (opens new window)

# 1.安装
brew install n
# 2.配置。创建n所需文件夹并获取`/usr/local/n`目录权限
sudo mkdir -p /usr/local/n
sudo chown -R $(whoami) /usr/local/n
sudo mkdir -p /usr/local/bin /usr/local/lib /usr/local/include /usr/local/share
sudo chown -R $(whoami) /usr/local/bin /usr/local/lib /usr/local/include /usr/local/share

nvm - 另一个 node 切换工具,不推荐

# nvm https://github.com/nvm-sh/nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.35.3/install.sh | bash

# Java

M1 芯片的 openjdk https://www.azul.com/downloads/?version=java-8-lts&os=macos&architecture=arm-64-bit&package=jdk#zulu

# Ruby

#删除旧的ruby第三方应用
gem cleanup

# Terminal 终端美化

# ohmyzsh 插件

z.lua github 主页 (opens new window) z.lua 作者在知乎的介绍 (opens new window)

#安装
git clone https://github.com/skywind3000/z.lua $ZSH_CUSTOM/plugins/z.lua
vim ~/.zshrc
# 增加一个 plugins=(git z.lua)
source ~/.zshrc

# 使用
z foo       # 跳转到包含 foo 并且权重(Frecent)最高的路径
z foo bar   # 跳转到同时包含 foo 和 bar 并且权重最高的路径
z -r foo    # 跳转到包含 foo 并且访问次数最高的路径
z -t foo    # 跳转到包含 foo 并且最近访问过的路径
z -l foo    # 不跳转,只是列出所有匹配 foo 的路径
z -c foo    # 跳转到包含 foo 并且是当前路径的子路径的权重最高的路径
z -e foo    # 不跳转,只是打印出匹配 foo 并且权重最高的路径
z -i foo    # 进入交互式选择模式,让你自己挑选去哪里(多个结果的话)
z -I foo    # 进入交互式选择模式,但是使用 fzf 来选择
z -b foo    # 跳转到父目录中名称以 foo 开头的那一级

# 终端 Shell 技巧

Ctrl+w 删除光标前一个单词(一个单词一个单词地删) Ctrl+u 删除这一行

# SoutceTree

清除首选项

Remove everything in ~/Library/Application Support/SourceTree/

https://confluence.atlassian.com/sourcetreekb/how-to-wipe-sourcetree-preferences-412484640.html

# macOS 小技巧

# 系统下载

https://sysin.org/blog/macOS/

# 显示 or 不显示隐藏文件

Shift+Cmd+.

# 允许安装未知来源的软件

sudo spctl --master-disable

# 查看 CPU Model

sysctl -n machdep.cpu.brand_string

# 查看你的 443 端口被那些程序使用,以及他们的 pid

sudo lsof -i:443 或者:ps aux | grep 5037

列出所有当前正在监听的 TCP 连接 sudo lsof -iTCP -sTCP:LISTEN

# base64 加密解密

# 加密
echo "ILoveYou" | base64
SUxvdmVZb3UK

#解密
echo "SUxvdmVZb3UK" | base64 -D
ILoveYou

# 软件打不开系列问题

# “CleanMyMac 3.app”已损坏,打不开。 您应该将它移到废纸篓。

无法打开“xxx”,因为无法验证开发者。macOS 无法验证此 App 不包含恶意软件

在系统偏好设置-> 安全性与隐私中显示任何来源

# 它的作用是关闭系统的 Gatekeeper,这是一个用于保护系统免受恶意软件攻击的安全特性。
sudo spctl --master-disable

# “微信.app”已被阻止,因为它可能暴露您的隐私并降低 Mac 的安全性。您应该将它移到废纸篓。

原因:使用了微信小助手插件

解决方法:打开终端运行如下命令:

codesign --sign - --force --deep /Applications/WeChat.app

# 您不能打开应用程序 XXX,因为它可能已损坏或不完整

# 这个命令是用来清除指定文件或目录的扩展属性(Extended Attributes)的。-c:清除扩展属性。-r:递归处理目录下所有文件及其子目录中的扩展属性。
# 如果提示“您没有权限使用”,则可以运行如下命令,来去除@权限。
# mac的文件权限属性中有个@标识,听说是用来标识备份文件的。
xattr -c -r /Applications/IDA\ Pro\ 7.0/ida64.app

# XXX 已损坏,无法打开。 你应该将它移到废纸篓

sudo xattr -dr com.apple.quarantine  /Applications/xxx.app

# 排除时间机器要同步的目录

https://www.appinn.com/timemachine-exclude/

https://github.com/stevegrunwell/asimov

使用 mdfind 工具搜索所有被 Time Machine 排除的备份目录

sudo mdfind "com_apple_backup_excludeItem = 'com.apple.backupd'"

# 禁止 Adobe Creative Cloud 等自启

launchctl unload -w /Library/LaunchAgents/com.adobe.AdobeCreativeCloud.plist
# 或者
launchctl remove net.yanue.XXX

launchctl 管理 OS X 的启动脚本,控制启动计算机时需要开启的服务。也可以设置定时执行特定任务的脚本

来自:https://apple.stackexchange.com/a/138945

# 使用 launchctl 实现开机执行 shell 脚本

  1. 创建一个 Shell 脚本: 首先,创建一个包含你想要在启动时执行的 Shell 脚本。例如,创建一个名为 myscript.sh 的文件,并确保该文件具有执行权限。

    # myscript.sh
    #!/bin/bash
    echo "Hello, this script runs at startup!"
    

    通过 chmod +x myscript.sh 命令为脚本添加执行权限。

  2. 创建一个 plist 文件: 创建一个 Property List (plist) 文件,用于描述启动任务的配置。你可以使用文本编辑器创建一个文件,例如 com.example.myscript.plist

    <!-- com.example.myscript.plist -->
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
        <key>Label</key>
        <string>com.example.myscript</string>
        <key>ProgramArguments</key>
        <array>
            <string>/path/to/myscript.sh</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
    </plist>
    

    请确保将 <string>/path/to/myscript.sh</string> 替换为你的脚本的实际路径。

  3. 加载配置: 使用 launchctl 命令加载配置文件。

    launchctl load ~/Library/LaunchAgents/com.example.myscript.plist
    

    请注意,~/Library/LaunchAgents/ 是用户级别的 Launch Agents 目录。如果你想要系统级别的任务,请将 plist 文件放置在 /Library/LaunchDaemons/ 目录中,并使用 sudo 加载。

    sudo launchctl load /Library/LaunchDaemons/com.example.myscript.plist
    

    确保在 launchctl load 之前,你已经保存了 plist 文件。

  4. 验证: 使用以下命令验证任务是否已经正确加载。

    launchctl list | grep com.example.myscript
    

    如果任务正确加载,你应该能够在列表中看到它。

现在,当系统启动时,你的 Shell 脚本应该会自动执行。请注意,任务在用户登录时启动,因此如果你希望在系统启动时运行而无需登录,可以考虑使用系统级别的 Launch Daemons。

# 关闭系统的完整性保护

csrutil disable是 macOS 系统中的一个命令,它的作用是关闭系统的完整性保护功能(System Integrity Protection,简称 SIP)。SIP 是从 macOS El Capitan(10.11)版本开始引入的一项安全功能,旨在防止系统的核心组件被未经授权的程序修改,保护系统不被恶意软件攻击。

关闭 SIP 需要在 macOS Recovery 模式下执行,您需要先重启计算机并按住 Command+R 组合键进入恢复模式。在恢复模式下,选择“实用工具”->“终端”,然后输入以下命令:

csrutil disable

然后重启计算机即可关闭 SIP 功能。关闭 SIP 后,您可以修改系统的核心组件和其他受保护的文件,但这也可能导致系统的安全性降低,因为 SIP 是为了保护系统的完整性而设计的。因此,关闭 SIP 应该是一个谨慎的决定,并且只在必要的情况下执行。(来自 ChatGPT)

开启只需把上面的命令换成csrutil enable即可

PS1: M1 M2 等系列芯片不要关闭,否则哔哩哔哩 mac 版等 iOS 应用无法打开!

# 查看某个 App 签名:

  1. 打开终端,使用以下命令来查看应用程序的签名信息(将命令中的 YourAppName.app 替换为实际的应用程序名称):

    codesign -dv --verbose=4 /Applications/YourAppName.app
    

    这个命令会显示应用程序的签名详细信息,包括签名者、签名日期、签名算法等。

  2. 如果应用程序是被签名的,并且签名信息没有异常,你将会看到类似以下内容的输出:

    Executable=/Applications/YourAppName.app/Contents/MacOS/YourAppName
    Identifier=com.yourcompany.YourAppName
    Format=bundle with Mach-O thin (x86_64)
    CodeDirectory v=2020 length=4325 flags=0x0(none) hashes=135+5 location=embedded
    Signature size=8955
    ...
    

# 通过备份数据库还原启动台(LaunchPad)布局

通过时光机备份的数据,还原到新 mac 时会出现 LaunchPad 布局丢失的情况,所有之前的文件夹分类都没了。

  1. 分别查找新旧电脑 LaunchPad 的布局数据库目录

LaunchPad 的布局数据库位于 /private/var/folders 下的某个文件夹内,具体位置可以在终端中输入以下命令查找:

cd /private/var/folders
sudo find ./ -name 'com.apple.dock.launchpad'

我这里出现了两个结果:

.//sx/2dqddn054fj9m8s12tpkqv140000gn/0/com.apple.dock.launchpad
.//l_/bqphz62d4pdgnj_vh15knvhm0000gn/0/com.apple.dock.launchpad

下面这个目录占用大,所以是待覆盖的数据库目录。

# 打开目录
open ./l_/bqphz62d4pdgnj_vh15knvhm0000gn/0/com.apple.dock.launchpad

里面 db 目录的结构如下:

├── db
├── db-shm
└── db-wal

方法二:上面的几个数据库目录步骤可以用下面的一行命令查找(来源 (opens new window)):

echo $(getconf DARWIN_USER_DIR)com.apple.dock.launchpad/db
  1. 将旧机器的com.apple.dock.launchpad目录里的 db 文件覆盖到新机器的相应目录

  2. 运行 sudo killall Dock 重启即可。原文 (opens new window)

# 应用路径

# 搜狗输入法
~/Library/Application Support/Sogou
# Chrome插件位置
/Users/pan/Library/Application Support/Google/Chrome/Default/Extensions
#查看python3真实位置,是homebrew安装的还是系统的
realp3="$(which python3)" && ls -al $realp3

# 卸载软件后残留的守护进程(定时任务):

Service could not initialize: Unable to set current working directory. error = 2: No such file or directory, path = /Applications/SunloginClient.app/Contents/MacOS: 20F71: xpcproxy + 23787 方法:

# 列出守护进程(定时任务)
sudo launchctl list

# 卸载向日葵服务
sudo launchctl unload /Library/LaunchDaemons/com.oray.sunlogin.helper.plist
sudo launchctl unload /Library/LaunchDaemons/com.oray.sunlogin.plist

#完全禁用/启用 Spotlight 索引 https://www.technipages.com/macos-sierra-enable-disable-spotlight
sudo launchctl unload -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist
sudo launchctl load -w /System/Library/LaunchDaemons/com.apple.metadata.mds.plist

# 阻止 Spotlight 索引指定名字的文件夹

# 先cd到你想要排除的路径,将所有子目录名字叫node_modules的不加到索引
# https://github.com/yarnpkg/yarn/issues/6453
find . -type d -path './.*' -prune -o -path './Pictures*' -prune -o -path './Library*' -prune -o -path '*node_modules/*' -prune -o -type d -name 'node_modules' -exec touch '{}/.metadata_never_index' \; -print

# 重新索引
sudo mdutil -i on /

# 文件夹后面带个.noindex就可以防止Spotlight搜到

# Typora 修改内容样式

官方文档:http://theme.typora.io/doc/Write-Custom-Theme/

样式路径~/Library/Application Support/abnerworks.Typora/themes

正文字体大小 html {
  font-size: 1px;
}

短代码块 #write code,
tt {
  margin: 0 2px;
  padding: 2px 4px;
  border-radius: 2px;
  font-family: Menlo, Source Sans Pro, Monaco, courier, monospace !important;
  font-weight: bold;
  font-size: 0.85rem;
  color: #9999ff;
  background-color: #000;
  /*background-color: hsla(0, 0%, 0%, 0.2);*/
}
加粗样式改成自己喜欢的颜色 #write strong {
  color: #ff0000;
  padding: 0px 1px 0 1px;
}

.cm-header,
.cm-strong {
  font-weight: 700;
}
#write mark {
  background-color: #ebffeb;
  border-radius: 2px;
  padding: 2px 4px;
  margin: 0 2px;
  color: #222;
  font-weight: 500;
}

# 获取 IP 位置及经纬度

curl ipinfo.io

# brew


adns			libevent		openssl@1.1
annie			libffi			opus
aom			libgcrypt		p11-kit
autoconf		libgpg-error		pcre
autojump		libheif			pinentry
automake		libidn2			pixman
cairo			libimobiledevice	pkg-config
chisel			libksba			postgresql
cmake			libogg			python
coreutils		libomp			python@2
doxygen			libplist		rclone
ffmpeg			libpng			readline
flac			libsamplerate		rtmpdump
fontconfig		libsndfile		rubberband
freetype		libsoxr			scrcpy
frei0r			libtasn1		sdl2
fribidi			libtiff			shared-mime-info
gdbm			libtool			shellcheck
gettext			libunistring		snappy
giflib			libusb			speex
gifsicle		libusbmuxd		sphinx-doc
glib			libvidstab		sqlite
gmp			libvorbis		swig
gnupg			libvpx			tesseract
gnutls			libyaml			theora
graphite2		little-cms2		tmux
harfbuzz		lua			tree
highlight		lua@5.1			uchardet
icu4c			lzo			unbound
ilmbase			mongodb			usbmuxd
imagemagick		mono			vapoursynth
jpeg			mpv			webp
krb5			mujs			wget
lame			ncurses			x264
ldid			nettle			x265
leptonica		ninja			xvid
libarchive		npth			xz
libass			opencore-amr		yasm
libassuan		openexr			youtube-dl
libbluray		openjpeg		zimg
libde265		openssl			zlib

# 硬件知识

笔记本电池最佳电量是 50%左右,一直插电的情况下,每个月至少放点一两次,有助于电池健康

要怎么充电才能不伤电池?- Mac 云课堂 (opens new window)

上次更新: 3/13/2022, 12:02:34 AM