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 系统。
超级会员免费看
982

被折叠的 条评论
为什么被折叠?



