Ubuntu清理硬盘空间

删除残余的配置文件

通常Debian/Ubuntu删除软件包可以用两条命令

1
2
sudo apt-get remove <package-name>
sudo apt-get purge <package-name>

remove将会删除软件包,但会保留配置文件.purge会将软件包以及配置文件都删除.

找出系统上哪些软件包留下了残余的配置文件

1
dpkg --list | grep "^rc"

Debian/Ubuntu删除残余配置文件

其中第一栏的rc表示软件包已经删除(Remove),但配置文件(Config-file)还在. 现在提取这些软件包的名称.

1
dpkg --list | grep "^rc" | cut -d " " -f 3

Debian/Ubuntu删除残余配置文件

删除这些软件包

1
2
3
4
5
6
dpkg --list | grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --purge
(Reading database ... 64538 files and directories currently installed.)
Removing libapt-inst1.4:amd64 (0.8.16~exp12ubuntu10.11) ...
Purging configuration files for libapt-inst1.4:amd64 (0.8.16~exp12ubuntu10.11) ...
Removing libbind9-80 (1:9.8.1.dfsg.P1-4ubuntu0.6) ...
Purging configuration files for libbind9-80 (1:9.8.1.dfsg.P1-4ubuntu0.6) ...

如果你只想删除某个软件包的配置文件,那么可以使用下面的命令

1
sudo dpkg --purge <package-name>

删除没有用的deb软件安装包

通常我们用sudo apt-get install 命令安装软件包后,apt-get下载的deb安装包会保留在系统上.所以如果你经常安装软件,那么这些deb安装包会占据大量的空间.这些安装包在/var/cache/apt/archives目录下。在软件安装完成后,这些deb安装包就没什么用了。对于硬盘容量有限的服务器来说apt-get clean命令可以腾出很多空间。你可以输入下面的命令来查看/var/chace/apt/archives目录下deb安装包的总大小

1
du -sh /var/cache/apt/archives

要删除这些deb包,只需要运行下面两个命令就行了.

1
2
sudo apt-get clean
sudo apt-get autoclean

删除孤儿软件包

有时候,你用apt-get安装一个软件包时会自动安装其他的依赖.当你删除掉这个软件包时,这些依赖也就没有用处了.这些没有用的依赖包叫做孤儿软件包,可以用下面的命令删除

1
sudo apt-get autoremove

不过apt-get autoremove只会删除经apt-get自动安装的依赖包,而你自己手动安装的依赖包则不会被删除,这时我们可以用deborphan来彻底删除.

1
sudo apt-get install deborphan

列出孤儿软件包

1
deborphan

Linux清理硬盘空间

将它们删除

1
deborphan | xargs sudo apt-get purge -y

删除过时的软件包

所谓过时(obsolete)的软件包是指/etc/apt/sources.list源文件中没有任何一个软件源提供这个软件的deb安装包.也就是说这个软件包在软件源里找不到了,不被支持了.这可能是因为下面几个原因:

  • 上游开发者不维护这个软件,又没有人来接管这个软件的开发.所以Debian/Ubuntu的软件包维护人员决定将这个软件从软件源中删除.
  • 这个软件成了孤儿,同时用户很少.所以它就从软件源里消失了.
  • 这个软件有了一个新的名字,维护人员给它起了一个新的名字并保留旧软件包.

因为这些过时的软件不会有安全更新了,而且搞不好会在软件升级过程中引来麻烦,所以我们需要将它们删除.首先找出哪些软件包是过时的

1
sudo aptitude search ?obsolete

我的输出结果

1
i linux-image-3.2.0-29-generic - Linux kernel image for version 3.2.0 on 64

将它删除

1
sudo apt-get purge linux-image-3.2.0-29-generic

你也可以使用下面的命令将所有过时的软件包一下清除

1
sudo  aptitude purge ~o

不过需要注意的是,有些软件包虽然在软件源里找不到,但它并不是过时的软件包.比如你自己下载安装的ubuntu-tweak.ubuntu-tweak需要你从官网下载deb安装包,但不提供软件源.用上面这条命令会将这类软件包也删除.所以我建议使用apt-get purge,自己选择需要删除的软件包.

