备份压缩相关命令

Linux 命令学习(2)-文件管理相关命令

@(笔记-初稿)[Linux]

[TOC]

记录我对于Linux的学习,系统相关的命令:

ps:“~” 表示为 home 目录,“.” 则是表示目前所在的目录,“…” 则表示当前目录的上一层目录
-h 用人类可读的格式展示(G(千兆字节),M(兆字节),K(千字节)),大部分命令有这个参数

uptime

uptime 打印系统总共运行了多长时间和系统的平均负载
用法: uptime [选项]
选项:

  1. -p, --pretty show uptime in pretty format
  2. -h, --help 显示此帮助然后离开
  3. -s, --since system up since
  4. -V, --version 显示程序版本然后离开
1
2
#uptime
22:15:57 up 3 days, 7:34, 2 users, load average: 1.39, 1.73, 1.72
1
2
3
4
22:15:57            //系统当前时间
up 3 days, 7:34 //主机已运行时间
2 user //用户连接数,是总连接数而不是用户数
load average: 1.39, 1.73, 1.72 // 系统平均负载,统计最近1,5,15分钟的系统平均负载

ps:系统平均负载是指运行时间内系统处于可运行与不可中断状态(比如等待disk IO)的平均进程数。

free

free 用于显示内存状态,包括物理内存、交换内存(swap)和内核缓冲区内存
用法: free [选项]
选项:

  1. -b  以Byte为单位显示内存使用情况。
  2. -k  以KB为单位显示内存使用情况。
  3. -m  以MB为单位显示内存使用情况。
  4. -h  以合适的单位显示内存使用情况,最大为三位数,自动计算对应的单位值。
  5. o  不显示缓冲区调节列。
  6. -s<间隔秒数>  持续观察内存使用状况。
  7. -t  显示内存总和列。
  8. -V  显示版本信息。
1
2
3
4
5
6
7
8
9
10
11
#free
total used free shared buffers cached
Mem: 2054216 1917316 136900 260 40320 125036
-/+ buffers/cache: 1751960 302256
Swap: 0 0 0
#free -h #用合适的单位显示使用情况
total used free shared buffers cached
Mem: 2.0G 1.8G 133M 260K 39M 122M
-/+ buffers/cache: 1.7G 295M
Swap: 0B 0B 0B

1
2
3
4
5
6
7
8
9
10
11
12
Mem 一行指的是内存的使用情况
-/+ buffers/cache
-/buffers/cache 的内存数,相当于第一行的 used-buffers-cached
+/buffers/cache 的内存数,相当于第一行的 free+buffers+cached
Swap 行是交换空间的使用情况

total 总内存数
used 已经使用的内存数
free 空闲的内存数
shared 多个进程共享的内存总数
buffers 缓冲内存数
cached 缓存内存数

不过在新的内核中,free命令的输出发生了变化,比如:

1
2
3
4
#free
total used free shared buff/cache available
Mem: 1016060 542592 102148 29912 371320 240232
Swap: 0 0 0
1
2
3
4
5
6
7
8
9
10
没有了-/+ buffers/cache,并且buff/cache列合并了
Mem 一行指的是内存的使用情况
Swap 行是交换空间的使用情况

total 总内存数
used 已经使用的内存数
free 空闲的内存数
shared 多个进程共享的内存总数
buff/cache 缓冲内存数
available 还可以被应用程序使用的物理内存大小

vmstat

vmstat 显示虚拟内存状态(“Virtual Memory Statistics”)的统计信息,但是它可以报告关于进程、内存、I/O等系统整体运行状态
用法: vmstat [选项]

  1. -a 显示活动内页;
  2. -f 显示启动后创建的进程总数;
  3. -m 显示slab信息;
  4. -n 头信息仅显示一次;
  5. -s 以表格方式显示事件计数器和内存状态;
  6. -d 报告磁盘状态;
  7. -p 显示指定的硬盘分区状态;
  8. -S 输出信息的单位。
  9. -t 在每行增加时间辍
  10. -w 宽频显示
1
2
3
4
vmstat
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 0 71536 12192 229944 0 0 5 3 6 7 0 0 99 0 0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
在vm模式中
procss
r: 运行队列中进程数量
b: 处于不可中断等待(等待IO)的进程数量
memory
swpd: 使用虚拟内存大小
free: 空闲物理内存大小
buff: 缓冲的内存大小
cache: 用作缓存的内存大小
swap
si: 即sAmount of memory swapped in from disk (/s),每秒从交换区写到内存的大小,由磁盘调入内存
so: 即Amount of memory swapped to disk (/s),每秒写入交换区的内存大小,由内存调入磁盘
io
si: Blocks received from a block device (blocks/s).每秒读取的块数
so: Blocks sent to a block device (blocks/s). 每秒写入的块数
system
in: 每秒中断数,包括时钟中断
cs: 每秒上下文切换数
cpu
us: 用户进程执行时间百分比(user time)
sy: 内核系统进程执行时间百分比(system time)
id: 空闲时间百分比
wa: IO等待时间百分比
st: Time stolen from a virtual machine

