磁盘管理

df

用于显示 Linux 系统中各文件系统的硬盘使用情况,包括文件系统所在硬盘分区的总容量、已使用的容量、剩余容量等。

语法:

  1. [root@chen ~]# df [选项] [目录或文件名]

常用选项

选项 作用
-a 显示所有文件系统信息,包括系统特有的 /proc、/sysfs 等文件系统;
-m 以 MB 为单位显示容量;
-k 以 KB 为单位显示容量,默认以 KB 为单位;
-h 使用人们习惯的 KB、MB 或 GB 等单位自行显示容量;
-T 显示该分区的文件系统名称;
-i 不用硬盘容量显示,而是以含有 inode 的数量来显示。

du

统计目录或文件所占磁盘空间大小的命令。 在统计目录时,不是想看父目录下的子目录名和子文件名到底占用了多少空间,而是想看父目录下的子目录和子文件的总磁盘占用量大小,这时就需要使用 du 命令才能统计目录的真正磁盘占用量大小
  1. [root@chen ~]# du [选项] [目录或文件名]
  • -a:显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量
  • -h:使用习惯单位显示磁盘占用量,如 KB、MB 或 GB 等;
  • -s:统计总磁盘占用量,而不列出子目录和子文件的磁盘占用量

pstree

pstree:以树形结构展示程序和进程之间的关系

  1. [root@chen ~]# pstree [选项] [PID或用户名]
  2. -a 显示启动每个进程对应的完整指令,包括启动进程的路径、参数等。
  3. -c 不使用精简法显示进程信息,即显示的进程中包含子进程和父进程。
  4. -n 根据进程 PID 号来排序输出,默认是以程序名排序输出的。
  5. -p 显示进程的 PID
  6. -u 显示进程对应的用户名称。

进程管理

进程管理的作用,查看系统中运行的程序和进程、判断服务器的健康状态和强制中止不需要的进程。

进程是正在执行的一个程序或命令,每个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。程序是人使用计算机语言编写的可以实现特定目标或解决特定问题的代码集合。在操作系统中,所有可以执行的程序与命令都会产生进程。

Linux进程管理及作用

ps

最常用的监控进程的命令,通过此命令可以查看系统中所有运行进程的详细信息。
  1. # ps常用命令
  2. # - 查看系统中所有的进程,使用 BS 操作系统格式
  3. [xiaochen@chen ~]$ ps aux
  4. # - 查看系统中所有的进程,而且还能看到进程的父进程的 PID 和进程优先级;使用 Linux 标准命令格式
  5. [xiaochen@chen ~]$ ps -le
  6. # - "ps -l" 只能看到当前 Shell 产生的进程;
  7. [xiaochen@chen ~]$ ps -l
  • a:显示一个终端的所有进程,除会话引线外;
  • u:显示进程的归属用户及内存的使用情况;
  • x:显示没有控制终端的进程;
  • -l:长格式显示更加详细的信息;
  • -e:显示所有进程;

<font style="color:rgb(68, 68, 68);">ps aux</font>展示信息描述

表头 含义
USER 该进程是由哪个用户产生的。
PID 进程的 ID。
%CPU 该进程占用 CPU 资源的百分比,占用的百分比越高,进程越耗费资源。
%MEM 该进程占用物理内存的百分比,占用的百分比越高,进程越耗费资源。
VSZ 该进程占用虚拟内存的大小,单位为 KB。
RSS 该进程占用实际物理内存的大小,单位为 KB。
TTY 该进程是在哪个终端运行的。其中,tty1 ~ tty7 代表本地控制台终端(可以通过 Alt+F1 ~ F7 快捷键切换不同的终端),tty1~tty6 是本地的字符界面终端,tty7 是图形终端。pts/0 ~ 255 代表虚拟终端,一般是远程连接的终端,第一个远程连接占用 pts/0,第二个远程连接占用 pts/1,依次増长。
STAT 进程状态。常见的状态有以下几种:
1. -D:不可被唤醒的睡眠状态,通常用于 I/O 情况。
2. -R:该进程正在运行。
3. -S:该进程处于睡眠状态,可被唤醒。
4. -T:停止状态,可能是在后台暂停或进程处于除错状态。
5. -W:内存交互状态(从 2.6 内核开始无效)。
6. -X:死掉的进程(应该不会出现)。
7. -Z:僵尸进程。进程已经中止,但是部分程序还在内存当中。
8. -<:高优先级(以下状态在 BSD 格式中出现)。
9. -N:低优先级。
10. -L:被锁入内存。
11. -s:包含子进程。
12. -l:多线程(小写 L)。
13. -+:位于后台。
START 该进程的启动时间。
TIME 该进程占用 CPU 的运算时间,注意不是系统时间。
COMMAND 产生此进程的命令名。