清理日志文件

日志文件会变得越来越大,我们可以用ncdu工具来查看大日志文件.

1
2
sudo apt-get install ncdu
sudo ncdu /var/log

Linux清理硬盘空间

从上图可以发现,shadowsocks.log占用了24.5MiB的硬盘空间,我们可以用下面的命令来清空这个日志文件的内容.

1
sudo dd if=/dev/null of=/var/log/shadowsocks.log

baobab硬盘空间用量分析工具

baobab是一个图形界面工具,可以帮助我们查找系统中哪个目录或文件占据了大量空间.在终端里运行下面的命令

1
baobab

Linux清理硬盘空间

从上图中可以发现,thunerbird里的邮件就有14.3GB的大小!还有chromuim浏览器,Spotify音乐播放器,谷歌浏览器,缩略图,这些缓存(cache)也占用了不少空间.

其实我们也可以用上面所提到了ncdu工具来查看大容量目录和文件.比如查看/home//

1
sudo ncdu /home/<username>

不过用ncdu的话,每查看一个目录就要输入一次命令,建议在服务器上用ncdu,在桌面版本用图形化的baobab工具.

删除大容量软件包

首先安装debian-goodies

1
sudo apt-get install debian-goodies

然后输入下面的命令

1
dpigs -H

我的输出结果

1
2
3
4
5
6
7
8
9
10
441.0M texlive-latex-extra-doc
230.1M valgrind-dbg
200.6M chromium-browser
171.4M google-chrome-stable
153.4M linux-image-extra-3.19.0-39-generic
153.4M linux-image-extra-3.19.0-37-generic
151.5M maltego
144.8M wine1.7-amd64
140.6M metasploit-framework
137.4M wine1.7-i386

接下来你就可以删除你不用的软件包了.上面的命令默认只会显示前10个结果,你可指定结果的个数,比如20个

1
dpigs -H --lines=20

使用ubuntu-tweak来清理

前往ubuntu-tweak官网下载deb安装包,然后输入下面的命令安装.

1
2
sudo apt-get install gdebi
sudo gdebi ubuntu-tweak*.deb

打开ubuntu tweak后,选择Janitor标签.在这里你可以清理应用程序的缓存,缩略图缓存,apt缓存,旧内核,没有用的软件包配置文件,以及孤儿软件包.

ubuntu tweak清理缓存

删除Ubuntu旧内核

使用Ubuntu Linux一段时间后,就会发觉由于自动升级,系统里安装了很多内核。像我,竟然安装了下面那么多,这个造成了漫长的启动列表。必须删掉一些不用的。删除Ubuntu Linux旧内核的方法:

首先就是使用如下命令,列出所有安装的内核,下表中,带有image的就是内核文件。从中选择要卸载的包,用apt-get来卸载

1
dpkg --get-selections|grep linux

img

在Ubuntu的内核镜像中包含了以下的包:

  • linux-image- (内核镜像)
  • linux-image-extra- (额外的内核模块)

使用这个命令可以查看当前系统使用的内核。

1
uname -a

使用这个命令可以查看当前系统使用的内核,输出显示是: 4.8.0-58-generic。

所以对于我的电脑系统来说,需要删除的是linux-image-4.8.0-56-generic与linux-image-extra-4.8.0-56-generic,只留下4.8.0-58版本的两个包以及linux-image-generic-hwe-16.04文件,所以输入以下命令:

1
sudo apt-get remove linux-image-4.8.0-56-generic linux-image-extra-4.8.0-56-generic

清理无用的依赖

1
sudo apt autoremove

这样就可以实现自动删除内核文件了,还可以释放磁盘空间。

经过一段时间,卸载完成,输入相关命令查看此时系统中所含有的内核镜像。

至于为什么还会出现deinstall信息,原因就是因为remove命令只会删除相应的文件,并不会删除相应的配置信息,要删除相应的配置信息,需要采用purge命令

1
sudo dpkg -P linux-image-4.8.0-56-generic linux-image-extra-4.8.0-56-generic

再次查看内核信息

img

带有deinstall信息的包都已经被删除了,至此,操作完成。

卸载后,若在启动菜单里还有其选项,这样我们需要修改启动菜单,

