Linux 管理脚本工具
2023-04-13
6 min read
这个 shell 脚本,实现了多个 Linux 系统管理任务的功能,适合用于快速管理和维护 Linux 系统。主要包含以下功能:
- 进程管理:列出当前正在运行的进程、杀死指定进程、按照端口号杀死进程。
- 磁盘管理:查看磁盘使用情况、清理磁盘空间。
- 网络管理:查看网络连接、配置网络接口、查询端口信息、扫描局域网设备。
- 日志分析:查看系统日志、筛选关键字、保存日志。
- 用户管理:查看用户列表、添加用户、删除用户、修改用户密码。
- 安全管理:修改 SSH 端口、禁止 ROOT 登录。
- 系统信息:查看操作系统、内核版本、CPU 信息、内存信息和磁盘信息。
- 定时任务:查看当前用户的定时任务。
#!/bin/bash
# 判断系统类型,选择合适的包管理器
if [ -n "$(command -v yum)" ]; then
PKGMGR="yum"
elif [ -n "$(command -v apt-get)" ]; then
PKGMGR="apt-get"
else
echo "无法确认系统类型,请手动安装软件包。"
exit 1
fi
# 安装必需的工具和软件包
for TOOL in curl tar zstd unzip; do
if ! command -v $TOOL > /dev/null; then
sudo $PKGMGR install -y $TOOL
fi
done
# 菜单文字提示
function menu() {
cat << EOF
=========================================
Linux 系统管理工具
=========================================
1. 进程管理
2. 磁盘管理
3. 网络管理
4. 日志分析
5. 用户管理
6. 安全管理
7. 系统信息
8. 定时任务
0. 退出
=========================================
EOF
read -p "请输入数字选择相应的菜单:" CHOICE
}
# 进程管理
function process_mgmt() {
while true
do
cat << EOF
-----------------------------------------
进程管理
-----------------------------------------
1. 列出所有进程
2. 杀死指定进程
3. 按照端口杀死进程
0. 返回上一级菜单
-----------------------------------------
EOF
read -p "请输入数字选择相应的菜单:" CHOICE
case $CHOICE in
1)
ps aux
;;
2)
read -p "请输入要杀死的进程 ID:" PID
kill $PID
;;
3)
read -p "请输入要杀死的端口号:" PORT
sudo fuser -k $PORT/tcp
;;
0)
break
;;
*)
echo "错误的选择。"
;;
esac
done
}
# 磁盘管理
function disk_mgmt() {
while true
do
cat << EOF
-----------------------------------------
磁盘管理
-----------------------------------------
1. 查看磁盘使用情况
2. 清理磁盘空间
0. 返回上一级菜单
-----------------------------------------
EOF
read -p "请输入数字选择相应的菜单:" CHOICE
case $CHOICE in
1)
df -h
;;
2)
read -p "请输入要清理的文件路径:" PATH
sudo find $PATH -type f -mtime +30 -delete
;;
0)
break
;;
*)
echo "错误的选择。"
;;
esac
done
}
# 网络管理
function network_mgmt() {
while true
do
cat << EOF
-----------------------------------------
网络管理
-----------------------------------------
1. 查看网络连接
2. 配置网络接口
3. 查询端口信息
4. 扫描局域网设备
0. 返回上一级菜单
-----------------------------------------
EOF
read -p "请输入数字选择相应的菜单:" CHOICE
case $CHOICE in
1)
netstat -anp
;;
2)
sudo nano /etc/network/interfaces
;;
3)
read -p "请输入要查询的端口号:" PORT
sudo lsof -i:$PORT
;;
4)
read -p "请输入 IP 地址范围(例如:192.168.1.1/24):" IP_RANGE
sudo nmap -sP $IP_RANGE
;;
0)
break
;;
*)
echo "错误的选择。"
;;
esac
done
}
# 日志分析
function log_analysis() {
while true
do
cat << EOF
-----------------------------------------
日志分析
-----------------------------------------
1. 查看系统日志
2. 筛选关键字
3. 保存日志
0. 返回上一级菜单
-----------------------------------------
EOF
read -p "请输入数字选择相应的菜单:" CHOICE
case $CHOICE in
1)
cat /var/log/syslog
;;
2)
read -p "请输入要筛选的关键字:" KEYWORD
cat /var/log/syslog | grep $KEYWORD
;;
3)
read -p "请输入要保存的文件路径:" FILEPATH
cat /var/log/syslog > $FILEPATH
;;
0)
break
;;
*)
echo "错误的选择。"
;;
esac
done
}
# 用户管理
function user_mgmt() {
while true
do
cat << EOF
-----------------------------------------
用户管理
-----------------------------------------
1. 查看用户列表
2. 添加用户
3. 删除用户
4. 修改用户密码
0. 返回上一级菜单
-----------------------------------------
EOF
read -p "请输入数字选择相应的菜单:" CHOICE
case $CHOICE in
1)
cat /etc/passwd
;;
2)
read -p "请输入新用户的用户名:" USERNAME
sudo adduser $USERNAME
;;
3)
read -p "请输入要删除的用户的用户名:" USERNAME
sudo userdel -r $USERNAME
;;
4)
read -p "请输入要修改密码的用户名:" USERNAME
sudo passwd $USERNAME
;;
0)
break
;;
*)
echo "错误的选择。"
;;
esac
done
}
# 安全管理
function security_mgmt() {
while true
do
cat << EOF
-----------------------------------------
安全管理
-----------------------------------------
1. 修改 SSH 端口
2. 禁止 ROOT 登录
0. 返回上一级菜单
-----------------------------------------
EOF
read -p "请输入数字选择相应的菜单:" CHOICE
case $CHOICE in
1)
read -p "请输入新的 SSH 端口号:" PORT
sudo sed -i "s/Port .*/Port $PORT/g" /etc/ssh/sshd_config
sudo service sshd restart
;;
2)
sudo sed -i "s/PermitRootLogin yes/PermitRootLogin no/g" /etc/ssh/sshd_config
sudo service sshd restart
;;
0)
break
;;
*)
echo "错误的选择。"
;;
esac
done
}
# 系统信息
function system_info() {
cat << EOF
=========================================
系统信息
=========================================
操作系统:$(lsb_release -d | cut -f2-)
内核版本:$(uname -r)
CPU 信息:$(grep "model name" /proc/cpuinfo | head -n1 | cut -d: -f2-)
内存信息:$(free -h | awk 'NR==2 {print $2}')
磁盘信息:$(df -h | awk '$NF=="/" {print "总容量:" $2 ", 剩余容量:" $4}')
=========================================
EOF
}
# 定时任务
function cron_job() {
crontab -l
}
# 主循环
while true
do
menu
case $CHOICE in
1)
process_mgmt
;;
2)
disk_mgmt
;;
3)
network_mgmt
;;
4)
log_analysis
;;
5)
user_mgmt
;;
6)
security_mgmt
;;
7)
system_info
;;
8)
cron_job
;;
0)
echo "谢谢使用,再见!"
exit 0
;;
*)
echo "错误的选择。"
;;
esac
done