Linux 基础知识入门 第二章

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# TCPUDP 监听日常排查首选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 进程优先级,PRNI20 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 终止进程运行相当于Ctrlc 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-releaseubuntu cat /etc/os-release1.8.4 uname 查看内核信息uname -a 查看所有内核信息uname -m 查看系统架构uname -r 查看内核版本1.8.5 查看CPU信息lscpucat /proc/cpuinfonproc 统计CPU的核心数量1.8.6 lsblk 查看硬盘和分区情况1.8.7 lspci 查看pci设备二、网络相关原理1. 基础概念网络协议:网络上所有设备所使用的共同语言协议分层:OSI七层模型网络中的节点:主机节点和数据交换节点(交换机,路由器)数据传输链路:接入链路(access link),连接主机和数据交换节点骨干链路(backbone link),数据交换节点之间互联网主流协议TCP/IP1.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.2551.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ⁿ-2n为主机位数(32-掩码位数)1.4.5 私网IP地址A,B,C类地址预留了私网地址A类:10.0.0.0~10.255.255.255B类:172.16.0.0~172.31.255.255C类: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 COMPONENTfile://component_validate_password;# mysql关闭强密码验证,生产环境不需要CREATEUSERwordpresslocalhostIDENTIFIED BY123456;# 生产环境不使用简单密码GRANT ALL PRIVILEGES ON wordpress.* TOwordpresslocalhost;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.baks/^(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# 美化终端提示符永久生效echoPS1\[\033[1;36m\][\u\h\t\w]\\$\[\033[0m\]~/.bashrcsource~/.bashrc# 终端重新连接rootwordpress:~#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 listen9000# 如果nginx和php-fpm安装在同一台服务器,删除前方;启用只允许本机连接,不开启默认任何主机都可以连接listen.allowed_clients127.0.0.1vim/etc/php/8.3/fpm/php.ini date.timezoneAsia/Shanghai#修改时区# 修改文件上传大小限制post_max_size128M upload_max_filesize128M# 修改 PHP 脚本纯代码最大执行时长max_execution_time360# 接收 解析客户端请求数据最长耗时max_input_time600# 配置完成重启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;CREATEUSERwordpresslocalhostIDENTIFIED BY123456;GRANT ALL PRIVILEGES ON wordpress.* TOwordpresslocalhost;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登录管理后台,可进行各种网站配置,发布博文等,部署完成2.8 测试完成释放实例