Deepin 架构统信UOS上能使用的 Shell 脚本:高效与自动化运维

在 Deepin 操作系统中,Shell 脚本作为一种强大的自动化工具,广泛应用于系统管理、任务调度和日常维护等场景。Deepin 架构基于 Linux 内核,因此支持各种 Shell 环境,如 Bash、Zsh 等,使得 Shell 脚本能够充分发挥其功能。

为什么要在 Deepin 上使用 Shell 脚本?

  1. 自动化流程:Shell 脚本能够自动执行一系列命令,减少重复性工作,提高效率。
  2. 简化操作:复杂的命令和操作可以通过脚本来简化,用户只需执行一个脚本即可。
  3. 错误减少:手动输入命令容易出错,脚本可以减少这种错误,确保操作的准确性。
  4. 易于维护:脚本易于修改和维护,便于跟踪问题和更新操作步骤。

统信UOS系统和其他系统都是基于Linux内核的操作系统,它们在很多方面有相似之处,但在Shell脚本的编写和执行上也可能存在一些差异。以下是和centos系统相比较的不同点(供参考):

1. 默认Shell解释器

  • 统信UOS:可能默认使用Bash作为Shell解释器,但也支持其他Shell环境。
  • CentOS:通常默认使用Bash作为Shell解释器,尤其是在CentOS 7及之前版本中。从CentOS 8开始,可能默认使用DNF作为包管理器,而在之前版本中使用的是YUM。

2. 软件仓库和包管理

  • 统信UOS:可能使用自己的软件仓库和包管理工具,这可能会影响到Shell脚本中安装软件、更新系统等操作的命令。
  • CentOS:使用YUM(CentOS 7及之前版本)或DNF(CentOS 8及之后版本)作为软件包管理器。Shell脚本中用于软件包管理的命令会根据使用的管理器而有所不同。

3. 系统服务和守护进程

  • 统信UOS:可能有自己的系统服务和守护进程管理方式,这会影响到Shell脚本中启动、停止、检查服务状态等命令。
  • CentOS:使用systemd作为系统和服务管理器。Shell脚本中管理服务的命令会遵循systemd的语法。

4. 系统配置文件和目录结构

  • 统信UOS:系统配置文件的位置和格式可能与CentOS有所不同,这会影响到Shell脚本中读取和修改系统配置的方式。
  • CentOS:遵循标准的Linux文件系统层次结构,并在/etc目录下存放系统配置文件。Shell脚本通常会从这些标准位置读取配置。

5. 兼容性和支持的脚本

  • 统信UOS:作为国产操作系统,可能对一些国产软件和硬件有特别的优化和支持,Shell脚本可能需要针对这些特性进行编写。
  • CentOS:作为国际广泛使用的操作系统,Shell脚本通常具有较好的兼容性,适用于多种硬件和软件环境。

6. 预装应用程序和工具

  • 统信UOS:可能预装了一些特定的应用程序和工具,这些工具可能在Shell脚本中被使用,或者需要在脚本中进行特别的处理。
  • CentOS:预装的应用程序和工具可能与统信UOS不同,Shell脚本在使用这些预装工具时可能需要考虑版本差异。

7. 语言和本地化

  • 统信UOS:可能在语言支持和本地化方面有所不同,Shell脚本在处理文本和用户交互时可能需要考虑这些差异。
  • CentOS:通常支持多种语言环境,Shell脚本可能需要适应不同的语言设置。

8. 安全策略和合规性

  • 统信UOS:可能需要遵循特定的安全策略和合规性要求,Shell脚本可能需要包含额外的安全检查和日志记录功能。
  • CentOS:虽然也关注安全性,但可能不需要特别针对某一地区的合规性要求进行脚本编写。

如何编写 Shell 脚本?

  1. 选择编辑器:Deepin 支持多种文本编辑器,如 nano、vim、gedit 等,选择合适的编辑器编写脚本。
  2. 脚本结构:一个基本的 Shell 脚本包括 Shebang 行(指定解释器)、变量定义、执行命令和退出状态等。
  3. 权限设置:使用 chmod +x script.sh 命令赋予脚本执行权限。
  4. 测试运行:在终端中运行 ./script.sh 测试脚本功能是否正常。