pidstat

pidstat 是一个常用的进程性能分析工具,用来实时查看进程的 CPU、内存、I/O 以及上下文切换等性能指标,还可以看线程的信息。
用法: pidstat [选项]
常用选项:

  1. -d 展示磁盘 I/O 统计数据
  2. -R 报告实时优先级和调度策略信息
  3. -r 显示内存使用情况
  4. -s 显示栈相关信息
  5. -t 查看线程相关的信息,默认是进程的;与其他命令结合可以查看线程相关的信息
  6. -u 各个进程的cpu使用统计 默认参数
  7. -w 表示查看上下文切换情况
  8. -p 指定进程id

cpu 统计信息

1
2
3
4
pidstat -p 1 #显示进程1的 cpu 统计信息
22:55:16 UID PID %usr %system %guest %wait %CPU CPU Command
22:55:16 0 1 0.00 0.00 0.00 0.00 0.00 0 systemd

  1. %usr 用户空间的cpu使用率
  2. system 内核空间的cpu使用率
  3. %guest 进程在虚拟机占用cpu的百分比
  4. %wait 等待上下文切换的cpu使用率
  5. %CPU 总的cpu使用率
  6. CPU 处理进程的cpu编号
  7. Command 当前进程对应的命令

磁盘 I/O 统计数据

1
2
3
4
pidstat -d -p 1
22:56:16 UID PID kB_rd/s kB_wr/s kB_ccwr/s iodelay Command
22:56:16 0 1 -1.00 -1.00 -1.00 1307 systemd

  1. kB_rd/s 每秒从磁盘读取的KB
  2. kB_wr/s 每秒写入磁盘KB
  3. kB_ccwr/s 任务取消的写入磁盘的KB。当任务截断脏的pagecache的时候会发生
  4. iodelay 表示 I/O 的延迟(单位是时钟周期)
  5. Command 当前进程对应的命令

cpu 上下文切换

vmstat只能查看总的cpu上下文切换,pidstat可以查看每个进程的上下文切换

1
2
3
4
pidstat -w -p 1
22:06:16 UID PID cswch/s nvcswch/s Command
22:06:16 0 1 0.29 0.00 systemd

  1. cswch/s 每秒自愿上下文切换(voluntary context switches)的次数
  2. nvcswch/s 每秒非自愿上下文切换(non voluntary context switches)的次数

ps:

  1. 自愿上下文切换,是指进程无法获取所需资源,导致的上下文切换。比如说, I/O、内存等系统资源不足时,就会发生自愿上下文切换
  2. 非自愿上下文切换,则是指进程由于时间片已到等原因,被系统强制调度,进而发生的上下文切换。比如说,大量进程都在争抢 CPU 时,就容易发生非自愿上下文切换

内存信息

1
2
3
4
5
pidstat -r -p 1

22:16:16 UID PID minflt/s majflt/s VSZ RSS %MEM Command
22:16:16 0 1 0.06 0.00 176644 8540 0.02 systemd

  1. minflt/s 任务每秒发生的次要错误,不需要从磁盘中加载页
  2. majflt/s 务每秒发生的主要错误,需要从磁盘中加载页
  3. VSZ 虚拟地址大小,虚拟内存的使用KB
  4. RSS 常驻集合大小,非交换区五里内存使用KB
  5. %MEM 使用的物理内存占比

查看线程相关信息

以查看 cpu 上下文切换为例,查看线程相关信息

1
2
3
4
5
6
7
8
9
10
pidstat -wt -p 541859

22:20:16 UID TGID TID cswch/s nvcswch/s Command
22:20:16 1000 541859 - 0.09 0.01 kate
22:20:16 1000 - 541859 0.09 0.01 |__kate
22:20:16 1000 - 541861 0.09 0.00 |__QXcbEventQueue
22:20:16 1000 - 541862 0.00 0.00 |__gmain
22:20:16 1000 - 541863 0.00 0.00 |__dconf worker
22:20:16 1000 - 541864 0.00 0.00 |__gdbus
22:20:16 1000 - 541865 0.00 0.00 |__QDBusConnection
  1. TGID 线程组ID,也就是线程组leader的进程ID,等于pid
  2. TID 线程ID

