Linux学习笔记-11. Linux系统管理

11.1. 进程管理

11.1.1. 进程查看

 

1、进程简介

 

进程是正在执行的一个程序或命令,每个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。

 

 

2、进程管理的作用

 

1)   判断服务器健康状态

2)   查看系统中所有进程

3)   杀死进程

 

 

杀死进程工作,一般不要用,优先使用正常停止程序,例如:service httpd stop,如果正常停止不了,才会用进程杀死。

 

 

3、查看系统的所有进程

 

查看系统中所有进程,使用BSD操作系统格式

ps aux

 

查看系统中所有进程,使用Linux标准命令格式

ps -le

 

 

[root@localhost ~]# ps aux

USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

root          1  0.0  0.7 128164  6828 ?        Ss   14:46   0:01 /usr/lib/systemd/systemd -

root          2  0.0  0.0      0     0 ?        S    14:46   0:00 [kthreadd]

root          3  0.0  0.0      0     0 ?        S    14:46   0:00 [ksoftirqd/0]

root          5  0.0  0.0      0     0 ?        S<   14:46   0:00 [kworker/0:0H]

root          6  0.0  0.0      0     0 ?        S    14:46   0:00 [kworker/u256:0]

root          7  0.0  0.0      0     0 ?        S    14:46   0:00 [migration/0]

root          8  0.0  0.0      0     0 ?        S    14:46   0:00 [rcu_bh]

root          9  0.0  0.0      0     0 ?        R    14:46   0:00 [rcu_sched]

root         10  0.0  0.0      0     0 ?        S    14:46   0:00 [watchdog/0]

 

 

每列作用:

列名

功能简介

USER

该进程是哪个用户产生的

PID

进程ID号

%CPU

该进程占用CPU资源的百分比,占用越高,进程越耗费资源。

%MEM

该进程占用的物理内存的百分比,占用越高,进程越耗费内存资源

VSZ

该进程占用虚拟内存的大小,单位KB

RSS

进程占用实际物理内存的大小,单位KB

TTY

进程是在哪个终端运行的,其中tty1-tty7是本地控制台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0-255代表虚拟终端。

STAT

进程状态。常用的状态有:R支持,S睡眠,T停止,s包含子进程,+位于后台

START

进程的启动时间

TIME

进程占用CPU的运算时间,注意不是系统时间

COMMAND

产生此进程的命令名

 

 

4、查看系统健康状态

 

top [选项]

 

-d 秒数:指定top命令每隔几秒更新。默认是3秒。

 

在top命令的交互模式当中可以执行的命令:

?或h:显示交互模式的帮助

P:以CPU使用率排序,默认就是此项

M:以内存的使用率排序

N:以PID排序

q:退出top

 

 

一般top命令查看的是红色的3个选项的数据:

[root@localhost ~]# top

top - 21:44:35 up  6:57,  1 user,  load average: 0.00, 0.01, 0.05

Tasks:  89 total,   1 running,  88 sleeping,   0 stopped,   0 zombie

%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

KiB Mem :   933808 total,   159172 free,   545108 used,   229528 buff/cache

KiB Swap:  5242872 total,  5242872 free,        0 used.   210180 avail Mem

 

RT    RES    SHR S %CPU %MEM     TIME+ COMMAND

     1 root      20   0  128164   6828   4060 S  0.0  0.7   0:01.26 systemd

     2 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kthreadd

     3 root      20   0       0      0      0 S  0.0  0.0   0:00.05 ksoftirqd/0

     5 root       0 -20       0      0      0 S  0.0  0.0   0:00.00 kworker/0:0H

     6 root      20   0       0      0      0 S  0.0  0.0   0:00.00 kworker/u256:0

     7 root      rt   0       0

 

 

第一行每项显示的含义:

列名

功能简介

top - 21:44:35

系统当前时间

up  6:57

系统的运行时间,已经运行6个小时57分

1 user

当前登录了1个用户

load average: 0.00, 0.01, 0.05

系统在1分钟,5分钟,15分钟的平均负载。一般认为小于1时,负载较小,大于1时,系统已经超出负荷。

 

第二行每项显示的含义:进程信息

列名

功能简介

Tasks:  89 total

系统中进程总数

1 running

正在支持的进程数

88 sleeping

睡眠的进程数

0 stopped

正在停止的进程

0 zombie

僵尸进程。如果不是0,需要手工检查僵尸进程

 

第三行每项显示的含义:CPU信息

列名

功能简介

%Cpu(s):  0.0 us

用户模式占用的CPU百分比

0.0 sy

系统模式占用的CPU百分比

0.0 ni

改变过优先级的用户进程占用的CPU百分比

100.0 id

空闲CPU的百分比

0.0 wa

等待输入/输出的进程占用CPU百分比

0.0 hi