示例:系统信息检查工具,用于在操作系统上收集和显示系统的详细信息。脚本分为几个主要部分,每个部分都是一个函数,用于收集特定类型的系统信息。

#!/bin/bash
########################################################################################################
# 该脚本用于系统日常常规参数                                             #######################
########################################################################################################

#头部信息
echoHeadInfo(){
 cat << EOF

+--------------------------------------------------------------+
|                       请谨慎使用【系统信息检查工具】            |
+--------------------------------------------------------------+
EOF
}


function RED(){
  echo -e "\033[31m$@\033[0m"
}

function GRE(){
  echo -e "\033[32m$@\033[0m"
}

function OS_INFO(){
  # 系统名
  local OS_NAME=`uname -n`
  # 系统版本
  local OS_VERSION=`cat /etc/issue || echo 获取信息失败`
  # 系统类型
  local OS_TYPE=`uname`
  # 主机序列号
  local OS_NUM=`dmidecode -t system | grep 'Serial Number' | awk '{print $3}'`
  # 系统内核版本
  local OS_KERNEL=`uname -r`
  # 系统机器码
  local OS_CODE=`dmidecode -t 1 |grep 'UUID'`
  # 系统语言环境
  local OS_LANG=`echo $LANG`
  # 系统时间
  local OS_DATE=`date +"%Y-%m-%d %H:%M:%S"`
  # 系统运行时间
  local OS_UPTIME=`uptime | awk -F',' '{sub(/.*up /,"",$1);print $1'} || echo 获取信息失败`
  # 系统上次重启时间
  local OS_LAST_REBOOT=`last reboot | head -1 | awk '{print $5,$6,$7,$8,$10}'`
  # 系统上次关机时间
  local OS_LAST_SHUTDOWN=`last -x | grep shutdown | head -1 | awk '{print $5,$6,$7,$8,$10}'`

  RED "################################# [ 系统信息巡检区 ] ######################################"
  GRE "主机名:$OS_NAME"
  GRE "主机类型:$OS_TYPE"
  GRE "主机序列号:${OS_NUM:-获取信息失败}"
  GRE "系统版本:$OS_VERSION"
  GRE "系统内核版本:$OS_KERNEL"
  GRE "系统机器码:${OS_CODE:-获取信息失败}"
  GRE "系统语言环境:${OS_LANG}"
  GRE "系统时间;$OS_DATE"
  GRE "系统已运行时间:$OS_UPTIME"
  GRE "系统上次重启时间:${OS_LAST_REBOOT:-获取信息失败}"
  GRE "系统上次关机时间:${OS_LAST_SHUTDOWN:-获取信息失败}"
}