ps: pidstat 只能看到进程(也就是主线程)的信息,如果要仔细分析,还需要查看线程的相关信息。

top

top 用来监控Linux系统状况,比如cpu、内存的使用等
用法: top [选项]
常用选项:
选项:

  1. -d 秒数:指定 top 命令每隔几秒更新。默认是 3 秒;
  2. -b 使用批处理模式输出。一般和"-n"选项合用,用于把 top 命令重定向到文件中;
  3. -n 次数:指定 top 命令执行的次数。一般和"-"选项合用;
  4. -p 进程PID:仅查看指定 ID 的进程;
  5. -s 使 top 命令在安全模式中运行,避免在交互模式中出现错误;
  6. -u 用户名:只监听某个用户的进程;

在 top 命令的显示窗口中,还可以使用如下按键,进行一下交互操作:

  1. ? 或 h:显示交互模式的帮助;
  2. P:按照 CPU 的使用率排序,默认就是此选项;
  3. M:按照内存的使用率排序;
  4. N:按照 PID 排序;
  5. T:按照 CPU 的累积运算时间排序,也就是按照 TIME+ 项排序;
  6. k:按照 PID 给予某个进程一个信号。一般用于中止某个进程,信号 9 是强制中止的信号;
  7. r:按照 PID 给某个进程重设优先级(Nice)值;
  8. q:退出 top 命令;

以下时top命令的输出:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
top - 20:42:01 up 4 days,  3:52,  3 users,  load average: 0.93, 1.26, 1.45
任务: 315 total, 1 running, 312 sleeping, 0 stopped, 2 zombie
%Cpu(s): 19.0 us, 5.6 sy, 0.0 ni, 72.8 id, 1.5 wa, 0.9 hi, 0.2 si, 0.0 st
MiB Mem : 48128.1 total, 27592.0 free, 15048.8 used, 5487.2 buff/cache
MiB Swap: 32768.0 total, 30745.9 free, 2022.1 used. 31456.8 avail Mem

进程号 USER PR NI VIRT RES SHR %CPU %MEM TIME+ COMMAND
1127 shaozuo 20 0 4827944 443792 76156 S 39.2 0.9 475:58.44 gnome-shell
143752 shaozuo 20 0 9.8g 1.0g 267732 S 12.3 2.2 274:39.21 chromium
493576 root 20 0 0 0 0 D 10.6 0.0 2:45.31 kworker/u8:3+events_unbound
342062 shaozuo 20 0 688556 98992 50172 S 5.0 0.2 52:39.91 chromium
1008 shaozuo 20 0 747660 148920 99328 S 4.0 0.3 135:37.79 Xorg
1427 shaozuo 20 0 1797292 132428 27772 S 3.0 0.3 17:03.96 variety
207946 shaozuo 20 0 962768 50996 29456 S 3.0 0.1 0:22.57 konsole
143603 shaozuo 20 0 3336320 807332 99196 S 2.3 1.6 209:43.42 chromium
2158 shaozuo 20 0 880248 257032 122552 S 2.0 0.5 119:11.19 chrome
2238 shaozuo 20 0 4606540 69296 40880 S 1.7 0.1 56:23.75 chrome
9637 shaozuo 20 0 4022072 360788 120844 S 1.7 0.7 86:25.07 firefox
143671 shaozuo 20 0 4732044 68084 40912 S 1.7 0.1 44:32.86 chromium
1021 shaozuo 20 0 480672 35192 4304 S 1.3 0.1 6:02.04 ibus-daemon
407636 shaozuo 20 0 105.6g 4.0g 113604 S 1.3 8.6 34:00.23 java
449984 shaozuo 20 0 4843976 618216 36124 S 1.0 1.3 1:39.73 java
84939 shaozuo 20 0 3060240 147000 113136 S 0.7 0.3 3:44.31 wpsoffice
336077 shaozuo 20 0 1199716 388972 107140 S 0.7 0.8 58:05.96 electron
490714 shaozuo 20 0 81.9g 88344 71776 S 0.7 0.2 0:04.66 WebKitWebProces

