19、Linux系统管理与监控实用指南

Linux系统管理与监控实用指南

1. SSH 相关操作

1.1 无密码自动登录配置

生成公私钥对时,需要输入密码短语以确保安全。但在自动化脚本登录多台机器的场景下,可在运行 ssh-keygen 命令时不输入密码短语。

# 生成公私钥对
# 后续操作中,若自动化脚本运行时不希望被提示输入密码,可在运行 ssh-keygen 时不输入密码短语
# 现在 ~/.ssh/id_rsa.pub 和 ~/.ssh/id_rsa 已生成,id_rsa.pub 是公钥,id_rsa 是私钥
# 将公钥追加到远程服务器的 ~/.ssh/authorized_keys 文件中
$ ssh USER@REMOTE_HOST "cat >> ~/.ssh/authorized_keys" < ~/.ssh/id_rsa.pub
Password:  # 输入登录密码

配置完成后,后续 SSH 登录将不再提示输入密码,可使用以下命令进行测试:

$ ssh USER@REMOTE_HOST uname

1.2 连接远程主机

使用以下命令连接运行 SSH 服务器的远程主机:

$ ssh username@remote_host

其中:
- username :远程主机上存在的用户。
- remote_host :可以是域名或 IP 地址。

示例:

$ ssh mec@192.168.0.1

默认情况下,SSH 服务器运行在端口 22,但某些服务器可能运行在不同端口,此时可使用 -p 选项指定端口:

$ ssh user@localhost -p 422

1.3 在远程主机上执行命令

1.3.1 基本语法
$ ssh user@host 'COMMANDS'

示例:

$ ssh mec@192.168.0.1 'whoami'
1.3.2 执行多个命令

使用分号分隔多个命令:

$ ssh user@host 'command1 ; command2 ; command3'
1.3.3 通过标准输入发送命令
$ ssh user@remote_host  "COMMANDS" > stdout.txt 2> errors.txt

也可以通过管道传递命令序列:

$ echo  "COMMANDS" | ssh user@remote_host > stdout.txt 2> errors.txt

示例:

$ ssh mec@192.168.0.1  "echo user: $(whoami);echo OS: $(uname)"

1.4 SSH 脚本示例

以下是一个基于 SSH 的 shell 脚本,用于收集远程主机的运行时间:

#!/bin/bash
# Filename: uptime.sh
# Description: Uptime monitor
IP_LIST="192.168.0.1 192.168.0.5 192.168.0.9"
USER="test"
for IP in $IP_LIST;
do
  utime=$(ssh $USER@$IP uptime  | awk '{ print $3 }' )
  echo $IP uptime:  $utime
done

1.5 SSH 其他选项

1.5.1 压缩传输

使用 -C 选项启用数据压缩:

$ ssh -C user@hostname COMMANDS
1.5.2 重定向数据到远程主机命令的标准输入
$ echo "text" | ssh user@remote_host 'cat >> list'

或从文件重定向数据:

$ ssh user@remote_host 'cat >> list'  < file

2. 挂载远程驱动器到本地挂载点

2.1 准备工作

sshfs 并非 GNU/Linux 发行版默认安装的工具,需使用包管理器进行安装。

2.2 挂载操作

使用以下命令将远程主机的文件系统挂载到本地挂载点:

# sshfs user@remotehost:/home/path /mnt/mountpoint
Password:  # 输入用户密码

完成挂载后,可通过本地挂载点 /mnt/mountpoint 访问远程主机 /home/path 处的数据。使用完毕后,可使用以下命令卸载挂载点:

# umount /mnt/mountpoint

3. 网络多播窗口消息

3.1 准备工作

使用 zenity 实现 GUI 弹出窗口,它并非 GNU/Linux 发行版默认安装的工具,需使用包管理器进行安装。

3.2 发送消息

3.2.1 本地创建信息框
$ zenity --info --text "This is a message"
3.2.2 通过 SSH 在远程主机上运行 zenity 命令
$ ssh user@remotehost 'zenity --info --text "This is a message"'

由于 zenity 依赖 Xserver,可能会出现错误,可手动设置 DISPLAY 环境变量:

$ ssh username@remotehost 'export DISPLAY=:0 ; zenity --info --text "This is a message"'
3.2.3 向多个远程主机多播弹出窗口
#!/bin/bash
# Filename: multi_cast_window.sh
# Description: Multi-cast window popups
IP_LIST="192.168.0.5 192.168.0.3 192.168.0.23"
USER="username"
COMMAND='export DISPLAY=:0 ;zenity --info --text "This is a message" '
for host in $IP_LIST;
do
  ssh $USER@$host  "$COMMAND" &