function OS_HDWARE(){
  # CPU架构
  local CPU_ARCH=`uname -m`
  # CPU型号
  local CPU_TYPE=`cat /proc/cpuinfo | grep "model name" | uniq | awk -F':' '{sub(/ /,"",$2);print $2}'`
  # CPU个数
  local CPU_NUM=`cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l`
  # CPU 核数
  local CPU_CORE=`cat /proc/cpuinfo | grep cores | uniq | awk -F':' '{sub(/ /,"",$2);print $2}'`
  # CPU 频率
  local CPU_HZ=`cat /proc/cpuinfo | grep "cpu MHz" | uniq | awk -F':' '{sub(/ /,"",$2);printf "%s MHz\n",$2}'`

  # 内存容量
  local ME_SIZE=$(echo "scale=2;`cat /proc/meminfo | grep 'MemTotal:' | awk '{print $2}'`/1048576"|bc)
  # 空闲内存
  local ME_FREE=$(echo "scale=2;`cat /proc/meminfo | grep 'MemFree:' | awk '{print $2}'`/1048576"|bc)
  # 可用内存
  local ME_FREEE=$(echo "scale=2;`cat /proc/meminfo | grep 'MemAvailable:' | awk '{print $2}'`/1048576" | bc)
  # 内存使用率
  local ME_USE=$(awk 'BEGIN{printf "%.1f%\n",('$ME_SIZE'-'$ME_FREEE')/'$ME_SIZE'*100}')
  # SWAP大小
  local ME_SWAP_SIZE=$(echo "scale=2;`cat /proc/meminfo | grep 'SwapTotal:' | awk '{print $2}'`/1048576"|bc)
  # SWAP可用
  local ME_SWAP_FREE=$(echo "scale=2;`cat /proc/meminfo | grep 'SwapFree:' | awk '{print $2}'`/1048576"|bc)
  # SWAP使用率
  local ME_SWAP_USE=$(awk 'BEGIN{printf "%.1f%\n",('$ME_SWAP_SIZE'-'$ME_SWAP_FREE')/'$ME_SWAP_SIZE'*100}')
  # Buffer大小
  local ME_BUF=$(cat /proc/meminfo | grep 'Buffers:' | awk '{printf "%s KB",$2}')
  # 内存Cache大小
  local ME_CACHE=$(cat /proc/meminfo | grep '^Cached:' | awk '{printf "%s KB",$2}')

  # 当前系统所有网卡
  local NET_DEVICE=(`cat /proc/net/dev | awk 'NR>2 && $1 !~/lo/ {sub(/:/,"");print $1}'`)

  RED "################################# [ 系统硬件巡检区 ] ######################################"
  GRE "CPU型号:$CPU_TYPE"
  GRE "CPU架构:$CPU_ARCH"
  GRE "CPU个数:$CPU_NUM"
  GRE "CPU核数: $CPU_CORE"
  GRE "CPU频率:$CPU_HZ"
  GRE "内存容量:${ME_SIZE} GB"
  GRE "内存空闲:${ME_FREE} GB"
  GRE "内存可用:${ME_FREEE} GB"
  GRE "内存使用率:${ME_USE}"
  GRE "SWAP容量:$ME_SWAP_SIZE GB"
  GRE "SWAP可用容量:$ME_SWAP_FREE GB"
  GRE "SWAP使用率:$ME_SWAP_USE"
  GRE "内存Buffer大小:${ME_BUF}"
  GRE "内存Cache大小:${ME_CACHE}"

  for i in ${NET_DEVICE[@]}
  do
    GRE "网卡:$i  状态: $(ip link show ens33 | awk 'NR==1{print $9}') RX: $(ethtool -g ens33 | grep "RX:" | tail -1 | awk '{print $2}') TX: $(ethtool -g ens33 | grep "TX:" | tail -1 | awk '{print $2}')"
  done
}

function OS_NETWORK(){
  # 系统IP
  local IP=$(hostname -I)
  # 网关地址
  local GATEWAY=$(ip route | grep default &>/dev/null && ip route | grep default | awk '{print $3}' || echo '未设置默认网关')
  # DNS地址
  local DNS=(`cat /etc/resolv.conf | grep nameserver | uniq | awk '{print $2}'`)

  RED "################################# [ 系统网络巡检区 ] ######################################"
  GRE "IP地址:$IP"
  GRE "网关地址:$GATEWAY"
  GRE "DNS地址:${DNS[@]}"
  GRE "网关[$GATEWAY]连接情况: $(ping -t 1 -i 1 -c 5 -W 1 192.168.0.2 &>/dev/null && echo '正常通信' || echo '无法通信')"
}

