进程管理

进程是什么?

linux下存在 process(进程) thread(线程) 这两种操作系统基本的概念
计算机的核心是CPU,承担机器的计算任务,但CPU一次只能处理一个任务
而进程就是linux系统上的一个任务资源单位,好比一个工厂需要很多车间进行运作,当一个车间在运作的时候就可以当作是一个进程,而车间里的工人单位就是线程。
回顾一句话:linux是一个多用户,多任务的操作空间,支持多进程,多线程。
多进程则是可以同时多个进程进行工作,多线程则是一个进程内有多个线程在运作。(单线程则是单个工作,效率较低)

进程管理命令

ps命令

用于报告当前系统的进程状态的命令。主要用于查询进程信息,主要和kill命令搭配,进行对进程的管理和杀死

  • ps找出进程的号码
  • kill杀死进程,重启进程

    [root@localhost ~]# ps PID TTY TIME CMD 4854 pts/0 00:00:00 bash 4873 pts/0 00:00:00 ps

参数解释:
PID:代表这个进程对应的id号码
TTY:代表进程所属的控制台号码
CMD:代表正在执行的系统命令行是什么
TIME:代表进程所使用的CPU的总时间

[root@localhost ~]# ps -ef UID PID PPID C STIME TTY TIME CMD root 4884 4854 0 20:53 pts/0 00:00:00 ps -ef …

-e 列出系统所有运行的进程
-f 显示UID、PID、PPID等信息
参数解释:
UID:这个进程是哪个用户执行的命令
PID:进程的标识号码,用于启停进程
PPID:进程的父进程标识号
C:表示cpu使用的资源百分比
STIME:表示进程开始执行的时间
TTY:该进程在哪个终端上执行的
TIME:该进程使用CPU总时长
CMD:用户执行某条命令,产生的进程信息

ps风格参数

  • 带减号的参数
  • 不带减号的参数

    1.强制杀死命令

    kill -9 pid号码

2.过滤进程信息

ps -ef | grep 指定内容

3.查看所有进程信息

与ps -ef的效果是大致相同的,区别只在于之后学习的时候取用看怎么方便

[root@localhost ~]# ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 2 0.0 0.0 0 0 ? S Mar29 0:00 [kthreadd]

image.png

4.指定用户查看进程信息

ps -u root #指定查看root用户下的ps命令信息

5.显示进程树信息

ps -eH #显示父进程,子进程的目录结构信息

6.自定义进程查看的格式

ps -eo pid,args,psr #指定只查看pid,args,psr的信息

7.查看进程树信息

yum install -y psmsic #安装pstree命令 pstree #查看一个直观的进程树信息(没有其他详细信息)

8.针对名字查看相关进程

通过程序的名字去查询相关进程,一般用来判断进程是否存活

pgrep ssh #可以查看到ssh进程的id号,判断ssh是否存活 pgrep -l ssh #输出进程id号,以及进程名

kill命令

-l 列出所有杀死,终止信号
image.png
常用信号如下:
1) SIGHUP:挂起进程,终端突然掉线,用户突然退出
2) SIGINT :中断信号,一般常用ctrl+c
3) SIGQUIT:退出信号,一般常用ctrl+\
9) SIGKILL:强制中断信号,一般用于立即杀死某些进程
15) SIGTERM:kill默认使用的就是15信号,终止进程
20) SIGTSTP:暂停进程,一般常用ctrl+z
语法:kill -9 pid #发送9信号,立即停止指定pid的进程

特殊信号之0

kill的特殊信号0,常用在shell脚本中

kill -0 pid #表示不发送任何信号给pid,但是会对pid进行检查,如果存在,没有任何反应,如果不存在则会提示

tips:如果想要验证,我们也可以输入 echo $? 查看上一次的命令是否为0

killall命令和pkill命令

kill杀死进程只能杀死一个pid进程,通过killall命令可以通过名字杀死进程,但是可能会一次杀不死(含有子进程,需要执行多次killall),所以可以利用pkill完全杀死所有此类进程

killall vim #杀死所有vim进程 pkill ping #杀死所有ping进程

通过终端杀死进程

pkill -9 -t pts/2 #直接杀死2号操作台的所有进程,直接剔除,如果不加-9,则直接杀死所有运行的进程,用户还在线

top命令