done

4. 网络流量和端口分析

4.1 列出所有打开的端口

使用 lsof -i 命令列出系统上所有打开的端口及相关服务信息:

$ lsof -i

示例输出:

COMMAND    PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
firefox-b 2261 slynux   78u  IPv4  63729      0t0  TCP localhost:47797->localhost:42486 (ESTABLISHED)

若要列出当前机器打开的端口,可使用以下命令:

$ lsof -i | grep ":[0-9]\+->" -o | grep "[0-9]\+" -o  | sort | uniq

4.2 使用 netstat 查看打开的端口和服务

$ netstat -tnp

示例输出:

(Not all processes could be identified, non-owned process info 
will not be shown, you would have to be root to see it all.) 
Active Internet connections (w/o servers) 
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name 
tcp        0      0 192.168.0.82:38163      192.168.0.2:3128        ESTABLISHED 2261/firefox-bin 

5. 磁盘使用相关操作

5.1 计算文件或目录的磁盘使用情况

du 命令用于计算文件或目录的磁盘使用情况, df 命令用于查看磁盘的空闲空间。

  • 计算文件占用的磁盘空间:
$ du FILENAME1 FILENAME2 ..

示例:

$ du file.txt
4
  • 递归计算目录下所有文件的磁盘使用情况:
$ du -a DIRECTORY

示例:

$ du -a test
4  test/output.txt
4  test/process_log.sh
4  test/pcpu.sh
16  test

5.2 其他 du 命令选项

  • 以更易读的格式显示磁盘使用情况(KB、MB 等):
du -h FILENAME

示例:

$ du -sh test/pcpu.sh
4.0K  test/pcpu.sh
  • 显示磁盘使用的总计大小:
$ du -c FILENAME1 FILENAME2..

示例:

du -c process_log.sh pcpu.sh
4  process_log.sh
4  pcpu.sh
8  total
  • 以指定单位显示磁盘使用情况:
$ du -b FILE(s)  # 以字节为单位
$ du -k FILE(s)  # 以千字节为单位
$ du -m FILE(s)  # 以兆字节为单位
$ du -B BLOCK_SIZE FILE(s)  # 以指定块大小为单位
  • 排除某些文件的磁盘使用计算:
$ du --exclude "WILDCARD" DIRECTORY
$ du --exclude-from EXCLUDE.txt DIRECTORY
  • 指定最大遍历深度:
$ du --max-depth 2 DIRECTORY
  • 限制只遍历单个文件系统:
du -x DIRECTORY

5.3 查找指定目录下最大的 10 个文件

$ du -ak SOURCE_DIR | sort -nrk 1 | head

若要只查找文件,可改进为:

$ find . -type f -exec du -k {} \; | sort -nrk 1 | head

5.4 查看磁盘空闲信息

$ df
$ df -h  # 以更易读的格式显示

6. 总结

本文详细介绍了 Linux 系统管理与监控的多个方面,包括 SSH 相关操作、挂载远程驱动器、网络多播窗口消息、网络流量和端口分析以及磁盘使用相关操作等。通过这些操作,用户可以更高效地管理和监控 Linux 系统,确保系统的正常运行和数据安全。

以下是 SSH 操作的流程图:

graph LR
    A[生成公私钥对] --> B[将公钥追加到远程服务器]
    B --> C[测试无密码登录]
    D[连接远程主机] --> E[执行命令]
    F[挂载远程驱动器] --> G[使用数据]
    G --> H[卸载挂载点]
    I[发送网络多播消息] --> J[设置 DISPLAY 变量]
    J --> K[多播消息]
    L[分析网络端口] --> M[使用 lsof 或 netstat]
    N[计算磁盘使用] --> O[使用 du 或 df]

以下是部分操作的总结表格:
| 操作类型 | 命令示例 | 说明 |
| ---- | ---- | ---- |
| SSH 无密码登录 | ssh user@remote_host | 配置后登录无需密码 |
| 挂载远程驱动器 | sshfs user@remotehost:/home/path /mnt/mountpoint | 实现远程文件系统本地访问 |
| 网络多播消息 | ssh username@remotehost 'export DISPLAY=:0 ; zenity --info --text "This is a message"' | 向远程主机发送消息 |
| 端口分析 | lsof -i netstat -tnp | 查看系统端口和服务信息 |
| 磁盘使用计算 | du -h FILENAME df -h | 查看文件和磁盘使用情况 |

7. 系统监控与日志管理

7.1 计算命令执行时间