ps -le展示信息描述

表头 含义
F 进程标志,说明进程的权限,常见的标志有两个:
+ 1:进程可以被复制,但是不能被执行;
+ 4:进程使用超级用户权限;
S 进程状态。具体的状态和”psaux”命令中的 STAT 状态一致;
UID 运行此进程的用户的 ID;
PID 进程的 ID;
PPID 父进程的 ID;
C 该进程的 CPU 使用率,单位是百分比;
PRI 进程的优先级,数值越小,该进程的优先级越高,越早被 CPU 执行;
NI 进程的优先级,数值越小,该进程越早被执行;
ADDR 该进程在内存的哪个位置;
SZ 该进程占用多大内存;
WCHAN 该进程是否运行。”-“代表正在运行;
TTY 该进程由哪个终端产生;
TIME 该进程占用 CPU 的运算时间,注意不是系统时间;
CMD 产生此进程的命令名;

top

ps命令一次性给出当前系统中进程状态,但使用此方式得到的信息缺乏时效性,如果管理员需要实时监控进程运行情况,就必须不停地执行 ps 命令,这显然是缺乏效率。

top 命令可以动态地持续监听进程地运行状态,该命令还提供了一个交互界面,用户可以根据需要,人性化地定制自己的输出,进而更清楚地了进程的运行状态。

  1. 语法:
  2. [root@chen ~]#top [选项]
  3. 选项:
  4. -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;
  5. -b:使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;
  6. -n 次数:指定 top 命令执行的次数。一般和"-"选项合用;
  7. -p 进程PID:仅查看指定 ID 的进程;
  8. -s:使 top 命令在安全模式中运行,避免在交互模式中出现错误;
  9. -u 用户名:只监听某个用户的进程;
  10. top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:
  11. ? h:显示交互模式的帮助;
  12. P:按照 CPU 的使用率排序,默认就是此选项;
  13. M:按照内存的使用率排序;
  14. N:按照 PID 排序;
  15. T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;
  16. k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
  17. r:按照 PID 给某个进程重设优先级(Nice)值;
  18. q:退出 top 命令;
  19. 示例:
  20. [xiaochen@chen ~]$ top
  21. top - 01:10:23 up 6 days, 23:45, 2 users, load average: 0.00, 0.00, 0.00
  22. Tasks: 92 total, 1 running, 91 sleeping, 0 stopped, 0 zombie
  23. %Cpu(s): 0.0 us, 0.2 sy, 0.0 ni, 99.8 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
  24. MiB Mem : 3477.4 total, 1787.9 free, 1289.2 used, 574.2 buff/cache
  25. MiB Swap: 0.0 total, 0.0 free, 0.0 used. 2188.2 avail Mem
  26. PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  27. 1 root 20 0 171552 15760 9860 S 0.0 0.4 0:22.33 systemd
  28. 2 root 20 0 0 0 0 S 0.0 0.0 0:00.16 kthreadd
  29. 64972 xiaochen 20 0 10156 3628 3084 R 0.3 0.1 0:00.01 top
我们解释一下命令的输出。top 命令的输出内容是动态的,默认每隔 3 秒刷新一次。命令的输出主要分为两部分:
  1. 第一部分是前五行,显示的是整个系统的资源使用状况,我们就是通过这些输出来判断服务器的资源使用状态的;
  2. 第二部分从第六行开始,显示的是系统中进程的信息;
