维护Debian系统是确保其稳定性、安全性和最佳性能的关键。系统管理员需要掌握一系列的技巧来处理从用户管理到硬件配置的各种任务。本教程将介绍一些基础而重要的维护技巧,帮助管理员有效地监控和维护各自的Debian系统。
一、系统
可以通过下面的方法检查谁登录在系统里。
- who(1) 显示谁登录在系统里面;
- w(1) 显示谁登录在系统里面,他们正在在做什么;
- last(1) 显示用户最后登录的列表;
- lastb(1) 显示用户最后错误登录的列表。
“/var/run/utmp” 和 “/var/log/wtmp” 存储这样的用户信息。
二、警告所有人
可以通过下面的方式使用 wall(1) 给登录系统的每一个人发送信息。
$ echo "We are shutting down in 1 hour" | wall
三、硬件识别
对于 PCI 类设备(AGP, PCI-Express, CardBus, ExpressCard 等), 一开始就使用 lspci(8) (也许加上 “-nn” 选项) 进行硬件识别比较好。
此外,可以通过阅读 “/proc/bus/pci/devices” 里面的内容或浏览”/sys/bus/pci” 下面的目录树来进行硬件识别
硬件识别工具列表:
软件包 | 流行度 | 大小 | 说明 |
pciutils | V:244, I:991 | 212 | Linux PCI 工具: lspci(8) |
usbutils | V:72, I:868 | 325 | Linux USB 工具: lsusb(8) |
nvme-cli | V:14, I:22 | 1621 | Linux NVMe 工具: nvme(1) |
pcmciautils | V:6, I:10 | 91 | Linux PCMCIA 工具: pccardctl(8) |
scsitools | V:0, I:2 | 346 | SCSI 硬件管理工具集: lsscsi(8) |
procinfo | V:0, I:9 | 132 | 从 “/proc”: lsdev(8) 获得系统信息 |
lshw | V:13, I:91 | 919 | 硬件配置信息: lshw(1) |
discover | V:40, I:957 | 98 | 硬件识别系统: discover(8) |
四、硬件配置
像 GNOME 和 KDE 这类现代图形桌面系统,虽然大部分硬件的配置都能够通过相应的图形配置工具来管理,但知道一些配置它们的基础方式,也是一个好的主意。
硬件配置工具列表:
软件包 | 流行度 | 大小 | 说明 |
console-setup | V:89, I:967 | 428 | Linux 控制台字体和键盘表工具 |
x11-xserver-utils | V:298, I:524 | 568 | X 服务端工具: xset(1), xmodmap(1) |
acpid | V:85, I:154 | 158 | 管理高级可配置和电源接口(ACPI)事件分发的后台守护进程(daemon) |
acpi | V:10, I:142 | 47 | 显示 ACPI 设备信息的工具 |
sleepd | V:0, I:0 | 86 | 在笔记本空闲时,使其进入休眠状态的后台守护进程(daemon) |
hdparm | V:183, I:350 | 256 | 硬盘访问优化 (参见 第 9.6.9 节 “硬盘优化”) |
smartmontools | V:206, I:249 | 2358 | 使用 S.M.A.R.T. 控制和监控存储系统 |
setserial | V:4, I:7 | 103 | 串口管理工具集 |
memtest86+ | V:1, I:21 | 12711 | 内存硬件管理工具集 |
scsitools | V:0, I:2 | 346 | SCSI 硬件管理工具集 |
setcd | V:0, I:0 | 37 | 光驱访问优化 |
big-cursor | I:0 | 26 | X 系统的大鼠标光标 |
这里, ACPI 是一个比 APM 新的电源管理系统框架。
注意:现代系统的 CPU 频率调整功能,是由内核模块 acpi_cpufreq 管理的。
五、系统和硬件时间
下面设置系统的硬件时间为:MM/DD hh:mm, CCYY.
# date MMDDhhmmCCYY # hwclock --utc --systohc # hwclock --show
Debian 系统的时间通常显示为本地时间,但硬件时间通常使用 UTC(GMT) 时间。如果硬件时间设置为 UTC 时间,请在“/etc/default/rcS”里面设置“UTC=yes”。
下面是重新配置 Debian 系统使用的时区。
# dpkg-reconfigure tzdata
如果希望通过网络来更新系统时间,考虑使用 ntp, ntpdate 和 chrony 这类包提供的 NTP 服务。在 systemd 下,是使用 systemd-timesyncd 来替代进行网络时间同步。
六、终端配置
有几个组件可以用来配置字符控制台和 ncurses(3) 系统功能。
“/etc/terminfo/*/*” 文件(terminfo(5));
- “$TERM” 环境变量(term(7));
- setterm(1)、stty(1)、tic(1) 和 toe(1)。
如果 xterm 的 terminfo 对非 Debian 的 xterm 不起作用,则当从远程登录到 Debian 系统时,需要改变终端类型 “$TERM”,从 “xterm” 更改为功能受限的版本(例如 “xterm-r6”)。
七、声音基础设施
用于现在的 Linux 的声卡设备驱动程序由 高级 Linux 声音体系(Advanced Linux Sound Architecture,ALSA) 提供。ALSA 提供了兼容之前的 开放声音系统(Open Sound System,OSS)的模拟模式。
应用软件不仅可被配置为不仅直接访问声音设备,也可以通过一些标准化声音服务端系统来访问它们。目前,PulseAudio、JACK 和 PipeWire 被用作声音的服务端系统。
每个流行的桌面环境通常都有一个通用的声音引擎。每个被应用程序使用的声音引擎都可以选择连接到不同的声音服务器。
使用 “cat /dev/urandom > /dev/audio” 或 speaker-test(1) 来测试扬声器(^C 停止)。如果无法听到声音,那扬声器可能连接到了一个静音输出。现代的声音系统有许多输出。alsa-utils 软件包中的 alsamixer(1) 可以很好地配置声音和静音设置。
声音软件包:
软件包 | 流行度 | 大小 | 说明 |
alsa-utils | V:323, I:463 | 2605 | 配置和使用 ALSA 的工具 |
oss-compat | V:1, I:18 | 18 | 在 ALSA 下兼容 OSS,预防 “/dev/dsp not found” 错误 |
pipewire | V:264, I:315 | 119 | 音频和视频处理引擎多媒体服务端 – 元数据包 |
pipewire-bin | V:274, I:315 | 1630 | 音频和视频处理引擎多媒体服务端 – 音频服务和命令行程序 |
pipewire-alsa | V:99, I:148 | 205 | 音频和视频处理引擎多媒体服务端 – 代替 ALSA 的音频服务 |
pipewire-pulse | V:155, I:203 | 49 | 音频和视频处理引擎多媒体服务端 – 代替 PulseAudio 的音频服务 |
pulseaudio | V:260, I:314 | 6472 | PulseAudio 服务端 |
libpulse0 | V:409, I:578 | 975 | PulseAudio 客户端库 |
jackd | V:2, I:19 | 9 | JACK Audio Connection Kit. (JACK) 服务器(低延迟) |
libjack0 | V:1, I:10 | 329 | JACK Audio Connection Kit. (JACK) 库(低延迟) |
libgstreamer1.0-0 | V:428, I:593 | 4454 | GStreamer:GNOME 声音引擎 |
libphonon4qt5-4 | V:72, I:161 | 593 | Phonon:KDE 声音引擎 |
八、关闭屏幕保护
关闭屏幕保护,使用下面的命令。
关闭屏幕保护命令列表:
环境 | 命令 |
---|---|
Linux 控制台 | setterm -powersave off |
X 窗口(关闭屏幕保护) | xset s off |
X 窗口(关闭 dpms) | xset -dpms |
X 窗口(屏幕保护 GUI 配置) | xscreensaver-command -prefs |
九、关闭蜂鸣声
可以把电脑的扬声器拔掉来关闭蜂鸣声。把 pcspkr 内核模块删除,也可以做到这点。
bash(1) 用到的 readline(3) 程序,当遇到告警字符(ASCII=7)时,将会发生。下面的操作将阻止发生。
$ echo "set bell-style none">> ~/.inputrc
十、内存使用
这里有两种可用的方法来得到内存的使用情况:
“/var/log/dmesg” 中的内核启动信息包含了可用内存的精确总大小;
free(1) 和 top(1) 显示正在运行的系统中内存资源的相关信息。
下面是一个例子:
# grep '\] Memory' /var/log/dmesg [ 0.004000] Memory: 990528k/1016784k available (1975k kernel code, 25868k reserved, 931k data, 296k init) $ free -k total used free shared buffers cached Mem: 997184 976928 20256 0 129592 171932 -/+ buffers/cache: 675404 321780 Swap: 4545576 4 4545572
“dmesg 告诉 free 为 990 MB,而 free -k 告诉 free 为 320 MB。这丢失了超过 600 MB ……”。“Mem:” 这行中 “used” 较大的值以及 “free” 较小的值,放轻松,需要查看的是下面的那个(在上面的例子中它们是 675404 和 321780)。
对于我的 MacBook,有 1GB=1048576k 内存(显卡系统用掉一些),我看到的如下。
报告的内存大小:
报告 | 大小 |
---|---|
dmesg 中 total 的大小 | 1016784k = 1GB – 31792k |
dmesg 中的 free | 990528k |
shell 下的 total | 997184k |
shell 下的 free | 20256k(但有效的为 321780k) |
十一、系统安全性检查
糟糕的系统维护可能会暴露系统,导致它被外部非法使用。对于系统安全性和完整性的检查,需要从下面这些方面开始。
- debsums 软件包;
- chkrootkit 软件包;
- clamav 软件包家族。
用于系统安全性和完整性检查的工具:
软件包 | 流行度 | 大小 | 说明 |
logcheck | V:6, I:8 | 110 | 后台守护进程(daemon),将系统日志文件中的异常通过邮件发送给管理员 |
debsums | V:5, I:36 | 98 | 实用程序,使用 MD5 校验码对已安装软件包的文件进行校验 |
chkrootkit | V:7, I:17 | 925 | rootkit 检测软件 |
clamav | V:9, I:45 | 27455 | Unix 的反病毒实用程序 —— 命令行界面 |
tiger | V:1, I:2 | 7800 | 报告系统安全漏洞 |
tripwire | V:2, I:2 | 12168 | 文件和目录完整性检测软件 |
john | V:1, I:9 | 471 | 先进的密码破解工具 |
aide | V:1, I:1 | 293 | 高级入侵环境检测 —— 静态二进制 |
integrit | V:0, I:0 | 2659 | 文件完整性验证程序 |
crack | V:0, I:1 | 149 | 密码猜测程序 |
下面是一个简单的脚本,用来检测典型的所有人可写的错误文件权限。
# find / -perm 777 -a \! -type s -a \! -type l -a \! \( -type d -a -perm 1777 \)
注意:由于 debsums 软件包使用本地存储的 MD5 校验码,因此面对恶意攻击,也不能完全相信系统安全性检测工具。