用于实时的监控系统的处理器状态,以及其他硬件负载信息还有动态的进程信息等等,还可以按照排名,先后的显示,某个进程CPU、内存的使用情况排名
top实际用法(输入top进入状态栏后)
z:打开/关闭颜色(x:某一列高亮;b:某一列加粗)
q:退出top
1:查看linux逻辑cpu个数
M:内存使用量从大到小排序
c:显示进程命令的绝对路径
top -d 秒数 #每几秒刷新一次进程
top -n 3 #刷新3次结束
top -p pid #指定pid观察其动态的资源信息

nohup命令

可以将程序以忽略挂起信号的形式在后台运行,也就是被运行的程序,输出的结果不打印到终端,无论是否将nohup命令的输出重定向到终端,nohup命令执行的输出结果都会写入到当前目录的nohup.out文件中,如果当前目录的nohup.out文件禁止写入数据,nohup命令结果会自动输出到$HOME/nohuo.out文件中
语法:nohup 要执行的命令

1.直接执行

nohup ping baidu.com #输出结果会写入到当前目录nohup.out文件中,但是程序会卡在前台,前台还是不能操作,不过关闭终端,命令不会挂掉,进程还会一直运行,直到进程被杀死

2.加上&保持前台可操作

nohup ping baidu.com & #让进程在后台运行,且前台仍可以进行操作

3.不显示命令的执行结果,直接重定向到垃圾站(黑洞)

nohup ping baidu.com > /dev/null 2>&1 &

bg命令

将进程放入后台运行,使得前台可以运行其他的命令,等同于【命令 &】

  • 在运行一个ping命令的时候,我们可以利用 ctrl + z 暂停进程且放入后台,此时,我们利用jobs命令查看后台正在执行的程序
  • 这个时候我们可以有两种重新进入进程的方法
    • 方法一:fg 序号,重新进入运行的程序
    • 方法二:bg 序号,重新进入运行的程序,且可以在前台继续其他命令(但是实测不太好用,来不及输命令,一直跳,最好还是快捷键中断了)
  • 如果不想日志输出在前台,可以输出文件到黑洞文件中,此处有三种方式:

    nohup ping baidu.com > /dev/null 2>&1
    nohup ping baidu.com 1>/dev/null 2>/dev/null nohup ping baidu.com &>/dev/null

tips:效果都是一样的,明白其中的含义,以后看到能够理解就可以了,具体自己用哪个,看自己习惯

linux系统的运行级别

常见的级别如下:
0:关机
1:单用户模式
2:多用户模式,无网络模式
3:完全的多用户模式,有网模式
4:用户自定义的级别
5:图形化界面的多用户模式
6:重启机器

[root@localhost dzc]# runlevel #检查当前系统的运行级别 N 3

init命令

linux进程初始化工具,是所有linux进程的父进程,进程id号默认是1

  1. init加上级别,直接操作系统运行级别

    init 6 #重启机器

htop命令

介绍:就是比hot更好看的命令,且功能更高级
使用:①yum install -y htop #这个命令是需要下载的
②直接输入htop命令,进入命令界面
操作:

  1. 按下F2或者点击setup,进入设置界面
  2. 可以使用上下左右进行状态栏选择,以及用空格切换风格
  3. F3进行进程查找
  4. 定位到某一个进程后,要杀死进程,可以按F9,且输入enter回车,给进程发送终止信号
  5. 按下F5,显示进程的层级关系(父进程,子进程)
  6. 支持的快捷键
    1. M:以内存使用量大小排序
    2. P:以CPU使用量排序
    3. T:以进程运行的时间排序
    4. /:进入搜索输入,查找指定的进程

      glances资源检测命令

      前面讲了系统资源检测工具有很多,比如top,htop。而glances工具是由python语言编写,使用psutil模块来采集系统的硬件资源等等。glances可以为unix和linux操作系统提供专家级别的性能检测。
  • CPU使用率
  • 内存使用情况
  • 内核统计信息
  • 磁盘的IO速度,读取数据,写入数据的一个速度,传输的速率
  • 文件系统的剩余空间
  • 网络的IO速度,网络的读取数据和写入数据的传输速率
  • 缓存空间的使用情况,swap空间
  • 动态进程信息
  • 系统负载信息