在 Linux 中,我们可以使用 time 命令来计算一个命令的执行时间。例如:

$ time ls -l

执行上述命令后,会在命令执行完成后输出该命令的执行时间,包括实际时间(real)、用户时间(user)和系统时间(sys)。

7.2 获取登录用户、启动日志和失败启动信息

  • 登录用户信息 :使用 who 命令可以查看当前登录的用户信息。
$ who
  • 启动日志 dmesg 命令用于显示内核环缓冲区的信息,其中包含系统启动时的日志。
$ dmesg
  • 失败启动信息 :查看 /var/log/boot.log 文件可以获取系统启动失败的相关信息。

7.3 打印 10 个最常用的命令

可以通过 history 命令结合 sort uniq 命令来找出最常用的 10 个命令:

$ history | awk '{print $2}' | sort | uniq -c | sort -nr | head -n 10

这个命令的执行流程如下:
1. history :显示命令历史记录。
2. awk '{print $2}' :提取命令历史记录中的命令部分。
3. sort :对命令进行排序。
4. uniq -c :统计每个命令的出现次数。
5. sort -nr :按出现次数降序排序。
6. head -n 10 :取前 10 个命令。

7.4 列出 1 小时内 CPU 消耗最高的 10 个进程

可以使用 top 命令结合 grep sort 命令来实现:

$ top -b -n 1 -d 0.1 | grep Cpu | tail -n +2 | awk '{print $9, $12}' | sort -nr | head -n 10

这个命令的执行流程如下:
1. top -b -n 1 -d 0.1 :以批处理模式运行 top 命令,只运行一次,采样间隔为 0.1 秒。
2. grep Cpu :过滤出包含 CPU 信息的行。
3. tail -n +2 :从第二行开始取数据。
4. awk '{print $9, $12}' :提取 CPU 使用率和进程名。
5. sort -nr :按 CPU 使用率降序排序。
6. head -n 10 :取前 10 个进程。

7.5 使用 watch 监控命令输出

watch 命令可以定期执行一个命令,并显示其输出。例如,每隔 2 秒监控系统负载:

$ watch -n 2 uptime

7.6 记录文件和目录的访问日志

可以使用 auditd 服务来记录文件和目录的访问日志。首先需要安装 auditd

$ sudo apt-get install auditd

然后配置规则,例如监控 /etc/passwd 文件的访问:

$ sudo auditctl -w /etc/passwd -p rwxa

查看日志:

$ sudo ausearch -f /etc/passwd

7.7 使用 logrotate 管理日志文件

logrotate 用于管理日志文件的轮转,防止日志文件过大。编辑 /etc/logrotate.conf 文件进行配置,例如:

/var/log/syslog {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /etc/init.d/rsyslog reload >/dev/null 2>&1 || true
    endscript
}

上述配置表示 /var/log/syslog 文件每天轮转一次,保留 7 个旧日志文件,压缩旧日志文件等。

7.8 使用 syslog 进行日志记录

syslog 是 Linux 系统中常用的日志记录机制。可以通过编辑 /etc/rsyslog.conf 文件来配置日志记录规则。例如,将所有级别的日志记录到 /var/log/messages 文件:

*.* /var/log/messages

7.9 监控用户登录以发现入侵者

可以通过查看 /var/log/auth.log 文件来监控用户登录情况。例如,查找失败的登录尝试:

$ grep "Failed password" /var/log/auth.log

7.10 远程磁盘使用健康监控

可以编写脚本定期检查远程主机的磁盘使用情况。以下是一个示例脚本:

#!/bin/bash
IP_LIST="192.168.0.1 192.168.0.5 192.168.0.9"
USER="test"
for IP in $IP_LIST;
do
    usage=$(ssh $USER@$IP "df -h / | awk 'NR==2 {print $5}' | sed 's/%//'")
    if [ $usage -gt 80 ]; then
        echo "Disk usage on $IP is over 80%: $usage%"
    fi
done

7.11 统计系统上用户的活跃时间

可以通过查看 /var/log/wtmp 文件来统计用户的活跃时间。使用 last 命令:

$ last

8. 总结

本文全面涵盖了 Linux 系统管理与监控的多个关键领域。从 SSH 操作实现远程主机的便捷管理,到磁盘使用的精准计算和分析,再到系统监控和日志管理确保系统的稳定运行和安全,每个部分都提供了详细的操作步骤和示例代码。