第一行:为任务队列信息
内 容 说 明
01:10:23 系统当前时间
up 6 days, 23:45 系统的运行时间.本机己经运行 6 天 23 小时 45 分钟
2 users 当前登录了两个用户
load average: 0.00, 0.00, 0.00 系统在之前 1 分钟、5 分钟、15 分钟的平均负载。如果 CPU 是单核的,则这个数值超过 1 就是高负载:如果 CPU 是四核的,则这个数值超过 4 就是高负载 (这个平均负载完全是依据个人经验来进行判断的,一般认为不应该超过服务器 CPU 的核数)

第二行:进程信息

内容 说明
Tasks: 92 total 系统中的进程总数
1 running 正在运行的进程数
91 sleeping 睡眠的进程数
0 stopped 正在停止的进程数
0 zombie 僵尸进程数。如果不是 0,则需要手工检查僵尸进程

第三行:CPU信息

内 容 说 明
Cpu(s): 0.0 us 用户模式占用的 CPU 百分比
0.2 sy 系统模式占用的 CPU 百分比
0.0 ni 改变过优先级的用户进程占用的 CPU 百分比
99.8 id 空闲 CPU 占用的 CPU 百分比
0.0 wa 等待输入/输出的进程占用的 CPU 百分比
0.0hi 硬中断请求服务占用的 CPU 百分比
0.0si 软中断请求服务占用的 CPU 百分比
0.0 st st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比

第四行:内存信息

内 容 说 明
Mem: 625344k total 物理内存的总量,单位为KB
571504k used 己经使用的物理内存数量
53840k&ee 空闲的物理内存数量。我们使用的是虚拟机,共分配了 628MB内存,所以只有53MB的空闲内存
65800k buffers 作为缓冲的内存数量

第五行:交换分区

内 容 说 明
Swap: 524280k total 交换分区(虚拟内存)的总大小
Ok used 已经使用的交换分区的大小
524280k free 空闲交换分区的大小
409280k cached 作为缓存的交换分区的大小
  1. top 命令的第二部分输出,主要是系统进程信息,各个字段的含义如下:
  2. PID:进程的 ID
  3. USER:该进程所属的用户。
  4. PR:优先级,数值越小优先级越高。
  5. NI:优先级,数值越小、优先级越高。
  6. VIRT:该进程使用的虚拟内存的大小,单位为 KB
  7. RES:该进程使用的物理内存的大小,单位为 KB
  8. SHR:共享内存大小,单位为 KB
  9. S:进程状态,进程状态(R:运行,S:睡眠,D:不可中断的睡眠,Z:僵尸进程,T:被跟踪或已停止)。
  10. %CPU:该进程占用 CPU 的百分比。
  11. %MEM:该进程占用内存的百分比。
  12. TIME+:该进程共占用的 CPU 时间。
  13. COMMAND:进程的命令名。

kill

kill作用:终止线程

  1. [root@chen ~]# kill [信号] PID

kill 命令是按照 PID 来确定进程的,所以 kill 命令只能识别 PID,而不能识别进程名。Linux 定义了几十种不同类型的信号,读者可以使用 kill -l 命令查看所有信号及其编号,这里仅列出几个常用的信号,如表 1 所示。

信号编号 信号名 含义
0 EXIT 程序退出时收到该信息。
1 HUP 挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化。
2 INT 表示结束进程,但并不是强制性的,常用的 “Ctrl+C” 组合键发出就是一个 kill -2 的信号。
3 QUIT 退出。
9 KILL 杀死进程,即强制结束进程。
11 SEGV 段错误。
15 TERM 正常结束进程,是 kill 命令的默认信号。
表中省略了各个信号名称的前缀 SIG,也就是说,SIGTERM 和 TERM 这两种写法都对,kill 命令都可以理解。

killall

killall:终止特定的一类进程

killall 也是用于关闭进程的一个命令,但和 kill 不同的是,killall 命令不再依靠 PID 来杀死单个进程,而是通过程序的进程名来杀死一类进程,也正是由于这一点,该命令常与 ps、pstree 等命令配合使用。
  1. [root@chen ~]# killall [选项] [信号] 进程名
  2. -i:交互式,询问是否要杀死某个进程;
  3. -I:忽略进程名的大小写;