function OS_RESOURCE(){
  # 系统磁盘列表
  local DISK_LIST=(`lsblk | egrep "^[a-z].*" | grep -v "^sr" | awk '{print $1}'`)
  # 系统磁盘使用率情况
  local DISK_PER=(`df -h | awk 'NR>1 && $1 !~/sr/ {gsub(/%/,"",$5);print $5}'`)

  # CPU空闲率
  local CPU_FREE=$(top -d 1 -n 1 -b | awk 'NR==3{print $8}')
  # CPU使用率
  local CPU_USE=$(awk 'BEGIN{printf "%.1f%\n",100-'$CPU_FREE'}')
  # CPU_TOP_TEN
  local CPU_TOP_TEN=$(top -d 1 -n 1 -b | column -t | awk 'NR>=7 && NR<=15')

  # 当前进程数
  local CPU_PROCESSORS=$(top -d 1 -n 1 -b | awk 'NR==2{print $2}')
  # 当前正在运行进程数
  local CPU_RUN_PROCESSORS=$(top -d 1 -n 1 -b | awk 'NR==2{print $4}')
  # 当前正在休眠进程数
  local CPU_SL_PROCESSORS=$(top -d 1 -n 1 -b | awk 'NR==2{print $6}')
  # 当前停止运行进程数
  local CPU_STOP_PROCESSORS=$(top -d 1 -n 1 -b | awk 'NR==2{print 8}')
  # 当前僵尸进程数
  local CPU_ZOM_PROCESSORS=$(top -d 1 -n 1 -b | awk 'NR==2{print $10}')
  

  RED "################################# [ 系统资源巡检区 ] ######################################"
  GRE "CPU使用率:$CPU_USE"
  #GRE "CPU使用率前十进程信息:"
  #GRE "$(ps -eo user,pid,pcpu,pmem,args --sort=-pcpu | head -n 10)"
  #GRE "\n内存使用率前十进程信息:"
  #GRE "$(ps -eo user,pid,pcpu,pmem,args --sort=-pmem | head -n 10)"
  GRE "\n磁盘IO信息:$(iotop -bon 1 &>/dev/null || echo 'io top 未安装信息获取失败')"
  GRE "$(iotop -bon 1 &>/dev/null && iotop -bon 1 | head -n 13)"
  GRE "\n磁盘分区使用率是否正常:正常"
  for i in ${DISK_LIST[@]}
  do
    if [[ -z "$(lsblk --nodeps -no serial /dev/$i)" ]]; then
      GRE "磁盘:$i  磁盘序列号:获取信息失败"  
    else
      GRE "磁盘:$i  磁盘序列号:$(lsblk --nodeps -no serial /dev/$i)"
    fi
  done
  for i in ${DISK_PER[@]}
  do
    if [ $i -gt 80 ]; then
      RED "某分区磁盘使用率为:$i% > 80% 请及时扩容"
    fi
  done
  GRE "\n系统磁盘分区inode使用情况:"
  GRE "$(df -Thi)"
  GRE "\n系统当前进程数:$CPU_PROCESSORS"  
  GRE "系统当前进程运行数:$CPU_RUN_PROCESSORS"
  GRE "系统当前休眠进程数:$CPU_SL_PROCESSORS"
  GRE "系统当前停止进程数:$CPU_STOP_PROCESSORS"
  GRE "系统当前僵尸进程数:$CPU_ZOM_PROCESSORS"

  GRE "\n系统当前允许最大fd数量:$(cat /proc/sys/fs/file-nr | awk '{print $3}')"
  GRE "系统当前已打开fd数量:$(cat /proc/sys/fs/file-nr | awk '{print $1}')"
  GRE "系统单个进程运行打开fd数量:$(ulimit -n)"

  GRE "\n系统当前socket连接数:$(netstat -anp &>/dev/null && netstat -anp | wc -l || echo 'net-tools 未安装,获取信息失败')"
  GRE "系统 established socket数量: $(netstat -anp &>/dev/null && netstat -anp | grep "ESTABLISHED" | wc -l || echo 'net-tools 未安装,获取信息失败')"
  GRE "系统 sync socket数量:$(netstat -anp &>/dev/null && netstat -anp | grep "SYN" | wc -l || echo 'net-tools 未安装,获取信息失败')"
  GRE "系统当前已建立socket如下:"
  GRE "$(netstat -anp &>/dev/null && netstat -anp | grep ESTABLISHED | awk '{printf "  本地:%-20s <=>    外部:%-22s\n",$4,$5}' || echo '')"
}