硬中断请求服务占用的CPU百分比

0.0 si

软中断请求服务占用的CPU百分比

0.0 st

st,Steal time,虚拟时间百分比。就是当有虚拟机时,虚拟CPU等待实际CPU的时间百分比。

 

第四行每项显示的含义: 内存信息

列名

功能简介

KiB Mem :   933808 total

物理内存的问题:单位KB

159172 free

空闲的物理内存数量

545108 used

已经使用的物理内存数量

229528 buff/cache

做为缓冲的内存数量

 

第五行每项显示的含义:交换swap分区的信息

列名

功能简介

KiB Swap:  5242872 total

交换分区(虚拟内存)的总大小

5242872 free

空闲交换分区的大小

0 used

已经使用的交换分区大小

210180 avail Mem

做为缓冲的交换分区的大小

 

 

5、查看进程树

 

pstree [选项]

 

-p 显示进程的PID

-u 显示进程的所属用户

 

 

[root@localhost ~]# pstree

systemd─┬─NetworkManager───2*[{NetworkManager}]

        ├─agetty

        ├─auditd───{auditd}

        ├─crond

        ├─dbus-daemon───{dbus-daemon}

        ├─firewalld───{firewalld}

        ├─hypervkvpd

        ├─hypervvssd

        ├─lvmetad

        ├─master─┬─pickup

        │        └─qmgr

        ├─polkitd───5*[{polkitd}]

        ├─rsyslogd───2*[{rsyslogd}]

        ├─sshd───sshd───bash───pstree

        ├─systemd-journal

        ├─systemd-logind

        ├─systemd-udevd

        ├─tuned───4*[{tuned}]

        └─xinetd

[root@localhost ~]#

 

 

如下5表示的该进程下有5个子进程,可能通过-p选项,查看更详细的子进程。

        ├─polkitd───5*[{polkitd}]

 

 

11.1.2. 终止进程

 

1、kill命令

 

查看可用的进程信号

kill -l

 

kill主要是按照进程PID来杀死进程

 

[root@localhost ~]# kill -l

 1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP

 6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1

11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM

16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP

21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ

26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR

31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3

38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8

43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13

48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12

53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7

58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2

63) SIGRTMAX-1  64) SIGRTMAX

 

 

常用信号代表的含义:

信号

名称

说明

1

SIGHUP

该信号让进各立即关闭,然后重新读取配置文件之后重启。

2

SIGINT

程序终止信号,用于终止前台进程。相当于输出ctrl+c快捷键

8

SIGFPE

在 发生致使算术运算错误时发出,不仅包括浮点运算错误,还包括 溢出及除数为0等其它所有的算术运算错误。

9

SIGKILL

用来立即结束程序的运行,本信号不能被阻塞,处理和忽略。一般用于强制终止进程

14

SIGALRM

时钟定时信号,计算的是实际的时间或时钟时间,alarm函数使用该信号。

15

SIGTERM

正常结束进程的信号,kill命令的默认信号。有时如果进程已经发生问题,这个信号是无法正常终止进程的, 我们才会尝试SIGKILL信号,就是信号9

18

SIGCONT

该信号可以让暂停的进程恢复执行,本信号不能被阻断

19

SIGSTOP

该信号可以暂停前台进程,相当于输入ctrl+z快捷键。本信号不能被阻断。

 

 

2、killall命令

 

 

按照进程名杀死进程:

 

killall [选项] [信号] 进程名

 

-i 交互式,询问是否要杀死某个进程

-I 忽略进程名的大小写

 

 

3、pkill命令

 

按照进程名杀死进程:

 

pkill [选项] [信号] 进程名

 

-t 终端号:按照终端号踢出用户

 

 

pkill与killall非常相似,主要多了个按终端号踢出用户,要踢出某个用户可以使用pkill

 

w命令可以查看登录用户

[root@localhost ~]# w

 22:24:52 up  7:38,  2 users,  load average: 0.00, 0.01, 0.05

USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT

root     pts/0    192.168.1.101    22:24    3.00s  0.01s  0.01s w

test     pts/1    192.168.1.101    22:24   13.00s  0.00s  0.00s –bash

 

 

强制踢出用户test用户:

[root@localhost ~]# pkill -9 -t pts/1

[root@localhost ~]#

 

 11.2. 工作管理

 

 

1、把进程放入后台

 

第1种方法:命令的最后加&号,表示放入后台执行。

tar –zcf etc.tar.gz /etc &

 

第2种方法:在命令的执行过程中,按下ctrl+z键

 

 

 

2、查看后台的工作

jobs [-l]

 

-l 显示工作的PID

 

+号代表最近一个放入后台的工作,也是工作恢复时,默认恢复的工作。

-号代表倒数第2个放入后台的工作

 

 

[root@localhost ~]# jobs