……
glances还能够将采集到的数据,输出到一个文件当中,便于数据分析人员,对服务器性能报表进行分析以及绘制图标等

  1. 必须安装此工具

方法一:pip3 install glances #利用python软件包管理工具pip
方法二:yum install -y glances #yum安装

  1. glances的界面信息

image.png
h:显示glances帮助信息
q:退出
c:以cpu排序
m:以内存排序
i:以io速率排序
p:以进程名排序
d:打开/关闭磁盘读写情况
f:打开/关闭文件系统剩余空间情况

  1. glances的web服务功能

此功能能够将glances监控到的数据,以网站形式做一个展示,用浏览器去查看

yum install -y python python-pip python-devel gcc

再用python的包管理工具,安装一个模块,用于启动web服务

pip install bottle

  1. 使用glances运行一个web监控界面

    glances -w

  2. glances还支持cs模式,glances运行一个server服务端,可以用clent客户端去远程连接访问,查看系统状况

  • 服务端运行如下命令

    glances -s -B 0.0.0.0

  • 在客户端上连接服务器

    glances -c 服务端ip地址

网络命令

网络协议

计算机网络中数据交互而建立的一种规则,也可以说是一套约定、标准的集合

  • TCP/IP

    osi七层模型(网络层次划分)

    物理层 > 数据链路层 > 网络层 > 传输层 > 会话层 > 表示层 > 应用层
    应用层:根据不同的网络应用需要用不同的网络协议

  • DNS协议(域名解析系统)、HTTP协议(万维网)、SMTP协议(邮箱传输)

