当我在 Linux 上测试软件时(这是我工作的常规部分),我需要使用运行 Linux 的各种架构的多台服务器。我配置机器,安装所需的软件包,运行我的测试,收集结果,然后将机器返回到池中,以便其他人可以将其用于他们的测试。
由于我经常这样做(甚至一天多次),我在 Linux 服务器上的前 10 分钟已成为每日惯例。 当我第一次登录到 Linux 服务器时,我会使用命令查找某些内容以收集我需要的信息。 我将在本文中介绍我的过程,但请注意,在大多数情况下,我只会给出命令名称,因此您需要识别这些命令的特定标志才能获得您需要的信息。 阅读命令的 man 手册是一个很好的起点。
1. 首次接触
登录服务器后,我要做的第一件事是检查它是否具有运行测试所需的操作系统、内核和硬件架构。 我经常检查服务器已运行了多长时间。 虽然这对于测试系统来说并不重要,因为它会被多次重启,但我仍然觉得这些信息很有帮助。
使用以下命令获取此信息。 我主要使用 Red Hat Linux 进行测试,因此如果您使用其他 Linux 发行版,请在文件名中使用 `*-release` 而不是 `redhat-release`
cat /etc/redhat-release
uname -a
hostnamectl
uptime
2. 是否还有其他人在线?
一旦我知道机器满足我的测试需求,我就需要确保没有其他人在同一时间登录到系统并运行他们自己的测试。 尽管这种可能性很小,因为配置系统会为我处理这个问题,但偶尔检查一下仍然是好的——尤其是如果这是我第一次登录服务器。 我还会检查是否还有其他用户(root 除外)可以访问系统。
使用以下命令查找此信息。 最后一个命令在 `/etc/passwd` 文件中查找具有 shell 访问权限的用户;它跳过文件中没有 shell 访问权限或 shell 设置为 `nologin` 的其他服务
who
who -Hu
grep sh$ /etc/passwd
3. 物理机或虚拟机
现在我知道我拥有了这台机器,我需要确定它是物理机还是虚拟机 (VM)。 如果我自己配置了机器,我可以确定我拥有我所要求的。 但是,如果您使用的是您未配置的机器,您应该检查该机器是物理机还是虚拟机。
使用以下命令识别此信息。 如果是物理系统,您将看到供应商的名称(例如,HP、IBM 等)以及服务器的品牌和型号;而在虚拟机中,您应该看到 KVM、VirtualBox 等,具体取决于用于创建 VM 的虚拟化软件
dmidecode -s system-manufacturer
dmidecode -s system-product-name
lshw -c system | grep product | head -1
cat /sys/class/dmi/id/product_name
cat /sys/class/dmi/id/sys_vendor
4. 硬件
因为我经常测试连接到 Linux 机器的硬件,所以我通常使用物理服务器,而不是 VM。 在物理机上,我的下一步是识别服务器的硬件功能——例如,运行的是哪种 CPU,有多少个核心,启用了哪些标志,以及有多少内存可用于运行测试。 如果我正在运行网络测试,我会检查连接到服务器的以太网或其他网络设备的类型和容量。
使用以下命令显示连接到 Linux 服务器的硬件。 某些命令可能在新版本的操作系统中已弃用,但您仍然可以从 yum repos 安装它们或切换到等效的新命令
lscpu or cat /proc/cpuinfo
lsmem or cat /proc/meminfo
ifconfig -a
ethtool <devname>
lshw
lspci
dmidecode
5. 已安装的软件
测试软件总是需要安装额外的依赖包、库等。 但是,在安装任何东西之前,我会检查已经安装了什么(包括它的版本),以及配置了哪些 repos,所以我知道软件来自哪里,我可以调试任何软件包安装问题。
使用以下命令识别已安装的软件
rpm -qa
rpm -qa | grep <pkgname>
rpm -qi <pkgname>
yum repolist
yum repoinfo
yum install <pkgname>
ls -l /etc/yum.repos.d/
6. 正在运行的进程和服务
在检查已安装的软件后,很自然地会检查系统上正在运行哪些进程。 这在系统上运行性能测试时至关重要——如果正在运行的进程、守护程序、测试软件等占用了大部分 CPU/RAM,那么在运行测试之前停止该进程是有意义的。 这也检查了测试所需的进程或守护程序是否已启动并运行。 例如,如果测试需要 httpd 运行,即使安装了软件包,启动守护程序的服务也可能尚未运行。
使用以下命令识别系统上正在运行的进程和已启用的服务
pstree -pa 1
ps -ef
ps auxf
systemctl
7. 网络连接
如今的机器都高度联网,它们需要与网络上的其他机器或服务进行通信。 我识别服务器上打开了哪些端口,网络上是否有任何与测试机器的连接,是否启用了防火墙,如果启用,它是否阻止了任何端口,以及机器与哪些 DNS 服务器通信。
使用以下命令识别与网络服务相关的信息。 如果已弃用的命令不可用,请从 yum repo 安装它或使用等效的较新命令
netstat -tulpn
netstat -anp
lsof -i
ss
iptables -L -n
cat /etc/resolv.conf
8. 内核
在进行系统测试时,我发现了解内核相关信息很有帮助,例如内核版本以及加载了哪些内核模块。 我还列出任何 可调内核参数 以及它们的设置,并检查启动运行内核时使用的选项。
使用以下命令识别此信息
uname -r
cat /proc/cmdline
lsmod
modinfo <module>
sysctl -a
cat /boot/grub2/grub.cfg
9. 日志
到目前为止,我对服务器有了一个很好的了解,包括安装了哪些软件以及正在运行哪些进程。 我无法逃避的另一件事是日志文件——我需要知道在哪里检查不断更新的信息。
使用以下命令查看系统的日志
dmesg
tail -f /var/log/messages
journalctl
后续步骤
虽然命令和实用程序会发生变化,但它们显示的底层信息或多或少保持不变。 在您可以专注于掌握哪些命令之前,您需要对您要查找的信息有一个高层次的了解,以及它属于哪个类别。
由于 Linux 将大多数信息保存在文件中,因此这些命令基本上是从文件中读取信息并以易于理解的方式呈现它们。 接下来要做的就是确定每个命令使用哪些文件来获取要显示的信息。 找到该信息的提示是 `strace` 命令。
6 条评论