Linux 基础知识入门 第二章
md和Xmind原文档下载:百度网盘
一、Linux 进程管理
1. 相关概念
进程是程序的运行实例
每个进程有唯一的进程ID (PID)
进程有父进程(PPID)
进程有运行状态
1.1 进程状态
R 运行 / 可运行 Running 正在运行,占用CPU Runnable 等待运行,不占用CPU,但占运行队列 S 睡眠 D 不可中断睡眠 T 停止 Z 僵尸进程 修饰符 s 包含子进程 l 多线程 + 前台进程 < 高优先级 N 低优先级1.2 ps 静态查看进程
系统负载过高排障使用
选项 a 所有终端的进程 u 显示进程所有者信息 x 包括未链接终端的进程 f 显示进程树 k 属性 对指定属性排序,属性前加-表示倒序 o 属性 显示定制信息 ni nice 值 pri pri值,内核静态优先级,0-139,数值越大优先级越高 psr 进程执行所绑定的CPU核心编号 L 显示支持的属性列表 -C 指定命令,多个命令用 , 分割 -L 显示线程 -e 显示所有进程 -f 显示完成格式程序信息 -F 显示更完整格式的进程信息 -H 以进程层级格式显示相关信息ps aux 字段解析 USER 运行进程的用户 PID 唯一的进程ID号,PPID表示父进程的ID号 %CPU CPU占用百分比 %MEM 物理内存占用百分比 VSZ 虚拟内存使用量,申请内存 RSS 物理内存使用量,实际使用内存 TTY 控制终端,tty为本地登录,pts/为网络登录,?为守护进程。和终端无关 STAT 进程状态 START 进程启动时间 TIME 进程占用CPU的时间 COMMAND 进程实际指令 # 示例 ps aux | grep nginx # 查看指定应用进程 ps aux|wc -l # 统计进程总数 ps aux --sort=-%cpu |head # 按CPU占比排序, -表示降序,只显示前10个 ps aux --sort=-%mem |head # 按内存占比排序# 其他用法示例psauxf# 命令按进程树显示prtstat 进程PID# 查看进程详细信息psaxo pid,cmd,psr -L|grephaproxy# 查看程序的线程与CPU核心绑定关系psaxfo pid,cmd,%cpu,%mem k %mem|head# 自定义字段查看并按物理内存占用百分比排序,只显示前10个ps-eopid,cmd,%cpu,%mem k -%mem|head# 效果与上一条命令相同1.3 pstree 进程树
常用于查看父进程子进程
带{}的表示多线程进程
Ubuntu需要安装包: apt install -y psmisc
# 示例pstree-p# 显示PIDpstree-p|grepnginx# 过滤指定程序pstree-T# 不显示线程pstree-u# 显示指定用户的进程1.4 lsof 查看文件占用
lsof-i:条件# 列出符合条件的进程/端口lsof/dev/终端名# 查看由指定终端创建的进程lsof文件# 查看文件占用,用于排查大文件删除但未释放磁盘空间# 示例lsof-i:80# 查看80端口占用lsof-cnginx# 查看nginx打开的文件1.5 ss 查看端口监听
-n不解析域名 / 服务名,纯数字显示(速度快)-tTCP 连接-uUDP 连接-l仅监听状态端口-a所有连接(监听 + 已建立)-p显示进程 PID / 程序名(需 root)-4仅 IPv4-6仅 IPv6-s显示连接统计摘要-o显示计时器信息-i显示内部 TCP 信息(cwnd、rtt 等)# 示例ss-ntl# 查看所有 TCP 监听端口ss-ntul# TCP+UDP 监听(日常排查首选)ss-ntulp# 带进程名/PIDss-ntlp|grepnginx# 查看程序监听端口ss-ntulp|grep:80# 查看 80 端口程序ss-ntdport=:443# 查看所有对外 443 连接ss-ostate established'( dport = :ssh or sport = :ssh )'# 显示所有已建立的ssh连接ss-ostate established'( dport = :http or sport = :http )'# 显示所有已建立的HTTP连接1.6 top 动态查看进程
选项 -d # 指定刷新间隔,默认3秒 -b 全部显示所有进程,默认按CPU占用显示一部分进程 -n # 刷新#次后退出 -H 线程模式界面解析 第一行(系统运行状态) 程序名 - 系统时间 运行时间 登录用户 CPU负载(1分钟、5分钟、15分钟) l 隐藏第一行 第二行(任务状态) 总进程数 运行数 休眠数 停止数 僵尸数 第三行(CPU 使用情况) us 用户 sy 内核 ni 优先级 id 空闲 CPU 百分比 wa 等待I/O 等待占用 CPU 百分比(若高,可能磁盘瓶颈) hi 硬件中断 si 软件中断 st 虚拟机管理 1 显示每个CPU核心的压力情况 第四行(内存使用情况) total 总共 free 空闲 used 使用 buff/cache 缓存 m 切换显示风格 第五行(交换分区 Swap) total 总共 free 空闲 used 使用 avail Mem 可用于下一次分配的物理内存 USER 进程所属用户 PID 进程ID PR 进程优先级,PR=NI+20 NI nice值(-20 最高优先级,19 最低) VIRT 虚拟内存使用量 RES 物理内存使用量 SHR 共享内存大小 S 进程状态 %CPU CPU占用百分比 P或C 按处理器使用量排序 %MEM 物理内存占用百分比 M 按内存使用量排序 TIME+ 进程占用CPU的时间 T 按 累计 CPU 时间 降序 COMMAND 进程实际命令 c 示程序的绝对路径界面命令 k 杀死进程,输入 PID,再输入信号,默认 15 z 切换颜色显示 q 退出 r 调整进程优先级,输入 PID,再输入 Nice 值- htop
- 增强版top命令
1.7 kill 进程控制
实际是给进程发信号
kill -l 查看所有信号种类 常用信号 0) 探测,检测进程是否存在,是否有权限向它发出信号,常用于脚本判断程序是否启动 1) SIGHUP 无需关闭进程而让其重新初始化,重载,PID不变,一般使用systemctl reload代替 2) SIGINT 终止进程运行,相当于Ctrl+c 3) SIGQUIT 相当于Ctrl+\ 9) SIGKILL 强制结束进程 15) SIGTERM 正常终止正在运行的进程,默认信号,一般使用systemctl stop代替 18) SIGCONT 继续运行 19) SIGSTOP 挂起进程,暂停命令格式
kill PID 结束进程
kill -9 PID 强制结束
kill扩展命令
killall 进程名
来自psmisc包
根据进程名自动查找PID号并结束所有相关进程,信号与kill一致
pkill 进程名
根据进程名自动查找PID号并结束所有相关进程
更灵活,支持模糊匹配
pkill -t 终端名 结束指定终端的连接
pkill -f “完整进程名” 如果需要杀死同程序的不同进程(程序选项参数不同),输入完整进程名,避免误杀
1.8 进程管理其他命令
1.8.1 uptime 查看当前CPU负载
1.8.2 free 查看内存使用
free -m 以M为单位显示
free -h 以人类可读方式显示
1.8.3 查看发行版本
红帽 cat /etc/redhat-release
ubuntu cat /etc/os-release
1.8.4 uname 查看内核信息
uname -a 查看所有内核信息
uname -m 查看系统架构
uname -r 查看内核版本
1.8.5 查看CPU信息
lscpu
cat /proc/cpuinfo
nproc 统计CPU的核心数量
1.8.6 lsblk 查看硬盘和分区情况
1.8.7 lspci 查看pci设备
二、网络相关原理
1. 基础概念
网络协议:网络上所有设备所使用的共同语言
协议分层:OSI七层模型
网络中的节点:主机节点和数据交换节点(交换机,路由器)
数据传输链路:
接入链路(access link),连接主机和数据交换节点
骨干链路(backbone link),数据交换节点之间
互联网主流协议TCP/IP
1.1. OSI 参考模型
| 层级 | 层级名称 | 层级功能 | 常见协议 | 传输数据名称 | 应用 |
|---|---|---|---|---|---|
| 7 | 应用层 | 为应用程序提供网络服务接口,直接与用户程序交互 | HTTP、HTTPS、FTP、Telnet、SSH、SMTP、POP3、DNS、DHCP、TFTP、SNMP、MySQL | 数据/报文 | 七层负载均衡、应用网关、WAF防火墙 |
| 6 | 表示层 | 数据格式转换、加密解密、压缩解压、编码转换 | SSL/TLS、ASCII、JPEG、MPEG、加密协议 | 数据 | 加密设备、格式转换器 |
| 5 | 会话层 | 建立、管理和终止通信会话,会话同步与恢复 | NetBIOS、RPC、PPTP、SDP、SQL会话 | 数据 | 会话控制器、会话网关 |
| 4 | 传输层 | 端口寻址与端到端连接,首部包含源/目的端口,决定由哪个程序处理数据 | TCP、UDP | 数据段(Segment) | 四层负载均衡、传输层防火墙 |
| 3 | 网络层 | 跨网段路由与IP寻址,首部包含源IP和目的IP地址 | IP、ICMP、OSPF、BGP、RIP、IGMP | 数据包/分组(Packet) | 三层交换机、路由器 |
| 2 | 数据链路层 | 同一局域网内点到点传输,首部包含源MAC和下一跳MAC地址 | LLC、MAC、PPP、以太网协议、Wi-Fi协议 | 数据帧(Frame) | 二层交换机、网桥、网卡 |
| 1 | 物理层 | 传输原始比特流,定义物理介质与电气/机械特性 | RS-232、RJ45规范、光纤、双绞线、蓝牙物理层 | 比特流(Bit) | 网线、光纤、集线器、中继器 |
1.2. TCP/IP参考模型
TCP/IP参考5层模型将OSI七层模型的应用层,表示层,会话层合并为应用层
TCP/IP协议栈常见协议
| 应用层 | HTTP、HTTPS、FTP、Telnet、SSH、SMTP、POP3、DNS、DHCP、TFTP、SNMP |
|---|---|
| 传输层 | TCP、UDP |
| 网络层 | IP、ICMP、IGMP |
| 数据链路层 | PPPoE、PPP、以太网协议、Wi-Fi协议 |
| 物理层 |
1.3 数据封装和解封装
发送方由上而下逐层添加协议头部
接收方由下而上逐层去除协议头部
1.4 IP地址
IP地址在网络中用于标识一个节点
IP地址用于在网络中寻址,具有唯一性
IP地址分为IPV4和IPV6,IPV4为主流地址
1.4.1 IPV4地址表示
IPv4地址由32个二进制数构成
为了方便表示通常采用点分十进制
IPv4地址范围: 0.0.0.0~255.255.255.255
1.4.2 IP地址构成
**网络部分:**用来标识一个网络
**主机部分:**用来区分一个网络内的不同主机
**网络掩码:**区分一个IP地址中的网络部分及主机部分
1.4.3 IP地址分类
A类:0.0.0.0~127.255.255.255 单播地址 8位掩码
B类:128.0.0.0~191.255.255.255 单播地址 16位掩码
C类:192.0.0.0~223.255.255.255 单播地址 24位掩码
D类: 224.0.0.0~239.255.255.255 组播(不能用于单个节点)
E类: 240.0.0.0~255.255.255.255 研究
1.4.4 网段
一个网络号所定义的网络范围
网络地址:用于标识一个网络,主机位全为0,表示网段/网络号
广播地址:用于向该网络中的所有主机发送数据,主机位全为1
可用地址:减去网络地址和广播地址即为可用地址
一个网段可用地址计算方法:2ⁿ-2
n为主机位数(32-掩码位数)
1.4.5 私网IP地址
A,B,C类地址预留了私网地址
A类:10.0.0.0~10.255.255.255
B类:172.16.0.0~172.31.255.255
C类:192.168.0.0~192.168.255.255
连接互联网必须使用公网地址
1.4.6 特殊IP地址
表示网段:主机位全为0,例如192.168.1.0/24
广播地址:主机位全为1,例如192.168.1.255/24
有限广播地址:IP地址全为1,255.255.255.255
任意地址:IP地址全为0, 0.0.0.0
**回环地址:**127.0.0.0/8,表示节点自身
链路本地地址:169.254.0.0/16,APIPA地址,当开启自动获取IP,但DHCP不可用时,自动给自身分配一个该地址段IP,用于同一局域网通信
1.4.7 IPV6
由128个二进制数构成
1.5 TCP协议
1.5.1 TCP的建立 - 三次握手
基于TCP的应用,在发送数据之前,都需要由TCP进行“三次握手”建立连接
- 发起方发送第一个SYN标志的TCP报文给接收方
- 接收方接收报文后回复一个SYN和ACK标志的TCP报文给发起方
- 发起方接收报文后回复一个ACK标志的TCP报文给接收方,接收方收到报文后,TCP双向连接建立
TCP使用序列号和确认序列号字段实现数据的可靠和有序传输
1.5.2 TCP的关闭-四次挥手
当数据传输完成,TCP需要通过“四次挥手”机制断开TCP连接
- 发起方数据传输完成后发送一个FIN标志的TCP报文给接收方
- 接收方接收报文后回复一个ACK标志的TCP报文给发起方
- 接收方数据传输完成后再发送一个FIN和ACK标志的TCP报文给发起方
- 发起方接收报文后回复一个ACK标志的TCP报文给接收方,TCP双向连接断开
1.6 交换机
二层交换机
实现同网段主机通信
交换机根据MAC地址转发
基于ARP协议
主机不需要配置网关
1.7 路由器
主机配置网关
跨网段通信通过网关转发
多个路由器通过静态路由或动态路由实现数据转发
1.8 VLAN
同一交换机实现不同子网划分
三、部署 WordPress 博客系统
1. 本地虚拟机部署
# 测试使用Ubuntu24.04.4# 安装mysql,apache2和PHP及所需扩展aptinstall-ymysql-server apache2 php php-mysqlnd php-gd php-xml php-mbstring php-json php-zip# 确认mysql和apache2工作状态systemctl status mysql apache2# 确认80和3306端口是否为mysql和apache2监听ss-ntlp|grep-E':80|:3306'# 确认PHP版本高于7.4,MySQL高于8.0aptlist php mysql-server# 为WordPress创建专用数据库和用户mysql CREATE DATABASE wordpress;UNINSTALL COMPONENT'file://component_validate_password';# mysql关闭强密码验证,生产环境不需要CREATEUSER'wordpress'@'localhost'IDENTIFIED BY'123456';# 生产环境不使用简单密码GRANT ALL PRIVILEGES ON wordpress.* TO'wordpress'@'localhost';quit# 安装wordpresswgethttps://wordpress.ac.cn/latest.tar.gztarxf latest.tar.gzcp-rfwordpress/* /var/www/html/# wordpress配置cd/var/www/htmlvimwp-config.phpcpwp-config-sample.php wp-config.php define('DB_NAME','wordpress');define('DB_USER','wordpress');define('DB_PASSWORD','123456');define('DB_HOST','localhost');# 修改wordpress文件所有权为apache2启动用户rm-findex.html# 删除apache2自带的初始页chown-Rwww-data:www-data /var/www/html/ ll /var/www/html/# Rocky关闭默认的防火墙策略和Selinuxsystemctl disable--nowfirewalld setenforce0sed-Ei.bak's/^(SELINUX=).*/\1disabled/'/etc/selinux/config# 查询主机IPipa浏览器访问主机IP进行 WordPress 初始化
2. 阿里云部署
2.1 准备域名
打开阿里云并登录 - 搜索域名注册并进入 - 搜索关键字选取域名,测试环境选择价格最低的即可
这里选取了dengtest.pw,首年10元
注意在阿里云域名注册需要实名认证,准备个人身份证
在中国(港澳台地区除外)使用80和443端口上线网站需要备案,备案周期较长,生产环境业务上线需提前备案
2.2 SSL证书
域名购买后前往证书申请,申请免费证书,免费证书有效期90天
2.3 选购云服务器 ECS
登录凭证 自定义密码
登录密码 建议使用复杂密码,简单密码极易被破解,例如使用 openssl rand -base64 12 命令生成随机字符作为密码
提交下单
2.4 云解析 DNS
云服务拿到公网IP后,先完成DNS解析
2.5 远程连接云服务器
# 修改主机名hostnamectl set-hostname wordpress# 美化终端提示符(永久生效)echo"PS1='\[\033[1;36m\][\u@\h\t\w]\\$\[\033[0m\]'">>~/.bashrc&&source~/.bashrc# 终端重新连接root@wordpress:~#2.6 部署 wordpress
放入网站证书
mkdir-p/etc/nginx/ssl关闭传输窗口
# 安装软件包aptupdate;aptinstall-ynginx mysql-server php-fpmunzipphp-mysql# 确认安装版本,php-fpm不同版本配置文件目录不同,确认PHP版本高于7.4,MySQL高于8.0aptlist php-fpm mysql-server# 确认相关软件服务状态和端口监听systemctl status nginx php8.3-fpm mysql ss-ntlp|grep-E':80|:3306'# php-fpm配置vim/etc/php/8.3/fpm/pool.d/www.conf# 修改为远程连接;listen=/run/php/php8.3-fpm.sock listen=9000# 如果nginx和php-fpm安装在同一台服务器,删除前方;启用只允许本机连接,不开启默认任何主机都可以连接listen.allowed_clients=127.0.0.1vim/etc/php/8.3/fpm/php.ini date.timezone=Asia/Shanghai#修改时区# 修改文件上传大小限制post_max_size=128M upload_max_filesize=128M# 修改 PHP 脚本纯代码最大执行时长max_execution_time=360# 接收 & 解析客户端请求数据最长耗时max_input_time=600# 配置完成重启php-fpmsystemctl restart php8.3-fpm# nginx配置vim/etc/nginx/conf.d/www.dengtest.pw.conf# HTTP 80强制跳转HTTPSserver{listen80;server_name www.dengtest.pw dengtest.pw;return301https://$host$request_uri;}# HTTPS 443主配置(无正式证书也可运行)server{listen443ssl http2;server_name www.dengtest.pw dengtest.pw;root /data/php;index index.php;# 填写证书路径ssl_certificate /etc/nginx/ssl/dengtest.pw.pem;ssl_certificate_key /etc/nginx/ssl/dengtest.pw.key;# SSL安全加固配置ssl_protocols TLSv1.2 TLSv1.3;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;# 上传大小限制client_max_body_size 128m;# PHP解析规则、FPM监控页location ~\.php$|pm_status|ping{fastcgi_pass127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;include fastcgi_params;fastcgi_param HTTPS on;}}# 配置完成重启nginx服务nginx-tsystemctl restart nginx# mysql 创建数据库,用户和授权mysql CREATE DATABASE wordpress;CREATEUSER'wordpress'@'localhost'IDENTIFIED BY'123456';GRANT ALL PRIVILEGES ON wordpress.* TO'wordpress'@'localhost';quit# 安装 wordpress# 在线下载安装包,可能会429,下载失败;访问https://cn.wordpress.org/download/使用手动下载,传入云服务器wgethttps://cn.wordpress.org/latest-zh_CN.zip# 解压缩unziplatest-zh_CN.zip# 手动下单,解压包名不同unzipwordpress-7.0.1-zh_CN.zipmkdir-pv/data/phpmvwordpress/* /data/php/chown-Rwww-data:www-data /data/php/# 浏览器访问完成wordpress配置,配置方式不再赘述2.7 wordpress 初始化
浏览器访问选购的域名:www.dengtest.pw
登录管理后台,可进行各种网站配置,发布博文等,部署完成