传输层:两台主机之间进程进行数据传输

  • TCP传输(面向连接,可靠)、UDP传输(无连接,不保证数据安全,但可以一对一,多对多的交互通信,比如聊天室

    ifconfig命令

  • 用于配置网卡ip地址信息及其他网络参数信息

  • 查看显示网络接口信息,类似于windows的ipconfig命令
  • 临时性的配置ip地址、子网掩码、广播地址、网关信息等

注意:ifconfig命令只能用root去操作且可能要单独安装这个命令

yum install net-tools

  1. 查看网络地址信息

    ifconfig 设备名 #查看指定的网卡信息,不加设备名则所有网络接口信息

信息解释:
inet(ipv4地址),netmask(子网掩码),broadcast(广播地址)
RX/TX packages 代表网卡收发的流量数据包大小

  1. 指定开启或者关闭网卡

    ifconfig 设备名 up/down # up启用,down停止

  2. 添加新ip地址

    ifconfig ens33:0 新的ip地址 netmask 255.255.255.0 up ifconfig ens33:1 新的ip地址/24 up # 24等于代表了上面的子网掩码

  3. 修改机器的MAC地址信息

    ifconfig ens33 hw ether 00:0c:29:13:10:cf #这个是有固定格式的

  4. 永久更改网络设备信息

ifconfig命令只是临时修改网络配置,要永久修改是要进入配置文件的(详细看第一章关于网络配置)

route路由命令

计算机之间的数据传输必须经过网络,网络可以直接连接两台计算机,也可以通过一个一个的节点去连接,而路由可以理解为互联网的中转站,网络中的数据包就是通过一个一个的路由器转发到目的地的

  • route程序就是可以对linux内地IP路由表进行一个操作

路由分为静态路由动态路由

  • linux机器上配置的都是静态路由,由运维人员通过route命令去管理
  • 动态路由无需人为干预,由路由器、交换机自动分配规则而来
  1. 查看路由器信息

    route or route -n(不进行dns解析的路由表查看)

信息解释:

  • destination:表示网络号,network的意思
  • gateway:表示网关地址,网络是通过该IP出口,如果显示0.0.0.0的ip,表示该路由器信息,是从本机转发出去的
  • flags:路由标记,标记当前的网络状态
    1. - Uup运行的状态
    2. - G:表示这是一个网关路由器
    3. - H:表示这个网关是一个主机
    4. - !:表示当前这个路由已经禁止
  1. 添加删除网关信息

网卡就是数据包,不经过任何的设定,由路由表最后经过的地址关口;网关,网络的关口,数据要从网关地址出外网。

route del default #删除default默认路由表 route add default gw 192.168.178.2 #添加网关地址

ip命令

包含ifconfig和route两个命令的作用,查看系统路由、网络设备、设备策略等功能。
可以操作的对象

OBJECT 对象 link 网络设备 address 定义ipv4,ipv6的地址
neighbour 查看ARP缓存地址(用于解析MAC地址的) route 路由表对象
maddress 多播地址 tunel IP上的通道

ip addr show #查看网络设备信息(也可以简写: ip a ) ip link show dev ens33 #指定网络设备显示信息 ip -s link show dev ens33 #显示网络设备详细的数据包收发大小情况 ip link set ens33 down/up #关闭/激活网卡 ip link set ens33 address 0:0c:29:13:10:11 #修改网卡MAC地址 ip address add/del 192.168.178.160/24 dev ens33 #添加/删除ip信息 ip address add 192.168.178.160/24 dev ens33 label ens33:1 #网卡添加别名 ip route #ip命令检查路由信息 ip neighbour #ip检查arp缓存(显示网络邻居信息,检查MAC地址

netstat命令

显示网络连接情况,路由表信息,端口状态,网络连接情况等等信息
一个进程服务,运行之后,会暴露一个端口号,以及产生响应的进程信息

1.查看所有的网络连接情况

netstat -an # -a 显示all所有的套接字(socket)信息,-n 显示数字地址信息而非主机名

Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:22 0.0.0.0: LISTEN
tcp 0 0 127.0.0.1:25 0.0.0.0:
LISTEN
常见字段解释
proto:套接字使用的协议是什么
Recv-Q:连接这个套接字的用户,还未拷贝的字节数
Send-Q:远程主机还未确认的字节数
Local Address:套接字(一个连接情况)本地的地址和端口号
Forign Address:套接字的远程主机地址和端口号
State:套接字的运行情况(listen 监听中)

重要的套接字连接情况的参数:

ESTABLISHED:套接字有一个有效连接
SYN_SENT:套接字尝试建立一个连接
SYN_RECV:从网络上收到一个连接请求
FIN_WAIT1:套接字已关闭,连接正在断开
FIN_WAIT2:连接已关闭,套接字等待远程方中止
TIME_WAIT:在关闭之后,套接字等待处理仍然在网络中的分组
CLOSED:套接字未用
CLOSE_WAIT:远程方已关闭,等待套接字关闭
LAST_ACK:远程方中止,套接字已关闭,等待确认
LISTEN:套接字监听进来的连接,如果不设置—listening(-l)或者—all(-a)选项,将不显示出来这些连接
CLOSING:套接字都已关闭,而还未把所有数据发出
UNKNOWN:套接字状态未知

2.查看机器运行的所有端口

netstat -tunlp #查看机器上正在运行的所有端口情况以及他的进程情况

-t 显示出TCP的连接情况
-u 显示出UDP的连接情况
-n 不进行dns解析
-l 只显示正在监听中的套接字情况
-p 显示出套接字所属的进程和进程名情况

  • 127.0.0.1 #本地回环地址,用于机器间内部应用通信,外人无法访问此地址,每一个机器都有自己的127.0.0.1
  • 0.0.0.0 #绑定机器所有的网卡地址

    3.查看指定端口

    netstat -tunlp | grep 3306 #检查服务器是否运行了3306端口(查看是否运行了mysql数据库)

4.显示系统的路由表情况

netstat -rn # 等同于 route -n

5.显示网络的接口情况

netstat -i # -i 显示所有网络接口的列表情况

字段解释:

Iface:网络设备的名字
MTU:最大的传输单元,单位是字节
RX-OK/TX-OK:正确接收了多少数据包,发送了多少数据包
RX-ERR/TX-ERR:接收、发送数据包的时候,丢弃了多少数据包(最好是0,否则表示网络情况不健康,有丢包的现象)
RX-OVR/TX-OVR:由于错误遗失了多少的数据包
FLG标记:L是回环地址的含义;R代表这个网络接口正在运行中;U代表接口正在处于活动的状态;B代表设置了广播地址;M代表接收所有的数据包;O代表在该接口上禁止arp;P代表端对端的链接

6.查看服务器监听

netstat -tunlp | grep 3306 #监听数据库是是否运行 netstat -tunlp | grep 80 #监听web服务是否运行 netstat -tunlp | grep 443 #监听https服务是否运行

7.linux还有一个在centos7之后出现的网络查看工具,叫做ss

这个工具没有的话是需要安装的

yum install -y iproute ss -an #显示所有的socket套接字连接情况

8.显示出所有正在监听中的套接字情况

ss -tunlp | grep 80 #一样的用法,看自己习惯 netstat -tunlp | grep 80

ping命令

测试当前主机到目标机器的网络连通性
用法: ping 域名/IP
ping域名,查看是否能够通信,也可以用这个命令检测本机是否能够dns解析
pingip地址,省去了dns解析的过程

  • ping命令跟着域名或是ip地址,它会一直刷新ping命令的结果(linux当中)
  • ping命令发送给了远程主机56字节的数据
  • 从目标机器收到了64字节的数据,icmp_seq表示收到的字节数据序列号,ttl是数据包的存货时间,秒为单位,time是两台机器收发数据的延迟时间

    检测主机网络状态

    判断情况:
    当 ping 域名 出现报错无法连接的时候,首先考虑机器可能无法上网了,也可能是无法进行dns域名解析了(主机名—ip地址)
    验证情况:
  1. 检查linux的dns客户端你配置文件/etc/resolv.conf,确保文件中,有dns服务器的地址

    nameserver 114.114.114.114 #类似于这样的配置信息

  2. 再次验证能否进行域名解析,能否发送ping命令

  3. 如果ping一个正确的远程主机出现如下报错,就是自己的机器无法上网了,说明网络配置有问题了,得正确配置ip信息,以及路由网关地址

    “Destination Host Unreachable”

telnet命令

在以前是用于登陆远程主机的命令,以及检测远程主机的端口是否打开了,但是telnet命令采用的是明文传输,安全性太低,在远程登录的时候,容易丢失或者被黑客截取服务器的密码,因此后来被启用,采用了更安全的ssh远程登录命令

yum install -y telnet #安装telnet命令 telnet 123.206.16.61 22 #检测远程机器22端口是否打开

ssh命令

ssh命令是openssh软件包中的一个套件命令,使用ssh加密的协议进行远程登录,并且实现对服务器的运程管理
语法:ssh 用户名@ip地址
-p 更改端口

ssh root@1.1.1.1 -p 3353 #登录端口为3353的某ip地址

wget命令

用于下载指定的url资源文件
下载稳定,不管在网速很差还是很强的情况下,都能够很强的适应网络环境,进行下载资源
并且支持断点续传,当下载一个文件突然失败,下次还可以继续对该文件下载,直到结束。如果网络出现问题,他也会不断的尝试再次下载

  • 支持断点续传
  • wget还支持ftp以及http协议下载
  • wget也支持添加代理

    1.下载文件(比如照片)

    wget 图片文件地址

2.下载文件指定文件名

wget -O /opt/zhaopian.jpg 图片文件地址

3.限制下载网速

wget —limit-rate=1k 图片文件地址 #以每秒1K的速度下载

4.断点续传

wget -c 图片文件地址 #如果出现问题断开了下载,再次敲打该命令,即可继续下载

5.后台运行下载

通过-b参数,让wget命令在后台运行,日志默认输出到wget-log中

wget -b 图片文件地址

6.下载不同端网页

我们想要爬取不同的网页,如PC端网页或移动端网页的时候,我们可以指定一个伪装,让网页进行客户来源识别,有点类似于py爬虫中的伪装爬取

wget —user-agent=”对应设备的网络请求头” 图片文件地址

查看请求头的方式与py一致,开发者工具中查看

7.检测网站是否存活

利用wget的 -q 安静输出 -T 指定访问网站的超时时间 -t 表示重试访问网站几次

wget -q -T 3 -t 1 —spider 图片文件地址

再利用bash的特殊变量: $?

  • 当上一次命令执行失败,echo $?就是非0的错误状态码
  • 当上一次命令执行正确,echo $?就是0

TCP/IP网络协议

每层模型的职责:

  • 链路层:对0和1进行分组,定义数据帧,确认主机的物理地址,传输数据
  • 网络层:定义IP地址,确认主机所在的网路位置,并通过IP进行MAC寻址,对外网数据包进行路由转发
  • 传输层:定义端口,确认主机上应用程序的身份,并将数据包交给对应的应用程序
  • 应用层:定义数据格式,并按照对应的格式解读数据