系统
bash
复制代码
cat /etc/redhat-release
# 或
cat /etc/os-release
yum install vim -y
vim --version | head -n 1
时钟
bash
复制代码
date
yum install -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
#!/bin/bash
# 时间同步部署脚本
echo "=== 安装工具 ==="
yum -y install vim net-tools chrony
echo "=== 修改 chrony 配置 ==="
sed -i '/server/d' /etc/chrony.conf
cat >> /etc/chrony.conf << 'EOF'
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
EOF
chronyc sources -v
echo "=== 启动并开机自启 chronyd ==="
systemctl enable --now chronyd
echo "=== 查看状态 ==="
systemctl status chronyd
timedatectl
# chronyc tracking查看当前时间偏移情况
# chronyc sources查看所有 NTP 源状态
# chronyc sourcestats查看各源的统计信息
# chronyc activity查看活动状态
# timedatectl set-timezone Asia/Shanghai设置时区
# 手动强制同步一次
chronyc makestep
# 或使用旧方法:
ntpdate ntp1.aliyun.com
47 ll
48 yum -y install vim net-tools chrony
49 cat >> /etc/chrony.conf << 'EOF'
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
server ntp3.aliyun.com iburst
server ntp4.aliyun.com iburst
server ntp5.aliyun.com iburst
EOF
50 systemctl enable --now chronyd
51 systemctl status chronyd
52 timedatectl
53 chronyc sources -v
54 systemctl restart chronyd
55 chronyc sources -v
56 systemctl status chronyd
# yum install -y ntp ; yum -y install vim net-tools chrony
# 安装主程序ntp(即 ntpd);chrony(即 chronyd)
# 时间同步服务传统 NTP 守护进程(ntpd);现代轻量级时间同步工具(chronyd)
# 额外工具无;同时安装 vim(编辑器)、net-tools(网络工具如 ifconfig, netstat)
# MS状态标记(Mode & State)
# Name/IP addressNTP 服务器名称或 IP 地址
# Stratum层级(越小越好,通常 1~3)
# Poll轮询间隔(单位为秒,2^n),如 6 表示 64 秒一次
# Reach可达性(八进制),值越大表示连接越稳定
# LastRx上次接收到数据包的时间(单位:分钟)
# Last sample最近一次时间偏移量和误差
# ^该源是 服务器模式(server),即我们从它获取时间
# *当前 主同步源(active source),正在用来校准本地时间
# +备用源(peer),未被选中但可用
# #本地时钟(仅在无外部源时使用)
# ?不可达(网络问题)
# X时间可能错误(精度差或延迟高)
# -服务器或对等体已关闭
# ~候选源,可能被选为主源
# ntp / ntpd:
# 老牌 NTP 实现,历史悠久。
# 在 CentOS 6 及更早版本中是默认时间同步工具。
# 在 RHEL/CentOS 8+ 中已被移除,不再维护。
# chrony:
# 现代替代方案,专为 不稳定网络、虚拟化、容器环境 设计。
# 自 RHEL 7 / CentOS 7 起成为默认 NTP 客户端。
# 支持更快同步、更好的时钟漂移补偿。
root@elk152:~ # ^C
root@elk152:~ # chronyc sources -v
210 Number of sources = 6
.-- Source mode '^' = server, '=' = peer, '#' = local clock.
/ .- Source state '*' = current synced, '+' = combined , '-' = not combined,
| / '?' = unreachable, 'x' = time may be in error, '~' = time too variable.
|| .- xxxx [ yyyy ] +/- zzzz
|| Reachability register (octal) -. | xxxx = adjusted offset,
|| Log2(Polling interval) --. | | yyyy = measured offset,
|| \ | | zzzz = estimated error.
|| | | \
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- ntp8.flashdance.cx 2 6 377 65 +1646us[+1030us] +/- 124ms
^- a.chl.la 2 6 37 1 +3237us[+3237us] +/- 114ms
^- ntp7.flashdance.cx 2 6 257 63 +4741us[+4124us] +/- 121ms
^- ntp.ams1.nl.leaseweb.net 3 6 377 64 +6028us[+5411us] +/- 236ms
^* 116.62.13.223 2 6 377 2 +1513us[ +870us] +/- 30ms
^+ 203.107.6.88 2 6 377 2 -2020us[-2662us] +/- 33ms
root@elk152:~ # arp -a
gateway (10.0.0.2) at 00:50:56:e5:9e:a3 [ether] on ens33
elk150 (10.0.0.150) at 00:50:56:22:7b:40 [ether] on ens33
? (10.0.0.1) at 00:50:56:c0:00:08 [ether] on ens33
root@elk15
# Reference ID743E0DDF (116.62.13.223)当前同步的 NTP 服务器(阿里云)✅ 正常
# Stratum3时间源层级(1 最优,≤3 可接受)✅ 可接受
# System time0.000363132 seconds slow系统比 NTP 慢了 0.363 毫秒✅ 非常好(<1ms)
# Last offset-0.1196 ms上次校正的偏移量✅ 很小
# RMS offset7.78 ms长期平均偏移(Root Mean Square)⚠️ 略高,但通常可接受
# Frequency16.559 ppm slow系统时钟频率偏差(每百万秒慢 16.559 秒)✅ 在合理范围(一般 <100 ppm)
# Residual freq+0.066 ppm当前未补偿的残余频率误差✅ 几乎为零,很好
# Skew4.255 ppm频率不确定性(越小越好)✅ 很低,稳定
# Root delay34.2 ms到 Stratum 1 源的总网络延迟✅ 国内访问阿里云正常
# Root dispersion10.97 ms时间源的最大可能误差✅ 良好(<20ms)
# Update interval65.2 s同步间隔(约 64 秒)✅ 默认值
# Leap statusNormal无闰秒事件✅ 正常
网络
bash
复制代码
# 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
# 使用传统网络服务
systemctl enable network
systemctl restart network
# 第一种 使用传统网络服务 network
# /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=static
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens33
UUID=3b68fac-94fc-4f8d-af84-f99c3c33ec3
DEVICE=ens33
ONBOOT=yes
IPADDR=10.0.0.150
NETMASK=255.0.0.0
GATEWAY=10.0.0.2
DNS1=8.8.8.8
DNS2=114.114.114.114
PEERDNS=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.addresses 10.0.0.150/8
# 2. 网关
nmcli connection mod ens33 ipv4.gateway 10.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 con add type ethernet con-name ens33 ifname ens33
# nmcli con up/down/mod 都用这个名字
nmcli con mod ens33 ipv4.addresses 10.0.0.150/8
nmcli con mod ens33 ipv4.gateway 10.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 ens33
ip route show
ip route show default
ip route add default via 10.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 via 10.0.0.2 dev ens33 proto static metric 100
10.0.0.0/8 dev ens33 proto kernel scope link src 10.0.0.150 metric 100
[root@localhost yum.repos.d]# ip route show default
default via 10.0.0.2 dev ens33 proto static metric 100
10.0.0.0/8 dev ens33 proto kernel scope link src 10.0.0.150 metric 100
[root@localhost yum.repos.d]# cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 8.8.8.8
nameserver 114.114.114.114
主机名
bash
复制代码
hostnamectl
hostname
hostnamectl set-hostname elk152
永久主机名存储在:/etc/hostname
28 awk '{print $2}' firewalld.conf
29 cat firewalld.conf
30 hostnamectl
31 hostname
32 hostnamectl set-hostname elk152
33 hostname
34 history
29 hostnamectl set-hostname elk150
30 echo "10.0.0.152 elk152" >> /etc/hosts
31 ping elk 152
32 ping elk152
# 添加主机名
cat > /etc/hosts << 'EOF'
10.0.0.150 elk150
10.0.0.151 elk151
10.0.0.152 elk152
EOF
终端颜色修改
bash
复制代码
# 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 源
bash
复制代码
# 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.repo
wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/CentOS-Base.repo
1 ip a
2 yum install vim -y
3 vim
4 cd /etc/yum.repos.d/
5 mkdir /etc/yum.repos.d/backup
7 mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup
11 curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
13 yum clean all
14 yum makecache
本地离线安装
bash
复制代码
# 安装 bind-utils 以使用 nslookup
# bind-utils 包含常用 DNS 工具:nslookup, dig, host 等。
nslookup mirrors.aliyun.com
grep keepcache /etc/yum.conf
sed -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
yum install -y \
unzip \
wget \
lrzsz \
nc \
nmap \
vim \
bash-completion \
tree
# 创建目标目录
mkdir -p /opt/offline-pkgs
# 复制所有已缓存的 RPM 包(去重)
find /var/cache/yum -name "*.rpm" -exec cp {} /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 root 4096 12月 18 11:24 offline-pkgs
-rw-r--r--. 1 root root 5325715 12月 18 11:31 offline-tools-centos7.tar.gz
# 验证大小(应该几 MB)
ls -lh offline-tools-centos7.tar.gz
# 第二种方式
yum install -y yum-utils
# 创建保存目录
mkdir -p /root/vim-offline
# 下载 vim 及其所有依赖到指定目录
yum install --downloadonly --downloaddir=/root/vim-offline vim
# 1. 开启缓存
echo "keepcache=1" >> /etc/yum.conf
# 2. 安装工具(或直接用 yumdownloader)
yum install -y yum-utils
yumdownloader --resolve --destdir=/opt/offline-pkgs \
unzip wget lrzsz nc nmap vim 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 离线安装
bash
复制代码
# 指定端口
scp -P 2222 /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/repo
tar -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 解析
bash
复制代码
# sshd修改 关闭SSH登录时的DNS反向解析 关闭GSSAPI认证机制
sed -i 's/#UseDNS yes/UseDNS no/g' /etc/ssh/sshd_config
sed -i 's/#GSSAPIAuthentication yes/GSSAPIAuthentication no/g' /etc/ssh/sshd_config
grep "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 restart sshd
禁用防火墙
bash
复制代码
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 firewalld
配置指令
bash
复制代码
# 查看防火墙是否运行:
sudo systemctl status firewalld
# 如果显示 active (running) → 防火墙 开启
# 如果显示 inactive (dead) → 防火墙 关闭
# 查看当前开放的端口和服务:
sudo firewall-cmd --list-all
# 临时开放 9200 端口(重启后失效):
sudo firewall-cmd --add-port=9200/tcp
# 永久开放 9200 端口:
sudo firewall-cmd --permanent --add-port=9200/tcp
sudo firewall-cmd --reload
# 如果你使用的是传统的 iptables
# 查看规则:
sudo iptables -L -n -v
# 但现代系统一般不再直接用 iptables,而是由 firewalld 或 ufw 管理。
SELinux 内核强制访问控制
bash
复制代码
# 防止因安全策略限制导致的服务异常
# 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/config
grep "SELINUX=" /etc/selinux/config
setenforce 0
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登录
bash
复制代码
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.152
for ((host_id=150;host_id<=152;host_id++)); do ssh-copy-id elk$((host_id)); done
yum -y install rsync
yumdownloader --resolve --destdir=/opt/offline-pkgs rsync
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 #
集群同步脚本
bash
复制代码
#!/bin/bash
# Author: gonggbb
# Description: 自动同步文件到集群其他节点
if [ $# -ne 1 ]; 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 setaf 2
echo "=== rsyncing elk$((host_id)): $basename ==="
tput setaf 7
# 将数据同步到其他两个节点
rsync -az $basename `whoami`@elk$((host_id)):$fullpath
if [ $? -eq 0 ]; then
echo "命令执行成功!"
fi
done
journalctl
bash
复制代码
# 操作系统:几乎所有现代 Linux 发行版(如 CentOS/RHEL 7+、Ubuntu 16.04+、Debian 8+、Fedora 等)默认都使用 systemd,因此也都自带 journalctl。
# 旧系统(如 CentOS 6)不使用 systemd,就没有 journalctl
# 提示使用 systemctl enable/start
# 路径:一般位于 /usr/bin/journalctl
# 你可以通过以下命令确认:
which journalctl
# 输出示例:/usr/bin/journalctl
systemctl --version
# 查看 systemd 版本,确认系统使用的是 systemd
# 实时跟踪 elasticsearch 日志(类似 tail -f)
sudo journalctl -u elasticsearch.service -f
# 查看最近 100 行日志
sudo journalctl -u elasticsearch.service -n 100
# 查看本次系统启动后的日志
sudo journalctl -u elasticsearch.service -b
# 查看带时间戳、按页显示(推荐)
sudo journalctl -u elasticsearch.service --since "2025-12-19 08:00"
sed
bash
复制代码
# 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