一、源码编译全套实操(三步编译:configure → make → make install,以 nginx 为例)
1、安装编译依赖
bash
运行
#安装gcc编译环境、nginx依赖包
yum install -y gcc gcc-c++ pcre-devel zlib-devel openssl-devel
#注释:gcc是C语言编译器,缺少会configure报错、make失败
#案例:执行上面整行命令
2、下载源码包
bash
运行
#下载nginx源码
wget http://nginx.org/download/nginx-1.24.0.tar.gz
#无wget:yum install wget -y
#解压
tar zxf nginx-1.24.0.tar.gz
cd nginx-1.24.0
#案例:逐条执行
3、configure 预编译配置(指定安装目录)
bash
运行
./configure --prefix=/usr/local/nginx
#--prefix:自定义软件安装路径,企业规范,方便卸载
#报错排查:缺依赖→回头安装上面devel类依赖包
#案例:执行配置,无error即成功
4、编译 + 安装
bash
运行
make #编译(CPU编译源码,耗时几十秒)
make install #把编译好的程序复制到--prefix目录
#案例:连续执行两条
5、源码 nginx 启停
bash
运行
/usr/local/nginx/sbin/nginx #启动
/usr/local/nginx/sbin/nginx -s stop #停止
#案例:启动后浏览器输入本机IP访问测试
源码卸载:直接 rm -rf /usr/local/nginx 即可(无 rpm 数据库,卸载简单)
二、磁盘进阶 1:fdisk MBR 分区(小于 2T 磁盘)
bash
运行
fdisk /dev/sdb #对第二块磁盘分区,虚拟机额外加一块硬盘练习
#交互常用参数:
#n新建分区→p主分区→分区编号→起始扇区→大小+1G;w保存分区表
#p查看分区;q退出不保存
#案例:给/dev/sdb分1个1G分区/dev/sdb1
#重读分区表,不用重启
partprobe /dev/sdb
#格式化xfs文件系统
mkfs.xfs /dev/sdb1
#临时挂载
mkdir /mnt/sdb1
mount /dev/sdb1 /mnt/sdb1
#永久挂载写入/etc/fstab,blkid查看UUID
blkid /dev/sdb1
#案例:复制UUID写入fstab实现开机自动挂载
三、swap 交换分区扩容(分区 + 文件两种方式)
方式 1:分区做 swap
bash
运行
fdisk /dev/sdb #分出/dev/sdb2,分区类型改为82(swap)
mkswap /dev/sdb2 #格式化为swap
swapon /dev/sdb2 #启用swap
swapoff /dev/sdb2 #关闭swap
free -h #查看swap大小
#案例:扩容1G swap分区
方式 2:文件做 swap
bash
运行
dd if=/dev/zero of=/swapfile bs=1M count=1024 #生成1G空文件
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
#写入/etc/fstab永久挂载:/swapfile swap swap defaults 0 0
四、LVM 逻辑卷(PV→VG→LV,企业磁盘扩容必考)
1.PV 物理卷
bash
运行
pvcreate /dev/sdb1 /dev/sdc1 #把分区初始化为PV
pvdisplay #查看pv信息
#案例:准备2块分区做PV
2.VG 卷组
bash
运行
vgcreate vg_data /dev/sdb1 #创建名为vg_data的卷组
vgextend vg_data /dev/sdc1 #往vg_data追加磁盘扩容VG
vgdisplay
#案例:扩容VG容量
3.LV 逻辑卷(使用空间)
bash
运行
#从vg_data划出10G空间生成lv_data
lvcreate -L 10G -n lv_data vg_data
#扩容LV +5G
lvextend -L+5G /dev/vg_data/lv_data
#xfs文件系统刷新扩容(xfs只能扩容不能缩)
xfs_growfs /dev/vg_data/lv_data
#ext4用resize2fs /dev/vg_data/lv_data
#挂载使用
mkfs.xfs /dev/vg_data/lv_data
mkdir /mnt/lv
mount /dev/vg_data/lv_data /mnt/lv
#案例:完整从0创建LVM并扩容
五、dd 磁盘备份、MBR 损毁 + 修复(面试经典故障)
bash
运行
#1.备份系统盘MBR(前512字节,446引导+64分区表+2校验)
dd if=/dev/sda of=/root/mbr.bak bs=512 count=1
#案例:备份后保存备份文件
#2.破坏MBR(虚拟机练习!真机严禁执行)
dd if=/dev/zero of=/dev/sda bs=446 count=1
#破坏后重启系统无法开机
#3.修复:进入救援模式,挂载磁盘,反向dd恢复
dd if=/root/mbr.bak of=/dev/sda bs=512 count=1
bash
运行
#清空日志释放磁盘空间(日常运维)
> /var/log/messages
阶段 2:防火墙 firewalld + SELinux + 自建 YUM 源(下一章节,先练完上面)
第二大块:Firewalld 防火墙 + SELinux + 自建 YUM 仓库(命令 + 注释 + 实操案例,逐条上机)
一、firewalld 防火墙(CentOS7 / 欧拉默认防火墙)
1、基础启停命令
bash
运行
systemctl start firewalld # 开启防火墙
#案例:启动防火墙
systemctl stop firewalld # 关闭防火墙
systemctl enable firewalld # 开机自启
systemctl disable firewalld # 取消开机自启
systemctl status firewalld # 查看运行状态
#案例:查看当前防火墙状态
两个模式:
runtime临时生效(重启失效)、permanent永久生效(必须重载)
2、区域常用操作(默认 public)
bash
运行
firewall-cmd --get-default-zone # 查看默认区域
#案例:查看默认zone
firewall-cmd --set-default-zone=public # 修改默认区域
firewall-cmd --get-zones # 列出所有区域
3、放行端口(重点实操)
bash
运行
#临时放行80端口
firewall-cmd --add-port=80/tcp
#永久放行80端口,需要重载
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload # 重载永久配置生效
#案例:永久放行80、443端口
firewall-cmd --permanent --add-port={80,443}/tcp
firewall-cmd --reload
#删除端口规则
firewall-cmd --permanent --remove-port=80/tcp
firewall-cmd --reload
#查看放行端口
firewall-cmd --list-ports
4、放行服务名(比端口方便)
bash
运行
#永久放行http服务
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
#案例:放行ssh、httpd
firewall-cmd --permanent --add-service={ssh,http}
firewall-cmd --reload
#查看放行服务
firewall-cmd --list-services
5、IP 访问控制(富规则 rich-rule)
bash
运行
#只允许192.168.1.10访问本机80端口,永久
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.10" port protocol="tcp" port="80" accept'
firewall-cmd --reload
#案例:禁止10.0.0.5访问所有端口
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.0.5" reject'
firewall-cmd --reload
#查看富规则
firewall-cmd --list-rich-rules
二、SELinux 安全子系统(生产环境必开,三模式:enforcing/permissive/disabled)
1、临时切换模式(重启失效)
bash
运行
getenforce # 查看当前selinux状态
#案例:查看默认状态
setenforce 1 # 1=enforcing强制拦截
setenforce 0 # 0=permissive警告不拦截
#案例:临时关闭selinux告警
2、永久修改配置(/etc/selinux/config,改完重启生效)
bash
运行
vi /etc/selinux/config
#SELINUX=enforcing 开启
#SELINUX=permissive 警告
#SELINUX=disabled 彻底关闭
#案例:改为SELINUX=permissive,reboot重启生效
3、上下文管理(文件安全标签,网站文件部署高频)
bash
运行
#查看文件selinux上下文
ls -Z /var/www/html/
#案例:查看http网站目录标签
#修改文件上下文
chcon -R -t httpd_sys_content_t /data/web/
#案例:自定义网站目录修改标签
#永久恢复默认上下文(还原系统默认标签)
restorecon -R /data/web/
4、布尔值(selinux 开关,控制程序权限)
bash
运行
getsebool -a | grep ftp # 查找ftp相关布尔规则
setsebool -P ftpd_full_access on # -P永久开启
#案例:开启ftp读写权限
三、YUM 源配置 + 自建本地 YUM 仓库 createrepo
1、替换阿里云网络 yum 源(CentOS7)
bash
运行
#备份原yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak
#下载阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
#清理缓存、重建缓存
yum clean all && yum makecache
#案例:更换yum源后测试yum install tree -y
2、自建本地 YUM 仓库(无外网服务器离线装软件,createrepo)
bash
运行
#1.安装仓库生成工具
yum install createrepo -y
#2.创建仓库目录,放入所有rpm包
mkdir -p /yumrepo/Packages
#把所有rpm安装包全部丢进Packages
#3.生成仓库索引
createrepo /yumrepo
#案例:createrepo生成仓库数据
#4.编写本地repo配置文件
vi /etc/yum.repos.d/local.repo
[local]
name=Local-YUM
baseurl=file:///yumrepo
gpgcheck=0
enabled=1
#5.刷新缓存
yum clean all && yum makecache
#测试:yum install xxx -y 从本地仓库安装
四、SSH 安全加固(运维生产必备实操)
bash
运行
vi /etc/ssh/sshd_config
#1.修改默认端口 Port 2222(不能小于1024)
#2.禁止root远程登录 PermitRootLogin no
#3.禁用密码登录 PasswordAuthentication no(密钥登录开启后)
#改完重载sshd
systemctl restart sshd
#案例:修改ssh端口22→2222,防火墙放行2222端口
firewall-cmd --permanent --add-port=2222/tcp
firewall-cmd --reload
#远程连接:ssh -p2222 用户名@IP
一、Shell 脚本是什么?
就是把一堆 Linux 命令按顺序写进一个文件,让系统自动执行,不用你手动一条一条敲。
二、第一个脚本:Hello World(必练)
1. 创建脚本
bash
运行
vi first.sh
2. 写入内容(固定格式)
bash
运行
#!/bin/bash
# 这是我的第一个脚本
echo "Hello World"
echo "我正在学习Shell脚本"
3. 加执行权限
bash
运行
chmod +x first.sh
4. 运行
bash
运行
./first.sh
✅ 运行结果
plaintext
Hello World
我正在学习Shell脚本
三、Shell 核心:变量(存储数据)
1. 定义变量
bash
运行
name="张三"
age=20
2. 使用变量(加 $)
bash
运行
echo "我的名字:$name"
echo "我的年龄:$age"
实操脚本 var.sh
bash
运行
#!/bin/bash
ip=192.168.1.10
echo "服务器IP地址:$ip"
运行:
plaintext
./var.sh
四、位置参数(给脚本传参,超常用)
命令:
plaintext
./test.sh 参数1 参数2 参数3
脚本里用:
plaintext
$1 = 参数1
$2 = 参数2
$3 = 参数3
$# = 总个数
$0 = 脚本名字
实操脚本 arg.sh
bash
运行
#!/bin/bash
echo "第一个参数:$1"
echo "第二个参数:$2"
echo "总参数个数:$#"
运行:
bash
运行
./arg.sh 张三 18
结果:
plaintext
第一个参数:张三
第二个参数:18
总参数个数:2
五、if 判断(脚本灵魂)
语法
bash
运行
if [ 条件 ];then
执行命令
fi
常用判断
plaintext
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-f 文件是否存在
-d 目录是否存在
实操脚本 if.sh
bash
运行
#!/bin/bash
if [ $1 -gt 18 ];then
echo "已成年"
else
echo "未成年"
fi
运行:
bash
运行
./if.sh 20
六、for 循环(批量执行,自动化神器)
语法
bash
运行
for 变量 in 列表
do
执行命令
done
实操:批量创建 10 个用户
bash
运行
#!/bin/bash
for i in {1..10}
do
useradd test$i
echo "创建用户 test$i 成功"
done
运行:
plaintext
./user.sh
七、while 循环(条件循环)
bash
运行
#!/bin/bash
i=1
while [ $i -le 5 ]
do
echo "循环第 $i 次"
i=$((i+1))
done
八、企业实战脚本(你直接能用)
1. 磁盘使用率监控脚本
bash
运行
#!/bin/bash
use=$(df -h | grep /dev/sda1 | awk '{print $5}' | tr -d %)
if [ $use -gt 80 ];then
echo "磁盘使用率超80%,请清理!"
else
echo "磁盘正常"
fi
2. 自动备份文件脚本
bash
运行
#!/bin/bash
tar zcf /backup/$(date +%F).tar.gz /data
echo "备份完成!"
九、把脚本加入定时任务(at + crontab)
每天凌晨 3 点备份
bash
运行
crontab -e
0 3 * * * /root/backup.sh
10 分钟后执行一次
bash
运行
at now +10 minutes
/root/test.sh
Ctrl+D
计算机网络实操 + 三大服务部署(Nginx、vsftpd、DNS)
第一部分:Linux 网络排查命令(全上机实操)
bash
运行
#1.查看网卡IP、MAC
ip a
#案例:查看ens33网卡IP地址
#2.连通性测试,-c指定发包数量
ping www.baidu.com -c4
#案例:ping网关IP,测试内网连通
#3.路由查看
ip route
route -n
#案例:查看本机默认网关
#4.路由追踪,排查断在哪一跳
yum install traceroute -y
traceroute www.baidu.com
#5.DNS解析排查
yum install bind-utils -y
nslookup baidu.com
dig baidu.com
#案例:查看域名对应IP
#6.端口连通测试
yum install telnet -y
telnet 192.168.1.10 80
#7.端口、进程占用查询
ss -antup | grep 80
#案例:查询80端口由哪个程序占用
补充知识点
- 三层:IP、路由、ping
- 四层:端口、TCP/UDP、ss/telnet
第二部分:Nginx 部署(YUM 安装 + 源码安装两套)
方式 1:yum 一键安装
bash
运行
#安装nginx
yum install nginx -y
#启停管理
systemctl start nginx
systemctl enable nginx
systemctl status nginx
#防火墙放行80
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
#浏览器输入服务器IP访问默认页面
#站点目录:/usr/share/nginx/html
#配置文件:/etc/nginx/nginx.conf
#案例:echo "我的测试网站" > /usr/share/nginx/html/index.html
方式 2:源码编译安装(沿用之前编译步骤)
bash
运行
#依赖
yum install gcc gcc-c++ pcre-devel openssl-devel zlib-devel -y
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar zxf nginx-1.24.0.tar.gz
cd nginx-1.24.0
./configure --prefix=/usr/local/nginx
make && make install
#启停
/usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx -s stop
#防火墙放行80后IP访问
Nginx 虚拟主机实操(一台服务器多个网站)
bash
运行
#修改配置/usr/local/nginx/conf/nginx.conf
#示例两个站点
server {
listen 80;
server_name www.a.com;
root /data/a;
}
server {
listen 80;
server_name www.b.com;
root /data/b;
}
#创建站点目录
mkdir -p /data/a /data/b
echo "A站点" >/data/a/index.html
echo "B站点" >/data/b/index.html
#重载配置
/usr/local/nginx/sbin/nginx -s reload
#本机hosts绑定域名测试
第三部分:vsftpd 文件服务器(FTP)
bash
运行
#安装软件
yum install vsftpd -y
systemctl start vsftpd
systemctl enable vsftpd
#防火墙放行ftp服务
firewall-cmd --permanent --add-service=ftp
firewall-cmd --reload
#默认共享目录:/var/ftp
#案例:创建测试文件
touch /var/ftp/testfile.txt
#客户端测试:ftp 服务器IP
yum install ftp -y
ftp 127.0.0.1
#匿名用户默认无需密码登录,只能下载/var/ftp内文件
本地用户登录(用系统账号登录 ftp)
bash
运行
useradd ftpuser
echo 123456|passwd --stdin ftpuser
#客户端ftp登录,输入ftpuser和密码,可读写自家家目录
第四部分:简易 DNS 服务(bind)
bash
运行
#安装DNS软件包
yum install bind bind-chroot -y
systemctl start named
systemctl enable named
#放行DNS 53端口
firewall-cmd --permanent --add-port=53/udp
firewall-cmd --reload
#主配置:/etc/named.conf
#区域配置:/etc/named.rfc1912.zones
#解析数据文件:/var/named/
#实操:自建test.com域名解析,A记录指向192.168.1.10
#修改区域文件后重载服务
systemctl restart named
#本机修改/etc/resolv.conf nameserver=127.0.0.1
nslookup www.test.com