系统 cat /etc/redhat-release# 或 cat /etc/os-release yuminstall vim -yvim --version| head -n1 date yuminstall -y ntp ntpdate pool.ntp.org# adjust time server 84.16.67.12 offset 0.001509 sec # iP段起始 iP段结束 归属地 网络 Windows子网掩码 Linux子网掩码 # 84.16.64.0 84.16.95.255 瑞士日内瓦州 255.255.224.0 84.16.64.0/19 网络 # RHEL/CentOS 从很早(5/6 时代)就使用 network-scripts(由 network.service 管理)。 # ✅ CentOS 7 默认安装时仍启用 network-scripts,但底层其实已部分依赖 NetworkManager # RHEL/CentOS 8 起,network-scripts 被官方标记为“弃用(deprecated)” # RHEL 9 / Rocky Linux 9 / AlmaLinux 9 中,network-scripts 默认不再安装! # 特性network-scripts NetworkManager # 适用场景服务器、静态网络、无人值守环境 桌面、笔记本、动态网络(WiFi/移动热点) # 配置方式手动编辑文本文件 命令行 (nmcli)、TUI (nmtui)、GUI、D-Bus API # 禁用 NetworkManager 对该接口的控制 echo "NM_CONTROLLED=no" >> /etc/sysconfig/network-scripts/ifcfg-ens33# 停止并禁用 NetworkManager(可选,但不推荐完全关闭) systemctl stop NetworkManager systemctl disable NetworkManager# 使用传统网络服务 systemctlenable network systemctl restart network# 第一种 使用传统网络服务 network # /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE = EthernetPROXY_METHOD = noneBROWSER_ONLY = noBOOTPROTO = staticDEFROUTE = yesIPV4_FAILURE_FATAL = noIPV6INIT = yesIPV6_AUTOCONF = yesIPV6_DEFROUTE = yesIPV6_FAILURE_FATAL = noIPV6_ADDR_GEN_MODE = stable-privacyNAME = ens33UUID = 3b68fac-94fc-4f8d-af84-f99c3c33ec3DEVICE = ens33ONBOOT = yesIPADDR = 10.0 .0.150NETMASK = 255.0 .0.0GATEWAY = 10.0 .0.2DNS1 = 8.8 .8.8DNS2 = 114.114 .114.114PEERDNS = no# TYPE=Ethernet接口类型为以太网 # BOOTPROTO=static使用静态 IP 地址(非 DHCP) # DEFROUTE=yes设置此接口为默认路由出口 # ONBOOT=yes开机时自动启用该网络接口 # NAME=ens33接口名称 # DEVICE=ens33实际设备名 # UUID=唯一标识符,由 NetworkManager 分配 # TPADDR=10.0.0.150注意:这是错误写法!应为 IPADDR # NETMASK=255.0.0.0子网掩码为 /8,即整个 10.0.0.0/8 网段 # GATEWAY=10.0.0.2默认网关地址 # DNS1=8.8.8.8, DNS2=114.114.114.114DNS 服务器 # PEERDNS=no不允许 DHCP 覆盖 DNS 设置(即使使用 static 也保留) systemctl restart network# 使用 NetworkManager nmcli # nmcli con modify ens33 ipv4.gateway "10.0.0.2" # nmcli con up ens33 # 1. 统一改成静态 IP nmcli connection mod ens33 ipv4.addresses10.0 .0.150/8# 2. 网关 nmcli connection mod ens33 ipv4.gateway10.0 .0.2# 3. DNS,多个用空格隔开 nmcli connection mod ens33 ipv4.dns"8.8.8.8 114.114.114.114" DNS 管理,自动写入 /etc/resolv.conf(可能被覆盖)cat /etc/resolv.conf# 4. 把获取方式从 dhcp 改成 manual(关键一步) nmcli connection mod ens33 ipv4.method manual# 5. 让配置立即生效(会断 1~2 秒) nmcli connection down ens33&& nmcli connection up ens33# nmcli con reload && nmcli con up ens33 # 给物理网卡 ens33 新建一个 NetworkManager 连接(配置文件),连接名叫 ens33,类型为以太网。 # /etc/NetworkManager/system-connections/ 里生成一个 ens33.nmconnection 文件 nmcli conadd type ethernet con-name ens33 ifname ens33# nmcli con up/down/mod 都用这个名字 nmcli con mod ens33 ipv4.addresses10.0 .0.150/8 nmcli con mod ens33 ipv4.gateway10.0 .0.2 nmcli con mod ens33 ipv4.dns"8.8.8.8,114.114.114.114" nmcli con mod ens33 ipv4.method manual nmcli con up ens33ip route showip route show defaultip routeadd default via10.0 .0.2 dev ens33# ip route add使用 ip 命令添加一条路由规则 # default表示“默认路由”,即目标为 0.0.0.0/0(所有 IPv4 地址) # via 10.0.0.2下一跳(网关)的 IP 地址是 10.0.0.2 # dev ens33指定出口网络设备为 ens33(可选,但推荐明确指定 ip route del default[ root@localhost yum.repos.d] # ip route show default via10.0 .0.2 dev ens33 proto static metric100 10.0 .0.0/8 dev ens33 proto kernel scopelink src10.0 .0.150 metric100 [ root@localhost yum.repos.d] # ip route show default default via10.0 .0.2 dev ens33 proto static metric100 10.0 .0.0/8 dev ens33 proto kernel scopelink src10.0 .0.150 metric100 [ root@localhost yum.repos.d] # cat /etc/resolv.conf # Generated by NetworkManager nameserver8.8 .8.8 nameserver114.114 .114.114主机名 hostnamectlhostname hostnamectl set-hostname elk152 永久主机名存储在:/etc/hostname28 awk '{print$2 }' firewalld.conf29 cat firewalld.conf30 hostnamectl31 hostname 32 hostnamectl set-hostname elk15233 hostname 34 history 29 hostnamectl set-hostname elk15030 echo "10.0.0.152 elk152" >> /etc/hosts31 ping elk152 32 ping elk152# 添加主机名 cat > /etc/hosts<< 'EOF' 10.0.0.150 elk150 10.0.0.151 elk151 10.0.0.152 elk152 EOF 终端颜色修改 # 3. 修改终端颜色 cat << 'EOF'>> ~/.bashrc PS1='\[\e[34;1m\]\u@\h\[\e[32;1m\]:\[\e[32;1m\]\w\[\e[0m\] \$ ' EOF source ~/.bashrc# \[\e[34;1m\] 高亮蓝色 → 用户名 \u 和 @ 主机 \h # \[\e[32;1m\] 高亮绿色 → 冒号、路径 \w # \[\e[0m\] 重置颜色 → 后续命令回显保持默认色 # 最终效果示例: # user@host:/home/user $ (蓝@绿,路径绿色) yum 源 # 1. 清理旧缓存 & 重建 yum clean all yum makecache# 2. 修改 yum 源为清华镜像 sed -e's|#mirrormlist=|mirrormlist=|g' \ -e's|baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g' \ -i.bak /etc/yum.repos.d/CentOS-*.repo# -i.bak # 原地修改前先备份,生成 .bak 文件(例如 CentOS-Base.repo.bak),改错可随时回滚。 # 两条替换表达式用 -e 串起来: # a) s|#mirrormlist=|mirrormlist=|g # 把被注释掉的 mirrormlist= 打开,恢复镜像列表功能。 # b) s|baseurl=http://mirror.centos.org|baseurl=https://mirrors.tuna.tsinghua.edu.cn|g # 把官方 http://mirror.centos.org/... 换成清华 HTTPS 镜像站地址。 # 目标文件 # /etc/yum.repos.d/CentOS-*.repo 覆盖 Base、Updates、Extras、AppStream 等所有官方源。 # https://developer.aliyun.com/article/675241 # CentOS 5 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-5.repo# CentOS 6 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo# CentOS 7 wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repowget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/CentOS-Base.repo1 ip a2 yuminstall vim -y3 vim 4 cd /etc/yum.repos.d/5 mkdir /etc/yum.repos.d/backup7 mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup11 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo13 yum clean all14 yum makecache本地离线安装 # 安装 bind-utils 以使用 nslookup # bind-utils 包含常用 DNS 工具:nslookup, dig, host 等。 nslookup mirrors.aliyun.comgrep keepcache /etc/yum.confsed -i's/keepcache=0/keepcache=1/' /etc/yum.conf# rpm 包会留在 /var/cache/yum/*/packages/(CentOS 7 默认路径)。 # yum install/yum update 时, # 下次再装相同版本,YUM 会优先用本地缓存,不再联网下载。 # 如果没有这一行,就追加 grep -q'^keepcache=' /etc/yum.conf|| echo 'keepcache=1' >> /etc/yum.conf yuminstall -y\ unzip \ wget \ lrzsz\ nc \ nmap\ vim \ bash-completion\ tree# 创建目标目录 mkdir -p /opt/offline-pkgs# 复制所有已缓存的 RPM 包(去重) find /var/cache/yum -name"*.rpm" -execcp { } /opt/offline-pkgs/\ ; # 去除重复文件(同名即视为重复) cd /opt/offline-pkgs root@localhost opt] # rm -f offline-tools-centos7.tar.gz [ root@localhost opt] # tar -czvf offline-tools-centos7.tar.gz offline-pkgs offline-pkgs/ offline-pkgs/bash-completion-2.1-8.el7.noarch.rpm offline-pkgs/lrzsz-0.12.20-36.el7.x86_64.rpm offline-pkgs/nmap-6.40-19.el7.x86_64.rpm offline-pkgs/nmap-ncat-6.40-19.el7.x86_64.rpm offline-pkgs/tree-1.6.0-10.el7.x86_64.rpm offline-pkgs/wget-1.14-18.el7_6.1.x86_64.rpm offline-pkgs/libpcap-1.5.3-13.el7_9.x86_64.rpm offline-pkgs/unzip-6.0-24.el7_9.x86_64.rpm[ root@localhost opt] # du -h 5 .3M ./offline-pkgs 11M. [ root@localhost opt] # ll 总用量5208 drwxr-xr-x.2 root root4096 12 月18 11 :24 offline-pkgs -rw-r--r--.1 root root5325715 12 月18 11 :31 offline-tools-centos7.tar.gz# 验证大小(应该几 MB) ls -lh offline-tools-centos7.tar.gz# 第二种方式 yuminstall -y yum-utils# 创建保存目录 mkdir -p /root/vim-offline# 下载 vim 及其所有依赖到指定目录 yuminstall --downloadonly --downloaddir= /root/vim-offlinevim # 1. 开启缓存 echo "keepcache=1" >> /etc/yum.conf# 2. 安装工具(或直接用 yumdownloader) yuminstall -y yum-utils yumdownloader --resolve --destdir= /opt/offline-pkgs\ unzip wget lrzsznc nmapvim bash-completion tree# 3. 打包 cd /opt&& tar -czvf offline-tools-centos7.tar.gz offline-pkgs# 查看压缩包内文件列表 tar -tzvf offline-tools-centos7.tar.gz# 递归删除选项 -r(或 -R) rm -rf offline-pkgs2/scp 安装传送文件,rpm 离线安装 # 指定端口 scp -P2222 /opt/offline-tools-centos7.tar.gz root@10.0.0.151:/root/ root@elk150:/opt# scp /opt/offline-tools-centos7.tar.gz root@10.0.0.151:/root/ #The authenticity of host '10.0.0.151 (10.0.0.151)' can't be established. #ECDSA key fingerprint is SHA256:GhzgfZoIYt+d8KM6z2pPFZNU1fB/C6ljAosRI8+gDVA. #ECDSA key fingerprint is MD5:9b:a5:84:0d:fa:42:df:b8:cf:f4:79:df:2e:f9:47:a0. ls -lh /root/offline-tools-centos7.tar.gz# 指定目标目录 tar xf offline_rpms.tgz -C /opt/repotar -xzvf offline-tools-centos7.tar.gz# 安装所有 RPM(自动解决依赖) cd offline-pkgs yum localinstall -y *.rpm# 在 151 主机上临时关闭防火墙(测试用) systemctl stop firewalld# 或永久放行 firewall-cmd --permanent --add-service= ssh# firewall-cmd --reload指令的作用 # --permanent 把规则写进 /etc/firewalld/ 下的 XML 配置文件,下次开机/重载依然生效。 # --add-service=ssh 等价于放行 22/tcp(firewalld 内置了 ssh 服务定义) 禁用 sshd 的 DNS 解析 # sshd修改 sed -i's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_configsed -i's/#GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_configgrep "GSSAPIAuthentication" /etc/ssh/sshd_config# 方法二 # 禁用 UseDNS(兼容空格) sed -i's/^#*UseDNS[[:space:]]*yes/UseDNS no/' /etc/ssh/sshd_config# 禁用 GSSAPIAuthentication(兼容空格) sed -i's/^#*GSSAPIAuthentication[[:space:]]*yes/GSSAPIAuthentication no/' /etc/ssh/sshd_config# ^#*:匹配行首任意数量的 #(包括没有) # [[:space:]]*:匹配任意数量的空格或制表符 # 这样能覆盖 #GSSAPI...、# GSSAPI...、GSSAPI... 等多种形式 禁用防火墙 systemctl disable --now firewalld&& systemctl is-enabled firewalld systemctl status firewalld# systemctl disable --now firewalld # --now:立即停止服务,并设置开机不启动 # 效果等同于 systemctl stop firewalld && systemctl disable firewalld # systemctl is-enabled firewalld # 返回 disabled 表示成功禁用 # systemctl status firewalld # 查看服务状态(应显示 inactive) systemctl stop firewalld systemctl disable firewalldSELinux 内核强制访问控制 # SELinux 在 enforcing 模式下会: # 阻止进程访问非标准端口(如 Elasticsearch 的 9200) # 维度SELinux 防火墙 # 工作层级内核强制访问控制 (MAC)网络层/传输层包过滤 # 保护对象进程、文件、目录、端口、系统 调用网络连接(源IP、端口、协议) # 典型场景httpd 只能访问 /var/www/html,不能写 /etc/passwd;即使 root 被黑,也能挡住横向移动只允许 22/80/443 入站,屏蔽 3306 sed -i's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/configgrep "SELINUX=" /etc/selinux/config setenforce0 getenforce# 每个进程、文件、端口都被打上 安全标签(Security Context),只有策略明确允许的操作才能执行。 # 对象安全上下文示例 # 文件system_u:object_r:httpd_sys_content_t:s0 # 进程unconfined_u:unconfined_r:httpd_t:s0 # 端口system_u:object_r:http_port_t:s0 # 字段当前值含义 # SELinux statusenabledSELinux 功能已启用(内核支持) # Current modepermissive当前运行模式:宽容模式 → 不阻止操作,只记录日志 # Mode from config fileenforcing配置文件 /etc/selinux/config 中设置的是 enforcing # Loaded policy nametargeted使用的是“针对性策略”(只保护关键服务) ssh登录 cat > /etc/hosts<< 'EOF' 10.0.0.150 elk150 10.0.0.151 elk151 10.0.0.152 elk152 EOF # 生成 SSH 密钥(如果还没有) ssh-keygen -t rsa -N"" -f ~/.ssh/id_rsa# 将公钥复制到 elk151 和 elk152(假设都用 root) ssh-copy-id root@10.0.0.151 ssh-copy-id root@10.0.0.152for (( host_id= 150 ; host_id<= 152 ; host_id++ )) ; do ssh-copy-id elk$(( host_id)) ; done yum -yinstall rsync yumdownloader --resolve --destdir= /opt/offline-pkgsrsync ssh elk151 root@elk150:/usr/local/sbin# /usr/local/sbin/data_rsync.sh /mnt/text.txt == = rsyncing elk150: text.txt== = 命令执行成功!== = rsyncing elk151: text.txt== = 命令执行成功!== = rsyncing elk152: text.txt== = 命令执行成功! root@elk150:/usr/local/sbin# 集群同步脚本 #!/bin/bash # Author: gonggbb # Description: 自动同步文件到集群其他节点 if [ $# -ne1 ] ; then echo "Usage:$0 /path/to/file(绝对路径)" exit 1 fi # 判断文件是否存在 if [ ! -e"$1 " ] ; then echo "[$1 ]dir or file not find!" exit 1 fi # 获取父路径 fullpath = $( dirname "$1 " ) basename = $( basename "$1 " ) # 进入父路径 cd "$fullpath " # 循环同步到其他两个节点 for (( host_id= 150 ; host_id<= 152 ; host_id++ )) ; do # 使用终端输出变为绿色 tput setaf2 echo "=== rsyncing elk$(( host_id)) :$basename ===" tput setaf7 # 将数据同步到其他两个节点 rsync -az$basename ` whoami ` @elk$(( host_id)) : $fullpath if [ $? -eq0 ] ; then echo "命令执行成功!" fi done sed # pattern { action } # 满足 pattern 才执行 action # pattern # 缺省 action = 打印整行 # { action } # 缺省 pattern = 对所有行生效 # 行号、字段、分隔符 # $0 整行 # 1第1列... NF 最后一列 # NF 当前行字段数 # NR 已读行号(从1开始) # FNR 多个文件时各自的行号 # FS 输入列分隔符(-F 或 BEGIN 里改) # OFS 输出列分隔符 # length(s) 字符串长度 # substr(s,m,n) 子串 # split(s,a,sep) 把 s 按 sep 拆到数组 a # system(cmd) 调用系统命令 # tolower/toupper 大小写转换 # int() 取整 # rand() 0-1 随机数(需 srand() 播种子) awk '{print$1 ,$3 }' file