Mac下的启动服务主要有三个地方可配置:
1,系统偏好设置->帐户->登陆项
2,/System/Library/StartupItems 和 /Library/StartupItems/
3,launchd 系统初始化进程配置。
前两种优化比较简单,本文主要介绍的是第三种更为复杂的launchd配置优化。
launchd是Mac OS下,用于初始化系统环境的关键进程。类似Linux下的init, rc。
我们先来看一下Mac OS X的启动原理:
1,mac固件激活,初始化硬件,加载BootX引导器。
2,BootX加载内核与内核扩展(kext)。
3,内核启动launchd进程。
4,launchd根据 /System/Library/LaunchAgents ,/System/Library/LaunchDaemons , /Library/LaunchDaemons,/Library/LaunchAgents , ~/Library/LaunchAgents里的plist配置,启动服务守护进程。
看完了Mac OS X的启动原理,我们不难发觉/System/Library/LaunchAgents ,/System/Library/LaunchDaemons , /Library/LaunchDaemons,/Library/LaunchAgents五个目录下的plist属性文件是优化系统的关键。
下面再来理解几个基础概念:
/System/Library和/Library和~/Library目录的区别?
/System/Library目录是存放Apple自己开发的软件。
/Library目录是系统管理员存放的第三方软件。
~/Library/是用户自己存放的第三方软件。
LaunchDaemons和LaunchAgents的区别?
LaunchDaemons是用户未登陆前就启动的服务(守护进程)。
LaunchAgents是用户登陆后启动的服务(守护进程)。
上面提到的五个目录下的plist文件格式及每个字段的含义:
Key | Description | Required |
Label | The name of the job | yes |
ProgramArguments | Strings to pass to the program when it is executed | yes |
UserName | The job will be run as the given user, who may not necessarily be the one who submitted it to launchd. | no |
inetdCompatibility | Indicates that the daemon expects to be run as if it were launched by?inetd | no |
Program | The path to your executable. This key can save the ProgramArguments key for flags and arguments. | no |
onDemand | A?boolean?flag that defines if a job runs continuously or not | no |
RootDirectory | The job will be?chrooted?into another directory | no |
ServiceIPC | Whether the daemon can speak IPC to launchd | no |
WatchPaths | Allows launchd to start a job based on modifications at a file-system path | no |
QueueDirectories | Similar to WatchPath, a queue will only watch an empty directory for new files | no |
StartInterval | Used to schedule a job that runs on a repeating schedule. Specified as the number of seconds to wait between runs. | no |
StartCalendarInterval | Job scheduling. The?syntax?is similar to?cron. | no |
HardResourceLimits | Controls restriction of the resources consumed by any job | no |
LowPriorityIO | Tells the kernel that this task is of a low priority when doing file system I/O | no |
Sockets | An array can be used to specify what socket the daemon will listen on for launch on demand | no |
看不懂上面地plist配置吗?没关系,我们的优化策略是完全卸载服务,所以我们不用关心plist里的配置含义。
开始优化
禁用服务,我们需要用到Mac OS提供的一个工具指令-launchctl
launchctl 指令会针对服务设置一个禁用标志,launchd启动时会先检查这个服务是否被禁用,从而确定是否需要启用这个服务。
禁用服务的方法1
先找到禁用标志文件 /var/db/launchd.db/com.apple.launchd/overrides.plist,查看你要禁用的服务是否已被禁用了。
有些服务已被禁用,但未列在overrides.plist里。此时,你还需要检查这个服务的plist文件Label字段是否已经标记为 Disable。
确认这个服务未禁用后,我们就可以通过调用如下命令,来禁用服务:
sudo launchctl unload plist文件路径
sudo launchctl unload -w?plist文件路径
比如,我想禁用spotlight,则输入
sudo launchctl unload /System/Library/LaunchAgents/com.apple.Spotlight.plist
sudo launchctl unload -w /System/Library/LaunchAgents/com.apple.Spotlight.plist
禁用完服务以后,重启Mac OS即可生效。
禁用服务的方法2,一种更有效且暴力的方法(推荐)
先卸载服务
sudo launchctl unload /System/Library/LaunchAgents/com.apple.Spotlight.plist
然后将plist文件mv到其他目录备份。重启。搞定。是不是很简单!
我个人比较喜欢这种禁用服务的方式,所以推荐一下。
如果发现服务禁用后,系统或软件出现异常,可以通过如下命令,还原服务:
方法1:
sudo launchctl load -wF plist文件路径
方法2:
将备份的plist文件mv回原来的文件夹。
sudo launchctl load plist文件路径
注意:系统级服务的禁用要异常小心,请在禁用前google,确保你熟知这个服务的作用。否则可能导致系统无法启动。
最安全的做法就是不要去禁用它了。
当然,用户服务我们还是可以放心禁用的,有问题最多再启用呗。
下面是我禁用的服务列表:
/System/Library/LaunchDaemons/com.apple.metadata.mds.plist (禁用spotlight的前提)
/System/Library/LaunchAgents/com.apple.Spotlight.plist (Spotlight)
/Library/LaunchDaemons/com.google.keystone.daemon.plist (Google Software Update)
/Library/LaunchAgents/com.google.keystone.root.agent (Google Software Update)
~/Library/LaunchAgents/com.google.keystone.agent.plist(Google Software Update,用户下的进程不需要加 sudo)
~/Library/LaunchAgents/com.apple.CSConfigDotMacCert-ken.wug\@me.com-SharedServices.Agent.plist (me.com的共享服务,我不用)
/System/Library/LaunchDaemons/org.cups.cupsd.plist (打印机)
/System/Library/LaunchDaemons/org.cups.cups-lpd.plist (打印机)
/System/Library/LaunchDaemons/com.apple.blued.plist (蓝牙)
/System/Library/LaunchAgents/com.apple.AirPortBaseStationAgent.plist (apple无线基站,我没有这个设备)
知道守护进程(服务)名,如何找到对应的plist文件?
将进程(服务)名拷贝,然后到 /System/Library/LaunchAgents ,/System/Library/LaunchDaemons , /Library/LaunchDaemons,/Library/LaunchAgents , ~/Library/LaunchAgents 五个目录里,通过以下命令查找:
ll|grep 进程(服务)名
比如
ll|grep blued
在 /System/Library/LaunchDaemons 中找到了它。接下来,请按上面指导的步骤,禁用该服务。
相关推荐
Mac OS启动服务优化高级篇.docx
mac os x 系统启动过程
mac os U盘启动引导文件,可以在不启动MAC OS下,引导计算机,可用于修改驱动
mac系统制作启动U盘,安装mac os系统,
可以引导Mac OS X 10.7(Lion)。 加压后先加载镜像文件,启动后选择安装有Mac OS的硬盘即可。
1、本文档主要介绍如何通过windows制作U盘启动盘并按照U盘安装Mac os系统 2、文档中包括两个文件,一个是详细的制作U盘过程和安装Mac os 过程,包含截图 另一文件是windows 制作U盘的工具软件
推荐使用USB移动硬盘来制作做Mac OS X 的启动安装盘,先在USB中划分一个大于6.5GB的硬盘空间分区用来制作Mac OS X硬盘启动盘,然后在PC机的硬盘中划分一个大于20GB的硬盘分区用来安装Mac OS X Snow Leopard 10.6.2...
这个资源很稀少!!这里是黑苹果macOS.Mojave.10.14.4.x5.iso的镜像文件,可以直接用于VMware Workstation。
下载速度挺快的,下载完大小有6G多,dmg格式的,需要的朋友来下吧,本人亲自体验了
解压密码:微wx笑 Mac os x10.8操作系统的dmg格式的下载地址,参考: VMware安装MacOS虚拟机无法从光盘启动 http://blog.csdn.net/testcs_dn/article/details/51356399 ultraiso软碟通dmg转iso图文教程 ...
Mac OS X 启动盘_darwin_snow_legacy
HJMac.iso 在Vmware上安装Mac OS的启动引导程序 HJMac.iso_更新_2011.8.6
在Ubuntu系统或Windows系统中创建启动USB是...通常在Mac中安装live Ubuntu推荐使用光盘安装而不是USB启动,但考虑到Macbook Air既没有CD驱动也没有DVD驱动,所以为大家带来一个Mac OS X中ubuntu usb启动盘制作教程。
Mac OS 中通过Shell命令执行App应用的快捷方式
Mac OS X Snow Leopard 原版系统,直接用磁盘工具恢复到优盘或者移动硬盘就可以启动安装,百度云盘
OS X采用的是类UNIX的多用户系统。 通常我们在启动盘下面都只能看到应用程序、资源库、系统、用户这4个目录。但其实 还有很多的隐藏目录,如bin、sbin之类的,这些都是系统的一些资源,一般是不用普通用 户去访问,是些...
Mac OS X系统下设置开机自动启动运行软件(开机启动项)的方法.docx
使用U盘或移动硬盘制作启动盘安装苹果Mac_OS_X操作系统方法
用virtualbox 安装mac os 10.7 里面的iso是处理过能自启动的。hjmac可以用。 亲测ok 如果过程中死掉 重启重新来过.
Mac OS Style Pro 苹果电脑风格启动器v11.4专业版.zip含下载地址可存云盘