零、前言
命令测试基于环境:
-
阿里云服务器
-
Ubuntu 22.04.3 LTS
本文将随着日常的 Linux 系统使用而逐步更新补充。
一、查看手册
命令示例(查看 ps 命令的手册文档):
man ps
效果如下:
命令解释:
-
man:缩写自英文 manual,为 Linux 系统中用于查看手册页(manual pages)的工具。手册页提供了关于各种命令、配置文件、库函数和其他系统组件的详细文档。
可用以下命令查看更多操作参数:
man -h
二、列出当前文件夹各文件的大小
命令:
du -sh *
效果如下:
命令解释:
-
du:缩写自英文 disk usage,顾名思义就是磁盘使用情况。所以这个命令专门用于显示目录或文件的大小。
-
-s:仅显示指定目录或文件的总大小,而不显示其子目录的大小。
-
-h:文件大小以K,M,G为单位,提高信息的可读性。
-
*:指定的文件为当前目录所有文件,可以换成文件名、目录名,也可以换成
.
表示查看当前目录大小。
可用以下命令查看更多操作参数:
du --help
三、查看占用内存前10的进程信息
命令:
ps aux --sort=-%mem | head -n 11
效果如下:
命令解释:
-
ps:缩写自英文 process status,顾名思义就是专门用于查看当前进程状态的命令。
-
aux:ps 的选项组合。
-
a:缩写自 all,显示所有用户的进程,包括其他用户的进程。不用这个选项的话,只显示当前用户的进程。
-
u:缩写自 user-oriented format,以用户友好的格式显示进程信息,即提供详细的进程信息,包括用户ID、CPU使用率、内存使用率等。不用这个选项的话,显示的进程信息会少一些。
-
x:显示没有控制终端的进程,确保不仅显示与终端关联的进程,还包括后台进程和其他没有控制终端的进程。不用这个选项的话,只显示 TTY != ? 的进程,即有控制终端的进程。
-
-
--sort=-%mem:按内存使用率降序排序
-
head -n 11:取前11行,包含表头和前10个进程
结果数据格式说明:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
进程拥有者 进程ID CPU使用率 内存使用率 虚拟内存占用大小 物理内存占用大小 进程控制终端 进程状态 进程启动时间 进程CPU占用的时间 进程启动命令和参数
-
USER:进程拥有者的用户名称
-
PID:缩写自 Process Identifier(进程标识符),每个进程在系统中都有一个唯一的 PID,由操作系统在进程启动时自动分配。我们可以利用这个 PID 指定进程进行一些操作,例如执行命令
kill 1
表示杀死 PID = 1 的进程。 -
%CPU:进程占用的 CPU 使用率百分比。
-
%MEM:进程占用的物理内存使用率百分比。
-
VSZ:缩写自 Virtual Size(虚拟内存大小),表示 进程占用虚拟内存大小,以 KB 为单位。包括进程使用的全部内存,包括已分配但未使用的内存。
-
RSS:缩写自 Resident Set Size(常驻集大小),表示进程占用物理内存大小,以 KB 为单位。
-
TTY:缩写自 TeletypeWriter(电传打字机),属于是远古遗留的用语,现在表示的是进程的控制终端。
?
表示没有控制终端,意味着这个进程一般是守护进程或者后台进程,不需要与终端交互。 -
STAT:进程的状态(有可能输出为 S、s、state、stat)。状态代码可以组合出现,常见的状态代码包括:
-
R:正在运行中(Runing)或可运行(Runnable)(在运行队列中)。
-
S:可中断的休眠(interruptible sleep)(等待事件完成),此状态的进程不会占用 CPU 时间。
-
D:不可中断的休眠状态(Uninterruptible Sleep)(通常等待 I/O 操作完成)。
-
I:Idel kernel thread,一种特殊的内核线程,用于管理空闲 CPU 核心。每个 CPU 核心都有一个对应的 idle 线程,当该核心没有其他任务可执行时,idle 线程就会运行。它的主要作用是让空闲的 CPU 核心进入低功耗状态,从而节省能源。
-
T:被作业控制信号停止。
-
t:在跟踪期间被调试器停止。
-
W:分页中(自 2.6.xx 内核版本起无效)。
-
X:死亡进程(不应该出现)。
-
Z:僵尸进程(已经结束但父进程尚未回收其资源)。
-
对于 BSD 格式,当使用 stat 关键字时,可能会显示其他字符:
-
<:高优先级(对其他用户不友好)。
-
N:低优先级(对其他用户友好)。
-
L:有部分页面锁定在内存中(用于实时(real-time)或 自定义IO)。
-
s:进程是会话领导者(session leader)
-
l:进程是多线程的(使用 CLONE_THREAD,就像 NPTL pthread 一样)
-
+:进程是位于前台进程组(foreground process group)中。前台进程组是当前与终端交互的进程组。这个进程组中的进程可以直接接收来自终端的输入,并且终端生成的信号(如 SIGINT、SIGQUIT、SIGTSTP 等)会发送给这个进程组中的所有进程。
-
-
-
START:进程启动的时间或日期,若是调用
ps
当天启动的则会直接显示时间(HH:MM,如:10:11),若是在是同一年则显示日期(如:Aug28),若是不在同一年则仅显示年份(如:2021)。 -
TIME:进程已使用的 CPU 时间,格式为 [dd-]hh:mm:ss([dd-] 表示天数部分为可选部分,超过一天才会显示)(实测也有可能显示为 mm:ss)。表示进程从启动到目前为止在 CPU 上执行的时间总和。这个时间不包括进程在等待 I/O 操作完成或其他阻塞状态下的时间,只计算实际占用 CPU 的时间。对于多线程进程,TIME 字段表示的是所有线程的 CPU 时间总和。
-
COMMAND:启动进程的命令及其参数。
可用以下命令查看更多操作参数:
ps --help
为什么执行时使用的命令为 nohup java -Xms256m -Xmx256m -jar halo.jar &
,实际 ps
里输出是 java -Xms256m -Xmx256m -jar halo.jar
?
答:
因为 nohup
命令用于忽略挂起信号(SIGHUP),不是 jar 包进程的一部分(nohup 自己将作为父进程,设置忽略挂起,调用 fork
创建 jar 包子进程,子进程自动继承了 nohup 父进程的信号处理行为)。nohup
是一个临时的外壳命令,用于设置进程的信号处理和输出重定向,在启动 Java 进程后会立即退出,不再存在于进程树中(启动过程中短暂存在)。
&
符号用于将命令放入后台执行。然而,&
符号并不是进程的一部分,而是 shell 的语法,用于指示命令在后台运行。&
符号在命令执行后会被 shell 解析并处理,然后 shell 会继续执行其他命令。
ps
命令只会显示实际运行的 Java 进程,也就是输出的那块内容。
四、查看系统时间同步情况
命令:
timedatectl status
执行结果示例:
命令解释:
-
timedatectl:缩写自 time date control,用于查询或修改系统时间和日期设置。
-
status:显示当前时间设置。
结果数据说明:
-
Local time:当前系统本地时间。CST 为 China Standard Time 的缩写,表示中国标准时间。
-
Universal time:当前系统的协调世界时间(UT),即世界时,通常指的是0时区的时间,但是某些场景下可能有微小的偏差。
-
RTC time:实时时钟(Real-Time Clock, RTC)的时间,n/a表示没有获取到 RTC 时间。RTC (Real-Time Clock) 是一种用于测量和跟踪时间的电子设备,通常集成在计算机主板或其他电子设备中。RTC 的主要功能是在系统关机或断电的情况下,仍然能够持续提供准确的时间和日期信息。RTC 时间是硬件时钟提供的时间,通常通过
hwclock
命令读取和设置。RTC 时间通常会在系统关机时用系统时间同步校正。 -
Time zone:当前系统设置的时区。
-
System clock synchronized:显示系统时钟是否已与网络时间同步。yes 表示已与网络时间同步,no 表示未同步。
-
NTP service:显示当前 NTP 服务的状态,active 表示正在运行,inactive 表示未运行。NTP 为 Network Time Protocol 的缩写。
-
RTC in local TZ:显示 RTC 是否设置为本地时区。
如何快速获取系统使用的 NTP 服务?
答:经过 tongyilingma + NewBing + 网页人工 的检索,没有发现好思路,基本都是把所有有可能在用的 NTP 服务都检索一遍有无在运行(如用 systemctl
命令看服务状态),然后知道系统用的是哪个 NTP 服务。但是这样如果用的正好是小众的 NTP 服务,就会遗漏掉。不过一般云服务器啥的,用的都是比较常见的服务,如 ntpd、chrony、systemd-timesyncd、OpenNTPD 和 NTPsec。如我的阿里云服务器,用的就是 chrony。
五、查看系统重启日志
命令:
last reboot
输出如下:
命令解释:
-
last: Linux 系统中用于显示用户登录和系统重启记录的工具。它从 /var/log/wtmp 文件中读取记录,并显示用户登录、注销、系统重启和关机的时间信息。wtmp 文件由系统自动生成和维护,主要用于系统管理和审计。
-
reboot:系统重启时,系统会使用 reboot 作为用户名在 wtmp 文件中进行记录。这里是作为依据用户名检索的检索条件。
结果数据格式说明:
-
用户名:用户名
-
若是普通用户登录,则显示用户的用户名。
-
若是系统重启,则用户名为 reboot(即便是某个用户操作的)。
-
若是关机,则用户名为 shutdown(即便是某个用户操作的)。
-
-
终端:终端名。
-
若是用户通过 ssh 之类的伪终端(Pseudo Terminal Slave)登录,则显示为 pts/0 之类。
-
若是系统重启,则显示 system boot(即便是某个用户操作的)。
-
若是系统关机,则显示 system down(即便是某个用户操作的)。
-
-
来源地址:用户登录的来源地址。
-
若是普通用户登录,则显示用户来源地址,如:IP地址。
-
若是系统重启/系统关机,则显示 系统启动时使用的内核版本。
-
-
登录时间:用户登录的时间 或 系统启动的时间。
-
注销时间:用户退出登录的时间 或 系统关机的时间。
-
若是系统正在运行,没有关机,则显示 still running。
-
若是用户还未退出登录,则显示 still logged in。
-
-
持续时间:用户登录后到退出登录的持续时间 或 系统启动到关机持续的时间。
查看系统关机记录命令:
last shutdown
查看所有记录(包括系统重启、系统关机、用户登录):
last
六、系统启动时自动执行脚本
可以利用 cron 来设置,建议阅读:Linux定时任务(cron)
七、查看内核版本
命令:
uname -a
输出如下:
命令解释:
-
uname:缩写自英文 unix name,一个常用的 Unix 和类 Unix 操作系统(如 Linux)命令,用于显示系统的相关信息。
-
-a:显示全部的信息
结果数据格式说明:
内核名称 主机名 内核版本 内核编译版本 对称多处理 发行时间 机器硬件架构 处理器类型 硬件平台 操作系统
Linux iZ7xxxxxxammstZ 5.15.0-92-generic #102-Ubuntu SMP Wed Jan 10 09:33:48 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux
-
kernel name(内核名称):表示当前系统使用的内核名称(如:Linux)。
-
network node hostname(主机名):表示当前主机的名称(如:iZ7xxxxxxammstZ)。主机名通常是系统管理员或云服务提供商设置的。
-
kernel release(内核发布版本):表示当前系统使用的内核版本(如:5.15.0-92-generic)。
-
5.15.0:主版本号。
-
92:修订版本号。
-
generic:表示这是一个通用内核,适用于多种硬件配置。
-
-
kernel version(内核版本信息):(如:#102-Ubuntu SMP Wed Jan 10 09:33:48 UTC 2024)
-
内核编译版本:表示内核编译的版本号(如:#102-Ubuntu,表示这是 Ubuntu 发行版的第 102 次编译)。
-
对称多处理:SMP 表示内核支持对称多处理(Symmetric Multi-Processing)。这意味着内核可以在多核处理器上运行。
-
编译日期和时间:表示内核编译的日期和时间(如:Wed Jan 10 09:33:48 UTC 2024,表示内核编译于 2024 年 1 月 10 日 09:33:48 UTC)。
-
-
machine hardware name(机器硬件架构):表示系统的硬件架构(如:x86_64,即 64 位 Intel 或 AMD 处理器)。
-
processor type(处理器类型):表示处理器的类型(如:x86_64)。
-
hardware platform(硬件平台):表示硬件平台(如:x86_64)。
-
operating system(操作系统):表示当前系统使用的操作系统(如:GNU/Linux,表示这是一个基于 GNU 工具集的 Linux 系统)。