function OS_SECURITY(){
  # 系统所有能登录的用户
  local OS_USER=(`cat /etc/passwd | awk -F':' '$NF !~/nologin|sync|shutdown|halt/ {print $1}'`)
  # Selinux
  local OS_SELINUX=`getenforce`
  # 防火墙状态
  local OS_FIREWALLD=`service firewalld status &>/dev/null | grep "running" && echo on || echo off`

  RED "################################# [ 系统安全巡检区 ] ######################################"
  GRE "防火墙状态: $OS_FIREWALLD"
  GRE "Selinux状态:${OS_SELINUX}\n"
  GRE "系统可登录用户数:$(cat /etc/passwd | awk -F':' '$NF !~/nologin|sync|shutdown|halt/ {print $1}' | wc -l)"
  GRE "系统可登录用户:${OS_USER[@]}"
  for i in ${OS_USER[@]}
  do
    GRE "用户 $i 最后1次登录信息: $(lastlog -u $i | awk 'NR==2')"
  done
  GRE "系统当前登录用户:"
  GRE "$(who | sed 's#[()]##g' | awk '{printf "   用户: %10s 终端: %7s 登录时间: %7s %7s 登录IP: %7s\n",$1,$2,$3,$4,$5}')"
}

function OS_SERVICE(){
  RED "################################# [ 系统服务巡检区 ] ######################################"
  GRE "自行添加"
}

if [ $(id -u -n) != "root" ]; then
  ERROR "请以ROOT用户运行这个脚本"
fi

OS_INFO
OS_HDWARE
OS_NETWORK
OS_RESOURCE
OS_SECURITY

保存为 update_and_clean.sh,赋予执行权限后,即可通过 ./update_and_clean.sh 执行该脚本。
这个Shell脚本是一个系统信息检查工具,用于在操作系统上收集和显示系统的详细信息。脚本分为几个主要部分,每个部分都是一个函数,用于收集特定类型的系统信息。以下是对脚本各部分的详细解读:

脚本头部信息

  • #!/bin/bash:指定脚本使用Bash shell来执行。
  • echoHeadInfo 函数:输出脚本的头部信息,提示用户谨慎使用这个系统信息检查工具。

