网站首页 包含标签 脚本 的所有文章

  • Linux实时信息与状态监控脚本

    最近遇到一台无法连接互联网并且没有集成状态监控的Linux服务器,没办法整体观测服务器状态去排查问题。 所以写了下面这个这个脚本来监控,声明这个脚本没办法适配所有Linux服务器。 思路如下,针对自己的服务器情况有需要自己改下再用。 也能在拿到一台新机器时,一键观测下服务器状态。 先看代码 请注意将脚本中的eth0替换为你实际使用的网络接口(如enp0s3,wlan0,ens33等)。 #!/bin/bash # 获取服务器基本信息 hostname=$(hostname) ip_address=$(hostname -I | awk '{print $1}') os=$(lsb_release -ds) kernel=$(uname -r) uptime=$(uptime -p) # 监控循环 while true; do # 获取CPU信息 cpu_model=$(cat /proc/cpuinfo | grep "model name" | head -n1 | awk -F': ' '{print $2}') cpu_cores=$(cat /proc/cpuinfo | grep "model name" | wc -l) # 获取内存信息(加入单位) memory_total=$(free -h | awk 'NR==2{print $2}') memory_used=$(free -h | awk 'NR==2{print $3}') memory_free=$(free -h | awk 'NR==2{print $4}') memory_available=$(free -h | awk 'NR==2{print $7}') # 获取磁盘使用情况 disk_total=$(df -h --output=size / | awk 'NR==2{print $1}') disk_used=$(df -h --output=used / | awk 'NR==2{print $1}') disk_free=$(df -h --output=avail / | awk 'NR==2{print $1}') # 使用 top 命令获取 CPU 使用率 cpu_usage=$(top -b -n 1 | grep "%Cpu(s):" | awk '{printf "%.2f%%", 100-$8}') # 输出监控信息 clear echo "服务器信息:" echo "主机名:$hostname" echo "IP地址:$ip_address" echo "操作系统:$os" echo "内核版本:$kernel" echo "运行时间:$uptime" echo "--------------------------------------" echo "CPU信息:" echo "型号:$cpu_model" echo "核心数:$cpu_cores" echo "CPU使用率:$cpu_usage" echo "--------------------------------------" echo "内存信息:" echo "总量:$memory_total" echo "已使用:$memory_used" echo "可用:$memory_available" echo "--------------------------------------" echo "磁盘信息:" echo "总量:$disk_total" echo "已使用:$disk_used" echo "可用:$disk_free" # 每 3 秒刷新一次 sleep 3 done   运行结果 ...

    2023-12-14 实用工具 143
  • Linux系统shell中那些特殊变量

    在Shell脚本中,$符号有多种含义,它通常用于表示变量、特殊变量或参数,今天介绍几个特殊的变量。 $0表示shell脚本文件本身 $1 ~ $n脚本的位置参数,表示脚本或函数的参数。例如,$1表示第一个参数,$2表示第二个参数,依此类推 $#传递给脚本或函数的参数个数 $@传递给脚本或函数的所有参数的列表,每个参数是一个独立的单词 $?表示上一个命令的退出状态,如果为0表示成功,非零值表示失败 $$表示当前脚本或进程的进程ID $!表示后台运行的最后一个进程的进程ID $*表示所有传递给脚本的参数列表(位置参数),并将它们作为一个单词显示 $-用于显示当前Shell的选项设置 当运行 echo $- 时,它会输出一个包含不同字母的字符串 # echo $- himBH 每个字母的含义如下: h: 启用hash命令功能,用于记住命令的路径,以加快命令的查找速度。 i: 启用Shell的交互模式。 m: 启用作业控制的多用户模式。 B: 启用通知作业完成状态的功能。 H: 启用Shell历史功能。 因此,himBH 表示这个Shell当前启用了 hash、交互模式、多用户模式、作业状态通知和历史功能。 这些选项可以根据脚本或Shell的需要进行配置 注意:$* 和 $@ 在大多数情况下表现相似,但在处理引号时有一些关键的区别。 [root@localhost]# cat b.sh && bash b.sh # 使用 "$*" 和 "$@" set -- "arg1" "arg2 with space" "arg3" echo 'Using "$*"' for arg in "$*"; do echo $arg done echo 'Using "$@"' for arg in "$@"; do echo $arg done Using "$*" arg1 arg2 with space arg3 Using "$@" arg1 arg2 with space arg3 在"$*"中,所有参数被当作单个字符串,参数之间用第一个字符(默认是空格)分隔。而在"$@"中,每个参数都被当作独立的字符串。 在实际使用中,如果希望参数原封不动的传递出去,可能更适合使用"$@",它以类似数组的方式表示传递给脚本的所有参数。 ...

    2023-11-13 技术教程 177
  • Bash基础知识:If Else语句详解

    如果这样,那就那样,否则就……。还不明白吗?了解了 Bash Shell 脚本中的 if-else 语句后就明白了。 Bash 支持 if-else 语句,以便你可以在 shell 脚本中使用逻辑推理。 通用的 if-else 语法如下: if [ expression ]; then ## 如果条件为真则执行此块,否则转到下一个 elif [ expression ]; then ## 如果条件为真则执行此块,否则转到下一个 else ## 如果以上条件都不成立,则执行此块 fi 正如你所注意到的: elif 用于 “否则如果” 类型的条件。 if-else 条件始终以 fi 结尾。 使用分号 ; 和 then 关键字 在展示 if 和 else-if 的示例之前,我先分享一下常见的比较表达式(也称为测试条件)。 测试条件 以下是可用于数字比较的测试条件运算符: 条件 当满足以下条件时为真 $a -lt $b $a < $b($a 小于 $b) $a -gt $b $a > $b($a 大于 $b) $a -le $b $a <= $b($a 小于等于 $b ) $a -ge $b $a >= $b ($a 大于等于 $b) $a -eq $b $a == $b $a -ne $b $a != $b 如果你要比较字符串,可以使用以下测试条件: 条件 当满足以下条件时为真 "$a" = "$b" $a 与 $b 相同 "$a" == "$b" $a 与 $b 相同 "$a" != "$b" $a 与 $b 不同 -z "$a" $a 为空字符串 文件类型检查也有条件: 条件 当满足以下条件时为真 -f $a $a 是一个文件 -d $a $a 是一个目录 -L $a $a 是一个链接 现在你已经了解了各种比较表达式,让我们在各种示例中看看它们的实际应用。 在 Bash 中使用 if 语句 让我们创建一个脚本来告诉你给定的数字是否为偶数。 这是我的脚本,名为 even.sh: #!/bin/bash read -p "Enter the number: " num mod=$(($num%2)) if [ $mod -eq 0 ]; then echo "Number $num is even" fi 当模数运算(%)整除给定数字(本例中为 2)时,它返回零。 ? 特别注意空格。左括号和右括号与条件之间必须有空格。同样,条件运算符(-le、== 等)前后必须有空格。 这是我运行脚本时显示的内容: 你是否注意到,当数字为偶数时,脚本会告诉你,但当数字为奇数时,脚本不会显示任何内容? 让我们使用 else 来改进这个脚本。 使用 if else 语句 现在我在前面的脚本中添加了一条 else 语句。 这样,当你得到一个非零模数(因为奇数不能除以 2)时,它将进入 else 块。 #!/bin/bash read -p "Enter the number: " num mod=$(($num%2)) if [ $mod -eq 0 ]; then echo "Number $num is even" else echo "Number $num is odd" fi 让我们用相同的数字再次运行它: 正如你所看到的,该脚本更好,因为它还告诉你该数字是否为奇数。 使用 elif(否则如果)语句 这是一个检查给定数字是正数还是负数的脚本。在数学中,0 既不是正数也不是负数。 该脚本也检查了这一事实。 #!/bin/bash read -p "Enter the number: " num if [ $num -lt 0 ]; then echo "Number $num is negative" elif [ $num -gt 0 ]; then echo "Number $num is positive" else echo "Number $num is zero" fi 让我运行它来涵盖这里的所有三种情况: 用逻辑运算符组合多个条件 到目前为止,一切都很好。但是你是否知道通过使用与(&&)、或(||)等逻辑运算符可以在一个条件中包含多个条件? 它使你能够编写复杂的条件。 让我们编写一个脚本来告诉你给定的年份是否是闰年。 你还记得闰年的条件吗? 它应该被 4 整除,但如果它能被 100 整除,那么它就不是闰年。 但是,如果能被 400 整除,则为闰年。 这是我的脚本。 #!/bin/bash read -p "Enter the year: " year if [[ ($(($year%4)) -eq 0 && $(($year%100)) != 0) || ($(($year%400)) -eq 0) ]]; then echo "Year $year is leap year" else echo "Year $year is normal year" fi ? 注意上面双括号 [[ ]] 的使用。如果你使用逻辑运算符,则这是强制性的。 通过使用不同的数据运行脚本来验证脚本: ?️ 练习时间 让我们做一些练习吧 ? 练习 1:编写一个 Bash Shell 脚本,检查作为参数提供给它的字符串的长度。如果未提供参数,它将打印 “empty string”。 练习 2:编写一个 Shell 脚本来检查给定文件是否存在。你可以提供完整的文件路径作为参数或直接在脚本中使用它。 提示:文件使用 -f 选项 练习 3:通过检查给定文件是否是常规文件、目录或链接或者是否不存在来增强之前的脚本。 提示:使用 -f、-d 和 -L ...

    2023-08-12 172
  • 如何使用Python制作脚本巡检设备,并将结果输出到excel

    本脚本使用了 pexpect 库来自动化 Telnet 登录到交换机并执行命令,然后将输出保存到文件中。 如果你想要将输出存储到 Excel 文件中,你可以使用 openpyxl 库来实现。 下面是一个将你提供的脚本与 Excel 输出结合的示例: import pexpect import sys import datetime import openpyxl # 定义交换机信息和命令 switch_info = { "ip": "x.x.x.x", "passwd": "xxxx", "name": "<F5-Core-S12508>", "name1": "---- More ----" } # 创建 Excel 工作簿和工作表 workbook = openpyxl.Workbook() worksheet = workbook.active worksheet.title = "Switch Inspection" child = pexpect.spawn('telnet %s' % switch_info["ip"]) child.expect('login:') child.sendline("admin") child.expect('(?i)ssword:') child.sendline(switch_info["passwd"]) child.expect(switch_info["name"]) # 执行命令并将输出写入 Excel def execute_command(command): child.sendline(command) child.expect(switch_info["name1"]) result = child.before.decode("utf-8") return result # 执行各个命令并写入 Excel commands = [ "display power", "display version", "display environment", "display fan", "display cpu-usage", "display memory", "display interface brief", "dis logbuffer", "display ip routing-table", "display irf link", ] for command in commands: output = execute_command(command) worksheet.append([command, output]) child.sendline("quit") child.expect(pexpect.EOF) # 保存 Excel 文件 excel_filename = f"switch_inspection_{datetime.date.today().strftime('%Y%m%d')}.xlsx" workbook.save(excel_filename) print(f"Inspection results saved to {excel_filename}") 在这个示例中,我使用了 openpyxl 库来创建 Excel 工作簿和工作表,并在每次执行命令后将输出写入 Excel 表格中。 你可以根据实际需要进一步调整和优化这个脚本,确保交换机命令的执行和输出的写入都能符合你的要求。 同时,记得确保在运行脚本之前安装了所需的库: pip install pexpect openpyxl 自动化与 Telnet 进行交互时,稳定性和错误处理非常重要,因为网络环境可能会导致意外情况。 ...

    2023-08-10 165
  • 网络收集的vps测速整合脚本

    使用方法: wget vpstest.cn/it && bash it 或者: wget git.io/vpstest && bash vpstest 或者: wget -O it vpstest.cn && bash it 整合了 1. bench.sh 2. LemonBench 3. superspeed 4. superbench修复版 5. 91yuntest 6. ZBench 7. superbench修复+多节点版 8. UnixBench 9. GeekBench5 10.kos回程测试 11.超内存测试 12.路由测试 (注:脚本收集自互联网) 已修复kos测试 已更新删除残留文件 修复了一些已知bug...

    2020-08-29 1125
  • 写个代码实现自动戴口罩

    初四,晴。窗外树枝晃动了1693次,楼下停车59辆,小鸟叫了167声,飞来飞去196次。我家厕所瓷砖有302片,地板铺了679片,玻璃39块,木地板1067块,家里大米有35216粒。你们呢? 无聊之极,写几个代码打发时间! 大致的效果如下: 用到的技术主要有人脸识别(当然,调用了接口)、openCV图像处理这两项。 def get_mouth(dst_pic): with open(dst_pic, 'rb') as f: base64_data = base64.b64encode(f.read()) url='https://api-cn.faceplusplus.com/facepp/v1/face/thousandlandmark' headers={'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36'} data={ # api_key,api_secret需自己申请 'api_key':'', 'api_secret':'', 'return_landmark': 'mouth', 'image_base64': base64_data } r=requests.post(url,headers=headers,data=data) mouth=r.json()['face']['landmark']['mouth'] x,y=[],[] for i in mouth.values(): y.append(i['y']) x.append(i['x']) y_max=max(y) y_min=min(y) x_max=max(x) x_min=min(x) middle_x=int((x_max+x_min)/2) middle_y=int((y_max+y_min)/2) size=(int(3*(x_max-x_min)),int(5*(y_max-y_min))) return (middle_x,middle_y),size ...

    2020-01-28 1225
  • 自动化篇 | 再也不用担心老人们用智能机了

    智能手机越来越普及了,不仅能满足老人需要的基础功能,还能给他们带来更多娱乐方式。相信大部分的人,现在给老人购买新机,都会优先购买智能手机。由于智能机操作的复杂性,很多老年人的手机使用一段时间之后,不知不觉间,下载了一大堆垃圾软件,内存占用越来越大,机器越用越卡。那有什么办法可以阻止用户下载垃圾软件,保证手机系统的纯净性呢?1、最佳方案起初,想到的方案是定时去卸载应用,如果是 Root 后的设备,可以利用 pm 命令去静默卸载,大部分非 Root 设备只能使用 Intent 可视化卸载,显得效率极其的低下。后来,想到一种最方便、稳定的方式,就是使用无障碍服务,阻止应用的安装。首先,新建一个无障碍服务。接着,对系统默认的应用安装界面进行页面分析,编写配置文件,设置 packageNames;需要注意的是,有些产商对应用安装界面进行了定制化,以原生、小米、魅族为例,packageNames 就需要指定多个。 <accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"     android:accessibilityEventTypes="typeWindowStateChanged"     android:accessibilityFeedbackType="feedbackGeneric"     android:accessibilityFlags="flagDefault"     android:canRetrieveWindowContent="true"     android:description="@string/desc"     android:notificationTimeout="100"     android:packageNames="com.android.packageinstaller,com.miui.packageinstaller,com.android.packageinstaller/.FlymePackageInstallerActivity" /> 重写 onAccessibilityEvent() 函数,当页面发生变化,接受到事件的时候,立即执行全局返回操作。 performGlobalAction(GLOBAL_ACTION_BACK); 2、应用商店一般来说,系统内置的应用商店默认是静默快速安装,不会出现应用安    装界面,所以上面的阻止安装操作会失效。    事实上,下载垃圾软件的场景大部分来自于一些新闻视频类 App,被诱导点击操作导致。并且,应用商品 App 提供了一个入口,方便我们安装其他应用等,比如:微信、抖音等。3、应用过滤进阶步骤 1 默认会阻止所有的非应用市场 App 的安装,为了保证功能的完整性,需要自定义过滤的应用。首先,可以编写一个应用列表界面,用来展示所有的第三方应用App,拿到他们的应用名称、应用包名、应用图标。选择需要过滤的应用,检测到系统安装界面事件的时候,通过界面的元素 ID拿到待安装应用的名称 ,如果包含在过滤列表数据中,则正常安装操作;否则,阻止应用安装。这部分涉及的内容过于复杂,所以不展开说明,对细节有兴趣的可以参考文末的完整源码。 private void processAccessibilityEnvent(AccessibilityEvent event) {     String[] phoneAttrs = AppUtil.getPhoneAttrs();     if (event.getSource() != null && TextUtils.equals(event.getClassName(), phoneAttrs[0]))     {         try         {             Thread.sleep(3000);         } catch (InterruptedException e)         {             e.printStackTrace();         }         //获取应用名称         String app_name = findViewContentByID(phoneAttrs[1]);         Log.d("xag", "app_name:" + app_name);         //是否存在保留应用中         boolean isExist = false;         if (selectedApps != null && 0 < selectedApps.size())         {              for (AppBean appBean : selectedApps)              {                   if (TextUtils.equals(appBean.getApp_name(), app_name))                     {                         isExist = true;                     }                 }             }         //如果不在保留应用列表,就不容许安装         if (!isExist)         {             Log.d("xag", "不在保留应用列表,不容许安装!");             performBackClick();         } else         {             Log.d("xag", "在保留应用列表,容许安装!");         }     } } 4、重启有效为了保证无障碍服务能一直运行,特别是针对系统重启。针对低版本设备,重启设备之后,无障碍服务会自动运行。高版本的设备,需要手动打开应用自启开关。如果是魅族手机,需要利用手机管家 App 为应用设置应用权限为:容许后台运行。5、其他说明上面这个服务首次安装需要进入无障碍服务中手动开启。如果你觉得文章还不错,请大家分享下。你的肯定是我最大的鼓励和支持。...

    2020-01-28 751

联系我们

在线咨询:点击这里给我发消息

QQ交流群:KirinBlog

工作日:8:00-23:00,节假日休息

扫码关注