[1]   Stopped                 top

[2]-  Stopped                 top

[3]+  Stopped                 top

[root@localhost ~]# jobs -l

[1]   2109 Stopped (signal)        top

[2]-  2110 Stopped (signal)        top

[3]+  2111 Stopped (signal)        top

[root@localhost ~]#

 

 

 

3、将后台 暂停的工作恢复到前台执行

 

fg %工作号

 

%工作号:%号可以省略,但是注意工作号和PID的区别

 

 

 

 

 

4、把后台暂停的工作恢复到后台执行

 

bg %工作号

 

 

后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行

 

 

[root@localhost ~]# jobs -l

[2]-  2110 Stopped (signal)        top

[3]+  2111 Stopped (signal)        top

[root@localhost ~]# bg 2

[2]- top &

jobst@localhost ~]#

jobs

[2]+  Stopped                 top

[3]-  Stopped                 top

[root@localhost ~]#

 

工作号3,恢复到后台执行后,状态还是Stopped的,因为top命令和前台有交互,就算恢复到后台执行,没有前台交互,就算运行没有什么意义。

 

类似的命令例如:vi

 

 

11.3. 系统资源查看

 

 

1、vmstat命令监控系统资源

 

vmstat [刷新延时 刷新次数]

 

 

监听3次,每次间隔1秒:

[root@localhost ~]# vmstat 1 3

procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st

 2  0      0 147012   2124 233764    0    0     7     2   19   21  0  0 100  0  0

 0  0      0 147012   2124 233796    0    0     0     0   20   24  0  0 100  0  0

 0  0      0 147012   2124 233796    0    0     0     0   19   14  0  0 100  0  0

[root@localhost ~]#

 

这个命令显示的内容,和top命令的差不多

 

 

2、dmesg开机时内核检测信息

 

 

启动时检查到的CPU信息:

[root@localhost ~]# dmesg|grep CPU

[    0.000000] smpboot: Allowing 128 CPUs, 127 hotplug CPUs

[    0.000000] setup_percpu: NR_CPUS:5120 nr_cpumask_bits:128 nr_cpu_ids:128 nr_node_ids:1

[    0.000000] PERCPU: Embedded 33 pages/cpu @ffff88003c600000 s97048 r8192 d29928 u262144

[    0.000000] SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=128, Nodes=1

[    0.000000]  RCU restricting CPUs from NR_CPUS=5120 to nr_cpu_ids=128.

[    0.007294] CPU: Physical Processor ID: 0

[    0.008568] mce: CPU supports 1 MCE banks

[    0.057000] smpboot: CPU0: Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz (fam: 06, model: 5e, s                      tepping: 03)

[    0.057000] Performance Events: unsupported p6 CPU model 94 no PMU driver, software event                      s only.

[    0.057358] Brought up 1 CPUs

[    0.485889] microcode: CPU0 sig=0x506e3, pf=0x1, revision=0xffffffff

[    0.496722] acpi LNXCPU:6e: hash matches

[root@localhost ~]#

 

 

3、free查看内存使用状态

 

 

free [选项]

 

-b:以字节单位显示

-k:以KB单位显示,默认选项

-m:以MB单位显示

-g:以GB单位显示

 

 

[root@localhost ~]# free -m

              total        used        free      shared  buff/cache   available

Mem:            911         537         143           6         230         197

Swap:          5119           0        5119

[root@localhost ~]#

 

 

缓存和缓冲的区别:

简单来说缓存cache是用来回事数据从硬盘 中读取的,而缓冲 buffer是用来加速数据写入硬盘的。

 

 

4、查看CPU信息

 

命令:cat /proc/cpuinfo

 

[root@localhost ~]# cat /proc/cpuinfo

processor       : 0

vendor_id       : GenuineIntel

cpu family      : 6

model           : 94

model name      : Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz

stepping        : 3

microcode       : 0xffffffff

cpu MHz         : 3407.975

cache size      : 8192 KB

physical id     : 0

siblings        : 1

core id         : 0

cpu cores       : 1

apicid          : 0

initial apicid  : 0

fpu             : yes

fpu_exception   : yes

cpuid level     : 21

wp              : yes

flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl xtopology eagerfpu pni pclmulqdq ssse3 fma cx16 sse4_1 sse4_2 movbe popcnt aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch fsgsbase bmi1 hle avx2 smep bmi2 erms rtm mpx rdseed adx smap clflushopt xsaveopt xsavec xgetbv1

bogomips        : 6815.95

clflush size    : 64

cache_alignment : 64

address sizes   : 39 bits physical, 48 bits virtual

power management:

 

 

5、uptime命令

 

显示系统启动时间和平均负载,也就是top命令的第一行。w命令也可以看到这个数据。

 