颜色函数定义

  • REDGRE 函数:用于在输出信息前添加颜色代码,\033[31m 为红色,\033[32m 为绿色,\033[0m 用于重置颜色。

系统信息收集 (OS_INFO 函数)

  • 收集并显示系统的基本信息,如主机名、系统版本、内核版本、主机序列号、系统语言环境、系统时间、系统运行时间、上次重启时间和上次关机时间。

硬件信息收集 (OS_HDWARE 函数)

  • 收集并显示系统的硬件信息,包括CPU型号、架构、个数、核数、频率,内存容量、空闲内存、可用内存、使用率,SWAP容量、可用SWAP、使用率,以及网络设备的状态和性能。

网络信息收集 (OS_NETWORK 函数)

  • 收集并显示系统的网络配置信息,包括IP地址、默认网关、DNS服务器地址,以及网关的连接状态。

资源使用情况收集 (OS_RESOURCE 函数)

  • 收集并显示系统的资源使用情况,包括磁盘使用率、CPU使用率、进程数、磁盘I/O信息、文件描述符限制等。

安全信息收集 (OS_SECURITY 函数)

  • 收集并显示系统的安全相关信息,包括可登录用户列表、Selinux状态、防火墙状态、用户最后登录信息和当前登录用户。

服务信息收集 (OS_SERVICE 函数)

  • 预留的函数,用于添加系统服务的检查信息,目前没有具体实现。

权限检查

  • 脚本在执行前检查当前用户是否为root用户,如果不是,则输出错误信息提示用户需要以root权限运行脚本。

主函数

  • 在脚本的最后,调用了前面定义的所有信息收集函数,以执行系统信息的检查。

整个脚本的目的是为了提供一个全面的系统健康检查,帮助系统管理员了解当前系统的运行状况。脚本通过调用系统命令和工具来收集信息,并以颜色区分的方式输出,使得信息更加直观易懂。需要注意的是,脚本中的某些命令(如dmidecodelastiotop等)可能需要相应的权限或预先安装相应的软件才能正常运行。

注意事项

  • 确保脚本的第一行是正确的 Shebang 行,例如 #!/bin/bash
  • 使用 # 进行注释,增加脚本的可读性。
  • 对于需要管理员权限的操作,滋滋作者
  • 考虑脚本的健壮性,加入错误处理和用户输入验证。

结语

Shell 脚本在 Deepin 架构上的应用可以极大地提高工作效率和系统管理的便捷性。通过编写和运行 Shell 脚本,用户可以实现各种自动化任务,从而更加专注于核心工作。掌握 Shell 脚本的编写和使用,对于任何 Deepin 用户来说都是一项非常有价值的技能。

还需要其他脚本的记得“滋滋”

  • 16
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Deepin桌面在默认设置下是不支持自动刷新的。这可能是因为Deepin团队认为自动刷新可能对用户界面造成一些干扰或不必要的开销。 然而,对于那些希望在桌面上实时显示文件变化的用户来说,Deepin桌面本身并没有提供自动刷新功能。不过,用户可以通过一些额外的手段实现自动刷新。 一种方法是使用第三方软件或插件来实现自动刷新功能。例如,可以安装"Folder Color"插件,它允许用户自定义文件夹颜色并自动刷新文件夹视图。 另一种方法是使用命令行工具。用户可以使用命令行命令(如"watch"命令)来监视文件夹的变化并刷新桌面。这需要一定的技术知识和命令行操作的经验。 总之,虽然Deepin桌面默认情况下不支持自动刷新,但用户可以通过安装插件或使用命令行工具来实现这一功能。这些方法可能需要一些额外的努力,但可以满足那些需要自动刷新功能的用户的需求。 ### 回答2: 深度桌面环境(deepin)在最新版本中通常支持自动刷新桌面。但是,如果您的deepin桌面无法自动刷新,可能有以下几个原因: 1. 桌面配置设置问题:请确保您的桌面设置中已启用了自动刷新选项。您可以通过右键点击桌面,选择“更改桌面背景”或者类似的选项,然后查找自动刷新选项,并启用它。 2. 资源占用过高:如果您的计算机CPU或内存等硬件资源占用过高,可能会导致deepin桌面刷新速度变慢或无法自动刷新。请尝试关闭一些后台运行的程序或者降低一些图形效果以提高性能。 3. 驱动问题:某些特定的硬件设备驱动问题可能会导致deepin桌面不能自动刷新。请确保您的系已安装最新的硬件驱动程序,并且与deepin桌面环境兼容。 4. 操作系问题:如果您的操作系存在一些错误或故障,可能会影响deepin桌面的正常运行。建议尝试更新系或重新安装deepin桌面环境以解决问题。 如果您已经尝试了以上方法但问题仍未解决,建议您向deepin桌面环境的官方技术支持团队寻求帮助,他们可以为您提供更详细的指导和支持。 ### 回答3: Deepin桌面环境是一个基于Linux的操作系,它使用了自己独立开发的桌面环境。对于桌面自动刷新的功能,Deepin桌面本身是支持的,但可能存在一些配置问题导致无法自动刷新。 首先,确保你使用的是最新版本的Deepin桌面环境。Deepin开发团队会不断更新并优化桌面环境,以提供更好的用户体验。所以,通过更新你的系可以解决一些可能存在的bug或问题。 另外,如果你的桌面环境无法自动刷新,可以尝试一些常见的解决方法。首先,查看桌面设置中是否有关于自动刷新的选项,如果有,请确保该选项已启用。其次,检查你的显卡驱动是否安装正确并且更新到最新的版本。一个过时或不兼容的显卡驱动可能会导致桌面无法正常刷新。 如果以上方法都无效的话,可能涉及到更深层次的问题,比如系配置文件出错或者硬件兼容性问题。这时候建议在Deepin论坛或社区中寻求帮助,向开发者或有经验的用户求助。提供详细的息和错误日志可能有助于他们更好地理解并解决你的问题。 总之,Deepin桌面环境本身是支持自动刷新的,如果遇到问题可以尝试更新系、检查配置和驱动、寻求帮助等方法来解决。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

被流放的波仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值