名校课程推荐 | MIT《CS 实用工具课程》-机器内省
机器内省
机器有时会发生故障,你会想知道它为什么会这样。有些工具可以帮你找出原因。
但首先,我们要确保你能进行自我检查。通常,系统内省要求你拥有某些权限,比如是一个组的成员(比如power
用于关闭)。Root
用户是终极权限,他们几乎可以做任何事。你可以通过sudo
允许用户执行root
命令(但要小心)。
什么问题?
如果发生故障,首先要看的是故障发生时的状况,为此,我们就需要查看日志。
日志通常存储在/var/log
,现在还是有很多存储在这里。通常每个程序有一个文件/文件夹。通过grep
或者less
找到它们。
还有一个内核日志,可以通过dmesg
命令查看。它之前是一个开放的纯文本文件,现在通常需要通过dmesg
获取。
最后,还有"系统日志",你的所有日志消息越来越多地存放于此。在大多数(虽然不是全部)Linux系统中,日志是由systemd
管理的,它是"系统守护进程",控制所有在后台运行的服务(目前还有更多)。如果你是root用户,或者是admin
/wheel
组中的一员,可以通过journalctl
工具查看该日志。
在journalctl
中,你应该特别注意这些标签:
-u UNIT
:只显示与指定systemd服务相关的信息--full
:不能截断长行(这点很蠢)-b
:只显示最近启动的消息(也可以参见-b -2
)-n100
:只显示最后100个项目
目前是什么状况?
如果有什么地方出了问题,或者你只是想了解你系统的目前状态,有很多工具可以检查当前正在运行的系统:
首先是top
,还有它的改良版htop
,它们会显示系统当前正在运行的进程的各种统计数据,CPU、内存使用情况、进程树等等。有很多快捷方式,t
对于启用树视图尤其有用。你还可以用patree
(+ -p
表示包含PIDs)查看进程树。如果你想知道这些程序在做什么,通常需要跟踪它们的日志文件,通过journalctl -f
、dmesg -w
以及 tail -f
。
有时,你希望更多地了解系统上正在使用的资源。dstat在这方面非常出色。它为许多不同子系统(如I/O、联网、CPU利用率、上下文切换等)提供实时资源使用指标,可以通过man dstat
命令查看。
如果磁盘空间不足,你需要了解两个主要的实用程序:df
和du
。前者显示系统上所有分区的状态(使用-h
进行尝试),而后者度量你提供给它的所有文件夹的大小,包括它们的内容(参见-h
和-s
)。
要弄清楚你打开了哪些网络连接,可以使用ss
。ss -t
将显示所有打开的TCP连接。ss -tl
将显示系统上的所有监听(即服务器)端口。-p
还将包含使用该连接的进程,-n
将提供原始端口号。
系统配置
配置系统的方法有很多,我们要介绍两种非常常见的方法:联网和服务。你系统上的大多数应用程序会告诉你如何在它们的manpage中配置它们,通常会涉及到在/etc
(系统配置目录)中编辑文件。
如果想要配置你的网络,可以使用ip
命令。它的参数形式有点奇怪,但ip help command
功能比较强大。ip addr
会显示有关网络接口及其配置的信息(IP地址等),ip route
显示如何将网络流量路由到不同的网络主机。网络问题通常可以通过ip
工具完全解决,还有iw
,它会管理无线网络接口。Ping
是检查故障程度的一个便捷工具,尝试ping一个主机名(google.com),一个外部IP地址(1.1.1.1),以及内部IP地址(192.168.1.1或默认gw)。你也可以通过/etc/resolv.conf
检查你的DNS设置(主机名如何解析为IP地址)。
如今,为了配置服务,你几乎必须与systemd
交互,无论好坏。你系统上的大多数服务都会有一个systemd服务文件,界定一个systemd单元。这些文件定义启动服务时要运行什么命令、如何停止它、在哪里记录信息等。它们通常不太难读,你可以在/usr/lib/systemd/system/
中找到它们中的大多数。你也可以在/etc/systemd/system
中定义你自己的。
一旦有了systemd服务,就可以使用systemctl
命令与之交互。systemctl enable UNIT
会设置服务在启动时启用(disable
会删除它),start
, stop
和 restart
会执行你所期望的操作。如果出现错误,systemd会通知你,然后你可以使用journalctl -u UNIT
查看应用程序的日志。你还可以使用systemctl status
来查看所有系统服务的运行状况。如果你感觉启动比较慢,这可能是由于一些缓慢的服务,你可以使用systemd-analyze
(尝试用blame
)找出是哪一个。
练习
研究locate
,dmidecode
,tcpdump
,/boot
,iptables
,proc
的功能