通过掌握这些技能,用户能够更好地应对 Linux 系统管理中的各种挑战,提高系统的性能和安全性。以下是一个总结表格,概括了本文的主要内容:
| 操作类别 | 主要命令或工具 | 功能描述 |
| ---- | ---- | ---- |
| SSH 操作 | ssh ssh-keygen sshfs | 远程登录、无密码登录配置、挂载远程驱动器 |
| 磁盘管理 | du df | 计算磁盘使用情况、查看磁盘空闲信息 |
| 网络管理 | lsof netstat zenity | 端口分析、网络多播消息 |
| 系统监控 | top watch auditd | 监控 CPU 消耗、定期执行命令、记录文件访问日志 |
| 日志管理 | logrotate syslog last | 日志轮转、日志记录、统计用户活跃时间 |

以下是系统监控与管理的流程图:

graph LR
    A[SSH 操作] --> B[远程主机管理]
    C[磁盘管理] --> D[磁盘使用分析]
    E[网络管理] --> F[网络安全监控]
    G[系统监控] --> H[系统性能优化]
    I[日志管理] --> J[问题排查与预防]
    B --> K[系统稳定运行]
    D --> K
    F --> K
    H --> K
    J --> K

希望本文能为 Linux 系统管理员和爱好者提供有价值的参考,帮助他们更好地管理和监控 Linux 系统。

【电力系统】单机无穷大电力系统短路故障暂态稳定Simulink仿真(带说明文档)内容概要:本文档围绕“单机无穷大电力系统短路故障暂态稳定Simulink仿真”展开,提供了完整的仿真模型说明文档,重点研究电力系统在发生短路故障后的暂态稳定性问题。通过Simulink搭建单机无穷大系统模型,模拟不同类型的短路故障(如三相短路),分析系统在故障期间及切除后的动态响应,包括发电机转子角度、转速、电压和功率等关键参数的变化,进而评估系统的暂态稳定能力。该仿真有助于理解电力系统稳定性机理,掌握暂态过程分析方法。; 适合人群:电气工程及相关专业的本科生、研究生,以及从事电力系统分析、运行控制工作的科研人员和工程师。; 使用场景及目标:①学习电力系统暂态稳定的基本概念分析方法;②掌握利用Simulink进行电力系统建模仿真的技能;③研究短路故障对系统稳定性的影响及提高稳定性的措施(如故障清除时间优化);④辅助课程设计、毕业设计或科研项目中的系统仿真验证。; 阅读建议:建议结合电力系统稳定性理论知识进行学习,先理解仿真模型各模块的功能参数设置,再运行仿真并仔细分析输出结果,尝试改变故障类型或系统参数以观察其对稳定性的影响,从而深化对暂态稳定问题的理解。
本研究聚焦于运用MATLAB平台,将支持向量机(SVM)应用于数据预测任务,并引入粒子群优化(PSO)算法对模型的关键参数进行自动调优。该研究属于机器学习领域的典型实践,其核心在于利用SVM构建分类模型,同时借助PSO的全局搜索能力,高效确定SVM的最优超参数配置,从而显著增强模型的整体预测效能。 支持向量机作为一种经典的监督学习方法,其基本原理是通过在高维特征空间中构造一个具有最大间隔的决策边界,以实现对样本数据的分类或回归分析。该算法擅长处理小规模样本集、非线性关系以及高维度特征识别问题,其有效性源于通过核函数将原始数据映射至更高维的空间,使得原本复杂的分类问题变得线性可分。 粒子群优化算法是一种模拟鸟群社会行为的群体智能优化技术。在该算法框架下,每个潜在解被视作一个“粒子”,粒子群在解空间中协同搜索,通过不断迭代更新自身速度位置,并参考个体历史最优解和群体全局最优解的信息,逐步逼近问题的最优解。在本应用中,PSO被专门用于搜寻SVM中影响模型性能的两个关键参数——正则化参数C核函数参数γ的最优组合。 项目所提供的实现代码涵盖了从数据加载、预处理(如标准化处理)、基础SVM模型构建到PSO优化流程的完整步骤。优化过程会针对不同的核函数(例如线性核、多项式核及径向基函数核等)进行参数寻优,并系统评估优化前后模型性能的差异。性能对比通常基于准确率、精确率、召回率及F1分数等多项分类指标展开,从而定量验证PSO算法在提升SVM模型分类能力方面的实际效果。 本研究通过一个具体的MATLAB实现案例,旨在演示如何将全局优化算法机器学习模型相结合,以解决模型参数选择这一关键问题。通过此实践,研究者不仅能够深入理解SVM的工作原理,还能掌握利用智能优化技术提升模型泛化性能的有效方法,这对于机器学习在实际问题中的应用具有重要的参考价值。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值