linux下一步学习内容
一、源码编译全套实操(三步编译: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块分区做PV2.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=1bash
运行
#清空日志释放磁盘空间(日常运维) > /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-ports4、放行服务名(比端口方便)
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-services5、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 -y2、自建本地 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.sh2. 写入内容(固定格式)
bash
运行
#!/bin/bash # 这是我的第一个脚本 echo "Hello World" echo "我正在学习Shell脚本"3. 加执行权限
bash
运行
chmod +x first.sh4. 运行
bash
运行
./first.sh✅运行结果
plaintext
Hello World 我正在学习Shell脚本三、Shell 核心:变量(存储数据)
1. 定义变量
bash
运行
name="张三" age=202. 使用变量(加 $)
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 "磁盘正常" fi2. 自动备份文件脚本
bash
运行
#!/bin/bash tar zcf /backup/$(date +%F).tar.gz /data echo "备份完成!"九、把脚本加入定时任务(at + crontab)
每天凌晨 3 点备份
bash
运行
crontab -e 0 3 * * * /root/backup.sh10 分钟后执行一次
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