方法如下:用命令打开menu.lst

1
sudo gedit /boot/grub/menu.lst

然后找到不需要的菜单将其删除即可,还要注意一点,记得修改default的值,修改默认启动项!

希望这些删除Ubuntu Linux旧内核的方法对大家有所帮助。

一条命令清除旧内核:

1
dpkg -l 'linux-*' | sed '/^ii/!d;/'"$(uname -r | sed "s/\(.*\)-\([^0-9]\+\)/\1/")"'/d;s/^[^ ]* [^ ]* \([^ ]*\).*/\1/;/[0-9]/!d' | xargs sudo

删除不常用软件

软件包清单

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
libreoffice-common libreoffice(垃圾的很,可以换 WPS)
unity-webapps-common Amazon 链接
thunderbird 雷鸟邮件客户端
totem 自带的播放器
rhythmbox 自带的音乐播放器
empathy 自带的即时聊天应用
brasero 自带的光盘刻录器
simple-scan 扫描仪
gnome-mahjongg 对对碰游戏
aisleriot 纸牌游戏
gnome-mines 扫雷游戏
cheese webcam 应用
gnome-sudoku 数独游戏
transmission-common BT 客户端
gnome-orca 屏幕阅读
webbrowser-app Ubuntu 自带的浏览器(有了 chrome 和 Firefox 根本用不到这个)
landscape-client-ui-install landscape 远程控制软件
deja-dup 备份
onboard 屏幕键盘

删除不常用软件

执行如下命令:

1
sudo apt purge libreoffice-common unity-webapps-common thunderbird totem rhythmbox empathy brasero simple-scan gnome-mahjongg aisleriot gnome-mines cheese gnome-sudoku transmission-common gnome-orca webbrowser-app landscape-client-ui-install deja-dup

完成以后。感觉清爽好多了。:)

使用 hcache来清理

这个小工具的源码开源在 Github上:hcache,使用方法比较简单:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sudo hcache --top 10
[sudo] password for silenceshell:
+-+++
| Name | Size (bytes) | Pages | Cached | Percent |
|-++|
| /opt/google/chrome/chrome | 114911208 | 28055 | 25457 | 090.740 |
| /usr/share/code/code | 67688720 | 16526 | 12274 | 074.271 |
| /home/silenceshell/Software/pycharm-community-2016.2/lib/pycharm.jar | 95177431 | 23237 | 11325 | 048.737 |
| /opt/atom/atom | 62641344 | 15294 | 10578 | 069.164 |
| /usr/bin/dockerd | 39121168 | 9552 | 7103 | 074.361 |
| /home/silenceshell/Software/pycharm-community-2016.2/jre/jre/lib/amd64/libjfxwebkit.so | 57455824 | 14028 | 6625 | 047.227 |
| /usr/lib/x86_64-linux-gnu/libQtWebKit.so.4.10.2 | 36462184 | 8902 | 6316 | 070.950 |
| /usr/lib/beyondcompare/BCompare | 30640160 | 7481 | 5505 | 073.586 |
| /usr/bin/SecureCRT | 29524560 | 7209 | 4806 | 066.667 |
| /usr/share/code/libnode.so | 21135976 | 5161 | 4588 | 088.898 |
+-+++

让我们来查看一下其中列出的一个文件:

1
2
3
$ lsof /usr/lib/x86_64-linux-gnu/libQtWebKit.so.4.10.2 
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
quiterss 20630 silenceshell mem REG 8,5 36462184 3936610 /usr/lib/x86_64-linux-gnu/libQtWebKit.so.4.10.2

默认情况下会显示 cache 的文件的全路径,会比较长,也可以使用 --bname 选项来仅显示文件名:

1
2
3
4
5
6
$ sudo ./hcache --top 3  --bname  
+-+--+-++|
| chrome | 114911208 | 28055 | 25476 | 090.807 |
| pycharm.jar | 95177431 | 23237 | 11479 | 049.400 |
| atom | 62641344 | 15294 | 10578 | 069.164 |
+-+--+---+
------ 本文结束------
坚持原创技术分享,您的支持将鼓励我继续创作!

欢迎关注我的其它发布渠道