Linux运维常用命令

以下为Linux开发中常用的命令。

筛选文本并查看指定上下行数

常用于筛选日志,并查看上下文

grep [选项] ‘模式’ [文件]

选项:
    -A  后几行
    -B  前几行
    -C  前后几行

模式:
    待筛选文本

文件:
    待筛选源文件

举例

1
2
3
grep -A 20 'cat' info.log # 显示info.log及后20行
grep -B 20 'cat' info.log # 显示info.log及前20行
grep -C 20 'cat' info.log # 显示info.log文件里匹配cat字串行以及上下20行

zcat

用于不真正解压缩文件,就能显示压缩包中文件的内容的场合。

1
zcat log.gz |grep '000'

查看linux内存使用情况

命令

1
free -m

结果

1
2
3
             total        used        free      shared  buff/cache   available
Mem: 64083 42542 6321 210 15219 20451
Swap: 0 0 0

  • Mem:内存的使用情况总览表
  • totel:机器总的物理内存 单位为:M
  • used:用掉的内存
  • free:空闲的物理内存
  • shared:多个进程共享的内存总和,当前废弃不用
  • buffers:缓存内存数
  • cached:缓存内存数
    注:
  • 物理内存(totel)=系统看到的用掉的内存(used)+系统看到空闲的内存(free)
  • 程序预留的内存=buffers+cached
  • buffer是即将要写入磁盘的,而cache是被从磁盘中读出来的

进程查看器

htop

1
yum install htop

界面划分成了四个区域,其中:

  • 上左区:显示了CPU、物理内存和交换分区的信息;
  • 上右区:显示了任务数量、平均负载和连接运行时间等信息;平均负载表示的是过去的5分钟、10分钟和15分钟系统的平均负载;
  • 进程区域:显示出当前系统中的所有进程;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    PID:进程标志号,是非零正整数
    USER:进程所有者的用户名
    PR:进程的优先级别
    NI:进程的优先级别数值
    VIRT:进程占用的虚拟内存值
    RES:进程占用的物理内存值
    SHR:进程使用的共享内存值
    S:进程的状态,其中S表示休眠,R表示正在运行,Z表示僵死状态,N表示该进程优先值是负数
    %CPU:该进程占用的CPU使用率
    %MEM:该进程占用的物理内存和总内存的百分比
    TIME+:该进程启动后占用的总的CPU时间
    COMMAND:进程启动的启动命令名称
  • 操作提示区:显示了当前界面中F1-F10功能键中定义的快捷功能。

    压缩解压

    .gz

    1
    2
    3
    解压1:gunzip FileName.gz
    解压2:gzip -d FileName.gz
    压缩:gzip FileName

tar 压缩多个包为1个

1
tar czvf xx.tar xx-2019-10-1*.log.gz

查看系统负载

CPU的负载情况(load average),uptime、w和top等命令都可以看到load average指标,从左至右三个数字分别表示1分钟、5分钟、15分钟的load average。

Load Average指的是在一段时间内CPU正在处理以及等待CPU处理的进程数之和的统计信息,也就是CPU使用队列的长度的统计信息。

Load Average反映了CPU的使用情况和申请情况.

系统的load是指正在运行running one和准备好运行runnable one的进程的总数。比如现在系统有2个正在运行的进程,3个可运行进程,那么系统的load就是5。load average就是一定时间内的load数量。

load average计算:

1
2
3
4
static unsigned long count_active_tasks(void)
{
return (nr_running() + nr_uninterruptible()) * FIXED_1;
}

count_active_tasks()返回当前的活跃进程数,其中活跃进程包括:1)当前正在运行的进程(nr_running);2)不可中断的sleeping进程(如正在执行IO操作的被挂起进程)。

uptime

1
16:36  up 3 days,  8:08, 4 users, load averages: 2.56 2.50 2.36

单核满载是 1,有 n 核满载是 n。两个相同的系统,一个负载是 3,一个负载是 6,如果只看 CPU 占用率,大家都是 100% ,能看出哪个系统当前的压力大吗?高负载时一般 CPU 都是 100%,要了解系统的压力,负载指标就比 CPU百分比更有意义。

Load Average所包含的信息不是CPU的使用率状况。多任务环境下,系统分配时间片以后,是否使用完全使用时间片取决于进程,因此完全可能出现低CPU利用率而高Load Average的情况

load是从/proc/loadavg中读取的。

1
2
cat /proc/loadavg
2.18 2.49 2.50 3/3491 15317

每个值的含义依次为:
lavg_1 (2.18) 1-分钟平均负载
lavg_5 (2.49) 5-分钟平均负载
lavg_15(2.50) 15-分钟平均负载
nr_running (3) 在采样时刻,运行队列的任务的数目,与/proc/stat的procs_running表示相同意思
nr_threads (3491) 在采样时刻,系统中活跃的任务的个数(不包括运行已经结束的任务)
last_pid(15317) 最大的pid值,包括轻量级进程,即线程。
假设当前有2个CPU,则每个CPU的当前任务数为2.18/2=1.09

所以“Load值<=CPU核数”,这是最理想的状态,没有任何竞争,一个任务分配一个核。一般认为负载为0.7是警戒线。

top

1
2
3
4
5
6
7
8
9
10
11
12
top - 01:06:48 up  1:22,  1 user,  load average: 0.06, 0.60,  0.48
Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
Swap: 192772k total, 0k used, 192772k free, 123988k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
1
2
3
4
5
6
7
8
9
统计信息区前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime  命令的执行结果。其内容如下:

01:06:48 当前时间

up 1:22 系统运行时间,格式为时:分

1 user 当前登录用户数

load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:

Tasks: 29 total 进程总数

1 running 正在运行的进程数

28 sleeping 睡眠的进程数

0 stopped 停止的进程数

0 zombie 僵尸进程数

Cpu(s): 0.3% us 用户空间占用CPU百分比

1.0% sy 内核空间占用CPU百分比

0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比

98.7% id 空闲CPU百分比

0.0% wa 等待输入输出的CPU时间百分比
1
2
3
4
5
6
7
8
9
最后两行为内存信息。内容如下:  
Mem: 191272k total 物理内存总量
173656k used 使用的物理内存总量
17616k free 空闲内存总量
22052k buffers 用作内核缓存的内存量
Swap: 192772k total 交换区总量
0k used 使用的交换区总量
192772k free 空闲交换区总量
123988k cached 缓冲的交换区总量。
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
26
27
28
29
30
31
32
33
进程信息区统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
列名 含义
PID 进程id
PPID 父进程id
RUSER Real user name
UID 进程所有者的用户id
USER 进程所有者的用户名
GROUP 进程所有者的组名
TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
PR 优先级
NI nice值。负值表示高优先级,正值表示低优先级
P 最后使用的CPU,仅在多CPU环境下有意义
%CPU 上次更新到现在的CPU时间占用百分比
TIME 进程使用的CPU时间总计,单位秒
TIME+ 进程使用的CPU时间总计,单位1/100秒
%MEM 进程使用的物理内存百分比
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
CODE 可执行代码占用的物理内存大小,单位kb
DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
SHR 共享内存大小,单位kb
nFLT 页面错误次数
nDRT 最后一次写入到现在,被修改过的页面数。
S 进程状态。
D=不可中断的睡眠状态
R=运行
S=睡眠
T=跟踪/停止
Z=僵尸进程
COMMAND 命令名/命令行
WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
Flags 任务标志,参考 sched.h
------ 本文结束------

本文标题:Linux运维常用命令

文章作者:Perkins

发布时间:2019年04月22日

原始链接:https://perkins4j2.github.io/posts/48230/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。