1~5行显示的系统整体信息:

  1. 第一行显示内容与uptime一样
  2. 第二行为进程信息
    1. 任务: 315 total 系统中的进程总数
    2. 1 running 正在运行的进程数
    3. 312 sleeping 睡眠的进程数
    4. 0 stopped 正在停止的进程数
    5. 2 zombie 僵尸进程数。如果不是 0,则需要手工检查僵尸进程
  3. 第三行为 CPU 信息 19.0 us, 5.6 sy, 0.0 ni, 72.8 id, 1.5 wa, 0.9 hi, 0.2 si, 0.0 st
    1. %Cpu(s): 19.0 us 用户模式占用的 CPU 百分比
    2. 5.6 sy 系统模式占用的 CPU 百分比
    3. 0.0 ni 改变过优先级的用户进程占用的 CPU 百分比
    4. 72.8 id 空闲 CPU 占用的 CPU 百分比
    5. 1.5 wa 等待输入/输出的进程占用的 CPU 百分比
    6. 0.9 hi 硬中断请求服务占用的 CPU 百分比
    7. 0.2 si 软中断请求服务占用的 CPU 百分比
    8. 0.0 st st(steal time)意为虚拟时间百分比,就是当有虚拟机时,虚拟 CPU 等待实际 CPU 的时间百分比
  4. 第四行为物理内存信息 单位 MiB
    1. 48128.1 total 物理内存的总量
    2. 27592.0 free 空闲的物理内存数量
    3. 15048.8 used 已使用的物理内存数量
    4. 5487.2 buff/cache 作为缓冲的内存数量
  5. 第五行为交换分区(swap)信息 单位 MiB
    1. 32768.0 total 交换分区的总大小
    2. 30745.9 free 空闲交换分区的大小
    3. 2022.1 used. 已经使用的交换分区的大小
    4. 31456.8 avail Mem 可使用的交换分区大小

从第6行开始,显示的是系统中进程的信息:

  1. PID 进程的 ID。
  2. USER 该进程所属的用户。
  3. PR 优先级,数值越小优先级越高。
  4. NI 优先级,数值越小、优先级越高。
  5. VIRT 该进程使用的虚拟内存的大小,单位为 KB。
  6. RES 该进程使用的物理内存的大小,单位为 KB。
  7. SHR 共享内存大小,单位为 KB。
  8. S 进程状态。
  9. %CPU 该进程占用 CPU 的百分比。
  10. %MEM 该进程占用内存的百分比。
  11. TIME+ 该进程共占用的 CPU 时间。
  12. COMMAND 进程的命令名。

这只是默认显示的信息,top可显示的信息还有很多,可以使用快捷键切换。
还可以使用htop,可以说是top的增强版本。

ps

ps 显示了每个进程的资源使用情况
用法: ps [options]
不过因为历史原因,在不同的Linux系统还有Unix系统上,ps的命令语法各不相同,所以目前的ps命令融合了不同派系的使用方法,ps命令支持三种使用的语法格式

  1. UNIX 风格,选项可以组合在一起,并且选项前必须有“-”连字符
  2. BSD 风格,选项可以组合在一起,但是选项前不能有“-”连字符
  3. GNU 风格的长选项,选项前有两个“-”连字符

一般情况下可以混用,但是可能会有冲突
常用选项:

  1. -a 显示所有当前进程
  2. -e 显示系统所有进程
  3. -u 后接euid或name 显示指定用户的进程
  4. -l:长格式显示更加详细的信息
  5. -f 格式化信息列表
  6. a 在BSD风格下,显示自己的进程
  7. x 在BSD风格下,显示没有控制终端的进程
  8. u 显示进程的归属用户及内存的使用情

从上面的描述我们能看到 aux-aux 这两种参数组合的意义完全不同,在man文档中有如下描述:

1
2
3
4
Note that “ps -aux” is distinct from “ps aux”. The POSIX and UNIX standards require that “ps -aux” print all processes owned by a user named “x”, as well as printing all processes that would be selected by the -a option. If the user named “x” does not exist, this ps may interpret the command as “ps aux” instead and print a warning.
This behavior is intended to aid in transitioning old scripts and habits. It is fragile, subject to change, and thus should not be relied upon.
大致意思是:
请注意"ps -aux"不同于"ps aux"。POSIX和UNIX的标准要求"ps -aux"打印用户名为"x"的用户的所有进程,以及打印所有将由-a选项选择的过程。如果用户名为"x"不存在,ps的将会解释为"ps aux",而且会打印一个警告。这种行为是为了帮助转换旧脚本和习惯。它是脆弱的,即将更改,因此不应依赖。
1
2
3
4
5
ps #默认情况
PID TTY TIME CMD
1216874 pts/0 00:00:01 zsh
1280028 pts/0 00:00:00 ps

结果默认会显示4列信息。

PID: 运行着的命令(CMD)的进程编号
TTY: 命令所运行的位置(终端)
TIME: 运行着的该命令所占用的CPU处理时间
CMD: 该进程所运行的命令

1
2
3
4
5
6
7
8
9
10
#显示用户进程 标准风格:
ps -e
ps -ef
ps -eF
ps -ely

#显示用户进程 BSD 风格:
ps ax
ps axu