# 进程管理
成功的路上并不拥挤,因为坚持的人不多
1
本文作者:明凡
站长:明凡
# 文件属性 chattr【扩展】
文件权限管理之: 隐藏权限防止root误删除
2.1. 文件属性添加与查看
[root@linux-server ~]# touch file1 file2 file3
1.查看文件属性
[root@linux-server ~]# lsattr file1 file2 file3
---------------- file1
---------------- file2
---------------- file3
2.设置权限
[root@linux-server ~]# chattr +a file1 #不允许修改,只允许追加
[root@linux-server ~]# chattr +i file2 #不允许做任何操作
[root@linux-server ~]# chattr +A file3
[root@linux-server ~]# lsattr file1 file2 file3
-----a---------- file1
----i----------- file2
-------A-------- file3
i:即Immutable,系统不允许对这个文件进行任何的修改
a:即Append Only,系统只允许在这个文件之后追加数据,不允许任何覆盖或截断这个文件
A:即Atime,告诉系统不要修改对这个文件的最后访问时间
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
测试
[root@linux-server ~]# echo 111 > file1 #覆盖,只允许追加
-bash: file1: Operation not permitted
[root@linux-server ~]# rm -rf file1 #不能删除
rm: cannot remove ‘file1’: Operation not permitted
[root@linux-server ~]# echo 111 >> file1 #追加
[root@linux-server ~]# echo 111 > file2
-bash: file2: Permission denied
[root@linux-server ~]# echo 111 >> file2
-bash: file2: Permission denied
[root@linux-server ~]# rm -rf file2
rm: cannot remove ‘file2’: Operation not permitted
[root@linux-server ~]# mv file2 file4
mv: cannot move ‘file2’ to ‘file4’: Operation not permitted
取消权限
[root@linux-server ~]# chattr -a file1
[root@linux-server ~]# chattr -i file2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 进程管理
关于进程 process =======================================================
What is a process? 什么是进程
Process states 进程状态
1
2
2
# 1.1. 什么是进程?
进程是已启动的可执行程序的运行实例,是程序运行的过程, 动态的,有生命周期及运行状态。
1
程序: 二进制文件,静态 /bin/date, /usr/sbin/httpd,/usr/sbin/sshd, /usr/local/nginx/sbin/nginx
1
# 1.2 .查看进程 process
静态查看进程
[root@linux-server ~]# ps aux | less
参数解释:
ps :process nsapashot
a 只能查看系统里面运行的所有终端进程 all
u 显示进程拥有者
x 显示系统内所有进程
f 显示进程之间的父子关系
-------------------
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
[root@linux-server ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
============================================================================
USER: #运行进程的用户
PID: #进程ID
%CPU: #CPU占用率
%MEM: #内存占用率
VSZ 进程占用的虚拟内存大小
RSS 占用的物理内存大小
STAT: #进程状态 ---了解
? 表示没有占用终端
R 运行
S 可中断睡眠 Sleep
D 不可中断睡眠
T 停止的进程
Z 僵尸进程
X 死掉的进程
START: #进程的启动时间
TIME: #进程占用CPU的总时间
COMMAND: #进程文件,进程名
进程状态--了解
Sl 以线程的方式运行
Ss s进程的领导者,父进程
R+ +表示是前台的进程组
S< <优先级较高的进程
SN N优先级较低的进程
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
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
查看tty的方法:
[root@linux-server ~]# tty
? 表示这个进程开启的时候没有占用终端
查看进程(二)
[root@linux-server ~]# ps -ef
参数解释:
-e 显示所有进程
-l 长格式显示
-f 完整格式
1
2
3
4
5
2
3
4
5
UID 用户ID
PID 进程ID
PPID 父进程ID
C CPU占用率
STIME 开始时间
TTY 开始此进程的TTY----终端设备
TIME 此进程运行的总时间
CMD 命令名
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
查看单个PID
[root@linux-server ~]# yum install -y httpd #安装apache软件
[root@linux-server ~]# systemctl start httpd #启动
[root@linux-server ~]# cat /var/run/httpd/httpd.pid
1043
1
2
3
4
2
3
4
查看指定PID
[root@linux-server ~]# ps aux | grep sshd
root 1043 0.0 0.2 105996 4120 ? Ss 01:32 0:00 /usr/sbin/sshd -D
grep:过滤
1
2
3
2
3
查看端口
[root@linux-server ~]# yum install lsof #安装软件包
[root@linux-server ~]# lsof -i:80 #端口号,这能查看带端口的进程
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
httpd 64249 root 4u IPv6 1373628 0t0 TCP *:http (LISTEN)
1
2
3
4
2
3
4
#查网络进程和正在监听的端口
[root@linux-server ~]# netstat -lntp
参数详解:
-a 显示全部的进程
-u 显示udp
-n 以数字的新式显示协议名称
-t tcp
-p:显示进程的名称和pid
-l :只显示正在被监听的端口
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
[root@linux-server ~]# w #看已经登陆到终端的进程信息,远程登陆会有ip 地址
1
# 动态查看进程
top、htop
[root@linux-server ~]# top #动态显示信息,三秒刷新一次。
1
在工作中必须监控的东西 load average(平均负载)等待cpu处理的队列长度 也是个数。
1分钟 第一个数字
5分钟 第二个数字
15分钟 第三个数字
======================
计算cpu负载:load average的三个值: 0.10, 0.16, 0.12,分别除cpu的个数,得出的值,如果值大于1那么那时候的负载高。
1
2
3
4
5
6
2
3
4
5
6
top操作
[root@linux-server ~]# top
h|? 帮助
> 往下翻页
< 往上翻页
M 按内存排序
P 按cpu排序
q 退出
z 彩色显示
W 保存
=============================
PR 优先级
VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES 进程使用的、未被换出的物理内存大小,单位kb。
SHR 共享内存大小,单位kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
ni :nice值
id: cpu空闲率
wa:cpu等待,等待输入/输出的进程占用的 CPU 百分比。如果使用率过高,表示硬盘该换了
1
2
3
2
3
# 进程优先级 nice (进程优先级和数字成反比)
nice 值越高:表示优先级越低,例如+19,该进程容易将CPU 使用量让给其他进程。
nice 值越低:表示优先级越高,例如-20,该进程更不倾向于让出CPU。
1
2
2
# 进程控制
按pid杀死进程
kill,pkill
语法: kill 信号 PID #信号也是进程间通信的一种方式
1
2
2
[root@linux-server ~]# kill -l #查看所有信号
-1 HUP 重新加载进程或者重新加载配置文件,PID不变
-9 KILL 强制杀死
-15 TERM 正常杀死(这个信号可以默认不写)
-18 CONT 激活进程
-19 STOP 挂起进程
1
2
3
4
5
6
2
3
4
5
6
案例一
给vsftpd进程发送信号1,15 vsftpd信号测试
[root@linux-server ~]# yum install -y vsftpd #安装vsftpd
[root@linux-server ~]# systemctl start vsftpd #启动
[root@linux-server ~]# ps aux | grep vsftpd
root 59363 0.0 0.0 53212 576 ? Ss 16:47 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
[root@linux-server ~]# kill -1 59363 #发送重启信号,例如vsftpd的配置文件发生改变,希望重新加载
1
2
3
4
5
6
2
3
4
5
6
[root@linux-server ~]# ps aux | grep vsftpd
root 59363 0.0 0.0 53212 748 ? Ss 16:47 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
[root@linux-server ~]# kill 59363 #正常杀死进程,信号为-15可以默认不写。我们可以使用systemctl stop vsftpd 停止服务。
[root@linux-server ~]# ps aux | grep vsftpd
root 62493 0.0 0.0 112660 968 pts/0 S+ 16:51 0:00 grep --color=auto vsftpd
进程状态解释--了解:
+:表示运行在前台的进程组
S+:休眠状态
T+:暂停,挂起状态
s:父进程
1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
案例二
给vsftpd进程发送信号-9, vsftpd信号测试
[root@linux-server ~]# systemctl start vsftpd
[root@linux-server ~]# ps aux | grep vsftpd
root 67003 0.0 0.0 53212 572 ? Ss 16:57 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 67089 0.0 0.0 112660 972 pts/0 S+ 16:57 0:00 grep --color=auto vsftpd
[root@linux-server ~]# kill -9 67003 #强制杀死,一般用于不能正常停止的情况下
[root@linux-server ~]# ps aux | grep vsftpd
root 67190 0.0 0.0 112660 972 pts/0 S+ 16:57 0:00 grep --color=auto vsftpd
1
2
3
4
5
6
7
2
3
4
5
6
7
案例三
使用pkill 杀死vsftpd进程
[root@linux-server ~]# systemctl start vsftpd
[root@linux-server ~]# ps -aux | grep vsftpd
root 73399 0.0 0.0 53212 572 ? Ss 17:05 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 73499 0.0 0.0 112660 968 pts/0 S+ 17:05 0:00 grep --color=auto vsftpd
[root@linux-server ~]# pkill -9 vsftpd #使用pkill可以指定进程名字
[root@linux-server ~]# ps -aux | grep vsftpd
root 73643 0.0 0.0 112660 968 pts/0 S+ 17:05 0:00 grep --color=auto vsftpd
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 作业控制
作业控制之jobs:
作业控制指的是控制正在运行的进程的行为。比如,用户可以挂起一个进程或者放到后台去运行,等一会儿再继续执行该进程。
1
实战案例
[root@linux-server~]# sleep 7000 & #&:让命令或者程序后台运行
[1] 5441
[root@linux-server ~]# sleep 8000 #ctrl+z 把程序放到后台(这方法会让程序在后台暂停)
^Z
[2]+ Stopped sleep 8000
[root@linux-server ~]# jobs #查看后台的工作号
[1]- Running sleep 7000 &
[2]+ Stopped sleep 8000
[root@linux-server ~]# bg %2 #让暂停的程序在后台运行,%是用来修饰job number,2就是job number。(程序的工作号)
[2]+ sleep 8000 &
[root@linux-server ~]# jobs
[1]- Running sleep 7000 &
[2]+ Running sleep 8000 &
[root@linux-server ~]# fg %1 #将后台的程序调到前台
sleep 7000
[root@linux-server ~]# jobs
[2]+ Running sleep 8000 &
[root@linux-server ~]# kill -9 %2 #通过kill杀死进程
[root@linux-server ~]# jobs
[2]+ Killed sleep 8000
[root@linux-server ~]# jobs #在次查看没有了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 常用命令
1.查看当前CPU负载
[root@linux-server ~]# uptime
17:35:01 up 16:02, 3 users, load average: 0.00, 0.02, 0.05
1
2
2
2.查看内存使用
[root@linux-server ~]# free -m
total used free shared buff/cache available
Mem: 1984 154 1508 8 321 1632
Swap: 2047 0 2047
-m:单位M
1
2
3
4
5
6
2
3
4
5
6
3.linux启动过程(搜索百度了解)
1加电,2加载bios设置,3加载grub,4加载内核系统到内存当中,
5加载配置文件,6加载内核模块,7完成相应的初始化工作和启动相应的服务,
8启动系统进程,9出现登录界面,10开机启动完成
1
2
3
2
3
4.查看系统的版本和内核
[root@linux-server ~]# cat /etc/redhat-release #查看版本
CentOS Linux release 7.4.1708 (Core)
[root@linux-server ~]# uname -a #看查正在运行的内核版本
Linux linux-server 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@linux-server ~]# uname -r #查看内核版本
3.10.0-693.el7.x86_64
1
2
3
4
5
6
2
3
4
5
6
5.修改主机名
[root@linux-server ~]# hostnamectl set-hostname xxxx #主机名,修改完之后断开与终端连接,然后在重新连接即可。
# vim /etc/hostname (需要重启服务器)
贺哥
查看主机名
[root@linux-server ~]# hostname
1
2
3
4
5
6
2
3
4
5
6
6.跳板机(堡垒机)的作用
1 身份验证
2 屏幕录制,防止员工对服务器做有害的操作
3 批量操作 一次性操作2-200台机器
1
2
3
2
3
7.安装过操作系统吗?怎么安装?
1.小批量设备,使用U盘安装
(调整bios参数从U盘启动)
2.大批量设备搭建PXE装机系统,从网络批量安装
(调整网络启动项,从网络启动)
1
2
3
4
2
3
4
上传下载
# yum install -y lrzsz
上传
# rz
下载
# sz 文件
1
2
3
4
5
2
3
4
5
作业
1.需要修改/etc/passwd文件属性。要求只可以追加,不允许修改。
2./tmp/im 为新员工手册,要求修改文件属性,不可以修改文件内容,只可以查看文件内容
3.chattr命令中a和i属性的区别
4.静态查看进程有用什么命令?你知道的有几种?
5.修改主机名为testpm-server
6.如何查看服务的端口?
7.如何查看nginx的进程是否运行?
8.如何查看你的操作系统的版本以及内核?
9.什么是进程?
10.如何发现有人入侵你的服务器?
11.放在后台运行的程序通过什么命令可以查看到?
12.将nginx进程PID号为1142强制杀掉用什么命令?
13.请列出查看cpu负载的命令你知道的?
14.load average: 0.40,0.21,0.12 分别代表什么意思?
15.请用命令查看一下httpd的PID号?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
扩展作业
1.查一下戴尔、IBM、惠普的服务器型号和常见的配置。
2.查一下当前阿里云、腾讯云、和华为云的区别。
3.给你的虚拟机克隆出一台
4.查一下linux的启动过程
1
2
3
4
2
3
4
# 简单整理
僵尸进程表示进程已经退出,但它的父进程还没有回收子进程占用的资源。短暂的僵尸状态通常不必理会,但进程长时间处于僵尸状态,就应该注意了,可能有应用程序没有正常处理子进程的退出。
僵尸进程对系统有害吗?
不会。由于僵尸进程并不做任何事情, 不会使用任何资源也不会影响其它进程
你可以想象成这样:
“你是一家建筑公司的老板。你每天根据工人们的工作量来支付工资。 有一个工人每天来到施工现场,就坐在那里, 你不用付钱,他也不做任何工作。 他只是每天都来然后呆坐在那,仅此而已!”
S 可中断睡眠 Sleep----类似于挂起,等待接收socket链接或者是一些信号从而重新被唤起
D 不可中断睡眠 --不可中断状态,表示进程正在跟硬件交互,为了保护进程数据和硬件的一致性,系统不允许其他进程或中断打断这个进程。 进程长时间处于不可中断状态,通常表示系统有 I/O 性能问题。
端口:
随着计算机网络技术的发展,原来物理上的接口(如键盘、鼠标、网卡、显示卡等输入/输出接口)已不能满足网络通信的要求,TCP/IP协议作为网络通信的标准协议就解决了这个通信难题。TCP/IP协议集成到操作系统的内核中,这就相当于在操作系统中引入了一种新的输入/输出接口技术,因为在TCP/IP协议中引入了一种称之为"Socket(套接字)"应用程序接口。有了这样一种接口技术,一台计算机就可以通过软件的方式与任何一台具有Socket接口的计算机进行通信。端口在计算机编程上也就是“Socket接口”.
如果把IP地址比作一间酒店 ,那么端口就是出入酒店客房的门。那么端口号就是客房的编号。但是一个IP地址的端口可以有65536(即:2^16)个之多!端口是通过端口号来标记的,端口号只有整数,范围是从0 到65535(2^16-1)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15