shell脚本输出带文本颜色背景颜色自定义样式格式内容

shell脚本中 echo 和 printf 都可以输出内容。示例1:

它的格式是这样的:

格式说明 shell脚本中echo命令是内容显示,echo显示带颜色需要使用参数 -e 格式如下: echo -e “\033[字背景颜色;文字颜色m字符串\033[0m” 例如: echo -e “\033[41;36m something here \033[0m” 其中41的位置代表底色, 36的位置是代表字的颜色 注: 1、字背景颜色和文字颜色之间是英文的”;” 2、文字颜色后面有个m 3、字符串前后可以没有空格,如果有的话,输出也是同样有空格 特效可以叠加,需要使用“;”隔开,例如:闪烁+下划线+白底色+黑字为 \033[5;4;47;30m闪烁+下划线+白底色+黑字为\033[0m 再来看示例1的第3个命令:

  这个命令解释: 47 代表背景色为白色, 30 代表字体为黑色, 5 代表字体闪烁, 0 代表关闭所有属性 输出字符 “david use echo say”,然后重新设置屏幕到缺省设置,输出字符 “Hello World”后颜色回复正常。 -e是echo的一个可选项,用于激活特殊字符的解析器, Read more…

Linux登录提示信息动态显示

2023-10-10更新: 用tput sgr0进行属性还原时,在web页面输出会显示出一个(B符号,如下: 参考https://github.com/rburns/ansi-to-html/issues/25 解决方法是,增加一个变量:TERM=ansi 整体脚本如下:

    2023-8-1更新: dymotd:

color.awk:

  2023-7-29更新: 去除了日历和时间显示,感觉很鸡肋,增加了进程使用CPU和Mem时的报警,合并了load为一条: dynmotd:

  color.awk:

  2023-7-14更新: 颜色显示统一用tput:

  另外, figlet字体文件可从这里下载: https://github.com/xero/figlet-fonts/tree/master 字体效果可以在这里看: https://devhints.io/figlet   2023-6-26更新: 美化了一下样式: dynmotd:

color.awk:

某些情况下可能因为磁盘等原因, 导致df等命令执行时间长,导致登录不进服务器, 所以可以增加执行的超时时间:在/etc/profile中添加5秒超时: timeout 5s /usr/local/bin/dynmotd     —— 2023-4-28更新: 简化了一下显示,增加了显示条: Read more…

Pycharm补丁激活方式

同时适用于jetbrains全系列可用例:IDEA、WebStorm、phpstor 破解补丁激活 下面以Pycharm为例: 第一步:下载补丁文件 如果是2017.2以上版本的,需要JetbrainsCrack-2.6.6及以上版本 如果是2018.1及以上版本的,需要JetbrainsCrack-2.8及以上版本 下载地址: https://www.meaninglive.com/download/JetbrainsCrack-2.8-release-enc.jar 第二步:将下载好的补丁放在idea的安装目录下面的bin文件夹下面 1.png 第三步:修改配置文件 找到bin目录下的pycharm.exe.vmoptions和pycharm64.exe.vmoptions,用记事本打开,在最后一行添加 (红色字体为Pycharm的安装目录bin目录): -javaagent:D:\E盘\Pycharm\PyCharm 2018.1.4\bin\JetbrainsCrack-2.8-release-enc.jar 第四步:启动Pycharm,当需要激活时,选择activation code,复制注册码到Acrivation code中的空白处,点击OK,破解成功 1>、激活注册码首先需要修改系统的hosts文件 Windows系统hosts文件路径为:c:\windows\system32\drivers\etc 将0.0.0.0 account.jetbrains.com添加到hosts文件最后 修改后请检查hosts文件是否修改,激活码无法激活或者被取消的原因99%是因为hosts没有修改正确

shell截取字符串的方法

grep只输出匹配的内容 1、输出eth0的IP地址 ip -4 addr show “eth0” | grep -oP ‘(?<=inet\s)\d+(\.\d+){3}’ 2、说明 -o 显示被模式匹配到的字符串。 -P 支持正则表达式 (https://deerchao.cn/tutorials/regex/regex.htm#lookaround) (?=exp)也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式exp (?<=exp)也叫零宽度正回顾后发断言,它断言自身出现的位置的前面能匹配表达式exp 例如: 如下url,只输出文件名第一个iuap-installer_V6.R2_2305_x86_64_5.tar.gz echo “wget -c ‘https://aaa.com/ypr/ypr-release/Installer/iuap-installer/V6.R2_2305/5/iuap-installer_V6.R2_2305_x86_64_5.tar.gz?Expires=113344&OSSAccessKeyId=dfaf23233211&Signature=srBESvEJD0x2OQQhPadfgagagfTZ80Ooo%3D’ -O iuap-installer_V6.R2_2305_x86_64_5.tar.gz” | awk ‘/iuap-installer.*.tar.gz/’ | grep -oP ‘(?<=/)iuap-installer_.*.tar.gz(?=\?)’ 结果只输出 iuap-installer_V6.R2_2305_x86_64_5.tar.gz (?<=/) 断言iuap-installer前面会匹配/ (?=\?) 断言iuap-installer后面会匹配?

制作Docker各版本基础镜像

Python: 传的参数为: build.sh python:2.7-alpine,python:3.8-alpine,python:2.7-stretch,python:3.8-stretch

Tomcat: 传参为: tomcat:7.0.88-jre7-alpine,tomcat:7.0.88-jre8-alpine,tomcat:8.0.52-jre7-alpine,tomcat:8.0.52-jre8-alpine,tomcat:9.0.8-jre8-alpine,tomcat:6.0.48-jdk7-alpine,tomcat:7.0.85-jdk7-alpine,tomcat:7.0.85-jdk8-alpine,tomcat:8.5.28-jdk7-alpine,tomcat:8.5.28-jdk8-alpine,tomcat:9.0.5-jdk7-alpine,tomcat:9.0.5-jdk8-alpine,java:7-jdk-alpine,java:8-jdk-alpine

nginx:

node:

 

Kubernetes & Docker 容器网络终极之战

与 Docker 默认的网络模型不同,Kubernetes 形成了一套自己的网络模型,该网络模型更加适应传统的网络模式,应用能够平滑的从非容器环境迁移到 Kubernetes 环境中。 自从 Docker 容器出现,容器的网络通信一直是众人关注的焦点,而容器的网络方案又可以分为两大部分: 单主机的容器间通信; 跨主机的容器间通信。 一、单主机 Docker 网络通信 利用 Net Namespace 可以为 Docker 容器创建隔离的网络环境,容器具有完全独立的网络栈,与宿主机隔离。也可以使 Docker 容器共享主机或者其他容器的网络命名空间。 我们在使用docker run创建 Docker 容器时,可以使用–network=选项指定容器的网络模式,Docker 有以下 4 种网络模式: host 模式,使用–network=host指定,不支持多主机; bridge 模式,使用–network=bridge指定,默认设置,不支持多主机; container 模式,使用–network=container:NAME_or_ID指定,即joiner 容器,不支持多主机; none 模式,使用–network=none指定,不支持多主机。 1.1、host 模式 连接到 host 网络的容器共享 Docker host 的网络栈,容器的网络配置与 host 完全一样。 我们先查看一下主机的网络。

Read more…

FreeIPA删除记录时报 record not found的错误

DNS服务器之前加过一条DNS Forward Zones, 后来删除时出现了报错, 报DNS record not found的错误. 下面是报错时的截图: 原因: dns里删除了此记录, 但是ldap里还存在. 解决: 手动删除ldap里的记录 首先, 查询所有记录:

经过查看发现, 有问题的记录是:

  手动删除记录:

  再次刷新页面, 发现记录已被删除

统一运维

继续推动运维标准化和流程化 标准化和流程化的落地,往往还会伴随着对已存在的系统部署方式进行迁移至标准化的操作。这其实要求我们在执行标准化和流程化以后的所有运维操作完全按照运维的标准和流程进行,对于执行以前的运维工作要进行迁移,目的是要实现所有系统和运维的标准、流程化。对于迁移,一般比较好的方案是:首先保留已存在非标准化系统,同时搭建标准化环境,进行已存在系统的部署并进行测试,测试无误后,与已存在非标准化系统并行运行,同时提供对外服务一段时间后,在评估,最后将已存在非标准化系统进行下线,以达到系统平滑得由非标准化迁移至标准化的目的。   建设CMDB 目前线上环境都跑在阿里云, 其它环境基本都是用友云cloudstack, 虽然开发者中心有资源池各主机的信息,但是目前服务器的管理还是依靠手工去登录处理,信息维护也是依靠用户接入或删除主机到资源池,具体信息维护起来麻烦且没有一个直观、统一去监控和配置管理的地方 要做的: 建立用友CMDB系统,结合阿里云SDK、用友cloudstack SDK,开发者中心资源池信息等,建立一个CMDB平台,第一步,能实现所有主机信息的实时显示和统计,如主机配置、资源使用情况、上面跑的应用。通过一个业务,如www.diwork.com, 能查出访问链路图, 如首先经过哪个SLB, 然后到哪台nginx, 再到哪个容器和哪个RDS等。 第二步,能根据业务的使用情况,对重要业务能实现根据资源池的负载来自动创建和销毁主机,如果负载高, 则自动创建按量付费的主机,如果负载低,则可自动销毁主机以节省开支。第三步, 能根据不同的业务制定不同的执行策略,如遇到CPU,硬盘报警、业务报错不可用,访问超时等,可被自动调用处理。 监控 监控是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题,分析业务指标等。 目前的不足之处: 之前用Nagios, ganglia, open-falcon, zabbix等作监控报警, 但是只能监控到主机基本指标, 在开发者中心大量使用容器自动分发部署后, 如何监控容器及k8s及各业务指标成为了重要需求, 目前主要监控报警是用prometheus系列来做的, 另外还有一些自写的自动化监控采集脚本去周期性执行并触发报警, 目前监控报警能做到主机基本指标、域名和api调用可用性和访问效率、容器及业务应用的可用性监控,发送到微信,友空间及邮件。 目前的问题是: 报警泛滥,没有达到很好的关联性分析,合并,降噪 没有很好的去做自动处理, 更多依赖于手工处理 现实情况出现的很多故障都并没有那么简单,大部分情况下,这种单一唯独的监控都没有办法很好的覆盖业务的监控需求,发现问题后不能快速定位,只能去一个个手动去查日志分析 下一步要做的: 制定统一的监控标准,推行统一的最佳实践,提供统一强大便捷的metrics lib库支撑。这样才能更容易的推进自动化进程,以及更高的监控指标覆盖度 1.坚持业务指标采集是代码的一部分原则不动摇,提高指标覆盖率 2.监控方式和指标要标准化,工具支撑系统化 原则1,没有人比模块的研发人员,更清楚其工作机制,更关心其运行状态,模块自身的可运维性就是代码功能的重要组成部分。每次业务逻辑部分的代码变更,都应该伴随着监控指标采集的相应更改。 有了原则1,还远远不够,没有好的工具和体系支撑,提高指标覆盖率就是一句空话。在运维层面,应该制定统一的监控标准,推行统一的最佳实践,提供统一强大便捷的metrics lib库支撑。这样才能更容易的推进自动化进程,以及更高的监控指标覆盖度。 谈谈监控标准化,标准如何定义? 1.每个业务的每个接口,都要可被监控 2.每个接口的监控指标,必须至少包含: cps latency-50th/75th/95th/99th… error_rate error_count Read more…

二进制部署Kubernetes v1.11.x(1.12.x) HA可选

 

  转自: https://zhangguanzhang.github.io/2018/09/18/kubernetes-1-11-x-bin/