[root@localhost ~]# uptime

 22:56:43 up  8:10,  1 user,  load average: 0.00, 0.01, 0.05

[root@localhost ~]#

 

 

6、查看系统与内核相关信息

 

uname [选项]

 

-a 查看系统所有的相关信息

-r 查看内核版本

-s 查看内核名称

 

 

[root@localhost ~]# uname -a

Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

[root@localhost ~]# uname -r

3.10.0-693.el7.x86_64

[root@localhost ~]# uname -s

Linux

[root@localhost ~]#

 

 

7、判断当前系统的位数

 

Linux中没有直接命令可以判断,可以通过其他方法判断

 

file命令可以查看文件类型的。可以查看一个外部命令,顺便带出位数。

 

[root@localhost ~]# file /bin/ls

/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=3d705971a4c4544545cb78fd890d27bf792af6d4, stripped

[root@localhost ~]#

 

 

8、查看当前Linux系统的发行版本

 

命令:

lsb_release -a

 

 

使用以上命令前需要先安装redhat-lsb

 

[root@localhost ~]# yum -y install redhat-lsb

 

貌似安装了155个rpm。。。。。。

 

 

[root@localhost ~]# lsb_release -a

LSB Version:    :core-4.1-amd64:core-4.1-noarch:cxx-4.1-amd64:cxx-4.1-noarch:desktop-4.1-amd64:desktop-4.1-noarch:languages-4.1-amd64:languages-4.1-noarch:printing-4.1-amd64:printing-4.1-noarch

Distributor ID: CentOS

Description:    CentOS Linux release 7.4.1708 (Core)

Release:        7.4.1708

Codename:       Core

[root@localhost ~]#

 

 

 

9、列出进程打开或使用的文件信息

 

lsof [选项]

 

-c 字符串:只列出以字符串开头的进程打开的文件

-u 用户名:只列出某个用户的进程打开的文件

-p PID:列出某个PID的进程打开的文件

 

 

使用命令之前要先安装

yum install lsof

 

 

[root@localhost ~]# lsof -c lsof

COMMAND  PID USER   FD   TYPE DEVICE  SIZE/OFF     NODE NAME

lsof    2385 root  cwd    DIR  253,0       239 33575009 /root

lsof    2385 root  rtd    DIR  253,0       224       96 /

lsof    2385 root  txt    REG  253,0    154072   765512 /usr/sbin/lsof

...

lsof    2386 root    7w  FIFO    0,8       0t0    31003 pipe

[root@localhost ~]#

 

 

11.4. 系统定时任务

 

 

1、crond服务管理与访问控制

 

service crond restart

chkconfig crond on

 

以上命令不需要执行,crond默认是自动启动的。

 

 

2、用户的crontab设置

 

crontab [选项]

 

-e:编辑crontab定时任务

-l:查询crontab定时任务

-r:删除当前用户所有的crontab任务

 

 

 

crontab –e进入编辑模式后,按标准模式编辑定时任务就可以了

标准格式:

* * * * * command

 

五个星号的含义:

项目

含义

范围

第1个*

1小时当中的第几分钟

0-59

第2个*

1天当中的第几小时

0-23

第3个*

1个月当中的第几天

1-31

第4个*

1年当中的第几月

1-12

第5个*

1周当中的星期几

0-7,0和7都代表星期天

 

 

特殊符号的含义:

特殊符号

含义

*

代表任何时间。

例如:第1个*号,代表1小时中的第1分钟都执行1次的意思。

,

代表不连续的时间。

例如:“0 8,12,16 * * * command”,代表在每天8点0分,12点0分,16点0分都执行1次命令。

-

代表连续的时间范围。

例如:“0 5 * * 1-6 command”,代表在周1到周6的凌晨5点0分执行命令。

*/n

代表每隔多久执行1次。

例如:“*/10 * * * * command”,代表每隔10分钟就执行一次命令。

 

 

例子:

crontab表达式

含义

45 22 * * * command

在22点45分执行命令

0 17 * * 1 command

在每周1的17点0分执行命令

0 5 1,15 * * command

在每月1号 和15号凌晨5点0分执行命令

40 4 * * 1-5 command

在每周1到周5的凌晨4点40分执行命令

*/10 4 * * * command

在每天的凌晨4点,每隔10分钟执行一次

0 0 1,15 * 1 command

每月1号和15号,每周1的0点0分都会执行命令。

注意:星期几和几号最好不要同时出现,因为他们定义的都是天。非常容易让管理员混乱。

 

 

每隔10分钟,插入1条日志记录:

*/10 * * * * echo "$(date) crontab task log." >> /tmp/crontab.task.log

 

 

这个定时任务并不一定绝对按照时间去执行,如果计算机太忙,可能会错过这个时间段再执行。

 

 

猜你喜欢

转载自wlcacc.iteye.com/blog/2424056