pkill

当作于管理进程时,pkill 命令和 killall 命令的用法相同,都是通过进程名杀死一类进程:
  1. [root@chen ~]# pkill [信号] 进程名

pkill提出登录用户

除此之外,pkill 还有一个更重要的功能,即按照终端号来踢出用户登录,此时的 pkill 命令的基本格式如下:
  1. [root@ ~]# pkill [-t 终端号] 进程名
  2. [-t 终端号] 选项用于按照终端号踢出用户;

工作管理

工作管理指的是在单个登录终端(也就是登录的 Shell 界面)同时管理多个工作的行为

Linux工作管理简介(通俗易懂)

放入后台运行的方法

Linux 命令放入后台的方法有两种
  1. 第一种把命令放入后台的方法是在命令后面加入 空格 &。使用这种方法放入后台的命令,在后台处于执行状态,<font style="color:rgb(68, 68, 68);">命令 &</font>“。
  1. [xiaochen@chen ~]$ find / -name install.log &
  2. [xiaochen@chen ~]$ ps
  3. PID TTY TIME CMD
  4. 64684 pts/3 00:00:00 bash
  5. 65076 pts/3 00:00:00 ps
  6. [1]+ Exit 1 find / -name install.log
  1. 命令执行过裎中按 Ctrl+Z 快捷键,命令在后台处于暂停状态
这种方法放入后台的命令,就算不和前台有交互,能在后台执行,也处于暂停状态,因为 Ctrl+Z 快捷键就是暂停的快捷键。
每个被放入后台的命令都会被分配一个工作号。第一个被放入后台的命令,工作号是 1;第二个被放入后台的命令,工作号是 2,以此类推。

查看放入后台运行的工作

jobs 命令用来查看当前终端放入后台的工作。
  1. [root@chen ~]#jobs [选项]
  2. -lL 的小写) 列出进程的 PID 号。
  3. -n 只列出上次发出通知后改变了状态的进程。
  4. -p 只列出进程的 PID 号。
  5. -r 只列出运行中的进程。
  6. -s 只列出已停止的进程。

恢复后台命令到前台执行

将工作丢到后台去运行,那么,有没有可以将后台工作拿到前台来执行的办法呢,需要使用 fg 命令 powershell [root@chen ~]#fg %工作号 # 注意,在使用此命令时,% 可以省略,但若将% 工作号全部省略,则此命令会将带有 + 号的工作恢复到前台。另外,使用此命令的过程中, % 可有可无。 ## 后台暂停的工作恢复到后台执行 使用 Ctrl+Z 快捷键的方式,可以将前台工作放入后台,但是会处于暂停状态,有没有办法可以让后台工作继续在后台执行呢?这就需要用到 bg 命令
  1. [root@ ~]# bg %工作号
  2. # 和 fg 命令类似,这里的 % 可以省略。

后台命令脱离终端运行

我们一直在说进程可以放到后台运行,这里的后台,其实指的是当前登陆终端的后台 当我们以远程管理服务器的方式,在远程终端执行后台命令,如果在命令尚未执行完毕时就退出登陆,那么这个后台命令还会继续执行吗? 答案:当然不会,此命令的执行会被中断。这就引出一个问题,如果我们确实需要在远程终端执行某些后台命令,该如何执行呢?有以下 3 种方法:
  1. 把需要在后台执行的命令加入 /etc/rc.local 文件,让系统在启动时执行这个后台程序。这种方法的问题是,服务器是不能随便重启的,如果有临时后台任务,就不能执行了。
  2. 使用系统定时任务,让系统在指定的时间执行某个后台命令。这样放入后台的命令与终端无关,是不依赖登录终端的。
  3. 使用 <font style="color:rgb(68, 68, 68);">nohup</font> 命令。
nohup 命令的作用就是让后台工作在离开操作终端时,也能够正确地在后台执行
  1. [root@chen ~]# nohup [命令] &
  2. # 注意,这里的‘&’表示此命令会在终端后台工作;反之,如果没有‘&’,则表示此命令会在终端前台工作。

定时任务

Linux at命令详解:定时执行任务