Linux 启动顺序

  • BIOS
  • MBR
  • bootloader
  • Linux 内核
  • systemd
  • 读取配置文件
  • sysinit.target
  • basic.target
  • multi-user.target
  • graphical.target

系统状态监控

uptime

  • 当前时间
  • 本次启动后所运行的时间
  • 已登陆用户数量
  • 最近 1 分钟、5 分钟、15 分钟内系统平均负载

w

  • 当前时间
  • 系统已运行时间
  • 已登陆用户:用户名,TTY,远端主机,登陆时间,空闲时间,当前进程
  • 登陆用户产生的进程

top

动态、实时 查看当前系统状态。

该命令显示的信息内容很丰富,显示的界面中,每一块都由一个或多个命令来控制。

启动时间 及 平均负载

top - 16:10:22 up  8:59,  2 users,  load average: 0.00, 0.01, 0.05

这部分内容为一行,内容与 uptime 返回的结果相同:

  • 当前时间
  • 本次启动后所运行的时间
  • 当前登陆用户数量
  • 最近 1 分钟、5 分钟、15 分钟内系统平均负载

任务 及 CPU 状态

Tasks: 173 total,   1 running, 172 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.1 sy,  0.0 ni, 99.9 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

这部分内容至少为两行。在多处理器环境,会显示更多的行。

第一行:总任务数,即总线程数。以及分别处理运行、睡眠、暂停、僵尸状态的数量。

第二行:本次刷新前,在刷新间隔时间内 CPU 的平均状态,默认用百分比来表示。

us :user,运行 un-niced 用户进程的时间

sy :system,运行内核进程的时间

ni :nice,运行 niced 用户进程的时间

id :idle,内核空闲处理器所用的时间

wa :IO-wait,等待 I/O 完成所用的时间

hi :Hardware Interrupt,用于硬件中断的时间

si :Software Interrupt,用于软件中断的时间

st :Steal Time,虚拟 CPU 等待实体 CPU 分配时间片的机率,越大,性能越差

内存占用

这部分内容占两行。

KiB Mem :   999964 total,    69656 free,   670256 used,   260052 buff/cache
KiB Swap:  1048572 total,  1042664 free,     5908 used.   113800 avail Mem

第一行为物理内存:总量,可用量,已用量,缓冲区大小

第二行为虚拟内存:总量,可用量,已用量,物理可用量

第二行的 avail 是物理内存中,可用来启动程序的可用内存的估值。它与 free 不同,还要算上可回收的页面缓存和内存片。

进程列表

这部分显示的是当前可用进程的列表。

所有可用的字段有很多,默认只显示了一部分,可以按 F 键进入交互设定界面。在这里可以设定显示哪些字段,还可以自定义字段的显示顺序。可以选择按哪个字段进行排序。

在查看界面,可以按 e 来切换所用的单位。

PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                
  1 root      20   0  193628   4980   2944 S   0.0  0.5   0:03.00 systemd                                
  2 root      20   0       0      0      0 S   0.0  0.0   0:00.01 kthreadd                               
  3 root      20   0       0      0      0 S   0.0  0.0   0:00.01 ksoftirqd/0   

进程

查看当前进程列表

ps auxps -ef 两者的输出结果差别不大,但显示风格不同。

  • aux 是 BSD 风格,-ef 是 System V 风格
  • aux 会截断 command 列,而 -ef 不会
$ ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.5 193628  5092 ?        Ss   06:58   0:03 /usr/lib/systemd/systemd --switched-root --
root          2  0.0  0.0      0     0 ?        S    06:58   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    06:58   0:00 [ksoftirqd/0]
... ...

VSZ: 进程占用的 虚拟内存空间

RSS: 进程占用的 实际物理内存空间

$ ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 15:16 ?        00:00:02 /usr/lib/systemd/systemd --switched-root --system --deseria
root          2      0  0 15:16 ?        00:00:00 [kthreadd]
root          3      2  0 15:16 ?        00:00:00 [ksoftirqd/0]

查看进程来源

根据 PID 查看进程是由 哪个应用程序产生的

$ sudo ls -l /proc/2232/exe
lrwxrwxrwx. 1 root root 0 Sep  7 15:18 /proc/2322/exe -> /usr/sbin/mysqld

ps aux 返回的结果中,VSZ、RSS 的含义

$ ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  1.1  0.5 171476 14476 ?        Ss   19:13   0:02 /usr/lib/systemd/systemd --switched-root --system
root          2  0.0  0.0      0     0 ?        S    19:13   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        I<   19:13   0:00 [rcu_gp]

VSZ :virtual memory size,进程所占用的 虚拟内存 空间

RSS :resident set size,进程占用的 物理内存 空间

用户

用脚本批量添加 20 个用户

要求:

用户名为 user01-20,密码为 “用户名 + 5 个随机字符”:

#!/bin/bash
for i in `seq -f "%02g" 1 20`
do
	useradd user$i
    echo "user$i `head -10 /dev/urandom | sha1sum | head -c 5`" | passwd -stdin user$i > /dev/null 2>&1
done

在命令替换中,使用 seq 的格式化参数 "%02g" 来实现以 0 开头的 2 位数字格式。