macOS

使用手册

SSH 服务

启动:

1
sudo launchctl load -w /System/Library/LaunchDaemons/ssh.plist

查看:

1
sudo launchctl list | grep ssh

关闭:

1
sudo launchctl unload -w /System/Library/LaunchDaemons/ssh.plist

删除 ssh 缓存

1
sudo ssh-keygen -R [ip_address]

在终端后台运行命令的方法

  1. nohup

    nohup ./test>file&
    
  2. 使用 括号 和 & :

     (./test >file &)
    

调试用到的命令:

ps -ef | grep print
ps aux | grep test
ps 1647
kill -9 1695

参考链接:https://www.jianshu.com/p/47bd5bc724e5

SCP 命令

格式:

1
scp <localFile> <user>@<ip>:<remoteFile>

例如:

1
sudo scp /Users/ghost7/Downloads/***.wld <user>@<ip>:/opt/Terraria/Worlds
1
sudo scp /Users/ghost7/Desktop/douban.tar <user>@<ip>:/root/docker_file

解除端口占用

1
lsof -i:80		# 查询80端口情况

image-20220501123011459

1
kill 39070		# 杀死该进程

配置环境变量

默认变量

1
2
ghost7@bogon ~ % echo $PATH          
/opt/homebrew/bin:/opt/homebrew/sbin:/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/aria2/bin:/Library/Apple/usr/bin

以配置 Mysql 为例

环境变量

1
vim ~/.bash_profile

加入 PATH=$PATH:/usr/local/mysql/bin

在命令行输入 source ~/.bash_profile

ghost7@bogon ~ % vim ~/.bash_profile
ghost7@bogon ~ % source ~/.bash_profile 
ghost7@bogon ~ % echo $PATH
/opt/homebrew/bin:/opt/homebrew/sbin:/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/aria2/bin:/Library/Apple/usr/bin:/usr/local/mysql/bin

全局变量

  1. 创建一个文件:

    1
    
    sudo touch /etc/paths.d/mysql
    
  2. 用 vim 打开这个文件(如果是以 open -t 的方式打开,则不允许编辑):

    1
    
    sudo vim /etc/paths.d/mysql
    
  3. 编辑该文件,键入路径 /usr/local/mysql/bin 并保存(关闭该 Terminal 窗口并重新打开一个,就能使用 mysql 命令了) 这样可以自己生成新的文件,不用把变量全都放到 paths 一个文件里,方便管理。

1
2
ghost7@bogon ~ % echo $PATH
/opt/homebrew/bin:/opt/homebrew/sbin:/Library/Frameworks/Python.framework/Versions/3.8/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/aria2/bin:/usr/local/mysql/bin:/Library/Apple/usr/bin

pmset 工具

Power Manager Setting (pmset) 是 macOS 的系统级电池管理工具,通过调整 macOS 的睡眠计划,可以让Mac睡得更「好」,达到 「插电响应快,断电用得久」 的理想目标。

休眠与睡眠

休眠(sleep):数据仍存放在内存中

睡眠(hibernate):将内存数据存放到硬盘中,断开内存供电

pmset 命令

1
sudo pmset [option] [parameter]

  • pmset -g custom :查看当前所有睡眠计划
  • pmset -g cap :查看当前供电条件下可以调节的参数
  • sudo pmset restoredefaults :还原全部设置

常用选项

  • pmset -a :调整任何条件下的睡眠计划
  • pmset -c :调整外部供电的睡眠计划
  • pmset -b :调整电池供电的睡眠计划
  • pmset -g :查看计划

常用参数

sleep

控制进入休眠所需要的空闲时间

hibernatemode

负责管理睡眠模式,值得注意的是,休眠时的内存镜像是否写入硬盘,除了受 hibernatemode 的控制,还和 standby 以及 autopoweroff 的值有关。

有三种休眠模式可选:

  1. hibernatemode = 0
    • iMac, Mac Mini等 Mac桌面设备默认参数
    • 持续向内存供电,将数据保留在内存
    • 唤醒速度快,减少硬盘占用
    • 数据有丢失风险
    • 耗电量大
  2. hibernatemode = 25
    • 将数据写入硬盘
    • 不向内存供电,将内存镜像直接写入硬盘
    • 数据不易丢失,镜像占用硬盘空间
    • 唤醒速度慢
    • 耗电量少
  3. hibernatemode = 3
    • MacBook 笔记本设备默认参数
    • safe sleep, 数据既写入内存又写入硬盘
    • 持续向内存供电
    • 唤醒时,根据设备电量自动选择从 内存/硬盘 恢复

standy

休眠是的计时器,满足时间条件后就会由「休眠」转至「睡眠」状态

需满足的条件:

  • 电池供电
  • 无外接设备
  • 无网络活动
  • 无外接显示器

满足条件的前提下, standbydelayhigh/low 秒后,会进行睡眠。

standbydelayhighstandbydelaylow 由阈值 highstandbythreshold 进行控制。

highstandbythreshold

电池剩余百分比,默认为50%。

高于阈值采用 standbydelayhigh 计算时间。

低于阈值采用 standbydelaylow 计算时间。

lidwake

是否开盖唤醒

tcpkeepalive

合盖时是否保持网络连接

displaysleep

屏幕休眠时间

disksleep

硬盘休眠时间

acwake

被同一 iCloud ID 下的设备唤醒


参考链接:https://sspai.com/post/61379

查询当前 DNS 地址

1
cat /etc/resolv.conf

Mac 装载、卸载硬盘

  • 查询列表

    1
    
    diskutil list
    
  • 装载

    1
    
    diskutil mount [disk_num]
    
  • 卸载

    1
    
    umount [disk_num]
    

排查占用移动硬盘/U盘的进程

列出正在占用该目录的进程

1
sudo lsof /Volumes/<YourDevice>

然后 kill 掉即可

Spotlight 索引管理

mdutil 命令

所用的是 mdutil 命令,查看帮助:

1
man mdutil

以下命令仅对单个目录生效,需要全局使用,只需加上 -a 选项

开启/关闭对指定目录的索引

1
sudo mdutil -i on/off <volume_path>

需要注意的是,关闭索引并不会清除之前已经建立的索引文件,即仍可以查询到之前建立的索引内容

重建索引

1
sudo mdutil -E <volume_path>

在关闭该功能的状态下,只会添加“重建”的标记,当你再次打开时才会真正开始重建

查看某目录索引状态

1
sudo mdutil -s -v <volume_path>

.noxxxx

.nosync

iCloud 忽略同步包含 ".nosync" 的任何文件或目录

.noindex

Spotlight 会忽略索引包含 ".noindex" 的任何文件或目录

.nobackup

TimeMachine 会忽略备份包含 ".nobackup" 的任何文件或目录

终端查询公网IP

在Mac终端中,使用以下命令可以查询当前设备的公网IP地址:

1
curl ifconfig.me

该命令会向ifconfig.me发送请求,并返回当前设备的公网IP地址。

如果想要获取更详细的网络信息,可以使用以下命令:

1
curl ifconfig.io/all

该命令会返回包括IP地址、子网掩码、MAC地址、DNS服务器、网关地址等网络信息。不过需要注意的是,这些信息可能包括敏感信息,谨慎使用。

以 下 是 一 些 常 见 问 题

Operation Not Permitted 问题

多次在 Mac 使用过程中遇到 Operation Not Permitted 问题,之前都是略过,今天好好摸索了一把,搞明白了道理,记录下来。

好几次整理移动硬盘数据的时候,都遇到了 Operation Not Permitted 问题,文件移动不了,也删除不掉,第一次遇到没理会,第二次是打开虚拟机,在 Windows 中操作这些问题文件,今天又遇到了,决定消灭它。

Apple 在 OS X 10.11 以后的版本中默认启动了一项系统保护程序,叫做 System Integrity Protection,也被唤作 rootless(寓意让 root 弱一点),该程序意在保护电脑不被恶意程序攻击,但是对于我们这群程序员,很多保护是多余的,甚至给我们带来了很多麻烦。

SIP 会锁定几个系统文件目录:

/System
/sbin
/usr (/usr/local 除外)

在 SIP 的保护下,部分软件、功能、脚本都会失效,我们可以通过如下步骤关闭 SIP:

  • 重启电脑,按下 Command + R 直到听到开机声音,此时电脑会进入恢复模式(Recovery Mode)
  • 当 OSX 工具出现在屏幕中时,下拉工具(Utilities)菜单,选择终端(Terminal)
  • 键入 csrutil disable,回车
  • 电脑重启后,SIP 就关闭了

恢复 SIP 的方式同上,只不过终端中键入 csrutil enable。通过 csrutil status 可以检测系统当前 SIP 的启动状态:

$ csrutil status
System Integrity Protection status: enabled.

参考链接:https://www.barretlee.com/blog/2016/04/06/operation-not-permitted-problem-in-linux-or-unix-system/

无法打开调度中心

终端输入:killall Dock

移动硬盘热插拔导致再次插入时不能装载的问题处理

在 Mac 未推出移动硬盘或U盘的时候,直接拔掉,可能会导致再次插入 Mac 时在访达中不显示。打开磁盘工具查看,也是不可用,显示未装载。这种情况很有可能是 fsck 的问题,解决方案如下:

ps aux | grep fsck
sudo pkill -f fsck

拔掉移动硬盘,重新插入即可显示。

如果虽然显示了,但是无法写入,重启电脑就可以了。

"使用 Apple Watch 解锁 Mac" 无法打开

  1. 在“钥匙串访问 app”里选“显示”--> “显示不可见项”;

    搜索“Auto Unlock”,全删;

    再搜索“AutoUnlock”(没空格的),全删(会自动生成 4 项);

  2. ~/Library/Sharing/AutoUnlock/,删除里面的两个文件;

  3. 现在去打开 Apple Watch 解锁 Mac ,两次,第一次可能还会提示失败。

updatedupdated2023-06-152023-06-15