作者的Mac电脑于2014购买(MacBook Pro (Retina, 15-inch, Mid 2014)),当时由于开发需要经常跑虚拟机,花了不少银子升级成了当时的最高配置,1T SSD + i7 2.8GHz。由于当时加了硬盘空间,作了系统和常用数据的分区,系统区给了200GB,按道理应该足够了,但是最近突然出现硬盘空间不足的提醒,着实把我给震惊了。查看电脑关于,空间统计里面显示系统区竟然占去了120多个GB。
因为显示是系统空间占用非常大,一开始以为是多次系统升级过程中操作系统的垃圾文件占用了太多的空间(类似windows系统更新文件),因此先是在网上搜索了几遍,找了几个什么mac电脑清理的常用软件,试完后发现基本上没有什么用,除了清理掉一些浏览器缓存什么的,系统空间几乎没有任何变化。
最后没有办法决定一点点探索出来到底是哪些内容消耗掉的空间比较多,由于系统空间占用比较多,因此直接先cd ~/Library进入Library目录,再用sudo du -d 1 -h命令,查看Library目录里面哪些内容的空间使用理比较大,系统经过一番统计后,发现大的数据文件主要是如下一些目录:
1. Android目录 26GB+
2. Developer目录 17GB+
3. Container目录 22GB+
这几个目录就占去了差不多60GB,整个Library目录空间80多个GB。Android目录里面比较大的文件主要是Android SDK,Developer目录里面主要Xcode产生的临时文件和iOS模拟器相关的文件比较大,Container是电脑上安装docker后生成的docker image和container文档。找到大数据的来源后,就便于对症下药了,而且这些文件看起来都不是操作系统本身升级过程中产生的临时文档。
Android是开发android应用时下载的各个版本sdk文档,可以通过将老的一些不用的sdk删除掉,就清释放出来了不少空间。
Developer主要是iOS开发过程中Xcode产生的相关文档,里面又分为三个目录,CoreSimulator、Shared和xcode,这个目录的清理可以在网上搜索一下,很多朋友有这方面的清理经验。按照网上的经验,我是把CoreSimulator和xcode下的iOS Support这两个目录里面的内容直接干掉了。这些干掉不影响Xcode的正常使用,重新编译项目或调试程序时会自动再创建相应文件。
Container这个目录是由于docker本身的缺陷造成的,当pull或本地build镜像时,会写数据到本地文件Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2,我的电脑上,这一个文件就有17GB之多。网上有一段脚本可以清理掉本地所有的image和container,并释放这个文件的空间,不好地方是他会将电脑上的image都清理掉(也可以自己先定义IMAGES系统变量,保存需要留存的)。具体代码如下(也可以在网络上搜索到):
#!/bin/bash
# Copyright 2017 Théo Chamley
# Permission is hereby granted, free of charge, to any person obtaining a copy of
# this software and associated documentation files (the "Software"), to deal in the Software
# without restriction, including without limitation the rights to use, copy, modify, merge,
# publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons
# to whom the Software is furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all copies or
# substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
# BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
# DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
IMAGES=$@
echo"This will remove all your current containers and images except for:"
echo${IMAGES}
read-p"Are you sure? [yes/NO] "-n 1 -r
echo# (optional) move to a new line
if[[!$REPLY=~^[Yy]$ ]]
then
exit1
fi
TMP_DIR=$(mktemp -d)
pushd$TMP_DIR>/dev/null
open -a Docker
echo"=> Saving the specified images"
forimagein${IMAGES};do
echo"==> Saving${image}"
tar=$(echo -n${image}|base64)
docker save -o${tar}.tar${image}
echo"==> Done."
done
echo"=> Cleaning up"
echo-n"==> Quiting Docker"
osascript -e'quit app "Docker"'
whiledocker info>/dev/null2>&1;do
echo-n"."
sleep 1
done;
echo""
echo"==> Removing Docker.qcow2 file"
rm~/Library/Containers/com.docker.docker/Data/com.docker.driver.amd64-linux/Docker.qcow2
echo"==> Launching Docker"
open -a Docker
echo-n"==> Waiting for Docker to start"
untildocker info>/dev/null2>&1;do
echo-n"."
sleep 1
done;
echo""
echo"=> Done."
echo"=> Loading saved images"
forimagein${IMAGES};do
echo"==> Loading${image}"
tar=$(echo -n${image}|base64)
docker load -q -i${tar}.tar||exit1
echo"==> Done."
done
popd>/dev/null
rm -r${TMP_DIR}
至此,执行了上面的三个清理后,整体个Library目录中的空间释放出来了将近60GB,再查看系统空间的占用,由120多GB降到了70GB多一点。
以上是个人清理Library目录的一个过程记录,希望能够对大家也能够有所帮助,这里的关键是使用du -d 1 -h查找出来电脑中空间比较的数据来源,然后再针对性一个个清理。笔者清理完成这几个目录后,释放出来的空间足够用一阵子了,因此也就没有再进一步处理其它大文件,大家也可以使用此命令找出自己电脑上比较大的文件,然后再针对性处理。